Index | Thread | Search

From:
Klemens Nanni <kn@openbsd.org>
Subject:
mail/isync: update to 1.5.0
To:
ports <ports@openbsd.org>
Date:
Sun, 18 Aug 2024 11:55:34 +0000

Download raw body.

Thread
Release notes: https://sourceforge.net/projects/isync/files/isync/1.5.0/

Upstream added new printf(3) %n code and hardcoded optimizations...

Upstream now also forks during sync operation soley to call getaddrinfo(3)
asynchronously;  luckily the commit reverts cleanly on top of 1.5.0, which
I do to avoid pledging "proc" for all use cases.

https://sourceforge.net/p/isync/isync/ci/ec50c55c36887b86b0143a265acae4b22d117fe9
Sourceforge seems to lack raw patch links, so I mirrored it.

Keeps working for me, please test with your setup.

Feedback?

Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/isync/Makefile,v
diff -u -p -r1.58 Makefile
--- Makefile	9 Jan 2024 15:59:25 -0000	1.58
+++ Makefile	18 Aug 2024 10:34:16 -0000
@@ -1,7 +1,6 @@
 COMMENT=	synchronize IMAP4 and maildir mailboxes
 
-DISTNAME=	isync-1.4.4
-REVISION=	3
+DISTNAME=	isync-1.5.0
 
 CATEGORIES=	mail
 SITES=		${SITE_SOURCEFORGE:=isync/}
@@ -9,6 +8,12 @@ SITES=		${SITE_SOURCEFORGE:=isync/}
 HOMEPAGE=	https://isync.sourceforge.net/
 
 MAINTAINER=	Klemens Nanni <kn@openbsd.org>
+
+# Backout "make DNS lookup asynchronous" doing fork(2) for async getaddrinfo(3)
+# to avoid pledging "proc".
+SITES.fix=		https://git.sr.ht/~klemens/isync/commit/
+PATCHFILES.fix= 	ec50c55c36887b86b0143a265acae4b22d117fe9.patch
+PATCH_DIST_STRIP=	-R -p1
 
 # GPLv2+
 PERMIT_PACKAGE=	Yes
