mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
gnu: procmail: Fix build with gcc-14.
* gnu/packages/patches/procmail-gcc-14.patch: New patch. * gnu/packages/mail.scm (procmail)[source]: Use it. * gnu/local.mk (dist_patch_DATA): Register it. Fixes: guix/guix#1671 Change-Id: I41b3e1d73d319a19efa15ac75cefd326eedd58b1 Signed-off-by: Andreas Enge <andreas@enge.fr>
This commit is contained in:
parent
24257c46b0
commit
73049ba951
3 changed files with 271 additions and 1 deletions
|
@ -2130,6 +2130,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/procmail-ambiguous-getline-debian.patch \
|
||||
%D%/packages/patches/procmail-CVE-2014-3618.patch \
|
||||
%D%/packages/patches/procmail-CVE-2017-16844.patch \
|
||||
%D%/packages/patches/procmail-gcc-14.patch \
|
||||
%D%/packages/patches/proj-7-initialize-memory.patch \
|
||||
%D%/packages/patches/proot-add-clone3.patch \
|
||||
%D%/packages/patches/proot-add-missing-include.patch \
|
||||
|
|
|
@ -2808,7 +2808,8 @@ separation to safely deliver mail in multi-user setups.")
|
|||
;; patch 24.
|
||||
(patches (search-patches "procmail-ambiguous-getline-debian.patch"
|
||||
"procmail-CVE-2014-3618.patch"
|
||||
"procmail-CVE-2017-16844.patch"))))
|
||||
"procmail-CVE-2017-16844.patch"
|
||||
"procmail-gcc-14.patch"))))
|
||||
(arguments
|
||||
`(#:phases (modify-phases %standard-phases
|
||||
(replace 'configure
|
||||
|
|
268
gnu/packages/patches/procmail-gcc-14.patch
Normal file
268
gnu/packages/patches/procmail-gcc-14.patch
Normal file
|
@ -0,0 +1,268 @@
|
|||
See https://github.com/BuGlessRB/procmail/pull/7
|
||||
|
||||
diff --git a/initmake b/initmake
|
||||
index 82d718d..e44ee67 100755
|
||||
--- a/initmake
|
||||
+++ b/initmake
|
||||
@@ -124,7 +124,7 @@ else
|
||||
fi
|
||||
|
||||
cat >_autotst.c <<HERE
|
||||
-main()
|
||||
+int main()
|
||||
{ return 0;
|
||||
}
|
||||
HERE
|
||||
@@ -200,7 +200,7 @@ cat >_autotst.c <<HERE
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
-main()
|
||||
+int main()
|
||||
{ struct stat buf;return!&buf;
|
||||
}
|
||||
HERE
|
||||
diff --git a/src/autoconf b/src/autoconf
|
||||
index 1cb4c42..995d8bb 100755
|
||||
--- a/src/autoconf
|
||||
+++ b/src/autoconf
|
||||
@@ -363,6 +363,7 @@ cat >_autotst.c <<HERE
|
||||
#include <unistd.h> /* getpid() getppid() */
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h> /* SIGKILL */
|
||||
@@ -416,6 +417,16 @@ cat >_autotst.c <<HERE
|
||||
int dolock,child[NR_of_forks],timeout,fdcollect;
|
||||
char dirlocktest[]="_locktest";
|
||||
|
||||
+int killchildren()
|
||||
+{ int i;
|
||||
+ i=NR_of_forks;
|
||||
+ do
|
||||
+ if(child[--i]>0)
|
||||
+ kill(child[i],SIGTERM),child[i]=0;
|
||||
+ while(i);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void stimeout()
|
||||
{ timeout=1;close(fdcollect);killchildren();
|
||||
}
|
||||
@@ -437,7 +448,79 @@ unsigned sfork()
|
||||
return pid;
|
||||
}
|
||||
|
||||
-int main(argc,argv)char*argv[];
|
||||
+static int oldfdlock;
|
||||
+#ifdef F_SETLKW
|
||||
+static struct flock flck; /* why can't it be a local variable? */
|
||||
+#endif
|
||||
+#ifdef F_LOCK
|
||||
+static off_t oldlockoffset;
|
||||
+#endif
|
||||
+
|
||||
+int fdlock(int fd)
|
||||
+{ int i;unsigned gobble[GOBBLE>>2];
|
||||
+ for(i=GOBBLE>>2;i;gobble[--i]=~(unsigned)0); /* SunOS crash test */
|
||||
+ oldfdlock=fd;fd=0;
|
||||
+ if(MSK_fcntl&dolock)
|
||||
+#ifdef F_SETLKW
|
||||
+ { static unsigned extra;
|
||||
+ flck.l_type=F_WRLCK;flck.l_whence=SEEK_SET;flck.l_start=tell(oldfdlock);
|
||||
+ if(!extra--)
|
||||
+ extra=MIN_locks/4,flck.l_len=2,i|=fcntl(oldfdlock,F_SETLK,&flck);
|
||||
+ flck.l_len=0;fd|=fcntl(oldfdlock,F_SETLKW,&flck);
|
||||
+ }
|
||||
+#else
|
||||
+ fd=1;
|
||||
+#endif
|
||||
+ if(MSK_lockf&dolock)
|
||||
+#ifdef F_LOCK
|
||||
+ oldlockoffset=tell(oldfdlock),fd|=lockf(oldfdlock,F_LOCK,(off_t)0);
|
||||
+#else
|
||||
+ fd=1;
|
||||
+#endif
|
||||
+ if(MSK_flock&dolock)
|
||||
+#ifdef LOCK_EX
|
||||
+ fd|=flock(oldfdlock,LOCK_EX);
|
||||
+#else
|
||||
+ fd=1;
|
||||
+#endif
|
||||
+ return fd;
|
||||
+}
|
||||
+
|
||||
+int sfdlock(int fd)
|
||||
+{ int i;unsigned gobble[GOBBLE>>2];
|
||||
+ for(i=GOBBLE>>2;i;gobble[--i]=~(unsigned)0); /* SunOS crash test */
|
||||
+ return fdlock(fd);
|
||||
+}
|
||||
+
|
||||
+int fdunlock()
|
||||
+{ int i;unsigned gobble[GOBBLE];
|
||||
+ for(i=GOBBLE;i;gobble[--i]=~(unsigned)0); /* some SunOS libs mess this up */
|
||||
+ if(MSK_flock&dolock)
|
||||
+#ifdef LOCK_EX
|
||||
+ i|=flock(oldfdlock,LOCK_UN);
|
||||
+#else
|
||||
+ i=1;
|
||||
+#endif
|
||||
+ if(MSK_lockf&dolock)
|
||||
+#ifdef F_LOCK
|
||||
+ { lseek(oldfdlock,oldlockoffset,SEEK_SET);
|
||||
+ i|=lockf(oldfdlock,F_LOCK,(off_t)2);i|=lockf(oldfdlock,F_ULOCK,(off_t)0);
|
||||
+ }
|
||||
+#else
|
||||
+ i=1;
|
||||
+#endif
|
||||
+ if(MSK_fcntl&dolock)
|
||||
+#ifdef F_SETLKW
|
||||
+ flck.l_type=F_UNLCK,flck.l_len=0,i|=fcntl(oldfdlock,F_SETLK,&flck);
|
||||
+#else
|
||||
+ i=1;
|
||||
+#endif
|
||||
+ if(!i)
|
||||
+ for(i=GOBBLE;i&&gobble[--i]==~(unsigned)0;);
|
||||
+ return i;
|
||||
+}
|
||||
+
|
||||
+int main(argc,argv)int argc;char*argv[];
|
||||
{ int goodlock,testlock,i,pip[2],pipw[2];time_t otimet;unsigned dtimet;
|
||||
static char filename[]="_locktst.l0";
|
||||
close(0);goodlock=0;testlock=FIRST_lock;signal(SIGPIPE,SIG_DFL);
|
||||
@@ -576,88 +659,6 @@ skip_tests:
|
||||
puts("Kernel-locking tests completed.");fprintf(stderr,"\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
-
|
||||
-int killchildren()
|
||||
-{ int i;
|
||||
- i=NR_of_forks;
|
||||
- do
|
||||
- if(child[--i]>0)
|
||||
- kill(child[i],SIGTERM),child[i]=0;
|
||||
- while(i);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-int sfdlock(fd)
|
||||
-{ int i;unsigned gobble[GOBBLE>>2];
|
||||
- for(i=GOBBLE>>2;i;gobble[--i]=~(unsigned)0); /* SunOS crash test */
|
||||
- return fdlock(fd);
|
||||
-}
|
||||
-
|
||||
-static oldfdlock;
|
||||
-#ifdef F_SETLKW
|
||||
-static struct flock flck; /* why can't it be a local variable? */
|
||||
-#endif
|
||||
-#ifdef F_LOCK
|
||||
-static off_t oldlockoffset;
|
||||
-#endif
|
||||
-
|
||||
-int fdlock(fd)
|
||||
-{ int i;unsigned gobble[GOBBLE>>2];
|
||||
- for(i=GOBBLE>>2;i;gobble[--i]=~(unsigned)0); /* SunOS crash test */
|
||||
- oldfdlock=fd;fd=0;
|
||||
- if(MSK_fcntl&dolock)
|
||||
-#ifdef F_SETLKW
|
||||
- { static unsigned extra;
|
||||
- flck.l_type=F_WRLCK;flck.l_whence=SEEK_SET;flck.l_start=tell(oldfdlock);
|
||||
- if(!extra--)
|
||||
- extra=MIN_locks/4,flck.l_len=2,i|=fcntl(oldfdlock,F_SETLK,&flck);
|
||||
- flck.l_len=0;fd|=fcntl(oldfdlock,F_SETLKW,&flck);
|
||||
- }
|
||||
-#else
|
||||
- fd=1;
|
||||
-#endif
|
||||
- if(MSK_lockf&dolock)
|
||||
-#ifdef F_LOCK
|
||||
- oldlockoffset=tell(oldfdlock),fd|=lockf(oldfdlock,F_LOCK,(off_t)0);
|
||||
-#else
|
||||
- fd=1;
|
||||
-#endif
|
||||
- if(MSK_flock&dolock)
|
||||
-#ifdef LOCK_EX
|
||||
- fd|=flock(oldfdlock,LOCK_EX);
|
||||
-#else
|
||||
- fd=1;
|
||||
-#endif
|
||||
- return fd;
|
||||
-}
|
||||
-
|
||||
-int fdunlock()
|
||||
-{ int i;unsigned gobble[GOBBLE];
|
||||
- for(i=GOBBLE;i;gobble[--i]=~(unsigned)0); /* some SunOS libs mess this up */
|
||||
- if(MSK_flock&dolock)
|
||||
-#ifdef LOCK_EX
|
||||
- i|=flock(oldfdlock,LOCK_UN);
|
||||
-#else
|
||||
- i=1;
|
||||
-#endif
|
||||
- if(MSK_lockf&dolock)
|
||||
-#ifdef F_LOCK
|
||||
- { lseek(oldfdlock,oldlockoffset,SEEK_SET);
|
||||
- i|=lockf(oldfdlock,F_LOCK,(off_t)2);i|=lockf(oldfdlock,F_ULOCK,(off_t)0);
|
||||
- }
|
||||
-#else
|
||||
- i=1;
|
||||
-#endif
|
||||
- if(MSK_fcntl&dolock)
|
||||
-#ifdef F_SETLKW
|
||||
- flck.l_type=F_UNLCK,flck.l_len=0,i|=fcntl(oldfdlock,F_SETLK,&flck);
|
||||
-#else
|
||||
- i=1;
|
||||
-#endif
|
||||
- if(!i)
|
||||
- for(i=GOBBLE;i&&gobble[--i]==~(unsigned)0;);
|
||||
- return i;
|
||||
-}
|
||||
HERE
|
||||
|
||||
if $MAKE _autotst >_autotst.rrr 2>&1
|
||||
@@ -1033,6 +1034,10 @@ cat >_autotst.c <<HERE
|
||||
#ifndef NO_COMSAT
|
||||
#include "network.h"
|
||||
#endif
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+int setrgid();
|
||||
+int setresgid();
|
||||
int main(){char a[2];
|
||||
endpwent();endgrent();memmove(a,"0",1);bcopy("0",a,1);strcspn(a,"0");
|
||||
strtol("0",(char**)0,10);strchr("0",'0');strpbrk(a,"0");rename(a,"0");
|
||||
@@ -1059,7 +1064,7 @@ echo 'Testing for memmove, strchr, strpbrk, strcspn, strtol, strstr,'
|
||||
echo ' rename, setrgid, setegid, pow, opendir, mkdir, waitpid, fsync,'
|
||||
echo ' ftruncate, strtod, strncasecmp, strerror, strlcat,'
|
||||
echo ' memset, bzero, and _exit'
|
||||
-if $MAKE _autotst.$O >$DEVNULL 2>&1
|
||||
+if $MAKE _autotst.$O >_autotst.rrr 2>&1
|
||||
then
|
||||
:
|
||||
else
|
||||
diff --git a/src/foldinfo.c b/src/foldinfo.c
|
||||
index 10fe406..33e7bff 100644
|
||||
--- a/src/foldinfo.c
|
||||
+++ b/src/foldinfo.c
|
||||
@@ -18,6 +18,7 @@ static /*const*/char rcsid[]=
|
||||
#include "goodies.h"
|
||||
#include "locking.h"
|
||||
#include "foldinfo.h"
|
||||
+#include "acommon.h"
|
||||
|
||||
static const char
|
||||
maildirtmp[]=MAILDIRtmp,maildircur[]=MAILDIRcur;
|
||||
diff --git a/src/mailfold.c b/src/mailfold.c
|
||||
index 917b502..9e3d386 100644
|
||||
--- a/src/mailfold.c
|
||||
+++ b/src/mailfold.c
|
||||
@@ -371,7 +371,7 @@ void concon(ch)const int ch; /* flip between concatenated and split fields */
|
||||
}
|
||||
}
|
||||
|
||||
-void readmail(rhead,tobesent)const long tobesent;
|
||||
+void readmail(rhead,tobesent)const long tobesent; int rhead;
|
||||
{ char*chp,*pastend;static size_t contlengthoffset;
|
||||
;{ long dfilled;
|
||||
if(rhead==2) /* already read, just examine what we have */
|
Loading…
Add table
Add a link
Reference in a new issue