Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Apr 2021 06:59:34 GMT
From:      Kevin Bowling <kbowling@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 3ee20c7c2c7d - main - dns/nsd: Fix build without IPv6
Message-ID:  <202104230659.13N6xYYP064580@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kbowling:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3ee20c7c2c7d3fe14b1b7565036a8f1405fea7b8

commit 3ee20c7c2c7d3fe14b1b7565036a8f1405fea7b8
Author:     Jaap Akkerhuis <jaap@NLnetLabs.nl>
AuthorDate: 2021-04-23 06:57:29 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-04-23 06:59:11 +0000

    dns/nsd: Fix build without IPv6
    
    PR:             254874
    Reported by:    r00t@kaba1ah.org
    Tested by:      r00t@kaba1ah.org
---
 dns/nsd/Makefile             |   1 +
 dns/nsd/files/patch-nsd.c    |  33 +++++++++
 dns/nsd/files/patch-server.c | 167 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 201 insertions(+)

diff --git a/dns/nsd/Makefile b/dns/nsd/Makefile
index 5b01e9d2e738..e69625149f0d 100644
--- a/dns/nsd/Makefile
+++ b/dns/nsd/Makefile
@@ -2,6 +2,7 @@
 
 PORTNAME=	nsd
 DISTVERSION=	4.3.6
+PORTREVISION=	1
 CATEGORIES=	dns
 MASTER_SITES=	https://www.nlnetlabs.nl/downloads/nsd/
 
