diff --git a/configure b/configure index 5e62a77..5c4febf 100755 --- a/configure +++ b/configure @@ -657,6 +657,7 @@ if [ $feat_ipv6 = "1" ] && \ struct sockaddr_in6 n; char p[100]; n.sin6_addr = in6addr_any; + n.sin6_scope_id = 0; return !inet_ntop(AF_INET6, &n.sin6_addr.s6_addr, p, sizeof(p));' then add_def FEAT_IPV6 diff --git a/nameserv.c b/nameserv.c index c506b73..c87aef0 100644 --- a/nameserv.c +++ b/nameserv.c @@ -95,6 +95,9 @@ DNS_Name2IPAddress(const char *name, IPAddr *ip_addrs, int max_addrs) case AF_INET6: if (address_family != IPADDR_UNSPEC && address_family != IPADDR_INET6) continue; + /* Don't return an address that would lose a scope ID */ + if (((struct sockaddr_in6 *)ai->ai_addr)->sin6_scope_id != 0) + continue; ip_addrs[i].family = IPADDR_INET6; memcpy(&ip_addrs[i].addr.in6, &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr.s6_addr, sizeof (ip_addrs->addr.in6));