diff -up ntp-4.2.6p5/ntpd/ntp_config.c.linklocal ntp-4.2.6p5/ntpd/ntp_config.c
--- ntp-4.2.6p5/ntpd/ntp_config.c.linklocal 2016-04-06 13:58:34.659828825 +0200
+++ ntp-4.2.6p5/ntpd/ntp_config.c 2016-04-06 13:58:39.287842559 +0200
@@ -4378,16 +4378,6 @@ get_multiple_netnums(
if (pch != NULL)
*pch = '\0';
}
- pch = strchr(lookup, '%');
- if (pch != NULL) {
- if (lookup != lookbuf) {
- lookup = lookbuf;
- strncpy(lookbuf, nameornum,
- sizeof(lookbuf));
- pch = strchr(lookup, '%');
- }
- *pch = '\0';
- }
}
if (AF_INET6 == hints.ai_family && !ipv6_works)
commit 4a385df4917a49efb37d89276b42a3d962f3302a
Author: <stenn@psp-fb1.ntp.org>
Date: Sun Feb 9 08:09:56 2014 +0000
[Bug 1186] ntpd fails with link local IPv6 addresses
diff -up ntp-4.2.6p5/ntpd/ntp_io.c.linklocal ntp-4.2.6p5/ntpd/ntp_io.c
--- ntp-4.2.6p5/ntpd/ntp_io.c.linklocal 2016-04-06 13:58:27.916808820 +0200
+++ ntp-4.2.6p5/ntpd/ntp_io.c 2016-04-06 13:58:27.943808900 +0200
@@ -786,6 +786,9 @@ is_ip_address(
{
struct in_addr in4;
struct in6_addr in6;
+ struct addrinfo hints;
+ struct addrinfo *result;
+ struct sockaddr_in6 *resaddr6;
char tmpbuf[128];
char *pch;
@@ -816,14 +819,16 @@ is_ip_address(
*pch = '\0';
} else
strncpy(tmpbuf, host, sizeof(tmpbuf));
- pch = strchr(tmpbuf, '%');
- if (pch != NULL)
- *pch = '\0';
-
- if (inet_pton(AF_INET6, tmpbuf, &in6) == 1) {
+ ZERO(hints);
+ hints.ai_family = AF_INET6;
+ hints.ai_flags |= AI_NUMERICHOST;
+ if (getaddrinfo(tmpbuf, NULL, &hints, &result) == 0) {
AF(addr) = AF_INET6;
- SET_ADDR6N(addr, in6);
+ resaddr6 = (struct sockaddr_in6 *)result->ai_addr;
+ SET_ADDR6N(addr, resaddr6->sin6_addr);
+ SET_SCOPE(addr, resaddr6->sin6_scope_id);
+ freeaddrinfo(result);
return TRUE;
}
}