On 2025/01/23 22:39, Lloyd wrote:
> Patch for alpine to use lockspool(1) for proper mailbox locking and
> eliminate warning messages on startup. Tested on 7.6/amd64. Full credit
> for this patch goes to joe at sourceopen dot com.
> 
> ok?

Here it is with REVISION bumps for those subpackages which are affected
by the change.

I think this makes sense, but don't use alpine myself. Is there anyrhing
users need to be aware of (i.e. do they need to do anything to adapt to
it) or is it seamless?



Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/alpine/Makefile,v
diff -u -p -r1.62 Makefile
--- Makefile    19 Nov 2023 17:51:10 -0000      1.62
+++ Makefile    27 Jan 2025 13:35:02 -0000
@@ -17,7 +17,11 @@ PICO_V=                      5.09
 # grep PILOT_VERSION ${WRKSRC}/pico/pilot.c
 PILOT_V=               2.99
 
-REVISION-main=         0
+REVISION-main=         1
+REVISION-c-client=     0
+REVISION-imap=         0
+REVISION-mailutil=     0
+
 REVISION-pico=         26
 REVISION-pilot=                26
 
Index: patches/patch-imap_src_osdep_unix_Makefile
===================================================================
RCS file: /cvs/ports/mail/alpine/patches/patch-imap_src_osdep_unix_Makefile,v
diff -u -p -r1.8 patch-imap_src_osdep_unix_Makefile
--- patches/patch-imap_src_osdep_unix_Makefile  1 Jan 2023 21:02:07 -0000       
1.8
+++ patches/patch-imap_src_osdep_unix_Makefile  27 Jan 2025 13:35:02 -0000
@@ -56,7 +56,7 @@ Index: imap/src/osdep/unix/Makefile
         SPOOLDIR=/var \
         ACTIVEFILE=/usr/local/news/lib/active \
         RSHPATH=/usr/bin/rsh \
-+       LOCKPGM=$(PREFIX)/libexec/mlock \
++       LOCKPGM=/usr/libexec/lockspool \
         BASECFLAGS="$(GCCCFLAGS)"
  
  cvx:  # Convex
Index: patches/patch-imap_src_osdep_unix_env_unix_c
===================================================================
RCS file: /cvs/ports/mail/alpine/patches/patch-imap_src_osdep_unix_env_unix_c,v
diff -u -p -r1.6 patch-imap_src_osdep_unix_env_unix_c
--- patches/patch-imap_src_osdep_unix_env_unix_c        11 Mar 2022 19:34:32 
-0000      1.6
+++ patches/patch-imap_src_osdep_unix_env_unix_c        27 Jan 2025 13:35:02 
-0000
@@ -31,3 +31,41 @@ Index: imap/src/osdep/unix/env_unix.c
    return myMailboxDir ? myMailboxDir : "";
  }
  
+@@ -1233,14 +1230,11 @@ long dotlock_lock (char *file,DOTLOCK *base,int fd)
+   case EACCES:                        /* protection failure? */
+     MM_CRITICAL (NIL);                /* go critical */
+     if (closedBox || !lockpgm);       /* can't do on closed box or disabled */
+-    else if ((*lockpgm && stat (lockpgm,&sb)) ||
+-           (!*lockpgm && stat (lockpgm = LOCKPGM1,&sb) &&
+-            stat (lockpgm = LOCKPGM2,&sb) && stat (lockpgm = LOCKPGM3,&sb) &&
+-            stat (lockpgm = LOCKPGM4,&sb)))
++    else if (*lockpgm && stat (lockpgm,&sb)) /* lockspool(1) on OBSD */
+       lockpgm = NIL;          /* disable if can't find lockpgm */
+     else if (pipe (pi) >= 0) {        /* make command pipes */
+       long cf;
+-      char *argv[4],arg[20];
++      char *argv[2];          /* lockspool(1) takes no addt'l arguments */
+                               /* if input pipes usable create output pipes */
+       if ((pi[0] < FD_SETSIZE) && (pi[1] < FD_SETSIZE) && (pipe (po) >= 0)) {
+                               /* make sure output pipes are usable */
+@@ -1249,9 +1243,7 @@ long dotlock_lock (char *file,DOTLOCK *base,int fd)
+       else if (!(j = fork ())) {
+         if (!fork ()) {       /* make grandchild so it's inherited by init */
+                               /* prepare argument vector */
+-          sprintf (arg,"%d",fd);
+-          argv[0] = lockpgm; argv[1] = arg;
+-          argv[2] = file; argv[3] = NIL;
++          argv[0] = lockpgm; argv[1] = NIL; /* no args for lockspool(1) */
+                               /* set parent's I/O to my O/I */
+           dup2 (pi[1],1); dup2 (pi[1],2); dup2 (po[0],0);
+                               /* close all unnecessary descriptors */
+@@ -1273,7 +1265,8 @@ long dotlock_lock (char *file,DOTLOCK *base,int fd)
+         grim_pid_reap (j,NIL);/* reap child; grandchild now owned by init */
+                               /* read response from locking program */
+         if (select (pi[0]+1,&rfd,0,0,&tmo) &&
+-            (read (pi[0],tmp,1) == 1) && (tmp[0] == '+')) {
++            (read (pi[0],tmp,1) == 1) && (tmp[0] == '1')) {
++              /* OpenBSD lockspool(1) writes 1 to stdout on success */
+                               /* success, record pipes */
+           base->pipei = pi[0]; base->pipeo = po[1];
+                               /* close child's side of the pipes */

Reply via email to