Index: distinfo
===================================================================
RCS file: /cvs/ports/mail/isync/distinfo,v
diff -u -p -r1.21 distinfo
--- distinfo	3 Dec 2021 14:44:33 -0000	1.21
+++ distinfo	18 Aug 2024 10:23:38 -0000
@@ -1,2 +1,4 @@
-SHA256 (isync-1.4.4.tar.gz) = fDJziU8i6YMwozAFHp2UL9n/vAK5GVLC8YlqXDfnAP8=
-SIZE (isync-1.4.4.tar.gz) = 340544
+SHA256 (ec50c55c36887b86b0143a265acae4b22d117fe9.patch) = IKdVbQZaW81x3MlvdxGlHB4+SAuk5w/u36xtwSkpC8U=
+SHA256 (isync-1.5.0.tar.gz) = oMgeEJOHvyedoWFFMQM5nneUav7PXFH5QTxedzVX940=
+SIZE (ec50c55c36887b86b0143a265acae4b22d117fe9.patch) = 12430
+SIZE (isync-1.5.0.tar.gz) = 412925
Index: patches/patch-src_common_h
===================================================================
RCS file: patches/patch-src_common_h
diff -N patches/patch-src_common_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_common_h	18 Aug 2024 10:08:18 -0000
@@ -0,0 +1,14 @@
+Remove hardcoded optimization level
+
+Index: src/common.h
+--- src/common.h.orig
++++ src/common.h
+@@ -96,7 +96,7 @@ typedef unsigned long ulong;
+ # define ATTR_UNUSED __attribute__((unused))
+ # define ATTR_NORETURN __attribute__((noreturn))
+ # define ATTR_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+-# define ATTR_OPTIMIZE __attribute__((optimize("2")))
++# define ATTR_OPTIMIZE
+ #else
+ # define ATTR_UNUSED
+ # define ATTR_NORETURN
Index: patches/patch-src_config_c
===================================================================
RCS file: patches/patch-src_config_c
diff -N patches/patch-src_config_c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_config_c	3 Aug 2024 10:21:58 -0000
@@ -0,0 +1,36 @@
+Neuter printf(3) %n
+
+Index: src/config.c
+--- src/config.c.orig
++++ src/config.c
+@@ -446,11 +446,15 @@ load_config( const char *where )
+ 	if (!where) {
+ 		int path_len, path_len2;
+ 		const char *config_home = getenv( "XDG_CONFIG_HOME" );
+-		if (config_home)
+-			nfsnprintf( path, sizeof(path), "%s/%nisyncrc", config_home, &path_len );
+-		else
+-			nfsnprintf( path, sizeof(path), "%s/.config/%nisyncrc", Home, &path_len );
+-		nfsnprintf( path2, sizeof(path2), "%s/%n.mbsyncrc", Home, &path_len2 );
++		if (config_home) {
++			nfsnprintf( path, sizeof(path), "%s/isyncrc", config_home );
++			path_len = strlen( config_home ) + strlen( "/" );
++		} else {
++			nfsnprintf( path, sizeof(path), "%s/.config/isyncrc", Home );
++			path_len = strlen( Home ) + strlen( "/.config/" );
++		}
++		nfsnprintf( path2, sizeof(path2), "%s/.mbsyncrc", Home );
++		path_len2 = strlen( Home ) + strlen( "/" );
+ 		struct stat st;
+ 		int ex = !lstat( path, &st );
+ 		int ex2 = !lstat( path2, &st );
+@@ -466,7 +470,8 @@ load_config( const char *where )
+ 	} else {
+ 		const char *sl = strrchr( where, '/' );
+ 		if (!sl) {
+-			nfsnprintf( path, sizeof(path), "./%n%s", &cfile.path_len, where );
++			nfsnprintf( path, sizeof(path), "./%s", where );
++			cfile.path_len = strlen( "./" );
+ 			cfile.file = path;
+ 		} else {
+ 			cfile.path_len = sl - where + 1;
Index: patches/patch-src_drv_imap_c
===================================================================
RCS file: /cvs/ports/mail/isync/patches/patch-src_drv_imap_c,v
diff -u -p -r1.12 patch-src_drv_imap_c
--- patches/patch-src_drv_imap_c	11 Mar 2022 19:34:38 -0000	1.12
+++ patches/patch-src_drv_imap_c	3 Aug 2024 08:30:03 -0000
@@ -3,7 +3,7 @@ Use pledge.
 Index: src/drv_imap.c
 --- src/drv_imap.c.orig
 +++ src/drv_imap.c
-@@ -45,6 +45,8 @@
+@@ -22,6 +22,8 @@
  # include <Security/Security.h>
  #endif
  
@@ -12,9 +12,9 @@ Index: src/drv_imap.c
  #ifdef HAVE_LIBSSL
  enum { SSL_None, SSL_STARTTLS, SSL_IMAPS };
  #endif
-@@ -3768,6 +3770,8 @@ imap_parse_store( conffile_t *cfg, store_conf_t **stor
- #endif
+@@ -3984,6 +3986,8 @@ imap_parse_store( conffile_t *cfg, store_conf_t **stor
  				143;
+ 		}
  	}
 +	if (server->sconf.tunnel || server->user_cmd || server->pass_cmd)
 +		needs_proc_exec = 1;
Index: patches/patch-src_main_c
===================================================================
RCS file: /cvs/ports/mail/isync/patches/patch-src_main_c,v
diff -u -p -r1.11 patch-src_main_c
--- patches/patch-src_main_c	11 Mar 2022 19:34:38 -0000	1.11
+++ patches/patch-src_main_c	18 Aug 2024 10:38:05 -0000
@@ -3,16 +3,16 @@ Use pledge.
 Index: src/main.c
 --- src/main.c.orig
 +++ src/main.c
-@@ -125,6 +125,8 @@ PACKAGE " " VERSION " - mailbox synchronizer\n"
- 	exit( code );
- }
+@@ -14,6 +14,8 @@
+ # include <sys/prctl.h>
+ #endif
  
 +int needs_proc_exec = 0;
 +
- static void ATTR_PRINTFLIKE(1, 2)
- debug( const char *msg, ... )
+ static void ATTR_NORETURN
+ version( void )
  {
-@@ -757,6 +759,36 @@ main( int argc, char **argv )
+@@ -560,6 +562,36 @@ main( int argc, char **argv )
  
  	if (load_config( config ))
  		return 1;
@@ -47,5 +47,5 @@ Index: src/main.c
 +		}
 +	}
  
- 	if (!channels) {
- 		fputs( "No channels defined. Try 'man " EXE "'\n", stderr );
+ 	signal( SIGPIPE, SIG_IGN );
+