Files
changedetection.io/changedetectionio
dgtlmoonandClaude Opus 5 bef38bc13e Don't block a whole hostname over an unroutable fe80:: AAAA record
Sites with a misconfigured AAAA record pointing at an IPv6 link-local
address (the server's own NIC autoconf address leaked into public DNS by
a control panel) were refused entirely, even though their A record is
perfectly good. competa.com and upnano.com both do this.

is_private_hostname() refuses a hostname if ANY resolved address is
off-limits, because we cannot predict which one the fetcher will pick.
That reasoning does not hold for a bare fe80:: record: it is only
routable together with an interface scope, DNS cannot carry a zone id,
so getaddrinfo() returns it with sin6_scope_id == 0 and connect()
rejects it outright (EINVAL on Linux). Whichever address the fetcher
picks, the set of reachable hosts is the same - so refusing the name
cost legitimate sites and bought nothing.

Such records are now set aside rather than fatal, but only alongside at
least one usable address; a hostname resolving to nothing but link-local
space is still refused. IPv4 link-local (169.254.169.254 cloud metadata)
is untouched, a scoped literal (fe80::1%eth0, scope_id != 0) is
untouched, and CGNAT/private/reserved keep the any-record rule.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 16:59:31 +02:00
..
…
2026-09-04 14:12:00 +02:00
2026-09-04 14:12:00 +02:00