diff --git a/dns/nsd/files/patch-nsd.c b/dns/nsd/files/patch-nsd.c
new file mode 100644
index 000000000000..9e02a73f332c
--- /dev/null
+++ b/dns/nsd/files/patch-nsd.c
@@ -0,0 +1,33 @@
+--- nsd.c.orig	2021-04-06 11:23:15 UTC
++++ nsd.c
+@@ -260,7 +260,6 @@ figure_default_sockets(
+ 	const char *udp_port, const char *tcp_port,
+ 	const struct addrinfo *hints)
+ {
+-	int r;
+ 	size_t i = 0, n = 1;
+ 	struct addrinfo ai[2] = { *hints, *hints };
+ 
+@@ -301,6 +300,7 @@ figure_default_sockets(
+ 		 * automatically mapped to our IPv6 socket.
+ 		 */
+ #ifdef IPV6_V6ONLY
++		int r;
+ 		struct addrinfo *addrs[2] = { NULL, NULL };
+ 
+ 		if((r = getaddrinfo(NULL, udp_port, &ai[0], &addrs[0])) == 0 &&
+@@ -551,12 +551,12 @@ print_sockets(
+ 
+ 	for(i = 0; i < ifs; i++) {
+ 		assert(udp[i].servers->size == servercnt);
+-		addrport2str(&udp[i].addr.ai_addr, sockbuf, sizeof(sockbuf));
++		addrport2str((void*)&udp[i].addr.ai_addr, sockbuf, sizeof(sockbuf));
+ 		print_socket_servers(&udp[i], serverbuf, serverbufsz);
+ 		nsd_bitset_or(servers, servers, udp[i].servers);
+ 		VERBOSITY(3, (LOG_NOTICE, fmt, sockbuf, "udp", serverbuf));
+ 		assert(tcp[i].servers->size == servercnt);
+-		addrport2str(&tcp[i].addr.ai_addr, sockbuf, sizeof(sockbuf));
++		addrport2str((void*)&tcp[i].addr.ai_addr, sockbuf, sizeof(sockbuf));
+ 		print_socket_servers(&tcp[i], serverbuf, serverbufsz);
+ 		nsd_bitset_or(servers, servers, tcp[i].servers);
+ 		VERBOSITY(3, (LOG_NOTICE, fmt, sockbuf, "tcp", serverbuf));
diff --git a/dns/nsd/files/patch-server.c b/dns/nsd/files/patch-server.c
new file mode 100644
index 000000000000..2f42ac807aa8
--- /dev/null
+++ b/dns/nsd/files/patch-server.c
@@ -0,0 +1,167 @@
+--- server.c.orig	2021-04-06 11:23:15 UTC
++++ server.c
+@@ -95,16 +95,22 @@
+ static void
+ log_addr(const char* descr,
+ #ifdef INET6
+-	struct sockaddr_storage* addr,
++	struct sockaddr_storage* addr
+ #else
+-	struct sockaddr_in* addr,
++	struct sockaddr_in* addr
+ #endif
+-	short family)
++	)
+ {
+ 	char str_buf[64];
+ 	if(verbosity < 6)
+ 		return;
+-	if(family == AF_INET) {
++	if(
++#ifdef INET6
++		addr->ss_family == AF_INET
++#else
++		addr->sin_family == AF_INET
++#endif
++		) {
+ 		struct sockaddr_in* s = (struct sockaddr_in*)addr;
+ 		inet_ntop(AF_INET, &s->sin_addr.s_addr, str_buf, sizeof(str_buf));
+ 		VERBOSITY(6, (LOG_INFO, "%s: address is: %s, port is: %d", descr, str_buf, ntohs(s->sin_port)));
+@@ -857,10 +863,10 @@ set_nonblock(struct nsd_socket *sock)
+ 	return 1;
+ }
+ 
++#ifdef INET6
+ static int
+ set_ipv6_v6only(struct nsd_socket *sock)
+ {
+-#ifdef INET6
+ #ifdef IPV6_V6ONLY
+ 	int on = 1;
+ 	const char *socktype =
+@@ -875,16 +881,19 @@ set_ipv6_v6only(struct nsd_socket *sock)
+ 	log_msg(LOG_ERR, "setsockopt(..., IPV6_V6ONLY, ...) failed for %s: %s",
+ 		socktype, strerror(errno));
+ 	return -1;
++#else
++	(void)sock;
+ #endif /* IPV6_V6ONLY */
+-#endif /* INET6 */
+ 
+ 	return 0;
+ }
++#endif /* INET6 */
+ 
++#ifdef INET6
+ static int
+ set_ipv6_use_min_mtu(struct nsd_socket *sock)
+ {
+-#if defined(INET6) && (defined(IPV6_USE_MIN_MTU) || defined(IPV6_MTU))
++#if defined(IPV6_USE_MIN_MTU) || defined(IPV6_MTU)
+ #if defined(IPV6_USE_MIN_MTU)
+ 	/* There is no fragmentation of IPv6 datagrams during forwarding in the
+ 	 * network. Therefore we do not send UDP datagrams larger than the
+@@ -917,6 +926,7 @@ set_ipv6_use_min_mtu(struct nsd_socket *sock)
+ 
+ 	return 0;
+ }
++#endif /* INET6 */
+ 
+ static int
+ set_ipv4_no_pmtu_disc(struct nsd_socket *sock)
+@@ -2864,7 +2874,7 @@ add_tcp_handler(
+ 		data->tls_accept = 1;
+ 		if(verbosity >= 2) {
+ 			char buf[48];
+-			addrport2str((struct sockaddr_storage*)&sock->addr.ai_addr, buf, sizeof(buf));
++			addrport2str((void*)(struct sockaddr_storage*)&sock->addr.ai_addr, buf, sizeof(buf));
+ 			VERBOSITY(2, (LOG_NOTICE, "setup TCP for TLS service on interface %s", buf));
+ 		}
+ 	} else {
+@@ -3339,9 +3349,9 @@ handle_udp(int fd, short event, void* arg)
+ 		/*
+ 		 * sending UDP-query with server address (local) and client address to dnstap process
+ 		 */
+-		log_addr("query from client", &q->addr, data->socket->addr.ai_family);
+-		log_addr("to server (local)", &data->socket->addr.ai_addr, data->socket->addr.ai_family);
+-		dt_collector_submit_auth_query(data->nsd, &data->socket->addr.ai_addr, &q->addr, q->addrlen,
++		log_addr("query from client", &q->addr);
++		log_addr("to server (local)", (void*)&data->socket->addr.ai_addr);
++		dt_collector_submit_auth_query(data->nsd, (void*)&data->socket->addr.ai_addr, &q->addr, q->addrlen,
+ 			q->tcp, q->packet);
+ #endif /* USE_DNSTAP */
+ 
+@@ -3378,9 +3388,9 @@ handle_udp(int fd, short event, void* arg)
+ 			/*
+ 			 * sending UDP-response with server address (local) and client address to dnstap process
+ 			 */
+-			log_addr("from server (local)", &data->socket->addr.ai_addr, data->socket->addr.ai_family);
+-			log_addr("response to client", &q->addr, data->socket->addr.ai_family);
+-			dt_collector_submit_auth_response(data->nsd, &data->socket->addr.ai_addr,
++			log_addr("from server (local)", (void*)&data->socket->addr.ai_addr);
++			log_addr("response to client", &q->addr);
++			dt_collector_submit_auth_response(data->nsd, (void*)&data->socket->addr.ai_addr,
+ 				&q->addr, q->addrlen, q->tcp, q->packet,
+ 				q->zone);
+ #endif /* USE_DNSTAP */
+@@ -3448,7 +3458,7 @@ handle_udp(int fd, short event, void* arg)
+ 			   errno != EAGAIN) {
+ 				const char* es = strerror(errno);
+ 				char a[64];
+-				addrport2str(&queries[i]->addr, a, sizeof(a));
++				addrport2str((void*)&queries[i]->addr, a, sizeof(a));
+ 				log_msg(LOG_ERR, "sendmmsg [0]=%s count=%d failed: %s", a, (int)(recvcount-i), es);
+ 			}
+ #ifdef BIND8_STATS
+@@ -3685,9 +3695,9 @@ handle_tcp_reading(int fd, short event, void* arg)
+ 	/*
+ 	 * and send TCP-query with found address (local) and client address to dnstap process
+ 	 */
+-	log_addr("query from client", &data->query->addr, data->query->addr.ss_family);
+-	log_addr("to server (local)", &data->socket->addr.ai_addr, data->query->addr.ss_family);
+-	dt_collector_submit_auth_query(data->nsd, &data->socket->addr.ai_addr, &data->query->addr,
++	log_addr("query from client", &data->query->addr);
++	log_addr("to server (local)", (void*)&data->socket->addr.ai_addr);
++	dt_collector_submit_auth_query(data->nsd, (void*)&data->socket->addr.ai_addr, &data->query->addr,
+ 		data->query->addrlen, data->query->tcp, data->query->packet);
+ #endif /* USE_DNSTAP */
+ 	data->query_state = server_process_query(data->nsd, data->query);
+@@ -3738,9 +3748,9 @@ handle_tcp_reading(int fd, short event, void* arg)
+ 	/*
+ 	 * sending TCP-response with found (earlier) address (local) and client address to dnstap process
+ 	 */
+-	log_addr("from server (local)", &data->socket->addr.ai_addr, data->query->addr.ss_family);
+-	log_addr("response to client", &data->query->addr, data->query->addr.ss_family);
+-	dt_collector_submit_auth_response(data->nsd, &data->socket->addr.ai_addr, &data->query->addr,
++	log_addr("from server (local)", (void*)&data->socket->addr.ai_addr);
++	log_addr("response to client", &data->query->addr);
++	dt_collector_submit_auth_response(data->nsd, (void*)&data->socket->addr.ai_addr, &data->query->addr,
+ 		data->query->addrlen, data->query->tcp, data->query->packet,
+ 		data->query->zone);
+ #endif /* USE_DNSTAP */
+@@ -4173,9 +4183,9 @@ handle_tls_reading(int fd, short event, void* arg)
+ 	/*
+ 	 * and send TCP-query with found address (local) and client address to dnstap process
+ 	 */
+-	log_addr("query from client", &data->query->addr, data->query->addr.ss_family);
+-	log_addr("to server (local)", &data->socket->addr.ai_addr, data->query->addr.ss_family);
+-	dt_collector_submit_auth_query(data->nsd, &data->socket->addr.ai_addr, &data->query->addr,
++	log_addr("query from client", &data->query->addr);
++	log_addr("to server (local)", (void*)&data->socket->addr.ai_addr);
++	dt_collector_submit_auth_query(data->nsd, (void*)&data->socket->addr.ai_addr, &data->query->addr,
+ 		data->query->addrlen, data->query->tcp, data->query->packet);
+ #endif /* USE_DNSTAP */
+ 	data->query_state = server_process_query(data->nsd, data->query);
+@@ -4226,9 +4236,9 @@ handle_tls_reading(int fd, short event, void* arg)
+ 	/*
+ 	 * sending TCP-response with found (earlier) address (local) and client address to dnstap process
+ 	 */
+-	log_addr("from server (local)", &data->socket->addr.ai_addr, data->query->addr.ss_family);
+-	log_addr("response to client", &data->query->addr, data->query->addr.ss_family);
+-	dt_collector_submit_auth_response(data->nsd, &data->socket->addr.ai_addr, &data->query->addr,
++	log_addr("from server (local)", (void*)&data->socket->addr.ai_addr);
++	log_addr("response to client", &data->query->addr);
++	dt_collector_submit_auth_response(data->nsd, (void*)&data->socket->addr.ai_addr, &data->query->addr,
+ 		data->query->addrlen, data->query->tcp, data->query->packet,
+ 		data->query->zone);
+ #endif /* USE_DNSTAP */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104230659.13N6xYYP064580>