Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
Re: mail/dovecot: backport small fix for OpenBSD
To:
Brad Smith <brad@comstyle.com>
Cc:
OpenBSD ports <ports@openbsd.org>
Date:
Sun, 20 Oct 2024 10:20:05 +0200

Download raw body.

Thread
On Sun, 20 Oct 2024 04:59:10 +0200,
Brad Smith <brad@comstyle.com> wrote:
> 
> Seeing as the PR is a bunch of fixes, either way put a brief description
> at the top of the patch. You might want to look at updating the comment
> at the very top of lib/net.c to include OpenBSD.

I am not sure if it is a good idea to patch comments inside ports patches.

But I definitely agree that it is a good idea to add some explanation to the
patch, see updated diff.

> 	for (try = 0;;) {
> 		fd = net_connect_ip_once(ip, port, my_ip, sock_type, blocking);
> 		if (fd != -1 || try++ >= MAX_CONNECT_RETRIES ||
> 		    (errno != EADDRNOTAVAIL
> #if defined(__FreeBSD__) || defined(__OpenBSD__)
> 		     /* busy */
> 		     && errno != EADDRINUSE
> 		     /* pf may cause this if another connection used
> 			the same port recently */
> 		     && errno != EACCES
> #endif
> 		    ))
> 
> 
> I am not sure what is considered normal and appropriate for userland
> network and PF. I guess I'd be Ok if someone else more familiar with
> these kinds of bits said this is appropriate.

Neither do I, but this patch seems to cover errors which I see from time to
time, and based on the fact that such logic exists, I really think that this
is what the authors of dovecot meant. And if this logic/behavior is wrong,
it probably should be addressed upstream.

Anyway, updated diff:

Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/dovecot/Makefile,v
retrieving revision 1.319
diff -u -p -r1.319 Makefile
--- Makefile	5 Oct 2024 07:35:54 -0000	1.319
+++ Makefile	20 Oct 2024 08:15:20 -0000
@@ -11,7 +11,7 @@ COMMENT-postgresql= PostgreSQL authentic
 V_MAJOR=	2.3
 V_DOVECOT=	2.3.21.1
 EPOCH=		0
-REVISION=	0
+REVISION=	1
 
 DISTNAME=	dovecot-${V_DOVECOT}
 PKGNAME=	dovecot-${V_DOVECOT}
Index: patches/patch-src_lib_net_c
===================================================================
RCS file: patches/patch-src_lib_net_c
diff -N patches/patch-src_lib_net_c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_lib_net_c	20 Oct 2024 08:15:20 -0000
@@ -0,0 +1,20 @@
+net: OpenBSD should behave like FreeBSD on net_connect_ip_full
+
+This patch fixes errors such as
+ 
+      Fatal: connect(...) failed: Address already in use
+ 
+The fix is simple, extending FreeBSD's condition to OpenBSD as well,
+which results in such errors disappearing on the tested setup.
+Index: src/lib/net.c
+--- src/lib/net.c.orig
++++ src/lib/net.c
+@@ -213,7 +213,7 @@ static int net_connect_ip_full(const struct ip_addr *i
+ 		fd = net_connect_ip_once(ip, port, my_ip, sock_type, blocking);
+ 		if (fd != -1 || try++ >= MAX_CONNECT_RETRIES ||
+ 		    (errno != EADDRNOTAVAIL
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__OpenBSD__)
+ 		     /* busy */
+ 		     && errno != EADDRINUSE
+ 		     /* pf may cause this if another connection used


-- 
wbr, Kirill