Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!samsung!uunet!sparky!kent From: berg@messua.informatik.rwth-aachen.de (Stephen R. van den Berg) Newsgroups: comp.sources.misc Subject: v20i068: procmail - mail processing program, Patch01 Message-ID: <1991Jun25.194807.464@sparky.IMD.Sterling.COM> Date: 25 Jun 91 19:48:07 GMT Sender: kent@sparky.IMD.Sterling.COM (Kent Landfield) Organization: Sterling Software, IMD Lines: 1105 Approved: kent@sparky.imd.sterling.com X-Md4-Signature: f9a174147fe5aa2c2d7d3d359cd1614c Submitted-by: Stephen R. van den Berg Posting-number: Volume 20, Issue 68 Archive-name: procmail/patch01 Patch-To: procmail: Volume 20, Issue 49-51 Environment: UNIX, sendmail This patch file will upgrade procmail v2.02 to v2.03. Fixes all the portability problems that have been reported to me. Contains several cosmetic improvements. Fixes two minor bugs. Save the following in a file; cd procmail; and feed it to patch like in: patch -p < this_file_or_whatever_you_named_it Check if no *.rej files were generated; rm all *.orig files in all subdirectories. -- The latest version (currently v2.03) can be obtained directly from the ftp-archive at: amaru.informatik.rwth-aachen.de (137.226.112.31) as compressed tar file: pub/unix/procmail.tar.Z or in compressed shar format: pub/unix/procmail.0?.Z Stephen R. van den Berg. -----------------------------cut here------------------------------ diff -rc ../old/FEATURES ./FEATURES *** ../old/FEATURES Tue Jun 18 16:12:55 1991 --- ./FEATURES Thu Jun 20 11:56:46 1991 *************** *** 49,54 **** --- 49,55 ---- standard mail programs) + Can split up mailboxes into the individual messages + Can split up digests into the individual messages + + Can split up saved articles into the individual articles Feature summary for lockfile: + Provides NFS-secure lockfiles to shell script programmers diff -rc ../old/HISTORY ./HISTORY *** ../old/HISTORY Tue Jun 18 16:12:55 1991 --- ./HISTORY Thu Jun 20 11:56:47 1991 *************** *** 115,117 **** --- 115,139 ---- 1991/06/12: v2.02 Fixed typo in strstr replacement Fixed runaway line while logging long folder names + 1991/06/20: v2.03 + Added EX_OSFILE to include/sysexits.h (oversight) + Slightly changed the terminate code in procmail (more reliable + when forks did not succeed while filtering and signals arrived + during a small window) + Added a listing of all entries that can appear in autoconf.h + to autoconf to simplify manual autoconf.h generation + Changed formail to be able to split up collected articles (trivial) + Edited include/string.h, strspn is of type int + Changes to autoconf: + Added strtol detection + Enhanced const detection for braindamaged compilers + Stopped using the function grepfor, changed it into a small + script (Vltrix does not support functions in /bin/sh) + Made the check for missing library parts more resistant against + elaborate warnings from the C-compiler + Fixed typo in retint.c (sleep with one redundant argument), hurray + for prototypes + Added MANSUFFIX macro to Makefile + Avoided namespace conflict ("failurel") in lockfile.c for + braindamaged compilers + Renamed ultostr to avoided library conflict on some machines diff -rc ../old/Makefile ./Makefile *** ../old/Makefile Tue Jun 18 16:12:46 1991 --- ./Makefile Thu Jun 20 12:00:38 1991 *************** *** 1,10 **** ! #$Id: Makefile,v 2.0 1991/06/10 14:39:08 berg Rel $ # change BASENAME to your home directory if need be BASENAME = /usr/local BINDIR = $(BASENAME)/bin ! MANDIR = $(BASENAME)/man/man1 ######################################################################## # Only edit below this line if you *think* you know what you are doing # --- 1,11 ---- ! #$Id: Makefile,v 2.3 1991/06/20 09:54:14 berg Rel $ # change BASENAME to your home directory if need be BASENAME = /usr/local BINDIR = $(BASENAME)/bin ! MANSUFFIX= 1 ! MANDIR = $(BASENAME)/man/man$(MANSUFFIX) ######################################################################## # Only edit below this line if you *think* you know what you are doing # *************** *** 41,52 **** formail: formail.$(O) common.$(O) $(CC) $(CFLAGS) -o formail formail.$(O) common.$(O) ${LDFLAGS} ! _autotst: _autotst.c ! $(CC) $(CFLAGS) -o _autotst _autotst.c $(LDFLAGS) autoconf.h: autoconf Makefile ! /bin/sh autoconf $(OBJ): $(DEP) retint.$(O): $(DEP) exopen.h --- 42,55 ---- formail: formail.$(O) common.$(O) $(CC) $(CFLAGS) -o formail formail.$(O) common.$(O) ${LDFLAGS} ! _autotst: _autotst.$(O) ! $(CC) $(CFLAGS) -o _autotst _autotst.$(O) $(LDFLAGS) autoconf.h: autoconf Makefile ! /bin/sh autoconf $(O) + Makefile: + $(OBJ): $(DEP) retint.$(O): $(DEP) exopen.h *************** *** 69,79 **** $(CC) $(CFLAGS) -c $*.c install: all ! chmod 755 $(BINS) cp $(BINS) $(BINDIR) ! chmod 644 man/procmail.1 man/lockfile.1 man/formail.1 ! cp man/procmail.1 man/lockfile.1 man/formail.1 $(MANDIR) clean: $(RM) $(OBJ) common.$(O) lockfile.$(O) exopen.$(O) retint.$(O) \ ! formail.$(O) $(BINS) autoconf.h _autotst* --- 72,86 ---- $(CC) $(CFLAGS) -c $*.c install: all ! chmod 0755 $(BINS) cp $(BINS) $(BINDIR) ! chmod 0644 man/procmail.$(MANSUFFIX) man/lockfile.$(MANSUFFIX) \ ! man/formail.$(MANSUFFIX) ! cp man/procmail.$(MANSUFFIX) man/lockfile.$(MANSUFFIX) \ ! man/formail.$(MANSUFFIX) $(MANDIR) + again: all + clean: $(RM) $(OBJ) common.$(O) lockfile.$(O) exopen.$(O) retint.$(O) \ ! formail.$(O) $(BINS) autoconf.h _autotst* grepfor diff -rc ../old/README ./README *** ../old/README Tue Jun 18 16:12:28 1991 --- ./README Thu Jun 20 11:56:57 1991 *************** *** 24,30 **** ------------------------------ DESCRIPTION ----------------------------------- ! The procmail mail processing program. (v2.02 1991/06/12) 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 --- 24,30 ---- ------------------------------ DESCRIPTION ----------------------------------- ! The procmail mail processing program. (v2.03 1991/06/20) 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 *************** *** 73,78 **** --- 73,86 ---- 6369 ZG Simpelveld The Netherlands + ---------------------- + A recent version can be picked up at various comp.sources.misc archives. + The latest version can be obtained directly from the ftp-archive at: + + amaru.informatik.rwth-aachen.de (137.226.112.31) + + as compressed tar file: pub/unix/procmail.tar.Z + or in compressed shar format: pub/unix/procmail.0?.Z ---------------------- P.S. I don't mind if you feed the program files through your favourite C diff -rc ../old/autoconf ./autoconf *** ../old/autoconf Tue Jun 18 16:12:48 1991 --- ./autoconf Thu Jun 20 11:56:59 1991 *************** *** 1,10 **** - #!/bin/sh - #$Id: autoconf,v 2.1 1991/06/11 12:59:16 berg Rel $ ! SHELL=/bin/sh || exec /bin/sh $ACONF <grepfor </dev/null ! then ! echo "\$2" >>$ACONF ! exit 0 ! fi ! exit 1 ! HERE ! chmod 0755 grepfor ! cat >$ACONF <_autotst.c </dev/null 2>&1 ! then ! : ! else ! echo '#define const' >>$ACONF ! fi ! rm -f _autotst _autotst.o cat >_autotst.c </dev/null 2>&1 then : else echo '#define volatile' >>$ACONF fi ! rm -f _autotst _autotst.o cat >_autotst.c <_autotst.c <_autotst.rrr 2>&1 ! rm -f _autotst.$1 + grepfor const '#define const' + cat >_autotst.c </dev/null 2>&1 then : else echo '#define volatile' >>$ACONF fi ! rm -f _autotst.$1 cat >_autotst.c <>$ACONF fi ! rm -f _autotst _autotst.o cat >_autotst.c <>$ACONF fi ! rm -f _autotst _autotst.$1 cat >_autotst.c <_autotst.rrr 2>&1 ! rm -f _autotst _autotst.o - grepfor(){ - if fgrep "$1" _autotst.rrr >/dev/null - then - echo "$2" >>$ACONF - fi - } - grepfor void '#define void char' grepfor size_t 'typedef unsigned size_t;' grepfor pid_t 'typedef int pid_t;' --- 91,99 ---- HERE echo 'Testing for void*,size_t,pid_t,time_t,mode_t' ! make _autotst.$1 >_autotst.rrr 2>&1 ! rm -f _autotst.$1 grepfor void '#define void char' grepfor size_t 'typedef unsigned size_t;' grepfor pid_t 'typedef int pid_t;' *************** *** 84,107 **** cat >_autotst.c <_autotst.rrr 2>&1 ! rm -f _autotst _autotst.o ! if fgrep memmove _autotst.rrr >/dev/null ! then ! echo '#define NOmemmove' >>$ACONF ! grepfor bcopy '#define NObcopy' ! fi grepfor strstr '#define NOstrstr' grepfor setpwent '#define setpwent()' grepfor endpwent '#define endpwent()' ! rm -f _autotst* echo -----------------------------autoconf.h----------------------------------- cat autoconf.h --- 102,124 ---- cat >_autotst.c </dev/null 2>&1 make _autotst >_autotst.rrr 2>&1 ! rm -f _autotst _autotst.$1 ! grepfor memmove '#define NOmemmove' && grepfor bcopy '#define NObcopy' grepfor strstr '#define NOstrstr' grepfor setpwent '#define setpwent()' grepfor endpwent '#define endpwent()' + grepfor strtol '#define strtol(str,ptr,base) ((long)atoi(str))' ! rm -f _autotst* grepfor echo -----------------------------autoconf.h----------------------------------- cat autoconf.h diff -rc ../old/common.c ./common.c *** ../old/common.c Tue Jun 18 16:12:30 1991 --- ./common.c Thu Jun 20 11:57:00 1991 *************** *** 9,15 **** * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: common.c,v 2.0 1991/06/10 14:35:35 berg Rel $"; #endif #include "includes.h" --- 9,15 ---- * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: common.c,v 2.1 1991/06/19 17:41:41 berg Rel $"; #endif #include "includes.h" *************** *** 42,48 **** #include "shell.h" ! shexec(argv)const char *const*argv;{int i;const char**newargv,**p; execvp(*argv,argv); /* if this one fails, we retry it as a shell script */ for(p=(const char**)argv,i=1;i++,*p++;); /* count the arguments */ newargv=malloc(i*sizeof*p); --- 42,48 ---- #include "shell.h" ! shexec(argv)const char*const*argv;{int i;const char**newargv,**p; execvp(*argv,argv); /* if this one fails, we retry it as a shell script */ for(p=(const char**)argv,i=1;i++,*p++;); /* count the arguments */ newargv=malloc(i*sizeof*p); diff -rc ../old/formail.c ./formail.c *** ../old/formail.c Tue Jun 18 16:12:51 1991 --- ./formail.c Thu Jun 20 11:57:09 1991 *************** *** 11,19 **** * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: formail.c,v 2.3 1991/06/12 10:50:21 berg Rel $"; #endif ! static char rcsdate[]="$Date: 1991/06/12 10:50:21 $"; #include "config.h" /* I know, overkill, only need BinSh */ #include "includes.h" --- 11,19 ---- * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: formail.c,v 2.6 1991/06/19 17:47:00 berg Rel $"; #endif ! static char rcsdate[]="$Date: 1991/06/19 17:47:00 $"; #include "config.h" /* I know, overkill, only need BinSh */ #include "includes.h" *************** *** 32,38 **** static const char From[]=FROM,replyto[]="Reply-To:",Fromm[]="From:", returnpath[]="Return-Path",sender[]="Sender:",outofmem[]="Out of memory\n", subject[]="Subject:",re[]=" Re:",couldntw[]="Couldn't write to stdout", ! references[]="References:",messageid[]="Message-ID:",Date[]="Date:"; const char binsh[]=BinSh; static struct {const char*const head;const int len,wrepl;}sest[]={ {sender,STRLEN(sender),0},{replyto,STRLEN(replyto),4}, --- 32,39 ---- static const char From[]=FROM,replyto[]="Reply-To:",Fromm[]="From:", returnpath[]="Return-Path",sender[]="Sender:",outofmem[]="Out of memory\n", subject[]="Subject:",re[]=" Re:",couldntw[]="Couldn't write to stdout", ! references[]="References:",messageid[]="Message-ID:",Date[]="Date:", ! article[]="Article "; const char binsh[]=BinSh; static struct {const char*const head;const int len,wrepl;}sest[]={ {sender,STRLEN(sender),0},{replyto,STRLEN(replyto),4}, *************** *** 44,50 **** #define refr rex[1] #define msid rex[2] static struct {const char*const hedr;const int lnr;}cdigest[]={ ! {Fromm,STRLEN(Fromm)},{Date,STRLEN(Date)},{subject,STRLEN(subject)}}; #define mxl(a,b) mx(STRLEN(a),STRLEN(b)) #define dig_HDR_LEN mx(mxl(From,Fromm),mxl(Date,subject)) static errout,oldstdout; --- 45,52 ---- #define refr rex[1] #define msid rex[2] static struct {const char*const hedr;const int lnr;}cdigest[]={ ! {Fromm,STRLEN(Fromm)},{Date,STRLEN(Date)},{subject,STRLEN(subject)}, ! {article,STRLEN(article)}}; #define mxl(a,b) mx(STRLEN(a),STRLEN(b)) #define dig_HDR_LEN mx(mxl(From,Fromm),mxl(Date,subject)) static errout,oldstdout; *************** *** 73,80 **** #include "shell.h" ! main(argc,argv)const char*const argv[];{time_t t; ! int i,lastm,nowm,thelen=0,split=0,force=0,bogus=1,every=0,areply=0, trust=0,digest=0,nowait=0; size_t buflen,p=0,lnl=0,thename,ll; char*buf,*chp; --- 75,82 ---- #include "shell.h" ! main(lastm,argv)const char*const argv[];{time_t t; ! int i,nowm,thelen=0,split=0,force=0,bogus=1,every=0,areply=0, trust=0,digest=0,nowait=0; size_t buflen,p=0,lnl=0,thename,ll; char*buf,*chp; diff -rc ../old/goodies.c ./goodies.c *** ../old/goodies.c Tue Jun 18 16:12:36 1991 --- ./goodies.c Thu Jun 20 11:57:11 1991 *************** *** 9,15 **** * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: goodies.c,v 2.1 1991/06/11 12:59:16 berg Rel $"; #endif #include "config.h" #include "procmail.h" --- 9,15 ---- * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: goodies.c,v 2.3 1991/06/19 17:41:41 berg Rel $"; #endif #include "config.h" #include "procmail.h" *************** *** 34,40 **** if(got>NORMAL_TEXT) early_eof: log(unexpeof); ready: if(got!=SKIPPING_SPACE||sarg) /* not terminated yet or sarg==2 ? */ ! ready0: *p++='\0'; *p=TMNATE;return; case '\\': if(got==SINGLE_QUOTED) --- 34,40 ---- if(got>NORMAL_TEXT) early_eof: log(unexpeof); ready: if(got!=SKIPPING_SPACE||sarg) /* not terminated yet or sarg==2 ? */ ! *p++='\0'; *p=TMNATE;return; case '\\': if(got==SINGLE_QUOTED) *************** *** 108,114 **** *startb++=i; *startb='\0'; if(i!='}'){ ! badsubst: log("Bad substitution of");logqnl(buf2);continue;} i='\0';} else if(alphanum(i)){ /* $name */ do *startb++=i; --- 108,114 ---- *startb++=i; *startb='\0'; if(i!='}'){ ! log("Bad substitution of");logqnl(buf2);continue;} i='\0';} else if(alphanum(i)){ /* $name */ do *startb++=i; *************** *** 117,123 **** i='\0'; *startb='\0';} else if(i=='$'){ /* $$=pid */ ! ultostr(0,(unsigned long)thepid,p);i='\0';goto eofstr;} else{ *p++='$';goto newchar;} /* not a substitution */ startb=(char*)tgetenv(buf2); --- 117,123 ---- i='\0'; *startb='\0';} else if(i=='$'){ /* $$=pid */ ! ultstr(0,(unsigned long)thepid,p);i='\0';goto eofstr;} else{ *p++='$';goto newchar;} /* not a substitution */ startb=(char*)tgetenv(buf2); *************** *** 151,157 **** if(got<=SKIPPING_SPACE) /* should we bother to change mode? */ got=NORMAL_TEXT;}} ! ultostr(minwidth,val,dest)unsigned long val;char*dest;{int i;unsigned long j; j=val;i=0; /* a beauty, isn't it :-) */ do i++; /* determine needed width */ while(j/=10); --- 151,157 ---- if(got<=SKIPPING_SPACE) /* should we bother to change mode? */ got=NORMAL_TEXT;}} ! ultstr(minwidth,val,dest)unsigned long val;char*dest;{int i;unsigned long j; j=val;i=0; /* a beauty, isn't it :-) */ do i++; /* determine needed width */ while(j/=10); diff -rc ../old/includes.h ./includes.h *** ../old/includes.h Tue Jun 18 16:12:26 1991 --- ./includes.h Thu Jun 20 12:03:05 1991 *************** *** 1,4 **** ! /*$Id: includes.h,v 2.2 1991/06/11 13:06:52 berg Rel $*/ #include "autoconf.h" /* not all the "library identifiers" specified here need to be --- 1,4 ---- ! /*$Id: includes.h,v 2.3 1991/06/18 11:39:23 berg Rel $*/ #include "autoconf.h" /* not all the "library identifiers" specified here need to be *************** *** 15,21 **** #include /* getenv() malloc() realloc() free() strtol() */ #include /* time() ctime() time_t */ ! #include /* O_RDONLY O_WRONLY O_APPEND */ #include /* getpwuid() struct passwd */ #include /* wait() */ #include /* uname() utsname */ --- 15,21 ---- #include /* getenv() malloc() realloc() free() strtol() */ #include /* time() ctime() time_t */ ! #include /* O_RDONLY O_WRONLY O_APPEND O_CREAT O_EXCL */ #include /* getpwuid() struct passwd */ #include /* wait() */ #include /* uname() utsname */ *************** *** 26,32 **** strspn() strcspn() strchr() strcmp() strncmp() strpbrk() strstr() memmove() */ #include /* EINTR EEXIST EMFILE ENFILE */ ! #include /* EX_OK EX_UNAVAILABLE EX_OSERR EX_CANTCREAT EX_IOERR */ #ifndef O_SYNC #define O_SYNC 0 --- 26,32 ---- strspn() strcspn() strchr() strcmp() strncmp() strpbrk() strstr() memmove() */ #include /* EINTR EEXIST EMFILE ENFILE */ ! #include /* EX_OK EX_UNAVAILABLE EX_OSERR EX_OSFILE EX_CANTCREAT EX_IOERR */ #ifndef O_SYNC #define O_SYNC 0 diff -rc ../old/lockfile.c ./lockfile.c *** ../old/lockfile.c Tue Jun 18 16:12:35 1991 --- ./lockfile.c Thu Jun 20 11:57:13 1991 *************** *** 7,15 **** * This file can be freely copied for any use. * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: lockfile.c,v 2.1 1991/06/11 14:00:41 berg Rel $"; #endif ! static char rcsdate[]="$Date: 1991/06/11 14:00:41 $"; #include "config.h" /* overkill, I know, only need DIRSEP */ #include "includes.h" --- 7,15 ---- * This file can be freely copied for any use. * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: lockfile.c,v 2.3 1991/06/19 17:41:41 berg Rel $"; #endif ! static char rcsdate[]="$Date: 1991/06/19 17:41:41 $"; #include "config.h" /* overkill, I know, only need DIRSEP */ #include "includes.h" *************** *** 21,27 **** exitflag=1;} main(argc,argv)const int argc;const char*argv[];{const char**p,*cp; ! int sleepsec,retries,i,invert,force,suspend,retval=0; static char usage[]= "Usage: lockfile -nnn | -rnnn | -! | -lnnn | -snnn | file ...\n"; sleepsec=8;force=retries=invert=0;suspend=16;thepid=getpid(); --- 21,27 ---- exitflag=1;} main(argc,argv)const int argc;const char*argv[];{const char**p,*cp; ! int sleepsec,retries,invert,force,suspend,retval=0; static char usage[]= "Usage: lockfile -nnn | -rnnn | -! | -lnnn | -snnn | file ...\n"; sleepsec=8;force=retries=invert=0;suspend=16;thepid=getpid(); *************** *** 39,45 **** case 's':suspend=strtol(cp+2,(char**)0,10);break; default: if(cp[1]-'0'>(unsigned)9){ ! putse(usage);retval=EX_USAGE;goto failure;} if(sleepsec>=0) sleepsec=strtol(cp+1,(char**)0,10);} else --- 39,45 ---- case 's':suspend=strtol(cp+2,(char**)0,10);break; default: if(cp[1]-'0'>(unsigned)9){ ! putse(usage);retval=EX_USAGE;goto failurel;} if(sleepsec>=0) sleepsec=strtol(cp+1,(char**)0,10);} else *************** *** 48,54 **** else{ while(0>NFSxopen(cp)){struct stat buf;time_t t; if(exitflag||retries==1){ ! failure: sleepsec= -1;p[-1]=0;goto again;} if(force&&(t=time((time_t*)0),!stat(cp,&buf))&& forceNFSxopen(cp)){struct stat buf;time_t t; if(exitflag||retries==1){ ! failurel: sleepsec= -1;p[-1]=0;goto again;} if(force&&(t=time((time_t*)0),!stat(cp,&buf))&& force0) /* don't kill what is not ours, we might be root */ kill(pidchild,SIGTERM); if(!nextexit){ nextexit=1;log("Terminating prematurely"); *************** *** 84,91 **** void stermchild(){ signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN); ! signal(SIGTERM,SIG_IGN);kill(pidfilt,SIGTERM);kill(thepid,SIGQUIT); ! log("Rescue of unfiltered data "); if(dump(PWRB,backblock,backlen)) /* pump back the data through the backpipe */ log("failed\n"); else --- 84,93 ---- void stermchild(){ signal(SIGHUP,SIG_IGN);signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN); ! signal(SIGTERM,SIG_IGN); ! if(pidfilt>0) /* don't kill what is not ours, we might be root */ ! kill(pidfilt,SIGTERM); ! kill(thepid,SIGQUIT);log("Rescue of unfiltered data "); if(dump(PWRB,backblock,backlen)) /* pump back the data through the backpipe */ log("failed\n"); else *************** *** 174,180 **** char*tstrdup(a)const char*const a;{int i; i=strlen(a)+1;return tmemmove(malloc(i),a,i);} ! const char*tgetenv(a)const char*a;{const char*b; return(b=getenv(a))?b:"";} char*cstr(a,b)const char*const a,*const b;{ /* dynamic buffer management */ --- 176,182 ---- char*tstrdup(a)const char*const a;{int i; i=strlen(a)+1;return tmemmove(malloc(i),a,i);} ! const char*tgetenv(a)const char*const a;{const char*b; return(b=getenv(a))?b:"";} char*cstr(a,b)const char*const a,*const b;{ /* dynamic buffer management */ diff -rc ../old/procmail.c ./procmail.c *** ../old/procmail.c Tue Jun 18 16:12:37 1991 --- ./procmail.c Thu Jun 20 11:57:18 1991 *************** *** 11,17 **** * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: procmail.c,v 2.3 1991/06/12 10:23:06 berg Rel $"; #endif #include "config.h" #define MAIN --- 11,17 ---- * * ************************************************************************/ #ifdef RCS ! static char rcsid[]="$Id: procmail.c,v 2.6 1991/06/19 17:41:41 berg Rel $"; #endif #include "config.h" #define MAIN *************** *** 18,24 **** #include "procmail.h" #include "shell.h" ! #define VERSION "procmail v2.02 1991/06/12 written by Stephen R.van den Berg\n\ \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\ \t\t\t\tberg@physik.tu-muenchen.de\n" --- 18,24 ---- #include "procmail.h" #include "shell.h" ! #define VERSION "procmail v2.03 1991/06/20 written by Stephen R.van den Berg\n\ \t\t\t\tberg@messua.informatik.rwth-aachen.de\n\ \t\t\t\tberg@physik.tu-muenchen.de\n" *************** *** 58,64 **** if(0>opena(devnull)||0>opena(console)) return EX_OSFILE; setbuf(stdin,(char*)0);buf=malloc(linebuf);buf2=malloc(linebuf);chdir(tmp); ! ultostr(0,(unsigned long)(i=getuid()),buf); setpwent(); {struct passwd*pass; if(pass=getpwuid(i)){ /* find user defaults in /etc/passwd */ --- 58,64 ---- if(0>opena(devnull)||0>opena(console)) return EX_OSFILE; setbuf(stdin,(char*)0);buf=malloc(linebuf);buf2=malloc(linebuf);chdir(tmp); ! ultstr(0,(unsigned long)(i=getuid()),buf); setpwent(); {struct passwd*pass; if(pass=getpwuid(i)){ /* find user defaults in /etc/passwd */ *************** *** 279,285 **** log(buf);i-=i%TABWIDTH; /* tell where we last dumped it */ do log(TABCHAR); while((i+=TABWIDTH)(i=read(fd,a,(size_t)len))&&errno==EINTR); return i;} ! ropen(name,mode,mask)const char*const name;const mode_t mask;{int i,r; for(r=noresretry;0>(i=open(name,mode,mask));) /* a sysV secure open */ if(errno!=EINTR) if(!((errno==EMFILE||errno==ENFILE)&&(r<0||r--))) --- 154,161 ---- while(0>(i=read(fd,a,(size_t)len))&&errno==EINTR); return i;} ! ropen(name,mode,mask)const char*const name;const int mode;const mode_t mask;{ ! int i,r; for(r=noresretry;0>(i=open(name,mode,mask));) /* a sysV secure open */ if(errno!=EINTR) if(!((errno==EMFILE||errno==ENFILE)&&(r<0||r--))) *************** *** 191,200 **** else{ log("Forcing lock on");logqnl(name);suspend();}}} else{ /* maybe filename too long, shorten and retry */ ! if(0<(i=strlen(name)-1)&&!strchr(dirsep,(name[i-1]))){ name[i]='\0';continue;} log("Lockfailure on");logqnl(name);return;} ! sleep(DEFlocksleep,locksleep); if(nextexit) goto term;}} --- 193,202 ---- else{ log("Forcing lock on");logqnl(name);suspend();}}} else{ /* maybe filename too long, shorten and retry */ ! if(0<(i=strlen(name)-1)&&!strchr(dirsep,name[i-1])){ name[i]='\0';continue;} log("Lockfailure on");logqnl(name);return;} ! sleep((unsigned)locksleep); if(nextexit) goto term;}} diff -rc ../old/include/stdlib.h ./include/stdlib.h *** ../old/include/stdlib.h Tue Jun 18 16:12:14 1991 --- ./include/stdlib.h Thu Jun 20 11:56:35 1991 *************** *** 1,3 **** - #define strtol(str,ptr,base) ((long)atoi(str)) void*malloc(),*realloc(); const char*getenv(); --- 1,2 ---- diff -rc ../old/include/string.h ./include/string.h *** ../old/include/string.h Tue Jun 18 16:12:18 1991 --- ./include/string.h Thu Jun 20 11:56:36 1991 *************** *** 1,3 **** #include ! char*strchr(),*strpbrk(),*strspn(),*strcspn(); --- 1,3 ---- #include ! char*strchr(),*strpbrk(); diff -rc ../old/include/sysexits.h ./include/sysexits.h *** ../old/include/sysexits.h Tue Jun 18 16:12:17 1991 --- ./include/sysexits.h Thu Jun 20 11:56:36 1991 *************** *** 1,8 **** ! /* Standard exit codes, original list maintained ! by Eric Allman (eric@berkeley, ucbvax!eric) */ ! #define EX_OK 0 ! #define EX_USAGE 64 ! #define EX_UNAVAILABLE 69 ! #define EX_OSERR 71 ! #define EX_CANTCREAT 73 ! #define EX_IOERR 74 --- 1,9 ---- ! /* Standard exit codes, original list maintained ! by Eric Allman (eric@berkeley, ucbvax!eric) */ ! #define EX_OK 0 ! #define EX_USAGE 64 ! #define EX_UNAVAILABLE 69 ! #define EX_OSERR 71 ! #define EX_OSFILE 72 ! #define EX_CANTCREAT 73 ! #define EX_IOERR 74 diff -rc ../old/man/formail.1 ./man/formail.1 *** ../old/man/formail.1 Tue Jun 18 16:12:23 1991 --- ./man/formail.1 Thu Jun 20 11:57:15 1991 *************** *** 2,8 **** .ds Rv \\$3 .ds Dt \\$4 .. ! .Id $Id: formail.1,v 2.0 1991/06/10 17:37:18 berg Rel $ .de Sh .br .ne 9 --- 2,8 ---- .ds Rv \\$3 .ds Dt \\$4 .. ! .Id $Id: formail.1,v 2.1 1991/06/18 11:30:15 berg Rel $ .de Sh .br .ne 9 *************** *** 42,48 **** .B formail is a filter that can be used to force mail into mailbox format, perform real rigorous `From ' escaping, generate auto-replying headers or split up a ! mailbox/digest file. The mail/mailbox contents will be expected on stdin. .LP If formail is supposed to determine the sender of the mail, but is unable to find any, it will substitute `foo@bar'. --- 42,49 ---- .B formail is a filter that can be used to force mail into mailbox format, perform real rigorous `From ' escaping, generate auto-replying headers or split up a ! mailbox/digest/articles file. The mail/mailbox/article contents will be ! expected on stdin. .LP If formail is supposed to determine the sender of the mail, but is unable to find any, it will substitute `foo@bar'. *************** *** 85,91 **** message (this is normally not the case). .Tp .B \-d ! Enables formail to split up digests into their original messages. .Tp .I "\fB\+\fPskip" Skip the first --- 86,92 ---- message (this is normally not the case). .Tp .B \-d ! Enables formail to split up digests/articles into their original parts. .Tp .I "\fB\+\fPskip" Skip the first -----------------------------cut here------------------------------ -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net. exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.