mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-04 00:55:07 -05:00
nameserv: don't return scoped IPv6 addresses
Ignore IPv6 addresses returned by getaddrinfo() that have a non-zero scope ID to avoid silently ignoring the ID if it was specified with the % sign in the provided string. This can be removed when the scope ID is returned from the function and the callers handle it.
This commit is contained in:
1
configure
vendored
1
configure
vendored
@@ -657,6 +657,7 @@ if [ $feat_ipv6 = "1" ] && \
|
|||||||
struct sockaddr_in6 n;
|
struct sockaddr_in6 n;
|
||||||
char p[100];
|
char p[100];
|
||||||
n.sin6_addr = in6addr_any;
|
n.sin6_addr = in6addr_any;
|
||||||
|
n.sin6_scope_id = 0;
|
||||||
return !inet_ntop(AF_INET6, &n.sin6_addr.s6_addr, p, sizeof(p));'
|
return !inet_ntop(AF_INET6, &n.sin6_addr.s6_addr, p, sizeof(p));'
|
||||||
then
|
then
|
||||||
add_def FEAT_IPV6
|
add_def FEAT_IPV6
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ DNS_Name2IPAddress(const char *name, IPAddr *ip_addrs, int max_addrs)
|
|||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
if (address_family != IPADDR_UNSPEC && address_family != IPADDR_INET6)
|
if (address_family != IPADDR_UNSPEC && address_family != IPADDR_INET6)
|
||||||
continue;
|
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;
|
ip_addrs[i].family = IPADDR_INET6;
|
||||||
memcpy(&ip_addrs[i].addr.in6, &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr.s6_addr,
|
memcpy(&ip_addrs[i].addr.in6, &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr.s6_addr,
|
||||||
sizeof (ip_addrs->addr.in6));
|
sizeof (ip_addrs->addr.in6));
|
||||||
|
|||||||
Reference in New Issue
Block a user