From: Santiago Vila Subject: diff from procmail-3.22 to procmail-3.23pre X-Debian-version: 3.22-1 --- a/HISTORY +++ b/HISTORY @@ -491,8 +491,8 @@ - Root owned lockfiles aren't bogus - A lone trailing '$' wasn't terminated properly when expanded Changes to formail: - - Replies without the -t flag go to the envelope sender - - Replies without "-a Resent-" and -t flag ignore the + - Replies without the -t option go to the envelope sender + - Replies without "-a Resent-" and -t option ignore the Resent-* headers - Prevent corrupt idcaches by suppressing the -n option when splitting with the -D option @@ -509,7 +509,7 @@ Changed the form of tempfile names to make them `more' unique and deal with filename length limits more gracefully Updated the FAQ and the list of mirrors in the README - Documented the exact behavior of lockfile's -! flag + Documented the exact behavior of lockfile's -! option Documented the suggested usage of -r vs -rt 2000/08/25: v3.15 Changes to procmail: @@ -588,7 +588,7 @@ Changes to lockfile: - Include the system mailbox lockfile path in the -v output - Resist attempts to use a setuid lockfile command - - Fix infinite loop on -l, -r, or -s flag with no value + - Fix infinite loop on -l, -r, or -s option with no value Documented formail's treatment of >From_ lines as continuations of the From_ line and warned of problems caused by non-RFC822 field names like 'Old-From ' @@ -623,3 +623,8 @@ More paranoia: start to use strlcpy() Generate safe temp and maildir filenames when the hostname contains / or : by mapping them to \ooo +2001/09/13: v3.23pre + Changes to procmail: + - Don't coredump in comsat code if interrupted early + - Correctly handle COMSAT=on + - Once used the 'H' flag would never be cleared --- a/patchlevel.h +++ b/patchlevel.h @@ -1,5 +1,5 @@ #define VERSION "\ - v3.22 2001/09/10\n\ + v3.23pre 2001/09/13\n\ Copyright (c) 1990-2001, Stephen R. van den Berg\t\n\ Copyright (c) 1997-2001, Philip A. Guenther\t\t\n\ \n\ --- a/src/comsat.c +++ b/src/comsat.c @@ -9,7 +9,7 @@ #ifdef RCS static /*const*/char rcsid[]= - "$Id: comsat.c,v 1.5 2001/07/03 15:05:47 guenther Exp $"; + "$Id: comsat.c,v 1.7 2001/09/13 19:08:49 guenther Exp $"; #endif #include "procmail.h" @@ -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; --- a/src/header.h +++ b/src/header.h @@ -4,12 +4,11 @@ * "-m nnn" fields encountered should be among them or one of * * the special From_, Article_ or X- fields). * * * - * If you need to add one (be sure to update "cdigest" below as * - * well!), drop me a mail, I might be interested in including * - * it in the next release. * + * If you need to add one, drop me an email at bug@procmail.org. * + * I might be interested in including it in the next release. * * * ************************************************************************/ -/*$Id: header.h,v 1.44 1999/07/06 06:12:22 guenther Exp $*/ +/*$Id: header.h,v 1.45 2001/09/24 03:38:08 guenther Exp $*/ X(returnpath, "Return-Path:") /* RFC 822 */ X(received, "Received:") /* ditto ... */ --- a/src/lmtp.c +++ b/src/lmtp.c @@ -7,7 +7,7 @@ ************************************************************************/ #ifdef RCS static /*const*/char rcsid[]= - "$Id: lmtp.c,v 1.13 2001/06/28 21:44:28 guenther Exp $" + "$Id: lmtp.c,v 1.14 2001/09/23 20:17:57 guenther Exp $" #endif #include "procmail.h" #ifdef LMTP @@ -708,7 +708,7 @@ got-=in-p; /* correct for what disappeared */ } while(left-=got); /* change listed buffer size */ - *(long*)statep=state; /* save state */ + *(int*)statep=state; /* save state */ return 0; } @@ -765,7 +765,7 @@ got-=in-p; /* correct for what disappeared */ } while(left-=got); /* change listed buffer size */ - *(long*)statep=state; /* save state */ + *(int*)statep=state; /* save state */ return 0; } --- a/src/memblk.c +++ b/src/memblk.c @@ -8,7 +8,7 @@ ************************************************************************/ #ifdef RCS static /*const*/char rcsid[]= - "$Id: memblk.c,v 1.6 2001/06/28 22:55:09 guenther Exp $" + "$Id: memblk.c,v 1.7 2001/09/18 21:59:08 guenther Exp $" #endif #include "procmail.h" #include "robust.h" @@ -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; } --- a/src/memblk.h +++ b/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 */ --- a/src/pipes.c +++ b/src/pipes.c @@ -8,7 +8,7 @@ ************************************************************************/ #ifdef RCS static /*const*/char rcsid[]= - "$Id: pipes.c,v 1.73 2001/08/27 08:43:59 guenther Exp $"; + "$Id: pipes.c,v 1.74 2001/09/18 22:01:27 guenther Exp $"; #endif #include "procmail.h" #include "robust.h" @@ -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); --- a/src/procmail.c +++ b/src/procmail.c @@ -14,7 +14,7 @@ ************************************************************************/ #ifdef RCS static /*const*/char rcsid[]= - "$Id: procmail.c,v 1.183 2001/08/31 04:57:36 guenther Exp $"; + "$Id: procmail.c,v 1.184 2001/09/14 05:54:19 guenther Exp $"; #endif #include "../patchlevel.h" #include "procmail.h" @@ -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,maxindex(flags)); /* clear the flags */ for(tolock=0,locknext=0;;) { chp=skpspace(chp); switch(i= *chp++)