mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-10-15 16:30:04 +00:00
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>