Index | Thread | Search

From:
"Alvar Penning" <post@0x21.biz>
Subject:
Re: [update, pledge fix] ngircd: 28
To:
"Stuart Henderson" <stu@spacehopper.org>
Cc:
"Michael" <michi+openbsd@dataswamp.org>, <ports@openbsd.org>, <dlg@openbsd.org>
Date:
Sat, 05 Sep 2026 23:36:41 +0200

Download raw body.

Thread
On Sat Sep 5, 2026 at 12:35 PM CEST, Stuart Henderson wrote:
> On 2026/09/04 23:38, Alvar Penning wrote:
>> Since this should never could have worked, I have removed the call in my diff.
>
> Seems reasoanble-ish - the equivalent would be something using IPV6_TCLASS ..

My main goal was to unbreak the package, but you are right. I reworked
the diff for different setsockopt(2) calls based on the socket family.

Since this might also affect others, I also brought this upstream:
https://github.com/ngircd/ngircd/pull/346

Best,
Alvar


diff --git Makefile Makefile
index 18929caadd2..099ff908503 100644
--- Makefile
+++ Makefile
@@ -1,6 +1,6 @@
 COMMENT =	lightweight irc server
 
-DISTNAME =	ngircd-27
+DISTNAME =	ngircd-28
 
 CATEGORIES =	net
 
diff --git distinfo distinfo
index f7d160ce0dc..2ab15caa713 100644
--- distinfo
+++ distinfo
@@ -1,2 +1,2 @@
-SHA256 (ngircd-27.tar.gz) = /TjvITOdr4HWr0pjC6Oy3lGhtCwYGEPud2NaWmYf5zw=
-SIZE (ngircd-27.tar.gz) = 554709
+SHA256 (ngircd-28.tar.gz) = 1K5dT18T0Tb3fnqv8s3ID807mhcawxworbri9GQ8BKg=
+SIZE (ngircd-28.tar.gz) = 564580
diff --git patches/patch-src_ngircd_conn_c patches/patch-src_ngircd_conn_c
new file mode 100644
index 00000000000..d1747acfad3
--- /dev/null
+++ patches/patch-src_ngircd_conn_c
@@ -0,0 +1,61 @@
+Index: src/ngircd/conn.c
+--- src/ngircd/conn.c.orig
++++ src/ngircd/conn.c
+@@ -2186,6 +2186,7 @@ static bool
+ Init_Socket( int Sock )
+ {
+ 	int value;
++	socklen_t l;
+ 
+ 	if (!io_setnonblock(Sock)) {
+ 		Log(LOG_CRIT, "Can't enable non-blocking mode for socket: %s!",
+@@ -2205,15 +2206,40 @@ Init_Socket( int Sock )
+ 
+ 	/* Set type of service (TOS) */
+ #if defined(IPPROTO_IP) && defined(IPTOS_LOWDELAY)
+-	value = IPTOS_LOWDELAY;
+-	if (setsockopt(Sock, IPPROTO_IP, IP_TOS, &value,
+-		       (socklen_t) sizeof(value))) {
+-		LogDebug("Can't set socket option IP_TOS: %s!",
+-			 strerror(errno));
+-		/* ignore this error */
+-	} else
+-		LogDebug("IP_TOS on socket %d has been set to IPTOS_LOWDELAY.",
+-			 Sock);
++	l = (socklen_t)sizeof(value);
++	if (getsockopt(Sock, SOL_SOCKET, SO_DOMAIN, &value, &l) != 0) {
++		Log(LOG_ERR, "Can't get socket familiy: %s!",
++			strerror(errno));
++	} else {
++		switch (value) {
++			case AF_INET:
++				value = IPTOS_LOWDELAY;
++				if (setsockopt(Sock, IPPROTO_IP, IP_TOS, &value,
++						 (socklen_t) sizeof(value))) {
++					Log(LOG_ERR, "Can't set socket option IP_TOS: %s!",
++						strerror(errno));
++				} else {
++					LogDebug("IP_TOS on socket %d has been set to %d.",
++						Sock, value);
++				}
++				break;
++
++			case AF_INET6:
++				value = IPTOS_LOWDELAY;
++				if (setsockopt(Sock, IPPROTO_IPV6, IPV6_TCLASS, &value,
++						 (socklen_t) sizeof(value))) {
++					Log(LOG_ERR, "Can't set socket option IPV6_TCLASS: %s!",
++						strerror(errno));
++				} else {
++					LogDebug("IPV6_TCLASS on socket %d has been set to %d.",
++						Sock, value);
++				}
++				break;
++
++			default:
++			Log(LOG_ERR, "Unexpected socket familiy %d", value);
++		}
++	}
+ #endif
+ 
+ 	return true;