head 1.1; access; symbols OPENPKG_E1_MP_HEAD:1.1 OPENPKG_E1_MP:1.1 OPENPKG_E1_MP_2_STABLE:1.1 OPENPKG_E1_FP:1.1 OPENPKG_2_STABLE_MP:1.1 OPENPKG_2_STABLE_20061018:1.1 OPENPKG_2_STABLE_20060622:1.1 OPENPKG_2_STABLE:1.1.0.16 OPENPKG_2_STABLE_BP:1.1 OPENPKG_2_5_RELEASE:1.1 OPENPKG_2_5_SOLID:1.1.0.14 OPENPKG_2_5_SOLID_BP:1.1 OPENPKG_2_4_RELEASE:1.1 OPENPKG_2_4_SOLID:1.1.0.12 OPENPKG_2_4_SOLID_BP:1.1 OPENPKG_CW_FP:1.1 OPENPKG_2_3_RELEASE:1.1 OPENPKG_2_3_SOLID:1.1.0.10 OPENPKG_2_3_SOLID_BP:1.1 OPENPKG_2_2_RELEASE:1.1 OPENPKG_2_2_SOLID:1.1.0.8 OPENPKG_2_2_SOLID_BP:1.1 OPENPKG_2_1_RELEASE:1.1 OPENPKG_2_1_SOLID:1.1.0.6 OPENPKG_2_1_SOLID_BP:1.1 OPENPKG_2_0_RELEASE:1.1 OPENPKG_2_0_SOLID:1.1.0.4 OPENPKG_2_0_SOLID_BP:1.1 OPENPKG_1_3_RELEASE:1.1.2.1 OPENPKG_1_3_SOLID:1.1.2.1.0.2 OPENPKG_1_3_SOLID_BP:1.1.2.1 OPENPKG_1_STABLE:1.1.0.2 OPENPKG_1_STABLE_MP:1.1; locks; strict; comment @# @; 1.1 date 2003.03.30.19.23.32; author rse; state Exp; branches 1.1.2.1; next ; 1.1.2.1 date 2003.07.24.20.45.09; author rse; state Exp; branches; next ; desc @@ 1.1 log @- apply selected parts of the Debian procmail patch set which especially fixed three potential segmentation faults. - install mailstat command (plus patched-in manual page) - enable optional LTMP support - speclint cleanups @ text @--- man/procmail.man Tue Sep 11 06:54:43 2001 +++ man/procmail.man Sun Mar 30 21:13:44 2003 @@@@ -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 @@@@ -720,6 +721,15 @@@@ .na .nf @@FW_content@@ +.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 --- man/procmailrc.man Tue Sep 11 06:55:03 2001 +++ man/procmailrc.man Sun Mar 30 21:13:44 2003 @@@@ -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 --- new/mailstat.1 Thu Jan 1 01:00:00 1970 +++ new/mailstat.1 Sun Mar 30 21:13:44 2003 @@@@ -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). --- src/comsat.c Tue Sep 11 06:55:46 2001 +++ src/comsat.c Sun Mar 30 21:13:45 2003 @@@@ -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; --- src/foldinfo.h Tue Dec 5 07:34:25 2000 +++ src/foldinfo.h Sun Mar 30 21:13:45 2003 @@@@ -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 */ --- src/mailfold.c Tue Sep 11 06:58:34 2001 +++ src/mailfold.c Sun Mar 30 21:13:45 2003 @@@@ -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); --- src/manconf.c Tue Sep 11 06:58:34 2001 +++ src/manconf.c Sun Mar 30 21:13:44 2003 @@@@ -139,7 +139,7 @@@@ sh before procmail ever sees it; it is however a necessary kludge against\1\ overoptimising sendmail programs:\1"); #else - ps("FW_content","\"|exec @@BINDIR@@/procmail\""); + ps("FW_content","\"|exec @@BINDIR@@/procmail || exit 75\""); ps("FW_comment",""); #endif #else @@@@ -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); --- src/memblk.c Fri Jun 29 04:20:56 2001 +++ src/memblk.c Sun Mar 30 21:13:44 2003 @@@@ -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; } --- src/memblk.h Sat Jun 30 06:12:18 2001 +++ src/memblk.h Sun Mar 30 21:13:44 2003 @@@@ -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 */ --- src/pipes.c Tue Sep 11 06:58:44 2001 +++ src/pipes.c Sun Mar 30 21:13:45 2003 @@@@ -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); --- src/procmail.c Tue Sep 11 06:59:14 2001 +++ src/procmail.c Sun Mar 30 21:13:45 2003 @@@@ -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++) @ 1.1.2.1 log @mass Merge-From-CURRENT (MFC) in preparation for OpenPKG 1.3 [class BASE only] @ text @@