mirror of
https://git.freebsd.org/ports.git
synced 2025-06-24 14:10:30 -04:00
* Set MOD_MAXERROR to avoid unsynced time status when using ntp_adjtime. * Hardened TLS for ntpd constraints, enabling server name verification. PR: 210056
76 lines
2 KiB
C
76 lines
2 KiB
C
--- src/server.c.orig 2016-05-30 22:50:02 UTC
|
|
+++ src/server.c
|
|
@@ -35,8 +35,8 @@ setup_listeners(struct servent *se, stru
|
|
struct listen_addr *la, *nla, *lap;
|
|
struct ifaddrs *ifa, *ifap;
|
|
struct sockaddr *sa;
|
|
-#ifdef SO_RTABLE
|
|
- struct if_data *ifd;
|
|
+#ifdef SO_SETFIB
|
|
+ struct ifreq ifr;
|
|
#endif
|
|
u_int8_t *a6;
|
|
size_t sa6len = sizeof(struct in6_addr);
|
|
@@ -45,8 +45,8 @@ setup_listeners(struct servent *se, stru
|
|
#ifdef IPV6_V6ONLY
|
|
int on = 1;
|
|
#endif
|
|
-#ifdef SO_RTABLE
|
|
- int rdomain = 0;
|
|
+#ifdef SO_SETFIB
|
|
+ int rdomain, fd;
|
|
#endif
|
|
|
|
TAILQ_FOREACH(lap, &lconf->listen_addrs, entry) {
|
|
@@ -59,16 +59,20 @@ setup_listeners(struct servent *se, stru
|
|
sa = ifap->ifa_addr;
|
|
if (sa == NULL || SA_LEN(sa) == 0)
|
|
continue;
|
|
-#ifdef SO_RTABLE
|
|
- if (sa->sa_family == AF_LINK) {
|
|
- ifd = ifap->ifa_data;
|
|
- rdomain = ifd->ifi_rdomain;
|
|
- }
|
|
-#endif
|
|
if (sa->sa_family != AF_INET &&
|
|
sa->sa_family != AF_INET6)
|
|
continue;
|
|
-#ifdef SO_RTABLE
|
|
+#ifdef SO_SETFIB
|
|
+ strlcpy(ifr.ifr_name, ifap->ifa_name,
|
|
+ sizeof(ifr.ifr_name));
|
|
+
|
|
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
+ if (ioctl(fd, SIOCGIFFIB, (caddr_t)&ifr) == -1)
|
|
+ rdomain = 0;
|
|
+ else
|
|
+ rdomain = ifr.ifr_fib;
|
|
+ close(fd);
|
|
+
|
|
if (lap->rtable != -1 && rdomain != lap->rtable)
|
|
continue;
|
|
#endif
|
|
@@ -90,7 +94,7 @@ setup_listeners(struct servent *se, stru
|
|
fatal("setup_listeners calloc");
|
|
|
|
memcpy(&la->sa, sa, SA_LEN(sa));
|
|
-#ifdef SO_RTABLE
|
|
+#ifdef SO_SETFIB
|
|
la->rtable = rdomain;
|
|
#endif
|
|
|
|
@@ -143,11 +147,11 @@ setup_listeners(struct servent *se, stru
|
|
log_warn("setsockopt IPV6_V6ONLY");
|
|
#endif
|
|
|
|
-#ifdef SO_RTABLE
|
|
+#ifdef SO_SETFIB
|
|
if (la->rtable != -1 &&
|
|
- setsockopt(la->fd, SOL_SOCKET, SO_RTABLE, &la->rtable,
|
|
+ setsockopt(la->fd, SOL_SOCKET, SO_SETFIB, &la->rtable,
|
|
sizeof(la->rtable)) == -1)
|
|
- fatal("setup_listeners setsockopt SO_RTABLE");
|
|
+ fatal("setup_listeners setsockopt SO_SETFIB");
|
|
#endif
|
|
|
|
if (bind(la->fd, (struct sockaddr *)&la->sa,
|