diff --git a/.gitignore b/.gitignore index e69de29..17d3ff3 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +procmail-3.22.tar.gz diff --git a/procmail-3.15.1-man.patch b/procmail-3.15.1-man.patch new file mode 100644 index 0000000..af29f3b --- /dev/null +++ b/procmail-3.15.1-man.patch @@ -0,0 +1,19 @@ +--- procmail-3.15.1/man/procmail.man.35825 Thu Apr 12 18:31:37 2001 ++++ procmail-3.15.1/man/procmail.man Thu Apr 12 18:32:42 2001 +@@ -44,11 +44,11 @@ + should be invoked automatically over the + .B @DOT_FORWARD@ + file mechanism as soon as mail arrives. Alternatively, when installed by +-a system administrator, it can be invoked from within the mailer immediately. +-When invoked, it first sets some environment variables to default values, +-reads the mail message from stdin until an EOF, separates the body from the +-header, and then, if no command line arguments are present, it starts to look +-for a file named ++a system administrator (and in the standard Red Hat Linux configuration), it ++can be invoked from within the mailer immediately. When invoked, it ++first sets some environment variables to default values, reads the mail message from ++stdin until an EOF, separates the body from the header, and then, if no command line ++arguments are present, it starts to look for a file named + .BR @PROCMAILRC@ . + According to the processing recipes in this file, + the mail message that just arrived gets distributed into the right folder diff --git a/procmail-3.22-CVE-2014-3618.patch b/procmail-3.22-CVE-2014-3618.patch new file mode 100644 index 0000000..124d1f9 --- /dev/null +++ b/procmail-3.22-CVE-2014-3618.patch @@ -0,0 +1,18 @@ +diff --git a/src/formisc.c b/src/formisc.c +index 338733b..c48df52 100644 +--- a/src/formisc.c ++++ b/src/formisc.c +@@ -84,12 +84,11 @@ normal: *target++= *start++; + case '"':*target++=delim='"';start++; + } + ;{ int i; +- do ++ while(*start) /* anything? */ + if((i= *target++= *start++)==delim) /* corresponding delimiter? */ + break; + else if(i=='\\'&&*start) /* skip quoted character */ + *target++= *start++; +- while(*start); /* anything? */ + } + hitspc=2; + } diff --git a/procmail-3.22-CVE-2017-16844.patch b/procmail-3.22-CVE-2017-16844.patch new file mode 100644 index 0000000..5e610d7 --- /dev/null +++ b/procmail-3.22-CVE-2017-16844.patch @@ -0,0 +1,13 @@ +diff --git a/src/formisc.c b/src/formisc.c +index 5c2869d..54fd013 100644 +--- a/src/formisc.c ++++ b/src/formisc.c +@@ -103,7 +103,7 @@ void loadsaved(sp)const struct saved*const sp; /* load some saved text */ + } + /* append to buf */ + void loadbuf(text,len)const char*const text;const size_t len; +-{ if(buffilled+len>buflen) /* buf can't hold the text */ ++{ while(buffilled+len>buflen) /* buf can't hold the text */ + buf=realloc(buf,buflen+=Bsize); + tmemmove(buf+buffilled,text,len);buffilled+=len; + } diff --git a/procmail-3.22-coverity-scan-fixes.patch b/procmail-3.22-coverity-scan-fixes.patch new file mode 100644 index 0000000..633e36f --- /dev/null +++ b/procmail-3.22-coverity-scan-fixes.patch @@ -0,0 +1,86 @@ +diff --git a/src/cstdio.c b/src/cstdio.c +index 0a0bd5b..306a973 100644 +--- a/src/cstdio.c ++++ b/src/cstdio.c +@@ -15,6 +15,7 @@ static /*const*/char rcsid[]= + #include "variables.h" + #include "shell.h" + #include "cstdio.h" ++#include "common.h" + + static uchar rcbuf[STDBUF],*rcbufp,*rcbufend; /* buffer for custom stdio */ + static off_t blasttell; +diff --git a/src/foldinfo.c b/src/foldinfo.c +index 10fe406..d05ad84 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; +@@ -186,8 +187,8 @@ int screenmailbox(chp,egid,Deliverymode) + if(!stat(buf,&stbuf)) + { unsigned wwsdir; + accspooldir=(wwsdir= /* world writable spool dir? */ +- ((S_IWGRP|S_IXGRP|S_IWOTH|S_IXOTH)&stbuf.st_mode)== +- (S_IWGRP|S_IXGRP|S_IWOTH|S_IXOTH) ++ (((S_IWGRP|S_IXGRP|S_IWOTH|S_IXOTH)&stbuf.st_mode)== ++ (S_IWGRP|S_IXGRP|S_IWOTH|S_IXOTH)) + <<1| /* note it in bit 1 */ + uid==stbuf.st_uid); /* we own the spool dir, note it in bit 0 */ + if((CAN_toggle_sgid||accspooldir)&&privileged) +diff --git a/src/lmtp.c b/src/lmtp.c +index 2c5b676..2bfacc4 100644 +--- a/src/lmtp.c ++++ b/src/lmtp.c +@@ -51,7 +51,7 @@ static int lreaddyn P((void)); + + int childserverpid; + +-static ctopfd; ++static int ctopfd; + static char*overread; + static size_t overlen; + +diff --git a/src/locking.c b/src/locking.c +index 572719b..5740c2d 100644 +--- a/src/locking.c ++++ b/src/locking.c +@@ -95,7 +95,10 @@ faillock: nlog("Lock failure on");logqnl(name); + permanent=nfsTRY; + ds: ssleep((unsigned)locksleep); + ce: if(nextexit) +-term: { free(name); /* drop the preallocated buffer */ ++term: { ++ if(nextexit) ++ elog(whilstwfor),elog("lockfile"),logqnl(name); ++ free(name); /* drop the preallocated buffer */ + break; + } + } +@@ -103,7 +106,7 @@ term: { free(name); /* drop the preallocated buffer */ + setegid(gid); /* we put back our regular permissions */ + lcking&=~lck_DELAYSIG; + if(nextexit) +- elog(whilstwfor),elog("lockfile"),logqnl(name),Terminate(); ++ Terminate(); + return !!*lockp; + } + +diff --git a/src/mailfold.c b/src/mailfold.c +index 6c8bcf4..23b8ac2 100644 +--- a/src/mailfold.c ++++ b/src/mailfold.c +@@ -378,7 +378,7 @@ void concon(ch)const int ch; /* flip between concatenated and split fields */ + } + } + +-void readmail(rhead,tobesent)const long tobesent; ++void readmail(rhead,tobesent)int rhead;const long tobesent; + { char*chp,*pastend;static size_t contlengthoffset; + ;{ long dfilled; + if(rhead==2) /* already read, just examine what we have */ diff --git a/procmail-3.22-crash-fix.patch b/procmail-3.22-crash-fix.patch new file mode 100644 index 0000000..8563ea3 --- /dev/null +++ b/procmail-3.22-crash-fix.patch @@ -0,0 +1,58 @@ +diff --git a/src/cstdio.c b/src/cstdio.c +index 7b6fe6d..0a0bd5b 100644 +--- a/src/cstdio.c ++++ b/src/cstdio.c +@@ -144,7 +144,7 @@ int getbl(p,end)char*p,*end; /* my gets */ + { case '\n':case EOF:*q='\0'; + return overflow?-1:p!=q; /* did we read anything at all? */ + } +- if(q==end) /* check here so that a trailing backslash won't be lost */ ++ if(q>=end) /* check here so that a trailing backslash won't be lost */ + q=p,overflow=1; + *q++=i; + } +@@ -199,7 +199,7 @@ int getlline(target,end)char*target,*end; + if(*(target=strchr(target,'\0')-1)=='\\') + { if(chp2!=target) /* non-empty line? */ + target++; /* then preserve the backslash */ +- if(target>end-2) /* space enough for getbl? */ ++ if(target>=end-2) /* space enough for getbl? */ + target=end-linebuf,overflow=1; /* toss what we have */ + continue; + } +diff --git a/src/formail.c b/src/formail.c +index 1f5c9dd..49b9967 100644 +--- a/src/formail.c ++++ b/src/formail.c +@@ -219,7 +219,8 @@ static char*getsender(namep,fldp,headreply)char*namep;struct field*fldp; + if(i>=0&&(i!=maxindex(sest)||fldp==rdheader)) /* found anything? */ + { char*saddr;char*tmp; /* determine the weight */ + nowm=areply&&headreply?headreply==1?sest[i].wrepl:sest[i].wrrepl:i;chp+=j; +- tmp=malloc(j=fldp->Tot_len-j);tmemmove(tmp,chp,j);(chp=tmp)[j-1]='\0'; ++ tmp=malloc((j=fldp->Tot_len-j) + 1);tmemmove(tmp,chp,j);(chp=tmp)[j-1]='\0'; ++ chp[j]='\0'; + if(sest[i].head==From_) + { char*pastad; + if(strchr(saddr=chp,'\n')) /* multiple From_ lines */ +@@ -364,7 +365,7 @@ static PROGID; + + int main(lastm,argv)int lastm;const char*const argv[]; + { int i,split=0,force=0,bogus=1,every=0,headreply=0,digest=0,nowait=0,keepb=0, +- minfields=(char*)progid-(char*)progid,conctenate=0,babyl=0,babylstart, ++ minfields=(char*)progid-(char*)progid,conctenate=0,babyl=0,babylstart=0, + berkeley=0,forgetclen; + long maxlen,ctlength;FILE*idcache=0;pid_t thepid; + size_t j,lnl,escaplen;char*chp,*namep,*escap=ESCAP; +diff --git a/src/formisc.c b/src/formisc.c +index c48df52..5c2869d 100644 +--- a/src/formisc.c ++++ b/src/formisc.c +@@ -66,7 +66,7 @@ inc: start++; + retz: *target='\0'; + ret: return start; + } +- if(*start=='\\') ++ if(*start=='\\' && *(start + 1)) + *target++='\\',start++; + hitspc=2; + goto normal; /* normal word */ diff --git a/procmail-3.22-getline.patch b/procmail-3.22-getline.patch new file mode 100644 index 0000000..fb9a4ec --- /dev/null +++ b/procmail-3.22-getline.patch @@ -0,0 +1,56 @@ +diff -up procmail-3.22/src/fields.c.getline procmail-3.22/src/fields.c +--- procmail-3.22/src/fields.c.getline 2001-09-11 06:57:08.000000000 +0200 ++++ procmail-3.22/src/fields.c 2009-06-30 16:10:36.000000000 +0200 +@@ -110,16 +110,16 @@ void dispfield(p)register const struct f + /* try and append one valid field to rdheader from stdin */ + int readhead P((void)) + { int idlen; +- getline(); ++ get_line(); + if((idlen=breakfield(buf,buffilled))<=0) /* not the start of a valid field */ + return 0; + if(idlen==STRLEN(FROM)&&eqFrom_(buf)) /* it's a From_ line */ + { if(rdheader) + return 0; /* the From_ line was a fake! */ +- for(;buflast=='>';getline()); /* gather continued >From_ lines */ ++ for(;buflast=='>';get_line()); /* gather continued >From_ lines */ + } + else +- for(;;getline()) /* get the rest of the continued field */ ++ for(;;get_line()) /* get the rest of the continued field */ + { switch(buflast) /* will this line be continued? */ + { case ' ':case '\t': /* yep, it sure is */ + continue; +diff -up procmail-3.22/src/formail.c.getline procmail-3.22/src/formail.c +--- procmail-3.22/src/formail.c.getline 2009-06-30 16:00:40.000000000 +0200 ++++ procmail-3.22/src/formail.c 2009-06-30 16:10:49.000000000 +0200 +@@ -819,7 +819,7 @@ splitit: { if(!lnl) /* did the p + { if(split) /* gobble up the next start separator */ + { buffilled=0; + #ifdef sMAILBOX_SEPARATOR +- getline();buffilled=0; /* but only if it's defined */ ++ get_line();buffilled=0; /* but only if it's defined */ + #endif + if(buflast!=EOF) /* if any */ + goto splitit; +diff -up procmail-3.22/src/formisc.c.getline procmail-3.22/src/formisc.c +--- procmail-3.22/src/formisc.c.getline 2001-06-29 04:20:45.000000000 +0200 ++++ procmail-3.22/src/formisc.c 2009-06-30 16:12:20.000000000 +0200 +@@ -115,7 +115,7 @@ void loadchar(c)const int c; /* a + buf[buffilled++]=c; + } + +-int getline P((void)) /* read a newline-terminated line */ ++int get_line P((void)) /* read a newline-terminated line */ + { if(buflast==EOF) /* at the end of our Latin already? */ + { loadchar('\n'); /* fake empty line */ + return EOF; /* spread the word */ +diff -up procmail-3.22/src/formisc.h.getline procmail-3.22/src/formisc.h +--- procmail-3.22/src/formisc.h.getline 1999-04-19 08:42:15.000000000 +0200 ++++ procmail-3.22/src/formisc.h 2009-06-30 16:10:02.000000000 +0200 +@@ -17,4 +17,4 @@ void + char* + skipwords P((char*start)); + int +- getline P((void)); ++ get_line P((void)); diff --git a/procmail-3.22-ipv6.patch b/procmail-3.22-ipv6.patch new file mode 100644 index 0000000..ecae2a2 --- /dev/null +++ b/procmail-3.22-ipv6.patch @@ -0,0 +1,228 @@ +diff --git a/src/autoconf b/src/autoconf +index 3a52e6c..ff78048 100755 +--- a/src/autoconf ++++ b/src/autoconf +@@ -68,8 +68,6 @@ + # #define NOfsync + #Ok #define endpwent() + #Ok #define endgrent() +-#Ok #define endhostent() +-#Ok #define endservent() + #Ok #define endprotoent() + # #define h_0addr_list h_addr + #Ok #define NOpw_passwd +@@ -896,7 +894,7 @@ int main(){int i=0; + {uid_t vuid_t;i+=vuid_t=1;} + {gid_t vgid_t;i+=vgid_t=1;} + #ifndef NO_COMSAT +- {struct hostent vhostent;i+=!(vhostent.h_addr_list=0);} ++ {struct addrinfo res; i+=!(res.ai_socktype=0);} + #endif + #ifndef NOuname + {struct utsname vutsname;i+=!(*vutsname.nodename='\0');} +@@ -917,8 +915,6 @@ do + test -z "$i3" && grepfor mode_t 'typedef int mode_t;' && i3=I + test -z "$i4" && grepfor uid_t 'typedef int uid_t;' && i4=I + test -z "$i5" && grepfor gid_t 'typedef int gid_t;' && i5=I +- test -z "$i6" && grepfor h_addr_list '#define h_0addr_list h_addr' && i6=I +- test -z "$i6" && grepfor hostent '#define h_0addr_list h_addr' && i6=I + test -z "$i6" && grepfor member '#define h_0addr_list h_addr' && i6=I + test -z "$i7" && grepfor utsname "#define NOuname \ + /* is there, but empty */" && i7=I +@@ -1048,8 +1044,12 @@ int main(){char a[2]; + {struct utsname b;uname(&b);} + #endif + #ifndef NO_COMSAT +- gethostbyname("0");getprotobyname(COMSATprotocol);endhostent();endservent(); +- endprotoent(); ++ { ++ struct addrinfo *res, hints; ++ memset(&hints, '\0', sizeof(hints)); ++ if(getaddrinfo(COMSAThost,BIFF_serviceport,&hints,&res)) ++ freeaddrinfo(res); ++ } + #endif + _exit(0); + return 0;} +@@ -1103,14 +1103,9 @@ grepfor uname "\ + /* defines it, the libraries don't */" + grepfor endpwent '#define endpwent()' + grepfor endgrent '#define endgrent()' +-if grepfor gethostbyname '#define NO_COMSAT' ++if grepfor getaddrinfo '#define NO_COMSAT' + then + : +-else +- grepfor getprotobyname '#define UDP_protocolno 17' +- grepfor endhostent '#define endhostent()' +- grepfor endservent '#define endservent()' +- grepfor endprotoent '#define endprotoent()' + fi + grepfor strstr '#define SLOWstrstr' || + grepfor clock '#define SLOWstrstr' +@@ -1239,39 +1234,9 @@ int main(argc,argv)int argc;const char*argv[]; + printf("/* Insufficient memory to perform the benchmark! */\n"); + #endif /* SLOWstrstr */ + #ifndef NO_COMSAT +-#ifndef UDP_protocolno +- ;{ const struct protoent*p; +- if(p=getprotobyname(COMSATprotocol)) +- { printf("#define UDP_protocolno %d\n",p->p_proto); +-#else +- ;{ if(1) +- { +-#endif +- ;{ const struct servent*serv; +- if(serv=getservbyname(COMSATservice,COMSATprotocol)) +- printf("#define BIFF_serviceport \"%d\"\n", +- ntohs(serv->s_port)); +- } +-#ifdef AF_INET +- ;{ const struct hostent*host; +- if(!strcmp("localhost",COMSAThost)&& +- (host=gethostbyname(COMSAThost))&& +- host->h_0addr_list&&host->h_addrtype==AF_INET&& +- host->h_length) +- { int j=host->h_length; +- const unsigned char*ad=(void*)host->h_0addr_list; +- printf("#define IP_localhost {"); +- printf("%d",*ad++); +- while(--j) +- printf(",%d",*ad++); +- puts("}"); +- } +- } ++#ifndef AF_INET ++ puts("#define NO_COMSAT"); + #endif /* AF_INET */ +- } +- else +- puts("#define NO_COMSAT"); +- } + #endif /* NO_COMSAT */ + ;{ unsigned long s=(size_t)~0;int bits; + for(bits=1;s>>=1;bits++); +diff --git a/src/comsat.c b/src/comsat.c +index 9712e74..5082b16 100644 +--- a/src/comsat.c ++++ b/src/comsat.c +@@ -27,7 +27,8 @@ static /*const*/char rcsid[]= + #include "comsat.h" + + static int csvalid; /* is it turned on with a good address? */ +-static struct sockaddr_in csaddr; ++static struct addrinfo cai; ++static struct sockaddr *csaddr; + static char*cslastf,*cslgname; + + void setlfcs(folder)const char*folder; /* set lastfolder for comsat */ +@@ -62,56 +63,32 @@ void setlgcs(name)const char*name; /* set logname for comsat */ + } + + int setcomsat(chp)const char*chp; +-{ char*chad;int newvalid; struct sockaddr_in newaddr; ++{ char*chad;int newvalid; struct addrinfo *res, hints; + chad=strchr(chp,SERV_ADDRsep); /* @ separator? */ + if(!chad&&!renvint(-1L,chp)) + return csvalid=0; /* turned off comsat */ + newvalid=1; + if(chad) + *chad++='\0'; /* split the specifier */ ++ if(!chad||!*chp) /* no service */ ++ chp=BIFF_serviceport; /* new balls please! */ + if(!chad||!*chad) /* no host */ +-#ifndef IP_localhost /* Is "localhost" preresolved? */ + chad=COMSAThost; /* nope, use default */ +-#else /* IP_localhost */ +- { static const unsigned char ip_localhost[]=IP_localhost; +- newaddr.sin_family=AF_INET; +- tmemmove(&newaddr.sin_addr,ip_localhost,sizeof ip_localhost); +- } +- else +-#endif /* IP_localhost */ +- { const struct hostent*host; /* what host? paranoid checks */ +- if(!(host=gethostbyname(chad))||!host->h_0addr_list) +- { bbzero(&newaddr.sin_addr,sizeof newaddr.sin_addr); +- newvalid=0; /* host can't be found, too bad */ +- } +- else +- { newaddr.sin_family=host->h_addrtype; /* address number found */ +- tmemmove(&newaddr.sin_addr,host->h_0addr_list,host->h_length); +- } +- endhostent(); +- } +- if(newvalid) /* so far, so good */ +- { int s; +- if(!chad||!*chp) /* no service */ +- chp=BIFF_serviceport; /* new balls please! */ +- s=strtol(chp,&chad,10); +- if(chp!=chad) /* the service is not numeric */ +- newaddr.sin_port=htons((short)s); /* network order */ +- else +- { const struct servent*serv; +- serv=getservbyname(chp,COMSATprotocol); /* so get its no. */ +- if(serv) +- newaddr.sin_port=serv->s_port; +- else +- { newaddr.sin_port=htons((short)0); /* no such service */ +- newvalid=0; +- } +- endservent(); +- } +- } ++ bzero(&hints,sizeof(hints)); ++ hints.ai_socktype=SOCK_DGRAM; ++ hints.ai_flags=AI_ADDRCONFIG; ++ if(getaddrinfo(chad,chp,&hints,&res)) ++ newvalid=0; ++ + onguard(); /* update the address atomically */ + if(csvalid=newvalid) +- tmemmove(&csaddr,&newaddr,sizeof(newaddr)); ++ { if(csaddr) ++ free(csaddr); ++ csaddr=malloc(res->ai_addrlen); ++ tmemmove(csaddr,res->ai_addr,res->ai_addrlen); ++ tmemmove(&cai,res,sizeof(cai)); ++ freeaddrinfo(res); ++ } + offguard(); + return newvalid; + } +@@ -132,8 +109,8 @@ void sendcomsat(folder)const char*folder; + } + strlcat(buf,COMSATxtrsep,linebuf); /* custom seperator */ + strlcat(buf,p,linebuf); /* where was it delivered? */ +- if((s=socket(AF_INET,SOCK_DGRAM,UDP_protocolno))>=0) +- { sendto(s,buf,strlen(buf),0,(struct sockaddr*)&csaddr,sizeof(csaddr)); ++ if((s=socket(cai.ai_family,cai.ai_socktype,cai.ai_protocol))>=0) ++ { sendto(s,buf,strlen(buf),0,csaddr,cai.ai_addrlen); + rclose(s); + yell("Notified comsat:",buf); + } +diff --git a/src/network.h b/src/network.h +index d7d08f2..b09b6c4 100644 +--- a/src/network.h ++++ b/src/network.h +@@ -1,19 +1,13 @@ + /*$Id: network.h,v 1.7 1997/04/02 03:15:41 srb Exp $*/ + +-#include /* socket() sendto() AF_INET ++#include /* socket() sendto() */ + /* SOCK_DGRAM */ +-#include /* gethostbyname() getservbyname() +- /* getprotobyname() */ +-#include /* htons() struct sockaddr_in */ ++#include /* getaddrinfo() */ + + #ifndef BIFF_serviceport + #define BIFF_serviceport COMSATservice + #endif + +-#ifndef h_0addr_list +-#define h_0addr_list h_addr_list[0] /* POSIX struct member */ +-#endif +- + #ifndef NO_const /* since network.h is outside the autoconf const check */ + #ifdef const /* loop, we need this backcheck for some systems */ + #undef const diff --git a/procmail-3.22-rhconfig.patch b/procmail-3.22-rhconfig.patch new file mode 100644 index 0000000..3b7a8b7 --- /dev/null +++ b/procmail-3.22-rhconfig.patch @@ -0,0 +1,97 @@ +--- procmail-3.22/Makefile.rhconfig 2001-09-10 22:53:09.000000000 -0600 ++++ procmail-3.22/Makefile 2003-09-12 07:44:34.000000000 -0600 +@@ -23,7 +23,7 @@ + + # Uncomment to install compressed man pages (possibly add extra suffix + # to the definitions of MAN?DIR and/or MAN?SUFFIX by hand) +-#MANCOMPRESS = compress ++# MANCOMPRESS = compress + + ############################*# + # Things that can be made are: +@@ -55,7 +55,7 @@ + + LOCKINGTEST=__defaults__ + +-#LOCKINGTEST=/tmp . # Uncomment and add any directories you see fit. ++LOCKINGTEST=/tmp . # Uncomment and add any directories you see fit. + # If LOCKINGTEST is defined, autoconf will NOT + # prompt you to enter additional directories. + # See INSTALL for more information about the +@@ -65,7 +65,7 @@ + # Only edit below this line if you *think* you know what you are doing # + ######################################################################## + +-#LOCKINGTEST=100 # Uncomment (and change) if you think you know ++LOCKINGTEST=100 # Uncomment (and change) if you think you know + # it better than the autoconf lockingtests. + # This will cause the lockingtests to be hotwired. + # 100 to enable fcntl() +@@ -74,8 +74,8 @@ + # Or them together to get the desired combination. + + # Optional system libraries we search for +-SEARCHLIBS = -lm -ldir -lx -lsocket -lnet -linet -lnsl_s -lnsl_i -lnsl -lsun \ +- -lgen -lsockdns -ldl ++SEARCHLIBS = -lm -ldir -lx -lsocket -lnet -linet -lnsl_s -lnsl_i -lsun \ ++ -lgen -lsockdns + # -lresolv # not really needed, is it? + + # Informal list of directories where we look for the libraries in SEARCHLIBS +@@ -86,8 +86,8 @@ + #-Wimplicit -Wshadow -Wid-clash-6 #-Wuninitialized + + # The place to put your favourite extra cc flag +-CFLAGS0 = -O #$(GCC_WARNINGS) +-LDFLAGS0= -s ++CFLAGS0 = $(RPM_OPT_FLAGS) #$(GCC_WARNINGS) ++LDFLAGS0= + # Read my libs :-) + LIBS= + +--- procmail-3.22/config.h.rhconfig 2001-09-10 22:53:50.000000000 -0600 ++++ procmail-3.22/config.h 2003-09-12 07:41:40.000000000 -0600 +@@ -35,7 +35,8 @@ + */ + /*#define DEFSPATH "PATH=/bin:/usr/bin" /* */ + /*#define DEFPATH "PATH=$HOME/bin:/bin:/usr/bin" /* */ +- ++#define DEFPATH "PATH=$HOME/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin" /* */ ++ + /* every environment variable appearing in PRESTENV will be set or wiped + * out of the environment (variables without an '=' sign will be thrown + * out), e.g. you could define PRESTENV as follows: +@@ -46,13 +47,13 @@ + */ + #define PRESTENV {"IFS","ENV","PWD",0} + +-/*#define GROUP_PER_USER /* uncomment this if each ++#define GROUP_PER_USER /* uncomment this if each + user has his or her own + group and procmail can therefore trust a $HOME/.procmailrc that + is group writable or contained in a group writable home directory + if the group involved is the user's default group. */ + +-/*#define LMTP /* uncomment this if you ++#define LMTP /* uncomment this if you + want to use procmail + as an LMTP (rfc2033) server, presumably for invocation by an MTA. + The file examples/local_procmail_lmtp.m4 contains info on how to +@@ -79,7 +80,7 @@ + + /*#define NO_fcntl_LOCK /* uncomment any of these three if you */ + /*#define NO_lockf_LOCK /* definitely do not want procmail to make */ +-/*#define NO_flock_LOCK /* use of those kernel-locking methods */ ++#define NO_flock_LOCK /* use of those kernel-locking methods */ + /* If you set LOCKINGTEST to a binary number + than there's no need to set these. These #defines are only useful + if you want to disable particular locking styles but are unsure which +@@ -91,7 +92,7 @@ + mail present. procmail automatically suppresses this when it isn't + needed or under heavy load. */ + +-/*#define DEFsendmail "/usr/sbin/sendmail" /* uncomment and/or change if ++#define DEFsendmail "/usr/sbin/sendmail" /* uncomment and/or change if + the autoconfigured default + SENDMAIL is not suitable. This program should quack like a sendmail: + it should accept the -oi flag (to tell it to _not_ treat a line diff --git a/procmail-3.22-truncate.patch b/procmail-3.22-truncate.patch new file mode 100644 index 0000000..c06cde3 --- /dev/null +++ b/procmail-3.22-truncate.patch @@ -0,0 +1,47 @@ +--- procmail-3.22/src/mailfold.c.truncate 2007-03-27 13:24:05.000000000 +0200 ++++ procmail-3.22/src/mailfold.c 2007-03-27 13:25:06.000000000 +0200 +@@ -30,6 +30,7 @@ + + int logopened,rawnonl; + off_t lasttell; ++static int trunced; + static long lastdump; + static volatile int mailread; /* if the mail is completely read in already */ + static struct dyna_array confield; /* escapes, concatenations */ +@@ -81,6 +82,7 @@ + long len; + { int i;long part; + lasttell=i= -1;SETerrno(EBADF); ++ trunced=0; + if(s>=0) + { if(ft_lock(type)&&(lseek(s,(off_t)0,SEEK_END),fdlock(s))) + nlog("Kernel-lock failed\n"); +@@ -120,13 +122,18 @@ + } + writefin: + i=type!=ft_PIPE&&fsync(s)&&errno!=EINVAL; /* EINVAL => wasn't a file */ ++ if ((i||len)&&lasttell>=0) ++ { int serrno=errno; ++ if(!ftruncate(s,lasttell)) trunced=1; ++ SETerrno(serrno); ++ } + if(ft_lock(type)) + { int serrno=errno; /* save any error information */ + if(fdunlock()) + nlog("Kernel-unlock failed\n"); + SETerrno(serrno); + } +- i=rclose(s)||i; ++ i=rclose(s)||i; /* if this fails, we should truncate, but it's too late */ + } /* return an error even if nothing was to be sent */ + return i&&!len?-1:len; + } +@@ -237,7 +244,7 @@ + #endif + default:writeerr(buf); + } +- if(lasttell>=0&&!truncate(boxname,lasttell)&&(logopened||verbose)) ++ if(lasttell>=0&&trunced&&(logopened||verbose)) + nlog("Truncated file to former size\n"); /* undo garbage */ + ret0: return 0; + } diff --git a/procmail.spec b/procmail.spec new file mode 100644 index 0000000..86d53ce --- /dev/null +++ b/procmail.spec @@ -0,0 +1,323 @@ +# hardened build if not overridden +%{!?_hardened_build:%global _hardened_build 1} + +%if %{?_hardened_build}%{!?_hardened_build:0} +%global hardened_flags -pie -Wl,-z,relro,-z,now +%endif + +Summary: Mail processing program +Name: procmail +Version: 3.22 +Release: 53%{?dist} +License: GPLv2+ or Artistic +# Source: ftp://ftp.procmail.org/pub/procmail/procmail-%{version}.tar.gz +# The original source doesn't seem to be available anymore, using mirror +Source: ftp://ftp.ucsb.edu/pub/mirrors/procmail/procmail-%{version}.tar.gz +# Source2: http://www.linux.org.uk/~telsa/BitsAndPieces/procmailrc +# The Telsa config file doesn't seem to be available anymore, using local copy +Source2: procmailrc +URL: http://www.procmail.org +Patch0: procmail-3.22-rhconfig.patch +Patch1: procmail-3.15.1-man.patch +Patch2: procmail_3.22-8.debian.patch +Patch4: procmail-3.22-truncate.patch +Patch5: procmail-3.22-ipv6.patch +Patch6: procmail-3.22-getline.patch +Patch7: procmail-3.22-CVE-2014-3618.patch +Patch8: procmail-3.22-crash-fix.patch +Patch9: procmail-3.22-CVE-2017-16844.patch +Patch10: procmail-3.22-coverity-scan-fixes.patch +BuildRequires: gcc + +%description +Procmail can be used to create mail-servers, mailing lists, sort your +incoming mail into separate folders/files (real convenient when subscribing +to one or more mailing lists or for prioritising your mail), preprocess +your mail, start any programs upon mail arrival (e.g. to generate different +chimes on your workstation for different types of mail) or selectively +forward certain incoming mail automatically to someone. + +%prep +%setup -q +%patch0 -p1 -b .rhconfig +%patch1 -p1 +%patch2 -p1 +%patch4 -p1 -b .truncate +%patch5 -p1 -b .ipv6 +%patch6 -p1 -b .getline +%patch7 -p1 -b .CVE-2014-3618 +%patch8 -p1 -b .crash-fix +%patch9 -p1 -b .CVE-2017-16844 +%patch10 -p1 -b .coverity-scan-fixes + +find examples -type f | xargs chmod 644 + +%build +make RPM_OPT_FLAGS="$(getconf LFS_CFLAGS)" autoconf.h +make RPM_OPT_FLAGS="$RPM_OPT_FLAGS %{?hardened_flags} -Wno-comments $(getconf LFS_CFLAGS)" + +%install +rm -rf ${RPM_BUILD_ROOT} +mkdir -p ${RPM_BUILD_ROOT}%{_bindir} +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man{1,5} + +make \ + BASENAME=${RPM_BUILD_ROOT}%{_prefix} MANDIR=${RPM_BUILD_ROOT}%{_mandir} \ + install + +cp debian/mailstat.1 ${RPM_BUILD_ROOT}%{_mandir}/man1 +cp -p %{SOURCE2} telsas_procmailrc + + +%files +%doc Artistic COPYING FAQ FEATURES HISTORY README KNOWN_BUGS examples telsas_procmailrc debian/QuickStart debian/README.Maildir + +%{_bindir}/formail +%attr(2755,root,mail) %{_bindir}/lockfile +%{_bindir}/mailstat +%attr(0755,root,mail) %{_bindir}/procmail + +%{_mandir}/man[15]/* + +%changelog +* Tue Jul 28 2020 Fedora Release Engineering - 3.22-53 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jan 30 2020 Fedora Release Engineering - 3.22-52 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 3.22-51 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 3.22-50 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Dec 6 2018 Jaroslav Škarvada - 3.22-49 +- Fixed issues found by Coverity Scan + +* Fri Jul 20 2018 Jaroslav Škarvada - 3.22-48 +- Fixed FTBFS by adding gcc requirement + Resolves: rhbz#1606850 + +* Fri Jul 13 2018 Fedora Release Engineering - 3.22-47 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri Feb 09 2018 Fedora Release Engineering - 3.22-46 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Nov 21 2017 Jaroslav Škarvada - 3.22-45 +- Renamed loadbuf-fix patch to CVE-2017-16844, because it got CVE number + +* Tue Oct 10 2017 Jaroslav Škarvada - 3.22-44 +- Fixed possible buffer overflow in loadbuf function + Resolves: rhbz#1500071 + +* Thu Aug 03 2017 Fedora Release Engineering - 3.22-43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.22-42 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Mar 22 2017 Jaroslav Škarvada - 3.22-41 +- Fixed some more conditional jumps that depended on uninitialized values + +* Sat Feb 11 2017 Fedora Release Engineering - 3.22-40 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 3.22-39 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jun 18 2015 Fedora Release Engineering - 3.22-38 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Mar 19 2015 Jaroslav Škarvada - 3.22-37 +- Fixed more buffer overflows and memory corruptions (by crash-fix patch) + +* Thu Sep 4 2014 Jaroslav Škarvada - 3.22-36 +- Fixed buffer overflow in formail + Resolves: CVE-2014-3618 + +* Sun Aug 17 2014 Fedora Release Engineering - 3.22-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 3.22-34 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun Aug 04 2013 Fedora Release Engineering - 3.22-33 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Feb 4 2013 Jaroslav Škarvada - 3.22-32 +- Updated sources URLs + +* Tue Sep 4 2012 Jaroslav Škarvada - 3.22-31 +- Hardened build with PIE and full RELRO + Resolves: rhbz#853186 + +* Sat Jul 21 2012 Fedora Release Engineering - 3.22-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jan 16 2012 Jaroslav Škarvada - 3.22-29 +- Rebuilt without NO_NFS_ATIME_HACK + Resolves: rhbz#666383 + +* Sat Jan 14 2012 Fedora Release Engineering - 3.22-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Nov 25 2011 Jaroslav Škarvada - 3.22-27 +- Defuzzification of ipv6 patch + +* Wed Feb 09 2011 Fedora Release Engineering - 3.22-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Jul 26 2009 Fedora Release Engineering - 3.22-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Jun 30 2009 Miroslav Lichvar 3.22-24 +- rename getline to avoid conflict with glibc (#505977) +- add -Wno-comments to CFLAGS +- remove package name from summary + +* Thu Feb 26 2009 Fedora Release Engineering - 3.22-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Aug 04 2008 Miroslav Lichvar 3.22-22 +- fix building on sh (CHIKAMA Masaki) (#447658) + +* Tue Feb 19 2008 Fedora Release Engineering - 3.22-21 +- Autorebuild for GCC 4.3 + +* Wed Aug 22 2007 Miroslav Lichvar 3.22-20 +- update license tag + +* Tue Mar 27 2007 Miroslav Lichvar 3.22-19 +- fix description (#234098) +- spec cleanup + +* Fri Oct 27 2006 Miroslav Lichvar 3.22-18 +- add IPv6 support to comsat notification (#198403) +- package man page for mailstat +- change mail spool directory to /var/spool/mail + +* Wed Jul 12 2006 Jesse Keating - 3.22-17.1 +- rebuild + +* Thu Mar 30 2006 Peter Vrabec 3.22-17 +- fix truncation of mailbox when running into a disk quota or a + full partition. Patch from Solar Designer. + +* Fri Feb 10 2006 Jesse Keating - 3.22-16.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 3.22-16.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Fri Mar 18 2005 Peter Vrabec 3.22-16 +- rebuilt + +* Mon Nov 8 2004 Martin Stransky 3.22-15 +- add largefiles patch to support 64-bit file I/O + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Jan 6 2004 Jens Petersen - 3.22-12 +- apply procmail_3.22-8.debian.patch from Debian (fixes #79691) + +* Mon Sep 22 2003 Florian La Roche +- do not link against -ldl and -lnsl + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Dec 17 2002 Jens Petersen +- convert changelog to utf8 + +* Wed Dec 11 2002 Tim Powers 3.22-8 +- rebuild on all arches + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Mon Mar 25 2002 Trond Eivind Glomsrød 3.22-5 +- Updated Telss's procmailrc file (#61872) + +* Thu Mar 14 2002 Trond Eivind Glomsrød 3.22-4 +- Add Telsa Gwynne's procmailrc as a doc file - it's + excellently commented, and is a great example + +* Wed Feb 27 2002 Trond Eivind Glomsrød 3.22-3 +- Rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Wed Sep 12 2001 Trond Eivind Glomsrød 3.22-1 +- 3.22 + +* Sat Jun 30 2001 Trond Eivind Glomsrød +- 3.21 + +* Fri Jun 29 2001 Trond Eivind Glomsrød +- 3.20 +- Enable LMTP + +* Thu Apr 12 2001 Trond Eivind Glomsrød +- Change to "License: GPL or artistic" from "Copyright: distributable" +- Fix man page (#35825) +- 3.15.1 +- redo config patch + +* Sat Jan 6 2001 Jeff Johnson +- lose setuid/setgid (root,mail) bits (#23257). + +* Fri Aug 11 2000 Jeff Johnson +- add space in delivery rules with '!' (#15947). + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Thu Jun 15 2000 Jeff Johnson +- FHS packaging. + +* Mon Feb 7 2000 Jeff Johnson +- compress man pages. + +* Fri Jan 14 2000 Jeff Johnson +- update to 3.14. + +* Mon Aug 16 1999 Bill Nottingham +- fix doc perms. + +* Wed Apr 21 1999 Cristian Gafton +- turn on GROUP_PER_USER +- add some docs to the package + +* Mon Apr 05 1999 Cristian Gafton +- version 3.13 + +* Fri Mar 26 1999 Cristian Gafton +- fixed Group line + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 16) + +* Sun Aug 16 1998 Jeff Johnson +- build root + +* Mon Apr 27 1998 Prospector System +- translations modified for de, fr, tr + +* Thu Jun 19 1997 Erik Troan +- built against glibc diff --git a/procmail_3.22-8.debian.patch b/procmail_3.22-8.debian.patch new file mode 100644 index 0000000..78079d6 --- /dev/null +++ b/procmail_3.22-8.debian.patch @@ -0,0 +1,950 @@ +--- procmail-3.22.orig/examples/advanced ++++ procmail-3.22/examples/advanced +@@ -251,14 +251,14 @@ + -------------------------------------------------------- + + There are many different reasons why more and more sites decide not to +-store mail in /usr/spool/mail or /usr/mail anymore. ++store mail in /var/spool/mail or /var/mail anymore. + Some of the obvious advantages when storing mail in the recipient's home + directory are: + - Mail is automatically subject to the user's quota limitations. + - Often there is more room on the home partition(s) than on that +- one /usr/mail partition. ++ one /var/mail partition. + +-The quota limitations also apply to /usr/spool/mail or /usr/mail if procmail ++The quota limitations also apply to /var/spool/mail or /var/mail if procmail + does the delivery. These quota limitations often do not work with the + regular /bin/mail since that usually writes the mailbox with root permissions + (eluding the quota restrictions). +@@ -276,7 +276,7 @@ + defined SYSTEM_MBOX to be. Some braindamaged mail programs + do not pick up the MAIL environment variable, these either + have to be patched/recompiled or you have to create symbolic +- links in /usr/mail to every person's new mailbox. ++ links in /var/mail to every person's new mailbox. + + --- + +--- procmail-3.22.orig/man/procmail.man ++++ procmail-3.22/man/procmail.man +@@ -166,7 +166,8 @@ + accept an unlimited number of arguments.@ETCRCS_desc@ + For some advanced usage of this option you should look in the + .B EXAMPLES +-section below.@LMTPOPTdesc@.SH ARGUMENTS ++section below.@LMTPOPTdesc@ ++.SH ARGUMENTS + Any arguments containing an '=' are considered to be environment variable + assignments, they will + .I all +@@ -723,6 +724,15 @@ + .fi + .ad + .PP ++Some mailers (notably exim) do not currently accept the above syntax. ++In such case use this instead: ++.PP ++.na ++.nf ++|/usr/bin/procmail ++.fi ++.ad ++.PP + Procmail can also be invoked to postprocess an already filled system + mailbox. This can be useful if you don't want to or can't use a + $HOME/@DOT_FORWARD@ file (in which case the following script could +@@ -754,7 +764,7 @@ + .SS "A sample small @PROCMAILRC@:" + .na + .nf +-PATH=/bin:/usr/bin:@BINDIR@ ++PATH=/usr/local/bin:/usr/bin:/bin + MAILDIR=$HOME/Mail #you'd better make sure it exists + DEFAULT=$MAILDIR/mbox #completely optional + LOGFILE=$MAILDIR/from #recommended +--- procmail-3.22.orig/man/procmailrc.man ++++ procmail-3.22/man/procmailrc.man +@@ -779,7 +779,7 @@ + .PP + Some non-optimal and non-obvious regexps set MATCH to an incorrect + value. The regexp can be made to work by removing one or more unneeded +-'*', '+', or '?' operator on the left-hand side of the \e/ token. ++\&'*', '+', or '?' operator on the left-hand side of the \e/ token. + .SH MISCELLANEOUS + If the regular expression contains `\fB@TO_key@\fP' it will be substituted by + .na +--- procmail-3.22.orig/src/comsat.c ++++ procmail-3.22/src/comsat.c +@@ -92,7 +92,7 @@ + } + if(newvalid) /* so far, so good */ + { int s; +- if(!*chp) /* no service */ ++ if(!chad||!*chp) /* no service */ + chp=BIFF_serviceport; /* new balls please! */ + s=strtol(chp,&chad,10); + if(chp!=chad) /* the service is not numeric */ +@@ -120,7 +120,7 @@ + { int s;const char*p; + if(!csvalid||!buf) /* is comat on and set to a valid address? */ + return; +- if(!*cslgname||strlen(cslgname)+2>linebuf) /* is $LOGNAME bogus? */ ++ if(!cslgname||!*cslgname||strlen(cslgname)+2>linebuf)/* is $LOGNAME bogus? */ + return; + if(!(p=folder?folder:cslastf)) /* do we have a folder? */ + return; +--- procmail-3.22.orig/src/formail.c ++++ procmail-3.22/src/formail.c +@@ -758,9 +758,9 @@ + lputssn(buf,buffilled),ctlength-=buffilled,buffilled=lnl=0; + ;{ int tbl=buflast,lwr='\n'; + while(--ctlength>=0&&tbl!=EOF) /* skip Content-Length: bytes */ +- lnl=lwr==tbl&&lwr=='\n',putcs(lwr=tbl),tbl=getchar(); ++ lnl=lwr==tbl&&lwr=='\n',lputcs(lwr=tbl),tbl=getchar(); + if((buflast=tbl)=='\n'&&lwr!=tbl) /* just before a line break? */ +- putcs('\n'),buflast=getchar(); /* wrap up loose end */ ++ lputcs('\n'),buflast=getchar(); /* wrap up loose end */ + } + if(!quiet&&ctlength>0) + { charNUM(num,ctlength); +--- procmail-3.22.orig/src/memblk.c ++++ procmail-3.22/src/memblk.c +@@ -51,11 +51,11 @@ + { + #ifdef USE_MMAP + if(mb->fd>=0) +- { long len=mb->len+1; +- if(munmap(mb->p,len)) +- mmapfailed(len); /* don't want to continue here */ +- if((mb->p=mmap(0,len,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) +- mmapfailed(len); ++ { long mlen=mb->len+1; ++ if(munmap(mb->p,mlen)) ++ mmapfailed(mlen); /* don't want to continue here */ ++ if((mb->p=mmap(0,mlen,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) ++ mmapfailed(mlen); + close(mb->fd); + mb->fd=ropen(devnull,O_RDWR,0); /* XXX Perhaps -1 is better? */ + } +@@ -77,8 +77,8 @@ + strcpy(filename,MMAP_DIR); + if(unique(filename,strchr(filename,'\0'),MMAP_FILE_LEN,MMAP_PERM,0,0)&& + (mb->fd=ropen(filename,O_RDWR,MMAP_PERM),unlink(filename),mb->fd>=0)) +- { mb->filelen=len; +- if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) ++ { mb->filelen=len+1; ++ if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) + dropf: { close(mb->fd);mb->fd= -1; + if(verbose)nlog("Unable to extend or use tempfile"); + } +@@ -98,9 +98,9 @@ + } + } + if(mb->fd>=0) +- { if(len>mb->filelen) /* need to extend? */ +- { mb->filelen=len; +- if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) ++ { if(len>=mb->filelen) /* need to extend? */ ++ { mb->filelen=len+1; ++ if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) + { char*p=malloc(len+1); /* can't extend, switch to malloc */ + tmemmove(p,mb->p,mb->len); + munmap(mb->p,mb->len+1); +@@ -124,9 +124,9 @@ + } + else + mb->p=realloc(mb->p,len+1); +- mb->len=len+1; +- mb->p[len]='\0'; ++ mb->len=len; + ret1: ++ mb->p[len]='\0'; + return 1; + } + +--- procmail-3.22.orig/src/autoconf ++++ procmail-3.22/src/autoconf +@@ -1470,15 +1470,14 @@ + grep 'Mlocal.*procmail' >$DEVNULL || + echo '#define CF_no_procmail_yet' >>$ACONF + +-cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | +- grep '^V' >$DEVNULL || +- echo '#define buggy_SENDMAIL' >>$ACONF ++# cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | ++# grep '^V' >$DEVNULL || ++# echo '#define buggy_SENDMAIL' >>$ACONF + + lpath='/bin' + bins="/bin" + +-for newd in /usr/bin /usr/ucb /usr/5bin $BINDIR /local/bin /usr/local/bin \ +- /global/bin /usr/bin/X11 /usr/X*/bin ++for newd in /usr/bin $BINDIR /usr/bin/X11 /usr/X*/bin + do + if test -d $newd + then +--- procmail-3.22.orig/src/procmail.c ++++ procmail-3.22/src/procmail.c +@@ -652,8 +652,7 @@ + nrcond= -1; + if(tolock) /* clear temporary buffer for lockfile name */ + free(tolock); +- for(i=maxindex(flags);i;i--) /* clear the flags */ +- flags[i]=0; ++ bbzero(flags,sizeof(flags)); /* clear the flags */ + for(tolock=0,locknext=0;;) + { chp=skpspace(chp); + switch(i= *chp++) +--- procmail-3.22.orig/src/pipes.c ++++ procmail-3.22/src/pipes.c +@@ -145,7 +145,9 @@ + if(Stdout) + { *(eq=strchr(Stdout,'\0')-1)='\0'; /* chop the '=' */ + if(!(backblock=getenv(Stdout))) /* no current value? */ +- PRDB=PWRB= -1; ++ { PRDB=PWRB= -1; ++ backlen=0; ++ } + else + { backlen=strlen(backblock); + goto pip; +@@ -155,9 +157,7 @@ + pip: rpipe(pbackfd); + rpipe(pinfd); /* main pipes setup */ + if(!(pidchild=sfork())) /* create a sending procmail */ +- { if(Stdout&&backblock) +- backlen=strlen(backblock); +- else ++ { if(!Stdout) + backblock=source,backlen=len; + childsetup();rclose(PRDI);rclose(PRDB); + rpipe(poutfd);rclose(STDOUT); +@@ -194,7 +194,7 @@ + makeblock(&temp,Stdfilled); + tmemmove(temp.p,Stdout,Stdfilled); + readdyn(&temp,&Stdfilled,Stdfilled+backlen+1); +- Stdout=realloc(Stdout,&Stdfilled+1); ++ Stdout=realloc(Stdout,Stdfilled+1); + tmemmove(Stdout,temp.p,Stdfilled+1); + freeblock(&temp); + retStdout(Stdout,pwait&&pipw,!backblock); +--- procmail-3.22.orig/src/memblk.h ++++ procmail-3.22/src/memblk.h +@@ -1,6 +1,6 @@ + typedef struct memblk { + char*p; /* where it starts */ +- long len; /* currently allocated size */ ++ long len; /* current size, not including trailing NUL */ + #ifdef USE_MMAP + off_t filelen; /* how long is the file */ + int fd; /* file which is mmap()ed */ +--- procmail-3.22.orig/src/manconf.c ++++ procmail-3.22/src/manconf.c +@@ -233,7 +233,7 @@ + \2-@PRESERVOPT@\1and\1.BR \2-@FROMWHOPT@ .\1"); + pc("LMTPOPT",LMTPOPT); + #else +- ps("LMTPOPTdesc","");ps("LMTPusage",""); ++ ps("LMTPOPTdesc","");ps("LMTPusage","\1"); + #endif + pname("INIT_UMASK",0);printf("0%lo/g\n",(unsigned long)INIT_UMASK);lines--; + pn("DEFlinebuf",DEFlinebuf); +--- procmail-3.22.orig/src/recommend.c ++++ procmail-3.22/src/recommend.c +@@ -47,7 +47,7 @@ + printf("chmod %lo %s\n",(unsigned long)(sgid|PERMIS),argv[2]); + else if(chmdir==1) + goto nogchmod; +- if(chmdir) ++ if(0) + printf("chmod %c+w %s/.\n",chmdir==1?'g':'a',mailspooldir); + nogchmod: + return EXIT_SUCCESS; +--- procmail-3.22.orig/src/foldinfo.h ++++ procmail-3.22/src/foldinfo.h +@@ -10,7 +10,7 @@ + + #define ft_lock(type) ((type)>ft_MAILDIR) /* kernel lock fd */ + #define ft_atime(type) ((type)==ft_FILE) /* force atime < mtime */ +-#define ft_dotlock(type) ((type)==ft_FILE) /* dotlock $DEFAULT */ ++#define ft_dotlock(type) ((type)>ft_MAILDIR) /* dotlock $DEFAULT */ + #define ft_delim(type) ((type)==ft_FILE) /* add MMDF delim */ + #define ft_checkcloser(type) ((type)>ft_MH) + #define ft_forceblank(type) ((type)!=ft_MAILDIR) /* force blank line at end */ +--- procmail-3.22.orig/src/mailfold.c ++++ procmail-3.22/src/mailfold.c +@@ -378,7 +378,8 @@ + dfilled=mailread=0; + else if(rhead) /* only read in a new header */ + { memblk new; +- dfilled=mailread=0;makeblock(&new,0);readdyn(&new,&dfilled,0); ++ dfilled=mailread=0;makeblock(&new,0); ++ readdyn(&new,&dfilled,thebody-themail.p); + if(tobesent>dfilled&&isprivate) /* put it in place here */ + { tmemmove(themail.p+dfilled,thebody,filled-=tobesent); + tmemmove(themail.p,new.p,dfilled); +--- procmail-3.22.orig/FAQ ++++ procmail-3.22/FAQ +@@ -57,8 +57,8 @@ + Forward to |/usr/bin/procmail + or if that doesn't work, try: + Pipe to /usr/bin/procmail +- as the only line in your mail spool file (e.g. /usr/mail/$LOGNAME), as +- well as doing a "chmod 06660 /usr/mail/$LOGNAME". For more information ++ as the only line in your mail spool file (e.g. /var/mail/$LOGNAME), as ++ well as doing a "chmod 06660 /var/mail/$LOGNAME". For more information + on such systems, do a "man mail". + + If all of this doesn't work, procmail can be called on a periodical +@@ -210,14 +210,14 @@ + procmail with both the fcntl() and lockf() locking method + disabled (see config.h). + +-17. I sometimes get these `Lock failure on "/usr/mail/$LOGNAME.lock"' errors ++17. I sometimes get these `Lock failure on "/var/mail/$LOGNAME.lock"' errors + from procmail. What do I do about it? + + The problem here is that as long as procmail has not read a + $HOME/.procmailrc file, it can hang on to the sgid mail permission +- (which it needs in order to create a lockfile in /usr/mail). ++ (which it needs in order to create a lockfile in /var/mail). + I.e. if procmail delivers mail to a user without a $HOME/.procmailrc +- file, procmail *can* (and does) use the /usr/mail/$LOGNAME.lock file. ++ file, procmail *can* (and does) use the /var/mail/$LOGNAME.lock file. + + If, however, it finds a $HOME/.procmailrc file, procmail has to let go + of the sgid mail permission because otherwise any ordinary user could +@@ -226,7 +226,7 @@ + There are several solutions to this problem: + - Some systems support the sticky bit on directories (when set only + allows the owner of a file in that directory to rename or remove +- it). This enables you to make /usr/spool/mail drwxrwxrwt. It is ++ it). This enables you to make /var/mail drwxrwxrwt. It is + thus effectively world writable, but all the mailboxes in it are + protected because only the mailbox owner can remove or rename it. + - If your system did not exhibit the !@#$%^&* POSIX semantics for +@@ -245,9 +245,9 @@ + :0 + $DEFAULT + +- - You could, instead of using /usr/mail/$LOGNAME, use a file below ++ - You could, instead of using /var/mail/$LOGNAME, use a file below + your home directory as your default mailbox. +- - Or, you could still use /usr/mail/$LOGNAME as the mailbox, but ++ - Or, you could still use /var/mail/$LOGNAME as the mailbox, but + simply instruct procmail to use a different lockfile. This can + be achieved by putting following recipe at the bottom of + your .procmailrc file: +--- procmail-3.22.orig/Makefile ++++ procmail-3.22/Makefile +@@ -79,7 +79,7 @@ + # -lresolv # not really needed, is it? + + # Informal list of directories where we look for the libraries in SEARCHLIBS +-LIBPATHS=/lib /usr/lib /usr/local/lib ++LIBPATHS=/lib /usr/lib + + GCC_WARNINGS = -O2 -pedantic -Wreturn-type -Wunused -Wformat -Wtraditional \ + -Wpointer-arith -Wconversion -Waggregate-return \ +--- procmail-3.22.orig/debian/changelog ++++ procmail-3.22/debian/changelog +@@ -0,0 +1,294 @@ ++procmail (3.22-8) unstable; urgency=low ++ ++ * Fixed strange formail -l behaviour when there is a Content-Length: header. ++ Thanks a lot to Henning Makholm for the patch (Closes: #217853). ++ ++ -- Santiago Vila Mon, 3 Nov 2003 20:01:24 +0100 ++ ++procmail (3.22-7) unstable; urgency=low ++ ++ * Fixed bad nroff syntax in procmailrc(5), closes: #147173. ++ * Added missing newline in procmail(1), closes: #180477. ++ ++ -- Santiago Vila Mon, 10 Mar 2003 00:09:20 +0100 ++ ++procmail (3.22-6) unstable; urgency=low ++ ++ * Standards-Version: 3.5.8. ++ ++ -- Santiago Vila Thu, 26 Dec 2002 18:27:08 +0100 ++ ++procmail (3.22-5) stable; urgency=medium ++ ++ * Patched pipes.c to fix a memory allocation bug (Closes: #171514). ++ ++ -- Santiago Vila Thu, 26 Dec 2002 18:09:38 +0100 ++ ++procmail (3.22-4) unstable; urgency=low ++ ++ * Fixed a typo in procmail(1). Patch by the author (Closes: #142983). ++ ++ -- Santiago Vila Tue, 16 Apr 2002 19:16:20 +0200 ++ ++procmail (3.22-3) unstable; urgency=medium ++ ++ * Fixed off-by-one bug in procmail.c which made the raw flag not to be ++ cleared properly. Thanks to Gregory Stark (Closes: #134341). ++ ++ -- Santiago Vila Sun, 17 Feb 2002 16:43:02 +0100 ++ ++procmail (3.22-2) unstable; urgency=medium ++ ++ * Modified mailfold.c to fix a segfault problem. Patch by the author. ++ * The system-wide mail directory is /var/mail as per policy. ++ ++ -- Santiago Vila Thu, 29 Nov 2001 09:39:04 +0100 ++ ++procmail (3.22-1) unstable; urgency=low ++ ++ * New upstream release, which uses the `standard' format for Maildir ++ filenames and retries on name collision. It also contains some ++ bug fixes from the 3.23pre snapshot dated 2001-09-13. ++ * Removed `sendmail' from the Recommends field, since we already ++ have `exim' (the default Debian MTA) and `mail-transport-agent'. ++ * Removed suidmanager support. Conflicts: suidmanager (<< 0.50). ++ * Added support for DEB_BUILD_OPTIONS in the source package. ++ * README.Maildir: Do not use locking on the example recipe, ++ since it's wrong to do so in this case. ++ ++ -- Santiago Vila Wed, 21 Nov 2001 09:40:20 +0100 ++ ++procmail (3.15.2-1) stable; urgency=high ++ ++ * New upstream release, with improved security and robustness involving ++ signal handlers. Author recommends upgrading to this version on ++ any system where it is installed setuid or setgid. ++ * This release fixes also Bug #108417: procmail -p -m resets PATH. ++ ++ -- Santiago Vila Thu, 30 Aug 2001 20:05:06 +0200 ++ ++procmail (3.15.1-4) unstable; urgency=low ++ ++ * Don't add an extra newline when delivering to a Maildir folder. ++ Please note that the MTA may still add a newline on their own. ++ Exim users should check the `suffix' variable, for example. ++ Patch by the author. Closes: #78623. ++ ++ -- Santiago Vila Sat, 14 Apr 2001 17:18:29 +0200 ++ ++procmail (3.15.1-3) unstable; urgency=low ++ ++ * Clarified formail -X behaviour, patch by the author (Closes: #77388). ++ * Updated QuickStart. ++ ++ -- Santiago Vila Sun, 25 Mar 2001 10:45:56 +0200 ++ ++procmail (3.15.1-2) unstable; urgency=low ++ ++ * Fixed lockfile -l endless loop (Closes: #82006). Patch by the author. ++ ++ -- Santiago Vila Sun, 28 Jan 2001 19:44:49 +0100 ++ ++procmail (3.15.1-1) unstable; urgency=low ++ ++ * New upstream release. A race to create the mailspool would bounce one of ++ the messages due to an internal error. ++ ++ -- Santiago Vila Mon, 8 Jan 2001 20:09:34 +0100 ++ ++procmail (3.15-3) unstable; urgency=low ++ ++ * Fixed formatting error in procmailrc(5). Patch by the author. ++ (Closes: #80437). ++ ++ -- Santiago Vila Sun, 31 Dec 2000 17:20:47 +0100 ++ ++procmail (3.15-2) unstable; urgency=low ++ ++ * formail -l is now documented. Patch by the author (Closes: #72275). ++ ++ -- Santiago Vila Fri, 1 Dec 2000 19:54:22 +0100 ++ ++procmail (3.15-1) unstable; urgency=low ++ ++ * New upstream release. Maildir support is now built-in. ++ * Really change default PATH to "$HOME/bin:/usr/local/bin:/usr/bin:/bin". ++ * Modified the note in QuickStart about refiltering an old mail folder. ++ * Use SEARCHLIBS="" in debian/rules clean target to speed it up. ++ * Modified ft_dotlock in src/foldinfo.h to be in compliance with ++ locking policy, following a hint by the author. ++ * Removed (versioned) dependency on debianutils, since mailstat ++ does not use temporary files anymore. ++ * Made the .forward example in procmail(1) not to depend on the build ++ environment by modifying src/autoconf so that buggy_SENDMAIL is ++ never defined. ++ ++ -- Santiago Vila Mon, 28 Aug 2000 12:51:05 +0200 ++ ++procmail (3.13.1-4) stable; urgency=high ++ ++ * Fixed weird formail -rk behavior (patch from the author, backported ++ from procmail-3.15). Thanks to Ben Collins for the report. ++ * s/smail/exim/ in `Recommends:' field. ++ ++ -- Santiago Vila Tue, 22 Aug 2000 13:04:50 +0200 ++ ++procmail (3.13.1-3) unstable; urgency=medium ++ ++ * Standards-Version: 3.1.1 ++ * Updated location of licenses in copyright file. ++ * LOCKINGTEST=100 again, to use fcntl() and dot-locking, as required by ++ latest policy. ++ ++ -- Santiago Vila Wed, 1 Dec 1999 12:37:35 +0100 ++ ++procmail (3.13.1-2) unstable; urgency=low ++ ++ * Modified procmail(1) and QuickStart to reflect the fact that exim does ++ not accept the exec keyword in .forward files (Bugs #33460 and #37771). ++ * Modified formail to recognize exim's Envelope-To: header (Bug#40718). ++ Patch by Philip Guenther. ++ * Standards-Version: 3.0.0. ++ ++ -- Santiago Vila Mon, 19 Jul 1999 20:09:25 +0200 ++ ++procmail (3.13.1-1) stable unstable; urgency=high ++ ++ * New upstream release, 3.13 missed a couple possible overflows. ++ * Applied `procmail-locking.patch' from Bruce Guenter, since ++ no directory delivery mechanism requires locking (Bug #35210). ++ ++ -- Santiago Vila Thu, 8 Apr 1999 13:56:33 +0200 ++ ++procmail (3.13-1) stable unstable; urgency=high ++ ++ * New upstream release. procmail 3.12 breaks smartlist (Bug #35115). ++ ++ -- Santiago Vila Fri, 2 Apr 1999 14:24:24 +0200 ++ ++procmail (3.12-1) frozen unstable; urgency=high ++ ++ * New upstream release. Fixes some security bugs. ++ * #define GROUP_PER_USER in config.h to allow writeable rcfiles when ++ the group is the user's default group. ++ * Added KNOWN_BUGS to the doc directory. ++ * suid procmail to avoid non-suidness window when upgrading. ++ ++ -- Santiago Vila Thu, 4 Mar 1999 10:28:28 +0100 ++ ++procmail (3.10.7-7) frozen unstable; urgency=medium ++ ++ * New Maildir patches from Bruce Guenter. ++ Should fix Bug #30320: procmail: maildir does not use From_ lines. ++ ++ -- Santiago Vila Thu, 31 Dec 1998 13:27:20 +0100 ++ ++procmail (3.10.7-6) frozen unstable; urgency=medium ++ ++ * Patched mailfold.c to avoid the unnecessary one second wait when ++ delivering to MH folders (patch by the author). ++ * src/locking.c: Applied a bugfix patch from the author. ++ ++ -- Santiago Vila Wed, 13 May 1998 21:50:19 +0200 ++ ++procmail (3.10.7-5) frozen unstable; urgency=medium ++ ++ * Added a patch for Maildir support. The "new" procmail should be ++ completely backwards compatible with the "previous" one, in the ++ sense that its behaviour should be just the same for already ++ existing .procmailrc files which do not use the new syntax for ++ Maildir folders. ++ * Added a small README.Maildir explaining how to use this feature. ++ ++ -- Santiago Vila Mon, 4 May 1998 19:39:55 +0200 ++ ++procmail (3.10.7-4) frozen unstable; urgency=low ++ ++ * Added a small note in QuickStart about refiltering an old mail folder. ++ * mailstat(1): The log file is truncated to zero length (Bug #21022). ++ * PATH=/usr/local/bin:/usr/bin:/bin for the example in procmail(1). ++ * Standards-Version: 2.4.1. ++ ++ -- Santiago Vila Fri, 17 Apr 1998 18:00:14 +0200 ++ ++procmail (3.10.7-3) frozen unstable; urgency=medium ++ ++ * Patched src/recommend.c so that the mail spool directory is not ++ touched. This will allow the package to be built using fakeroot. ++ * Patched mailstat so that it uses tempfile. ++ ++ -- Santiago Vila Tue, 24 Mar 1998 21:43:08 +0100 ++ ++procmail (3.10.7-2) unstable; urgency=low ++ ++ * Default PATH is now "$HOME/bin:/usr/local/bin:/usr/bin:/bin". ++ * Added "fetchmail" to the Recommends: line as one more option. ++ * Added /usr/doc/procmail/QuickStart (experimental). ++ * Compressed changelog.Debian. ++ * Removed debstd dependency. ++ * Pristine source. ++ ++ -- Santiago Vila Sat, 31 Jan 1998 20:30:06 +0100 ++ ++procmail (3.10.7-1) unstable; urgency=low ++ ++ * Upgraded to 3.11pre7. Sources are now GPLed, hurrah! ++ * Added explicit SEARCHLIBS, to avoid unneeded dependency on libdl. ++ * First libc6 release. ++ ++ -- Santiago Vila Wed, 18 Jun 1997 20:43:28 +0200 ++ ++procmail (3.10.4-2) frozen unstable; urgency=low ++ ++ * Rebuilt using latest debmake to avoid a problem with suidmanager. ++ ++ -- Santiago Vila Sat, 17 May 1997 20:52:59 +0200 ++ ++procmail (3.10.4-1) frozen unstable; urgency=low ++ ++ * Upgraded to 3.11pre4. Side effect: It can be built using libc6. ++ * Removed NFS_ATIME_HACK patch, since it is no longer needed. ++ ++ -- Santiago Vila Sat, 12 Apr 1997 19:06:46 +0200 ++ ++procmail (3.10-8) unstable; urgency=low ++ ++ * Rewritten copyright file. ++ * initmake unmodified (source). ++ * Patched to recognize NFS_ATIME_HACK variable in .procmailrc or ++ /etc/procmailrc. Default value is "yes" (i.e. wait a second). ++ * Added a small note about this in /usr/doc/procmail/README.Debian. ++ ++ -- Santiago Vila Sun, 23 Mar 1997 12:04:34 +0100 ++ ++procmail (3.10-7) unstable; urgency=low ++ ++ * Put CFLAGS settings &c in ./Makefile, not in debian/rules. ++ * Removed fix-substvars script, since it's no longer needed with ++ new libc5-5.4.20. ++ * Man page for mailstat changed slightly. ++ * Some minor debian/rules changes. ++ * Added MD5 sums. ++ ++ -- Santiago Vila Fri, 21 Feb 1997 20:53:30 +0100 ++ ++procmail (3.10-6) unstable; urgency=low ++ ++ * Use debmake. ++ * suidmanager support. ++ * Removed `mailstat' from examples, it's already in /usr/bin. ++ * Removed also `dirname' (which was "for the deprived"). ++ * Added `fix-substvars' script to depend on libc5 >= 5.4.0. ++ ++ -- Santiago Vila Mon, 23 Dec 1996 16:34:02 +0100 ++ ++procmail (3.10-5) unstable; urgency=low ++ ++ * Updated to Standards-Version 2.1.2.2. ++ * Changed "Depends: MTA" to "Recommends: MTA". ++ * Added extended package description in control file. ++ * Added the symlink changelog.gz -> HISTORY.gz. ++ * Added an "experimental" man page for mailstat. ++ * New maintainer. ++ ++ -- Santiago Vila Sat, 21 Dec 1996 23:32:11 +0100 +--- procmail-3.22.orig/debian/control ++++ procmail-3.22/debian/control +@@ -0,0 +1,18 @@ ++Source: procmail ++Section: mail ++Priority: standard ++Maintainer: Santiago Vila ++Standards-Version: 3.6.1 ++ ++Package: procmail ++Architecture: any ++Depends: ${shlibs:Depends} ++Conflicts: suidmanager (<< 0.50) ++Recommends: exim | mail-transport-agent | fetchmail ++Description: Versatile e-mail processor ++ Can be used to create mail-servers, mailing lists, sort your incoming ++ mail into separate folders/files (real convenient when subscribing to one ++ or more mailing lists or for prioritising your mail), preprocess your ++ mail, start any programs upon mail arrival (e.g. to generate different ++ chimes on your workstation for different types of mail) or selectively ++ forward certain incoming mail automatically to someone. +--- procmail-3.22.orig/debian/copyright ++++ procmail-3.22/debian/copyright +@@ -0,0 +1,41 @@ ++This is the Debian prepackaged version of the "procmail" mail-processing ++program written by Stephen van den Berg. ++ ++This package is currently maintained by Santiago Vila . ++The source for this release was downloaded from: ++ ++ftp://ftp.procmail.org/pub/procmail/procmail-3.22.tar.gz ++ ++This package was first put together by Bruce Perens , ++who added Debian package maintenance system files, and edited config.h ++to configure for Debian. ++ ++Copyright: ++ ++Procmail & formail mail processing package. ++Copyright (c) 1990-1999, S.R. van den Berg, The Netherlands. ++Copyright (c) 1999-2001, Philip Guenther, The United States of America ++ ++This package is open source software; you can redistribute it and/or ++modify it under the terms of either: ++- the GNU General Public License as published by the Free Software Foundation ++ and can be found in the included file called "COPYING"; either version 2, ++ or (at your option) any later version, or ++- the "Artistic License" which can be found in the included file called ++ "Artistic". ++ ++This package is distributed in the hope that it will be useful, but without ++any warranty; without even the implied warranty of merchantability or fitness ++for a particular purpose. See either the GNU General Public License or the ++Artistic License for more details. ++ ++For those of you that choose to use the GNU General Public License, ++my interpretation of the GNU General Public License is that no procmailrc ++script falls under the terms of the GPL unless you explicitly put ++said script under the terms of the GPL yourself. ++ ++ ++On Debian systems, the complete text of the GNU General Public License ++can be found in `/usr/share/common-licenses/GPL', and the complete ++text of the "Artistic License" can be found in ++`/usr/share/common-licenses/Artistic'. +--- procmail-3.22.orig/debian/mailstat.1 ++++ procmail-3.22/debian/mailstat.1 +@@ -0,0 +1,40 @@ ++.TH MAILSTAT 1 ++.SH NAME ++mailstat \- shows mail-arrival statistics ++.SH SYNOPSIS ++.B mailstat ++[\-klmots] [logfile] ++.SH DESCRIPTION ++.B mailstat ++parses a procmail-generated $LOGFILE and displays ++a summary about the messages delivered to all folders ++(total size, average size, nr of messages). ++The $LOGFILE is truncated to zero length, unless the ++.B -k ++option is used. ++Exit code 0 if mail arrived, 1 if no mail arrived. ++.SH OPTIONS ++.TP ++.I \-k ++keep logfile intact ++.TP ++.I \-l ++long display format ++.TP ++.I \-m ++merge any errors into one line ++.TP ++.I \-o ++use the old logfile ++.TP ++.I \-t ++terse display format ++.TP ++.I \-s ++silent in case of no mail ++.SH NOTES ++Customise to your heart's content, this program is only provided as a ++guideline. ++.SH AUTHOR ++This manual page was written by Santiago Vila ++for the Debian GNU/Linux distribution (but may be used by others). +--- procmail-3.22.orig/debian/QuickStart ++++ procmail-3.22/debian/QuickStart +@@ -0,0 +1,97 @@ ++procmail QuickStart ++=================== ++ ++* procmail is not an `interactive' program. It has to run automatically ++when the mail arrives. Therefore the first thing to do is to tell our MTA ++that we want procmail to "eat" all our mail messages. The way of doing ++this depends on the MTA we are using. For example, if we are using ++sendmail, it will suffice to have a .forward file like this in our home ++directory: ++ ++"|exec /usr/bin/procmail" ++ ++(don't forget the quotes, they are needed in this case). ++ ++If you are using exim, use this instead as your .forward file: ++ ++|/usr/bin/procmail ++ ++The step of creating a .forward file is not needed if the MTA already ++performs the delivery using procmail. For example, Debian sendmail will ++automatically use procmail for mail delivering if the sendmail.cf is ++generated from a sendmail.mc file containing this line: ++ ++FEATURE(local_procmail)dnl ++ ++ ++* If we have a stand-alone system with no permanent net connection (like ++PPP), and we are using fetchmail to get mail from a server, we don't ++really need a MTA. Just adding --mda "formail -s procmail" to the ++fetchmail command line (or using the `mda' keyword) will tell it to ++deliver through procmail. ++ ++ ++* Next, we have to write a ~/.procmailrc file in our home directory. This ++file is a set of filtering rules, based on regular expressions. The ++complete syntax is explained in procmailrc(5). Let's see a real example ++just to get started. Let's suppose you are subscribed to the following two ++mailing lists: ++ ++linux-kernel@vger.kernel.org ++debian-user@lists.debian.org ++ ++The first list is managed by Majordomo. Messages coming from a Majordomo ++list often include a header field "Sender: " which allow easy filtering. ++ ++The second list is managed my SmartList. Messages coming from a SmartList ++list may include several headers that can be used to filter it. One of ++them (in fact, the only that it is not X-whatever) is "Resent-Sender: ". ++ ++So the following .procmailrc will first filter the mailing lists, and ++any remaining message will go to the default folder: ++ ++*--------------------------------->8------------------------------------ ++PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin ++MAILDIR=$HOME/mail # you'd better make sure it exists ++DEFAULT=$MAILDIR/mbox # completely optional ++LOGFILE=$MAILDIR/procmail.log # recommended ++ ++:0: ++* ^Sender:.*linux-kernel-owner@vger.kernel.org ++linux-kernel ++ ++:0: ++* ^Resent-Sender:.*debian-user-request@lists.debian.org ++debian-user ++*--------------------------------->8------------------------------------ ++ ++From this example additional rules for mailing lists may be created ++easily. ++ ++ ++* Once you have received lots of messages you will want to know where ++did they go. That's what the LOGFILE is for. There is a tool named ++mailstat which parses this file and shows a summary: ++ ++mailstat procmail.log ++ ++The mailstat command that this package provides does really come from the ++examples directory and it is installed by default. You may have your own ++modified copy in $HOME/bin, if you like. ++ ++ ++If you have to refilter an old mail folder according to your current ++~/.procmailrc file, you may do the following: ++ ++cat mbox | formail -s procmail ++ ++But of course if your mbox file is the target of a procmail recipe you should ++do this instead: ++ ++mv mbox whatever ++cat whatever | formail -s procmail ++ ++See formail(1) for details. ++ ++ ++Santiago Vila +--- procmail-3.22.orig/debian/README.Maildir ++++ procmail-3.22/debian/README.Maildir +@@ -0,0 +1,12 @@ ++This version of procmail supports Maildir folders. ++ ++To make procmail to deliver into a Maildir folder, just append ++a slash (/) to the name of the maildir folder in your ~/.procmailrc file. ++For example, the following rule: ++ ++:0 ++* ^Resent-Sender.*debian-user-request@lists.debian.org ++debian-user/ ++ ++will deliver all mail from the debian-user mailing list to the Maildir ++folder "debian-user". +--- procmail-3.22.orig/debian/rules ++++ procmail-3.22/debian/rules +@@ -0,0 +1,76 @@ ++#!/usr/bin/make -f ++ ++package = procmail ++docdir = debian/tmp/usr/share/doc/$(package) ++ ++CC = gcc ++CFLAGS0 = -g ++LDFLAGS0 = ++SEARCHLIBS = -lm ++STRIP = true ++ ++ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) ++ CFLAGS0 += -O2 ++endif ++ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) ++ STRIP = strip --remove-section=.comment --remove-section=.note ++endif ++ ++build: ++ $(checkdir) ++ $(MAKE) CC="$(CC)" CFLAGS0="$(CFLAGS0)" LDFLAGS0="$(LDFLAGS0)" \ ++ SEARCHLIBS="$(SEARCHLIBS)" ++ touch build ++ ++clean: ++ $(checkdir) ++ rm -f build ++ -$(MAKE) realclean SEARCHLIBS="" ++ rm -f `find . -name "*~"` ++ rm -rf debian/tmp debian/files* core debian/substvars ++ ++binary-indep: checkroot build ++ $(checkdir) ++ ++binary-arch: checkroot build ++ $(checkdir) ++ rm -rf debian/tmp ++ install -d debian/tmp/DEBIAN $(docdir)/examples ++ cd debian/tmp && install -d usr/bin ++ $(MAKE) BASENAME=`pwd`/debian/tmp/usr install.man install-suid ++ $(STRIP) debian/tmp/usr/bin/procmail ++ $(STRIP) debian/tmp/usr/bin/lockfile ++ $(STRIP) debian/tmp/usr/bin/formail ++ cp -p debian/copyright $(docdir) ++ cp -p debian/changelog $(docdir)/changelog.Debian ++ install -m 644 debian/mailstat.1 debian/tmp/usr/man/man1 ++ cp -p FEATURES HISTORY README FAQ KNOWN_BUGS \ ++ debian/QuickStart debian/README.Maildir $(docdir) ++ cp -p examples/* $(docdir)/examples ++ cd $(docdir)/examples && rm -f dirname mailstat procmail-rpm.spec ++ cd $(docdir) && gzip -9 HISTORY changelog.Debian ++ ln -s HISTORY.gz $(docdir)/changelog.gz ++ mv debian/tmp/usr/man debian/tmp/usr/share ++ gzip -r9 debian/tmp/usr/share/man ++ dpkg-shlibdeps debian/tmp/usr/bin/* ++ dpkg-gencontrol -isp ++ cd debian/tmp && \ ++ md5sum `find * -type f ! -regex "DEBIAN/.*"` > DEBIAN/md5sums ++ chown -R root:root debian/tmp ++ chmod -R go=rX debian/tmp ++ chgrp mail debian/tmp/usr/bin/procmail debian/tmp/usr/bin/lockfile ++ chmod 6755 debian/tmp/usr/bin/procmail ++ chmod 2755 debian/tmp/usr/bin/lockfile ++ dpkg --build debian/tmp .. ++ ++define checkdir ++ test -f src/$(package).c -a -f debian/rules ++endef ++ ++binary: binary-indep binary-arch ++ ++checkroot: ++ $(checkdir) ++ test root = "`whoami`" ++ ++.PHONY: binary binary-arch binary-indep clean checkroot diff --git a/procmailrc b/procmailrc new file mode 100644 index 0000000..5830083 --- /dev/null +++ b/procmailrc @@ -0,0 +1,424 @@ +################################################################ +# Here we go.... # +# my very own mail-mangler # +################################################################ + +################################################################ +# Updated to have working URLs and arbitrarily version-bumped # +# to 1.2 on the grounds it matched the mutt version. Very # +# little beyond URLs and list addresses has changed. # +# 2002-03-21. # +################################################################ + + +################################################################ +# In the spirit of the net, 90% of this came from other people # +# and the remaining 10% might be from me. Most of the 90% # +# came from these sources: # +# # +# "Getting started with procmail" at # +# http://www.spambouncer.org/proctut.shtml # +# http://www.spambouncer.org/procmail.rc # +# ...by Catherine A. Hampton. # +# # +# man procmail (overview) # +# man procmailrc (writing the procmailrc) # +# man procmailex (example recipes) # +# man formail (especially for splitting digests) # +# # +# and .procmailrcs from several friends. Thanks, folks, # +# especially to the one who had more patterns which sent # +# things to /dev/null than to mailboxes, for showing me # +# what true impatience with email was like! # +################################################################ + +################################################################ +# Procmailrc files have two parts. First you tell it where # +# everything lives. Then you tell it the recipes. # +################################################################ + +########################################## +# Varibiggles and where everything lives # +########################################## + +################################################################ +# All of these will work quite happily without changing for # +# Red Hat Linux 6.0 through to 7.2.They won't necessarily work # +# for other flavours without changing paths. See the "Getting # +# started with procmail" doc I mentioned above for the likely # +# settings for them in other environments. It has a list :) # +################################################################ + +################################################################ +# Since I installed procmail, I have changed from using # +# sendmail to using exim. Because I can understand the config # +# file. If you use exim, you may need to tweak the config file # +# as I did. If you do, then check you are reading the docs for # +# the right version of exim! This worked for me: # +# # +# http://www.exim.org/exim-html-3.20/doc/html/spec_18.html # +# and look for procmail. It's in the example for the 'pipe # +# transport'. Just paste it into /etc/exim.conf. # +################################################################ + +SHELL=/bin/bash + # Have to have this one (or whatever your shell is) + # Best bet is bash or sh. + +LINEBUF=4096 + # Magic. Apparently it burps on long lines if you don't + # put this in. + +PATH=/bin:/usr/bin:/usr/local/bin + # Where procmail looks for stuff. Works for RH 6.0, 6.1 + # and most other Linux settings I've seen. + +VERBOSE=off + # Change to 'on' to get _long_ procmail log. + # NB: if this is short, I don't want to see long: I get + # a one-line summary for every email procmail looks at! + +MAILDIR=$HOME/Mail + # Not where your mail arrives on the machine. Where + # procmail will assume all the folders you mention in + # your recipes goes. Make sure your email-reading + # program also knows about it. (I understand $HOME/Mail + # is pretty standard, however.) + +LOGFILE=$HOME/Mail/procmaillog + # I don't think this needs to be in your Mail folder, + # but my mail-reader (mutt) is great at different + # sorting, so I put the log into the mail directory :) + # Note learned through experience: if you leave this file + # too long, it will end up with tens of thousands of + # messages. Mutt is not always -that- good at sorting + # that lot quickly :) + +FORMAIL=/usr/bin/formail + # 'formail'. Part of the procmail package. Correct + # the path if this isn't where it lives for you. + # ('which formail' may well tell you.) + +SENDMAIL=/usr/sbin/sendmail + # As with formail, tells procmail where to look for + # sendmail. If sendmail isn't there, mail transfer + # might be handled by a different program. Ask + # your sysadmin :) If you are your own sysadmin, + # then I hope you know. + # Subsequent to writing that, I have learned that this + # file is provided (with this name) by other MTAs too. + # I now use Exim (see note above) and this file is still + # there, courtesy of exim. + + +############################ +# The recipes - I hope... # +############################ + +################################################################ +# Gods know how this works. But it's very useful. If you get # +# email that is sent simultaneously to you and to two other # +# lists, this will nuke two of those so that you only see it # +# once. Came from 'man procmail'. # +################################################################ + +# Nuke duplicate messages +:0 Wh: msgid.lock +| $FORMAIL -D 8192 msgid.cache + +################################################################ +# Next two are from the 'Getting started with procmail' doc. # +# I'm not too sure about how they work, but they look handy... # +################################################################ + +# Create a backup cache of 200 most recent messages in case of +# mistakes (yes, you can change the 200 to 20 or 400 or whatever +# you want) +:0 c +backup + + :0 ic + | cd backup && rm -f dummy `ls -t msg.* | sed -e 1,200d` + +# Regenerate "From" lines to make sure they are valid +:0 fhw +| formail -I "From " -a "From " + + +################################################################ +# For testing shit - I picked a subject line that no-one would # +# send me and then tried different recipes on the results, and # +# then sent myself a whole pile of email about grobblefruit, # +# with different recipes here, to see what happened when I # +# tried different headers and so on. # +################################################################ + +:0: +* ^Subject: Test grobblefruit +IN.testing + + +################################################################ +# Mailing lists # +# # +# I think this is the thing that most people who finally get # +# procmail want to know about: how to get different messages # +# from different mailing lists into different folders. This is # +# where all that MAILDIR stuff comes from. All the folders I # +# name in here are all created off whatever directory I filled # +# in as the MAILDIR at the start. And no, they don't suddenly # +# appear the instant you edit this file. They only appear when # +# procmail finds mail that should go in them. # +# # +# You can have more than one recipe sending email into the # +# same folder, btw, yes. # +# # +# General useful (?) comments: # +# The "^Resent-From: " pattern works wonderfully on # +# lists which generate it. # +# Making the folder not -quite- the list name means you # +# can save mail from it to a folder named for the list. Can # +# be handy. # +# Some lists are indeed a pig to catch everything with. # +# "TO" is different from "To" and you mustn't put a # +# a space after "TO". It catches "To: " and "Cc: ", I # +# think. Very handy. But it doesn't catch everything. If # +# it's a mailman list, don't use it and see below. # +# Mailman-run lists all seem to have a Sender: header # +# which is very useful to sort with. Just add -admin onto # +# the name of the mailing list. # +# Even more useful for mailman-run lists turns out to be # +# "X-BeenThere: listname@site.com" # +################################################################ + +################################################################ +# I hardly use TO now, but here's an example in case. # +################################################################ + +:0: +* ^TOlynx-dev@sig.net +IN.lynx-dev + +########### +# bugtraq # +########### + +:0: +* ^Sender:.*Bugtraq List +IN.bugtraq + +######################### +# gnome CVS commit list # +######################### + +:0: +* X-BeenThere: cvs-commits-list@gnome.org +IN.cvs-commits + + +############## +# gnome-list # +############## + +:0: +* ^X-BeenThere: gnome-list@gnome.org +IN.gnome-list + + +################## +# gnome-doc-list # +################## + +:0: +* ^X-BeenThere: gnome-doc-list@gnome.org +IN.gnome-doc-list + + +############################################################### +# linuxchix lists: there are several mailing lists here: see # +# the end of this file for the different ways to deal with # +# heavy traffic lists with digest options. # +############################################################### + +:0: +* ^X-BeenThere: grrltalk@linuxchix.org +IN.linuxchix + +:0: +* ^X-BeenThere: issues@linuxchix.org +IN.linuxchix + +:0: +* ^X-BeenThere: techtalk@linuxchix.org +IN.linuxchix + + +################################################# +# This is what I consider advanced stuff: this # +# one doesn't put the digest straight into a # +# folder. Instead it runs 'formail +1 -ds', # +# which splits the digest into its original # +# messages, and then puts the results of that # +# into the folder. # +# # +# The address is way way out of date, but I am # +# not sure of the current digest address, so I # +# have left it. # +# # +# It is commented out because I actually read # +# the main list, not the digest, these days. # +################################################# + +# :0: +# * ^TOgrrltalk-digest@hub.org +# | formail +1 -ds >> IN.linuxchix + + +############## +# mutt-users # +############## +:0: +* ^TOmutt-users@mutt.org +IN.mutt-users + +:0: +* ^Sender: owner-mutt-users@mutt.org +IN.mutt-users + + +################################################# +# Procmail list # +# ...be aware that everyone on this list # +# seems to have monster spam filters and thus # +# to be completely unconcerned at the huge # +# amount of spam it gets: you will either need # +# spam filters or tolerance to find the good # +# stuff. (I am not subscribed now, but that was # +# the case when I was.) # +################################################# + +:0: +* ^TOprocmail@Informatik.RWTH-Aachen.DE +IN.procmaillist + + +####################################################### +# Red Hat announce -- very handy for security updates # +####################################################### + +:0: +* ^X-BeenThere: redhat-announce-list@redhat.com +IN.rh-announce + +:0: +* ^X-BeenThere: redhat-watch-list@redhat.com +IN.rh-announce + + +######################### +# windowmaker: wm-users # +######################### + +:0: +*^From wm-user-request@windowmaker.org +IN.wm-user + +################################################################ +# Splitting digests # +# # +# You don't need to do this, but this seems to be another very # +# popular thing to do with procmail. If you're on mailing # +# lists using the digest option, sometimes you may want to # +# split the digests back up into the original emails. There is # +# (of course) more than one way to do this: # +# # +# (1) don't bother: just read through all the digest in one # +# big lump. Simple, easy, and great until you find someone # +# sent a 500-line postscript file or a giant jpg which got # +# included into the digest :( # +# # +# (2) use a mail-reader such as mutt, and if you suddenly want # +# to split a digest up, then whilst reading the message, hit # +# | formail +1 -ds # +# which will put the results into your main inbox. If you want # +# it in a particular folder (like the one you're reading), do # +# | formail +1 -ds >> foldername # +# # +# (3) make procmail (or formail, actually), split it up ready # +# for you to read. # +# # +# So if you want to have each digest automatically split up # +# by procmail as it arrives, and to read each message # +# individually, then here's some examples of what you can put. # +# The first two lines are exactly the same. The third one has # +# a pipe (vertical line) symbol at the start, and then the # +# command you're piping it through. # +# # +# Yes, I picked a notoriously heavy-traffic one for the first # +# example... And it -should- work, but it's not a list I read, # +# sorry! # +# # +# Instead of this: # +# :0: # +# * ^Sender: owner-linux-kernel@vger.rutgers.edu # +# IN.linux-kernel # +# ...you want this: # +# :0: # +# * ^Sender: owner-linux-kernel@vger.rutgers.edu # +# | formail +1 -ds >> IN.linux-kernel # +# # +# Da-dah! That's all. # +# # +# And for those where the list name changes and that's what # +# you're matching patterns on, instead of this: # +# :0: # +# * ^TOgrrltalk@hub.org # +# IN.linuxchix # +# ...you want this: # +# :0: # +* ^TOgrrltalk-digest@hub.org # +# | formail +1 -ds >> IN.linuxchix # +# # +# Magic :) # +################################################################ + + + +################################################################ +# That's it. Any email that doesn't match any of the recipes # +# above goes into my usual place for email, which until I read # +# it is /var/spool/mail/hobbit. Procmail appears to know about # +# that without being told. # +# # +# Quick summary for adding your own or changing these: the # +# general format for putting an email into a folder and not # +# doing anything fancy to it first is: # +# # +# :0: # +# * # +# # +# # +# The ^ sign in my recipes is the sign procmail understands as # +# "start of the line", so "^From" matches the word "From" when # +# it's the start of a header. # +# # +# The "IN." at the start of folder names is not necessary: # +# that's just my naming system. Stolen, like everything else, # +# from a friend's example. It has the benefit that with my # +# mail-reader (mutt), which sorts alphabetically, all of them # +# show up first (capitals are earlier in the alphabet if # +# you're a computer...) and I can save them easily: from # +# IN.blah to blah. If you want to call the folders blah-spool, # +# or just blah, then cool. That'll work, too. # +# # +# It is possible that now you have everything in different # +# folders, you want to read with a cool program which does # +# cool things like display by thread or which understands you # +# when you tell it "These are mailing lists" and does handy # +# things as a result. If you do, and you discover Mutt, you # +# might want to look at my muttrc which is probably next to # +# this file. # +# # +# Have fun! # +# -- Telsa # +################################################################ diff --git a/sources b/sources new file mode 100644 index 0000000..775683c --- /dev/null +++ b/sources @@ -0,0 +1 @@ +1678ea99b973eb77eda4ecf6acae53f1 procmail-3.22.tar.gz