Date: Wed, 16 Jan 2019 19:27:36 +0000 (UTC) From: Ryan Steinmetz <zi@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r490503 - in head/dns/gdnsd2: . files Message-ID: <201901161927.x0GJRaDf050945@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: zi Date: Wed Jan 16 19:27:36 2019 New Revision: 490503 URL: https://svnweb.freebsd.org/changeset/ports/490503 Log: - Fix EADDRNOTAVAIL issue under FreeBSD when using IPs bound to loopback interfaces - Bump PORTREVISION Obtained from: upstream PR #175 Added: head/dns/gdnsd2/files/patch-src_dnsio__udp.c (contents, props changed) Modified: head/dns/gdnsd2/Makefile Modified: head/dns/gdnsd2/Makefile ============================================================================== --- head/dns/gdnsd2/Makefile Wed Jan 16 19:18:14 2019 (r490502) +++ head/dns/gdnsd2/Makefile Wed Jan 16 19:27:36 2019 (r490503) @@ -3,7 +3,7 @@ PORTNAME= gdnsd PORTVERSION= 2.4.1 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= dns MASTER_SITES= https://github.com/gdnsd/gdnsd/releases/download/v${PORTVERSION}/ \ ZI \ Added: head/dns/gdnsd2/files/patch-src_dnsio__udp.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/dns/gdnsd2/files/patch-src_dnsio__udp.c Wed Jan 16 19:27:36 2019 (r490503) @@ -0,0 +1,44 @@ +--- src/dnsio_udp.c.orig 2019-01-16 15:44:43 UTC ++++ src/dnsio_udp.c +@@ -296,13 +296,16 @@ static void mainloop(const int fd, void* + .iov_len = 0 + }; + struct msghdr msg_hdr; +- char cmsg_buf[cmsg_size]; +- memset(cmsg_buf, 0, sizeof(cmsg_buf)); ++ union { ++ char cbuf[CMSG_BUFSIZE]; ++ struct cmsghdr align; ++ } cmsg_buf; ++ memset(cmsg_buf.cbuf, 0, sizeof(cmsg_buf.cbuf)); + memset(&msg_hdr, 0, sizeof(struct msghdr)); + msg_hdr.msg_name = &asin.sa; + msg_hdr.msg_iov = &iov; + msg_hdr.msg_iovlen = 1; +- msg_hdr.msg_control = use_cmsg ? cmsg_buf : NULL; ++ msg_hdr.msg_control = use_cmsg ? cmsg_buf.cbuf : NULL; + + #if GDNSD_B_QSBR + const struct timeval tmout_short = { .tv_sec = 0, .tv_usec = PRCU_DELAY_US }; +@@ -341,6 +344,21 @@ static void mainloop(const int fd, void* + recvmsg_rv = recvmsg(fd, &msg_hdr, 0); + #endif + ++#if defined __FreeBSD__ && defined IPV6_PKTINFO ++ if(asin.sa.sa_family == AF_INET6) { ++ struct cmsghdr* cmsg; ++ for(cmsg = (struct cmsghdr *)CMSG_FIRSTHDR(&msg_hdr); cmsg; ++ cmsg = (struct cmsghdr *)CMSG_NXTHDR(&msg_hdr, cmsg)) { ++ if((cmsg->cmsg_level == IPPROTO_IPV6) && (cmsg->cmsg_type == IPV6_PKTINFO)) { ++ struct in6_pktinfo* pi = (void*)CMSG_DATA((struct cmsghdr*)cmsg_buf.cbuf); ++ if(!IN6_IS_ADDR_LINKLOCAL(&pi->ipi6_addr)) ++ pi->ipi6_ifindex = 0; ++ continue; ++ } ++ } ++ } ++#endif ++ + if(unlikely( + (asin.sa.sa_family == AF_INET && !asin.sin.sin_port) + || (asin.sa.sa_family == AF_INET6 && !asin.sin6.sin6_port)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201901161927.x0GJRaDf050945>