arnold@skeeve.UUCP (Arnold D. Robbins) (12/20/87)
Below is patch #14 for B News 2.11. Note that there is a bug introduced in this patch which I will post a fix for next. It is a simple thing to fix. See next article for details. Enjoy, ------------------- From gt-eedsp!gatech!hao!ames!amdcad!sun!pitstop!sundc!seismo!rick Mon Dec 7 15:41:57 EST 1987 Article 822 of news.software.b: Path: emory!gt-eedsp!gatech!hao!ames!amdcad!sun!pitstop!sundc!seismo!rick From: rick@seismo.CSS.GOV (Rick Adams) Newsgroups: news.software.b Subject: 2.11 news src patch #14 Keywords: last one for 1987 Message-ID: <44204@beno.seismo.CSS.GOV> Date: 4 Dec 87 07:50:54 GMT Organization: Center for Seismic Studies, Arlington, VA Lines: 1369 Description: This is patch #14 for news 2.11 src. It is expected to be stable and does not introduce major new features. Many minor cleanups. Changes to Makefile to make $(DESTDIR) work completely. sendbatch now supports MINDISKFREE and will not batch up news if there is not a least that much free space on /usr/spool. LOCKING is an acceptable define for those with the locking() call. recnews now avoids using popen and has its own routine to exec the command. This avoids having the shell interpreting special characters that we don't want it to. Fix: cd to the src directory and apply the following patch. Index: Makefile.dst Prereq: 1.28 *** .d/Makefile.dst Mon Nov 23 19:13:12 1987 --- Makefile.dst Tue Dec 1 18:51:32 1987 *************** *** 1,2 **** ! # '@(#)Makefile.dst 1.28 11/19/87' # Generic Makefile. --- 1,2 ---- ! # '@(#)Makefile.dst 1.30 12/1/87' # Generic Makefile. *************** *** 31,32 **** --- 31,34 ---- MAXPERBATCH = 1000000000 + MINDISKFREE = 0 + SPOOL_DISK = /usr/spool *************** *** 49,53 **** ! DEFS = -DRNEWS=\"$(BINDIR)/rnews\" -DSPOOLDIR=\"$(SPOOLDIR)\" \ ! -DBATCHDIR=\"$(BATCHDIR)\" -DLIBDIR=\"$(LIBDIR)\" \ ! -DBINDIR=\"$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \ -DNEWSGRP=\"$(NEWSGRP)\" ${SERVER} ${NFSCLIENT} --- 51,56 ---- ! DEFS = -DRNEWS=\"$(DESTDIR)$(BINDIR)/rnews\" \ ! -DSPOOLDIR=\"$(DESTDIR)$(SPOOLDIR)\" \ ! -DBATCHDIR=\"$(DESTDIR)$(BATCHDIR)\" -DLIBDIR=\"$(DESTDIR)$(LIBDIR)\" \ ! -DBINDIR=\"$(DESTDIR)$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \ -DNEWSGRP=\"$(NEWSGRP)\" ${SERVER} ${NFSCLIENT} *************** *** 71,73 **** #USG LIBS = ! #USG LINTFLAGS = ${DEFS} ${NETINCLUDE} #V7 CFLAGS = ${DEBUG} -DDBM ${DEFS} ${SCCSID} ${VFORK} ${NETINCLUDE} --- 74,76 ---- #USG LIBS = ! #USG LINTFLAGS = -DUSG ${DEFS} ${NETINCLUDE} #V7 CFLAGS = ${DEBUG} -DDBM ${DEFS} ${SCCSID} ${VFORK} ${NETINCLUDE} *************** *** 90,92 **** #VMS VFORK= ! #VMS FIXACTIVE = /etc/vmstounix $(LIBDIR)/active --- 93,95 ---- #VMS VFORK= ! #VMS FIXACTIVE = /etc/vmstounix $(DESTDIR)$(LIBDIR)/active *************** *** 191,194 **** fullupdate: install.sh makeactive.sh ! sh install.sh $(SPOOLDIR) $(LIBDIR) $(BINDIR) $(NEWSUSR) $(NEWSGRP) $(OSTYPE) ! chmod 6755 $(LIBDIR)/inews --- 194,197 ---- fullupdate: install.sh makeactive.sh ! sh install.sh $(DESTDIR)$(SPOOLDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(NEWSUSR) $(DESTDIR)$(NEWSGRP) $(DESTDIR)$(OSTYPE) ! chmod 6755 $(DESTDIR)$(LIBDIR)/inews *************** *** 195,199 **** nfsupdate: install.sh ! sh install.sh $(SPOOLDIR) $(LIBDIR) $(BINDIR) $(NEWSUSR) $(NEWSGRP) $(OSTYPE) $(NFSSPOOLDIR) $(NFSLIBDIR) ! chown root $(LIBDIR)/inews ! chmod 6755 $(LIBDIR)/inews --- 198,202 ---- nfsupdate: install.sh ! sh install.sh $(DESTDIR)$(SPOOLDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(NEWSUSR) $(DESTDIR)$(NEWSGRP) $(DESTDIR)$(OSTYPE) $(DESTDIR)$(NFSSPOOLDIR) $(DESTDIR)$(NFSLIBDIR) ! chown root $(DESTDIR)$(LIBDIR)/inews ! chmod 6755 $(DESTDIR)$(LIBDIR)/inews *************** *** 205,215 **** lint: ilint vlint rlint elint plint olint ! ilint: defs.h params.h iparams.h header.h $(ISRCS) pathinit.c lint $(LINTFLAGS) $(ISRCS) -DINEW pathinit.c ! vlint: defs.h params.h rparams.h header.h $(VSRCS) pathinit.c lint $(LINTFLAGS) $(VSRCS) -DREAD pathinit.c ! rlint: defs.h params.h rparams.h header.h $(RSRCS) pathinit.c lint $(LINTFLAGS) $(RSRCS) -DREAD pathinit.c ! elint: defs.h params.h iparams.h header.h $(ESRCS) pathinit.c lint $(LINTFLAGS) $(ESRCS) -DEXP pathinit.c ! plint: defs.h params.h iparams.h header.h $(PSRCS) pathinit.c lint $(LINTFLAGS) $(PSRCS) -DREAD pathinit.c --- 208,218 ---- lint: ilint vlint rlint elint plint olint ! ilint: defs.h params.h iparams.h header.h patchlevel.h $(ISRCS) pathinit.c lint $(LINTFLAGS) $(ISRCS) -DINEW pathinit.c ! vlint: defs.h params.h rparams.h header.h patchlevel.h $(VSRCS) pathinit.c lint $(LINTFLAGS) $(VSRCS) -DREAD pathinit.c ! rlint: defs.h params.h rparams.h header.h patchlevel.h $(RSRCS) pathinit.c lint $(LINTFLAGS) $(RSRCS) -DREAD pathinit.c ! elint: defs.h params.h iparams.h header.h patchlevel.h $(ESRCS) pathinit.c lint $(LINTFLAGS) $(ESRCS) -DEXP pathinit.c ! plint: defs.h params.h iparams.h header.h patchlevel.h $(PSRCS) pathinit.c lint $(LINTFLAGS) $(PSRCS) -DREAD pathinit.c *************** *** 226,228 **** readnews: $(P) $(ROBJECTS) ! $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(LIBS) $(NETLIB) #VMS mv readnews.exe readnews --- 229,231 ---- readnews: $(P) $(ROBJECTS) ! $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(NETLIB) $(LIBS) #VMS mv readnews.exe readnews *************** *** 258,260 **** postnews: $(P) $(POBJECTS) ! $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews $(NETLIB) #VMS mv postnews.exe postnews --- 261,263 ---- postnews: $(P) $(POBJECTS) ! $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews $(NETLIB) $(LIBS) #VMS mv postnews.exe postnews *************** *** 283,285 **** vnews: $(P) $(VOBJECTS) ! $(CC) $(LFLAGS) $(VOBJECTS) -o $@ $(TERMLIB) $(LIBS) $(NETLIB) #VMS mv vnews.exe vnews --- 286,288 ---- vnews: $(P) $(VOBJECTS) ! $(CC) $(LFLAGS) $(VOBJECTS) -o $@ $(TERMLIB) $(NETLIB) $(LIBS) #VMS mv vnews.exe vnews *************** *** 302,304 **** uurec: uurec.c defs.h Makefile ! $(CC) $(CFLAGS) $(LFLAGS) uurec.c -o uurec #VMS mv uurec.exe uurec --- 305,307 ---- uurec: uurec.c defs.h Makefile ! $(CC) $(CFLAGS) $(LFLAGS) uurec.c -o uurec $(LIBS) #VMS mv uurec.exe uurec *************** *** 306,308 **** recnews: recnews.c defs.h header.h params.h Makefile ! $(CC) $(CFLAGS) $(LFLAGS) recnews.c -o recnews #VMS mv recnews.exe recnews --- 309,311 ---- recnews: recnews.c defs.h header.h params.h Makefile ! $(CC) $(CFLAGS) $(LFLAGS) recnews.c -o recnews $(LIBS) #VMS mv recnews.exe recnews *************** *** 310,312 **** sendnews: sendnews.o defs.h ! $(CC) $(LFLAGS) sendnews.o -o sendnews #VMS mv sendnews.exe sendnews --- 313,315 ---- sendnews: sendnews.o defs.h ! $(CC) $(LFLAGS) sendnews.o -o sendnews $(LIBS) #VMS mv sendnews.exe sendnews *************** *** 314,316 **** batch: batch.c Makefile defs.h ! $(CC) $(CFLAGS) $(LFLAGS) batch.c -o batch #VMS mv batch.exe batch --- 317,319 ---- batch: batch.c Makefile defs.h ! $(CC) $(CFLAGS) $(LFLAGS) batch.c -o batch $(LIBS) #VMS mv batch.exe batch *************** *** 318,320 **** encode: encode.c ! $(CC) $(CFLAGS) $(LFLAGS) encode.c -o encode #VMS mv encode.exe encode --- 321,323 ---- encode: encode.c ! $(CC) $(CFLAGS) $(LFLAGS) encode.c -o encode $(LIBS) #VMS mv encode.exe encode *************** *** 322,324 **** decode: decode.c ! $(CC) $(CFLAGS) $(LFLAGS) decode.c -o decode #VMS mv decode.exe decode --- 325,327 ---- decode: decode.c ! $(CC) $(CFLAGS) $(LFLAGS) decode.c -o decode $(LIBS) #VMS mv decode.exe decode *************** *** 326,328 **** caesar: caesar.c Makefile ! $(CC) $(CFLAGS) $(LFLAGS) caesar.c -o caesar -lm #VMS mv caesar.exe caesar --- 329,331 ---- caesar: caesar.c Makefile ! $(CC) $(CFLAGS) $(LFLAGS) caesar.c -o caesar -lm $(LIBS) #VMS mv caesar.exe caesar *************** *** 330,332 **** compress: compress.c ! $(CC) $(CFLAGS) $(LFLAGS) -o compress compress.c #VMS mv compress.exe compress --- 333,335 ---- compress: compress.c ! $(CC) $(CFLAGS) $(LFLAGS) -o compress compress.c $(LIBS) #VMS mv compress.exe compress *************** *** 334,336 **** recmail: recmail.c defs.h params.h header.h ! $(CC) $(CFLAGS) $(LFLAGS) recmail.c -o recmail #VMS mv recmail.exe recmail --- 337,339 ---- recmail: recmail.c defs.h params.h header.h ! $(CC) $(CFLAGS) $(LFLAGS) recmail.c -o recmail $(LIBS) #VMS mv recmail.exe recmail *************** *** 341,343 **** checknews: $(P) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) ! $(CC) $(LFLAGS) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) -o checknews $(NETLIB) #VMS mv checknews.exe checknews --- 344,346 ---- checknews: $(P) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) ! $(CC) $(LFLAGS) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) -o checknews $(NETLIB) $(LIBS) #VMS mv checknews.exe checknews *************** *** 345,347 **** sendbatch: sendbatch.sh Makefile ! sed -e "s%LIBDIR%$(LIBDIR)%g" \ -e "s%UUXFLAGS%$(UUXFLAGS)%g" \ --- 348,350 ---- sendbatch: sendbatch.sh Makefile ! sed -e "s%LIBDIR%$(DESTDIR)$(LIBDIR)%g" \ -e "s%UUXFLAGS%$(UUXFLAGS)%g" \ *************** *** 348,350 **** -e "s%MAXPERBATCH%$(MAXPERBATCH)%g" \ ! -e "s%BATCHDIR%$(BATCHDIR)%g" sendbatch.sh > sendbatch #VMS /etc/unixtovms sendbatch --- 351,355 ---- -e "s%MAXPERBATCH%$(MAXPERBATCH)%g" \ ! -e "s%MINDISKFREE%$(MINDISKFREE)%g" \ ! -e "s%SPOOL_DISK%$(SPOOL_DISK)%g" \ ! -e "s%BATCHDIR%$(DESTDIR)$(BATCHDIR)%g" sendbatch.sh > sendbatch #VMS /etc/unixtovms sendbatch *************** *** 352,356 **** rmgroup: rmgroup.sh Makefile ! sed -e "s%LIBDIR%$(LIBDIR)%g" \ -e "s%FIXACTIVE%$(FIXACTIVE)%g" \ ! -e "s%SPOOLDIR%$(SPOOLDIR)%g" rmgroup.sh > rmgroup #VMS /etc/unixtovms rmgroup --- 357,361 ---- rmgroup: rmgroup.sh Makefile ! sed -e "s%LIBDIR%$(DESTDIR)$(LIBDIR)%g" \ -e "s%FIXACTIVE%$(FIXACTIVE)%g" \ ! -e "s%SPOOLDIR%$(DESTDIR)$(SPOOLDIR)%g" rmgroup.sh > rmgroup #VMS /etc/unixtovms rmgroup *************** *** 358,360 **** checkgroups: checkgroups.sh Makefile ! sed -e "s%LIBDIR%$(LIBDIR)%g" checkgroups.sh > checkgroups #VMS /etc/unixtovms checkgroups --- 363,365 ---- checkgroups: checkgroups.sh Makefile ! sed -e "s%LIBDIR%$(DESTDIR)$(LIBDIR)%g" checkgroups.sh > checkgroups #VMS /etc/unixtovms checkgroups *************** *** 400,411 **** ! $(LIBDIR): ! mkdir $(LIBDIR) ! chmod 755 $(LIBDIR) ! chown $(NEWSUSR) $(LIBDIR) ! chgrp $(NEWSGRP) $(LIBDIR) ! $(BINDIR): ! mkdir $(BINDIR) ! chmod 755 $(BINDIR) ! chown $(NEWSUSR) $(BINDIR) ! chgrp $(NEWSGRP) $(BINDIR) --- 405,416 ---- ! $(DESTDIR)$(LIBDIR): ! mkdir $(DESTDIR)$(LIBDIR) ! chmod 755 $(DESTDIR)$(LIBDIR) ! chown $(NEWSUSR) $(DESTDIR)$(LIBDIR) ! chgrp $(NEWSGRP) $(DESTDIR)$(LIBDIR) ! $(DESTDIR)$(BINDIR): ! mkdir $(DESTDIR)$(BINDIR) ! chmod 755 $(DESTDIR)$(BINDIR) ! chown $(NEWSUSR) $(DESTDIR)$(BINDIR) ! chgrp $(NEWSGRP) $(DESTDIR)$(BINDIR) Index: batch.c Prereq: 1.19 *** .d/batch.c Thu Oct 8 00:19:06 1987 --- batch.c Mon Nov 30 18:47:06 1987 *************** *** 34,36 **** #ifdef SCCSID ! static char *SccsId = "@(#)batch.c 1.19 10/7/87"; #endif /* SCCSID */ --- 34,36 ---- #ifdef SCCSID ! static char *SccsId = "@(#)batch.c 1.20 11/30/87"; #endif /* SCCSID */ *************** *** 113,116 **** *cp = '\n'; ! if (sbuf.st_size == 0) continue; nbytes += sbuf.st_size; --- 113,118 ---- *cp = '\n'; ! if (sbuf.st_size == 0) { ! (void) fclose(nfd); continue; + } nbytes += sbuf.st_size; *************** *** 213,215 **** ! #if !defined(BSD4_2) rename(from, to) --- 215,217 ---- ! #ifndef RENAMESUB rename(from, to) *************** *** 224,225 **** } ! #endif /* !BSD4_2 */ --- 226,227 ---- } ! #endif /* !RENAMESUB */ Index: checknews.c Prereq: 2.30 *** .d/checknews.c Sun Oct 18 18:02:57 1987 --- checknews.c Mon Nov 30 18:47:07 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)checknews.c 2.30 10/15/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)checknews.c 2.31 11/30/87"; #endif /* SCCSID */ *************** *** 266,275 **** continue; - if (index(rcbuf, ',') != NULL) { - if (verbose > 1) - printf("Comma in %s newsrc line\n", bfr); - else { - isnews++; - continue; - } - } while (*ptr) --- 266,267 ---- *************** *** 296,298 **** } ! contin:; } --- 288,297 ---- } ! if (index(rcbuf, ',') != NULL) { ! if (verbose > 1) ! printf("Comma in %s newsrc line\n", bfr); ! else { ! isnews++; ! continue; ! } ! } } Index: defs.dist Prereq: 2.60 *** .d/defs.dist Mon Nov 23 19:13:15 1987 --- defs.dist Mon Nov 30 18:46:35 1987 *************** *** 16,18 **** ! /* @(#)defs.dist 2.60 11/19/87 */ --- 16,18 ---- ! /* @(#)defs.dist 2.61 11/30/87 */ *************** *** 70,71 **** --- 70,72 ---- /* #define LOCKF /* If you have the lockf() sys call */ + /* #define LOCKING /* If you have the locking() sys call */ /* #define DOGETUSER /* Always do 'getuser' so can't fake name */ *************** *** 74,75 **** --- 75,77 ---- /* #define READDIR /* your system has readdir() in libc */ + /* #define RENAMESUB /* your system has rename() in libc */ /* #define ALWAYSALIAS /* temporary kludge for conversion */ Index: expire.c Prereq: 2.56 *** .d/expire.c Wed Nov 4 14:56:58 1987 --- expire.c Mon Nov 30 18:47:10 1987 *************** *** 19,21 **** #ifdef SCCSID ! static char *SccsId = "@(#)expire.c 2.56 11/4/87"; #endif /* SCCSID */ --- 19,21 ---- #ifdef SCCSID ! static char *SccsId = "@(#)expire.c 2.57 11/30/87"; #endif /* SCCSID */ *************** *** 97,99 **** struct hbuf h; ! int rmlock(); time_t today; --- 97,99 ---- struct hbuf h; ! int xxit(); time_t today; *************** *** 114,116 **** ! uid = pw->pw_uid; if ((gp = getgrnam(NEWSGRP)) == NULL) --- 114,116 ---- ! duid = uid = pw->pw_uid; if ((gp = getgrnam(NEWSGRP)) == NULL) *************** *** 117,119 **** xerror("Cannot get NEWSGRP gr entry"); ! gid = gp->gr_gid; (void) setgid(gid); --- 117,119 ---- xerror("Cannot get NEWSGRP gr entry"); ! dgid = gid = gp->gr_gid; (void) setgid(gid); *************** *** 122,126 **** if (signal(SIGHUP, SIG_IGN) != SIG_IGN) ! signal(SIGHUP, rmlock); if (signal(SIGINT, SIG_IGN) != SIG_IGN) ! signal(SIGINT, rmlock); expincr = DFLTEXP; --- 122,128 ---- if (signal(SIGHUP, SIG_IGN) != SIG_IGN) ! signal(SIGHUP, xxit); if (signal(SIGINT, SIG_IGN) != SIG_IGN) ! signal(SIGINT, xxit); ! if (signal(SIGTERM, SIG_IGN) != SIG_IGN) ! signal(SIGTERM, xxit); expincr = DFLTEXP; *************** *** 1205,1206 **** --- 1207,1220 ---- { + if (i) { + #ifdef DBM + char tempname[BUFLEN]; + (void) UNLINK(NARTFILE); + (void) sprintf(tempname,"%s.pag", NARTFILE); + (void) UNLINK(tempname); + (void) sprintf(tempname,"%s.dir", NARTFILE); + (void) UNLINK(tempname); + #else /* !DBM */ + (void) UNLINK(ARTFILE); + #endif /* !DBM */ + } rmlock(); Index: funcs.c Prereq: 2.37 *** .d/funcs.c Mon Nov 23 19:13:17 1987 --- funcs.c Mon Nov 30 18:46:37 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)funcs.c 2.37 11/19/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)funcs.c 2.38 11/30/87"; #endif /* SCCSID */ *************** *** 25,27 **** #include <errno.h> ! #if defined(USG) || defined(BSD4_2) || defined(BSD4_1C) #include <fcntl.h> --- 25,27 ---- #include <errno.h> ! #if defined(USG) || defined(BSD4_2) #include <fcntl.h> *************** *** 432,434 **** if (access(logfname, 0) == 0 && (logfile = fopen(logfname, "a")) != NULL) { ! #if defined(USG) || defined(BSD4_2) || defined(BSD4_1C) int flags; --- 432,434 ---- if (access(logfname, 0) == 0 && (logfile = fopen(logfname, "a")) != NULL) { ! #if defined(USG) || defined(BSD4_2) int flags; *************** *** 522,524 **** ! #if !defined(BSD4_2) && !defined(BSD4_1C) /* --- 522,524 ---- ! #ifdef MKDIRSUB /* *************** *** 581,583 **** } ! #endif /* !BSD4_2 && ! BSD4_1C */ #ifndef USG --- 581,597 ---- } ! #endif /* !BSD4_2 */ ! ! #ifndef RENAMESUB ! rename(from,to) ! register char *from, *to; ! { ! (void) unlink(to); ! if (link(from, to) < 0) ! return -1; ! ! (void) unlink(from); ! return 0; ! } ! #endif /* !RENAMESUB */ ! #ifndef USG Index: funcs2.c Prereq: 1.23 *** .d/funcs2.c Wed Nov 4 14:57:12 1987 --- funcs2.c Mon Nov 30 18:47:13 1987 *************** *** 19,21 **** #ifdef SCCSID ! static char *SccsId = "@(#)funcs2.c 1.23 11/4/87"; #endif /* SCCSID */ --- 19,21 ---- #ifdef SCCSID ! static char *SccsId = "@(#)funcs2.c 1.24 11/30/87"; #endif /* SCCSID */ *************** *** 681,695 **** #endif - - #if !defined(BSD4_2) - rename(from,to) - register char *from, *to; - { - (void) unlink(to); - if (link(from, to) < 0) - return -1; - - (void) unlink(from); - return 0; - } - #endif /* !BSD4_2 */ --- 681,682 ---- Index: getdate.y Prereq: 2.16 *** .d/getdate.y Wed Oct 7 16:51:38 1987 --- getdate.y Mon Nov 30 18:47:14 1987 *************** *** 5,7 **** /* University of North Carolina at Chapel Hill */ ! /* @(#)getdate.y 2.16 9/24/87 */ --- 5,7 ---- /* University of North Carolina at Chapel Hill */ ! /* @(#)getdate.y 2.17 11/30/87 */ *************** *** 559,561 **** ! return sdate; } --- 559,565 ---- ! /* ! ** Have to do *something* with a legitimate -1 so it's distinguishable ! ** from the error return value. (Alternately could set errno on error.) ! */ ! return (sdate == -1) ? 0 : sdate; } Index: ifuncs.c Prereq: 2.67 *** .d/ifuncs.c Mon Nov 23 19:13:21 1987 --- ifuncs.c Tue Dec 1 16:29:57 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)ifuncs.c 2.67 11/19/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)ifuncs.c 2.69 12/1/87"; #endif /* SCCSID */ *************** *** 407,409 **** } else { ! ofp = xfopen(mktemp(TRANS), "w"); if (afmt) { --- 407,410 ---- } else { ! MKTEMP(TRANS); ! ofp = xfopen(TRANS, "w"); if (afmt) { *************** *** 726,728 **** (void) strcpy(tempname, "/tmp/LTMP.XXXXXX"); ! (void) mktemp(tempname); (void) strcpy(lockname, "/tmp/L"); --- 727,729 ---- (void) strcpy(tempname, "/tmp/LTMP.XXXXXX"); ! MKTEMP(tempname); (void) strcpy(lockname, "/tmp/L"); *************** *** 1112,1114 **** free(ngs[i]); ! if (ngsbug[i] < tbuf || ngsbug[i] > &tbuf[sizeof tbuf - 1]) free(ngsbug[i]); --- 1113,1116 ---- free(ngs[i]); ! if (ngsbug[i] != NULL && ! (ngsbug[i] < tbuf || ngsbug[i] > &tbuf[sizeof tbuf - 1])) free(ngsbug[i]); *************** *** 1140,1145 **** mfd = fopen(mfn, "r"); ! if (mfd != NULL) ! while ((!ret) && fscanf(mfd, "%[^:]:%s\n", mgrp, mlist) != EOF) { ! if (feof(mfd)) break; ! if (mgrp[0] == '#') continue; if (!STRCMP(ngname, mgrp)) { --- 1142,1150 ---- mfd = fopen(mfn, "r"); ! if (mfd == NULL) ! return FALSE; ! while ((!ret) && fscanf(mfd, "%[^:]:%s\n", mgrp, mlist) != EOF) { ! if (feof(mfd)) ! break; ! if (mgrp[0] == '#') ! continue; if (!STRCMP(ngname, mgrp)) { *************** *** 1147,1161 **** && (ret == FALSE)) { ! if (*p == ',') { *p = '\0'; - p++; - } - if (*p == '\\') { - *p = '\0'; - p++; - if (!grplist) - grplist = getgrplist(user); - if (ngmatch(p,grplist)) ret = TRUE; - } else if (!STRCMP(p, user)) - ret = TRUE; - *p = '\0'; } --- 1152,1164 ---- && (ret == FALSE)) { ! if (*p == ',') ! *p++ = '\0'; ! if (*p == '\\') { ! *p++ = '\0'; ! if (!grplist) ! grplist = getgrplist(user); ! if (ngmatch(p,grplist)) ! ret = TRUE; ! } else if (!STRCMP(p, user)) ! ret = TRUE; *p = '\0'; } *************** *** 1303,1306 **** break; /* fits in buffer */ ! if (!tfilename) ! tfilename = mktemp("/tmp/unbnewsXXXXXX"); if ((fd = creat(tfilename, 0666)) < 0) { --- 1306,1311 ---- break; /* fits in buffer */ ! if (!tfilename) { ! tfilename = "/tmp/unbnewsXXXXXX"; ! MKTEMP(tfilename); ! } if ((fd = creat(tfilename, 0666)) < 0) { *************** *** 1385,1387 **** while ((wpid = wait(&exstat)) >= 0 && wpid != pid); ! (void) unlink(tfilename); } while (fgets(cmd, BUFLEN, infp) != NULL); --- 1390,1393 ---- while ((wpid = wait(&exstat)) >= 0 && wpid != pid); ! if (tfilename) ! (void) unlink(tfilename); } while (fgets(cmd, BUFLEN, infp) != NULL); Index: inews.c Prereq: 2.84 *** .d/inews.c Mon Nov 23 19:13:24 1987 --- inews.c Mon Nov 30 18:46:43 1987 *************** *** 19,21 **** #ifdef SCCSID ! static char *SccsId = "@(#)inews.c 2.84 11/19/87"; #endif /* SCCSID */ --- 19,21 ---- #ifdef SCCSID ! static char *SccsId = "@(#)inews.c 2.85 11/30/87"; #endif /* SCCSID */ *************** *** 100,102 **** FILE *mailhdr(); ! extern int errno; --- 100,102 ---- FILE *mailhdr(); ! extern int errno, xxit(); *************** *** 187,188 **** --- 187,189 ---- } + (void) signal(SIGTERM, xxit); if (argc > 1 && !STRCMP(*(argv+1), "-U")) { *************** *** 676,678 **** (void) sprintf(sfile, "%s/.spXXXXXX", SPOOL); ! sp = xfopen(mktemp(sfile), "w"); if (batchcmd != NULL) { --- 677,680 ---- (void) sprintf(sfile, "%s/.spXXXXXX", SPOOL); ! MKTEMP(sfile); ! sp = xfopen(sfile, "w"); if (batchcmd != NULL) { *************** *** 933,935 **** /* Write article to temp file. */ ! tfp = xfopen(mktemp(ARTICLE), "w"); --- 935,938 ---- /* Write article to temp file. */ ! MKTEMP(ARTICLE); ! tfp = xfopen(ARTICLE, "w"); *************** *** 1157,1159 **** ! tmpfp = xfopen(mktemp(INFILE), "w"); for ( ; ; ) { --- 1160,1163 ---- ! MKTEMP(INFILE); ! tmpfp = xfopen(INFILE, "w"); for ( ; ; ) { Index: nntp.c Prereq: 2.3 *** .d/nntp.c Wed Nov 4 14:57:39 1987 --- nntp.c Mon Nov 30 18:47:16 1987 *************** *** 16,18 **** #ifdef SCCSID ! static char *SccsId = "@(#)nntp.c 2.3 11/4/87"; #endif /* SCCSID */ --- 16,18 ---- #ifdef SCCSID ! static char *SccsId = "@(#)nntp.c 2.4 11/30/87"; #endif /* SCCSID */ *************** *** 79,81 **** strcpy(active_file_name, "/tmp/nsact.XXXXXX"); ! (void) mktemp(active_file_name); /* make a temporary name */ openfp = fopen(active_file_name, "w+"); /* and get ready */ --- 79,81 ---- strcpy(active_file_name, "/tmp/nsact.XXXXXX"); ! MKTEMP(active_file_name); /* make a temporary name */ openfp = fopen(active_file_name, "w+"); /* and get ready */ *************** *** 236,237 **** --- 236,238 ---- */ + void sync_server() Index: params.h Prereq: 2.27 *** .d/params.h Mon Nov 23 19:13:28 1987 --- params.h Mon Nov 30 18:46:45 1987 *************** *** 4,6 **** ! /* @(#)params.h 2.27 11/19/87 */ --- 4,6 ---- ! /* @(#)params.h 2.28 11/30/87 */ *************** *** 16,18 **** ! #if defined(BSD4_2) || defined(BSD4_1C) #include <sys/time.h> --- 16,18 ---- ! #ifdef BSD4_2 #include <sys/time.h> *************** *** 87,89 **** extern struct passwd *getpwnam(), *getpwuid(), *getpwent(); ! extern struct group *getgrnam(); extern time_t time(), getdate(), cgtdate(); --- 87,90 ---- extern struct passwd *getpwnam(), *getpwuid(), *getpwent(); ! extern struct group *getgrnam(), *getgrent(); ! extern void setgrent(); extern time_t time(), getdate(), cgtdate(); *************** *** 127,128 **** --- 128,136 ---- #ifdef M_XENIX + #define LOCKING + #endif M_XENIX + + #ifdef LOCKING + # ifndef LOCKF + # define LOCKF + # endif /* LOCKF */ /* fake SVID adivsory locking with xenix routines */ *************** *** 132,134 **** #define F_TLOCK 4 ! #endif /* M_XENIX */ --- 140,142 ---- #define F_TLOCK 4 ! #endif /* LOCKING */ *************** *** 135,137 **** #ifdef IHCC ! #define DOGETUSERS #define LOGDIR --- 143,145 ---- #ifdef IHCC ! #define DOGETUSER #define LOGDIR *************** *** 140,143 **** #ifdef BSD4_2 ! #define MKDIR_SUB #define READDIR #endif /* BSD4_2 */ --- 148,152 ---- #ifdef BSD4_2 ! #define MKDIRSUB #define READDIR + #define RENAMESUB #endif /* BSD4_2 */ *************** *** 161,162 **** --- 170,172 ---- #define PREFIX(a,b) ((charmap[*(a)] != charmap[*(b)]) ? FALSE : prefix((a)+1, (b)+1)) + #define MKTEMP(a) {if (mktemp(a) == 0) xerror("mktemp(%s): ", a);} Index: postnews.c Prereq: 1.35 *** .d/postnews.c Mon Nov 23 19:13:31 1987 --- postnews.c Mon Nov 30 18:46:47 1987 *************** *** 19,21 **** #ifdef SCCSID ! static char *SccsId = "@(#)postnews.c 1.35 11/19/87"; #endif /* SCCSID */ --- 19,21 ---- #ifdef SCCSID ! static char *SccsId = "@(#)postnews.c 1.36 11/30/87"; #endif /* SCCSID */ *************** *** 449,451 **** (void) strcpy(tempfname, "/tmp/postXXXXXX"); ! (void) mktemp(tempfname); --- 449,451 ---- (void) strcpy(tempfname, "/tmp/postXXXXXX"); ! MKTEMP(tempfname); *************** *** 887,889 **** ! mktemp(temp2fname); --- 887,889 ---- ! MKTEMP(temp2fname); *************** *** 1115,1118 **** ! (void) mktemp(headerfile); ! (void) mktemp(codedfile); --- 1115,1118 ---- ! MKTEMP(headerfile); ! MKTEMP(codedfile); *************** *** 1201,1214 **** } - - #if !defined(BSD4_2) - rename(from,to) - register char *from, *to; - { - (void) unlink(to); - if (link(from, to) < 0) - return -1; - - (void) unlink(from); - return 0; - } - #endif /* !BSD4_2 && ! BSD4_1C */ --- 1201 ---- Index: process.c Prereq: 2.18 *** .d/process.c Mon Nov 23 19:13:32 1987 --- process.c Mon Nov 30 18:46:48 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)process.c 2.18 11/19/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)process.c 2.19 11/30/87"; #endif /* SCCSID */ *************** *** 40,42 **** 'h', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, - 'A', '\0', FALSE, OPTION, UNKNOWN, UNKNOWN,(char *)NULL, #ifdef TMAIL --- 40,41 ---- *************** *** 50,51 **** --- 49,51 ---- 'K', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, + 'A', '\0', FALSE, OPTION, UNKNOWN, UNKNOWN,(char *)NULL, '\0', '\0', 0, 0, 0, 0, (char *)NULL Index: readr.c Prereq: 2.65 *** .d/readr.c Wed Nov 4 14:58:08 1987 --- readr.c Mon Nov 30 18:47:21 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)readr.c 2.65 11/4/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)readr.c 2.66 11/30/87"; #endif /* SCCSID */ *************** *** 118,120 **** (void) umask(022); ! (void) mktemp(outfile); /* get "unique" file name */ (void) close(creat(outfile,0666)); --- 118,120 ---- (void) umask(022); ! MKTEMP(outfile); /* get "unique" file name */ (void) close(creat(outfile,0666)); *************** *** 776,778 **** (void) strcpy(tf, tft); ! (void) mktemp(tf); --- 776,778 ---- (void) strcpy(tf, tft); ! MKTEMP(tf); Index: recnews.c Prereq: 2.16 *** .d/recnews.c Mon Nov 23 19:13:33 1987 --- recnews.c Fri Dec 4 02:47:46 1987 *************** *** 50,52 **** #ifdef SCCSID ! static char *SccsId = "@(#)recnews.c 2.16 11/19/87"; #endif /* SCCSID */ --- 50,52 ---- #ifdef SCCSID ! static char *SccsId = "@(#)recnews.c 2.18 12/4/87"; #endif /* SCCSID */ *************** *** 96,98 **** int fromset; /* from passed on command line */ ! char cmdbuf[BFSZ]; /* command to popen */ --- 96,98 ---- int fromset; /* from passed on command line */ ! char cmdbuf[BFSZ]; /* command to pipeopen */ *************** *** 99,101 **** extern char *strcat(), *strcpy(), *index(); ! extern FILE *popen(); char *any(); --- 99,101 ---- extern char *strcat(), *strcpy(), *index(); ! FILE *pipeopen(); char *any(); *************** *** 183,186 **** case INCLUSIVE: ! sprintf(cmdbuf,"exec %s%s -p", inews, not_this_site); ! pipe = popen(cmdbuf,"w"); if (pipe == NULL){ --- 183,186 ---- case INCLUSIVE: ! sprintf(cmdbuf,"%s%s -p", inews, not_this_site); ! pipe = pipeopen(cmdbuf); if (pipe == NULL){ *************** *** 203,205 **** sprintf(cmdbuf, ! "exec %s -t \"%s\" -n \"%s\" -f \"%s\"%s%s", inews, *subject ? subject : "(none)", --- 203,205 ---- sprintf(cmdbuf, ! "%s -t \"%s\" -n \"%s\" -f \"%s\"%s%s", inews, *subject ? subject : "(none)", *************** *** 210,214 **** #else ! pipe = popen(cmdbuf, "w"); if (pipe == NULL) { ! perror("recnews: popen failed"); exit(1); --- 210,214 ---- #else ! pipe = pipeopen(cmdbuf); if (pipe == NULL) { ! perror("recnews: pipeopen failed"); exit(1); *************** *** 231,233 **** sprintf(cmdbuf, ! "exec \"%s\" -t \"%s\" -n \"%s\" -f \"%s\"%s%s", inews, subject, newsgroup, from, approved, --- 231,233 ---- sprintf(cmdbuf, ! "%s -t \"%s\" -n \"%s\" -f \"%s\"%s%s", inews, subject, newsgroup, from, approved, *************** *** 238,240 **** #else ! pipe = popen(cmdbuf, "w"); if (pipe == NULL) { --- 238,240 ---- #else ! pipe = pipeopen(cmdbuf); if (pipe == NULL) { *************** *** 251,252 **** --- 251,253 ---- } + pipeclose(pipe); exit(0); *************** *** 340,341 **** --- 341,436 ---- return(NULL); + } + + /* + * This is similar to open, but made more secure. Rather than + * forking off a shell, you get a bare process. + * You can use "" to get white space into an argument, but + * nothing else is recognized + */ + + #define RDR 0 + #define WTR 1 + #define MAXARGS 20 + static int mopen_pid[20]; + + FILE * + pipeopen(cmd) + register char *cmd; + { + int p[2]; + register myside, hisside, pid; + + if(pipe(p) < 0) + return NULL; + myside = p[WTR]; + hisside = p[RDR]; + if ((pid = vfork()) == 0) { + char *args[MAXARGS]; + register char **ap = args; + + /* myside and hisside reverse roles in child */ + (void) close(myside); + (void) close(0); + (void) dup(hisside); + (void) close(hisside); + (void) setgid(getgid()); + (void) setuid(getuid()); + + while (isspace(*cmd)) + cmd++; + + while (*cmd != '\0') { + *ap++ = cmd; + if (ap >= &args[MAXARGS]) { + fprintf(stderr, "Too many args to %s", args[0]); + _exit(2); + } + while (*cmd && !isspace(*cmd)) { + if (*cmd++ == '"') { + register char *bcp = cmd-1; + while (*cmd && *cmd != '"') + *bcp++ = *cmd++; + *bcp = '\0'; + cmd++; + } + } + if (*cmd) + *cmd++ = '\0'; + while (isspace(*cmd)) + cmd++; + } + *ap = (char *)NULL; + + execv(args[0], args); + perror("pipeopen exec:"); + _exit(1); + } + + if(pid == -1) + return NULL; + + mopen_pid[myside] = pid; + (void) close(hisside); + return fdopen(myside, "w"); + } + + pipeclose(ptr) + FILE *ptr; + { + register f, r, (*hstat)(), (*istat)(), (*qstat)(); + int status; + + f = fileno(ptr); + (void) fclose(ptr); + istat = signal(SIGINT, SIG_IGN); + qstat = signal(SIGQUIT, SIG_IGN); + hstat = signal(SIGHUP, SIG_IGN); + while((r = wait(&status)) != mopen_pid[f] && r != -1) + ; + if(r == -1) + status = -1; + signal(SIGINT, istat); + signal(SIGQUIT, qstat); + signal(SIGHUP, hstat); + return status; } Index: rfuncs.c Prereq: 2.43 *** .d/rfuncs.c Wed Nov 4 14:58:24 1987 --- rfuncs.c Mon Nov 30 18:47:24 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs.c 2.43 11/4/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs.c 2.44 11/30/87"; #endif /* SCCSID */ *************** *** 253,255 **** ! ofp = xfopen(mktemp(outfile), "w"); if (aflag && *datebuf) --- 253,256 ---- ! MKTEMP(outfile); ! ofp = xfopen(outfile, "w"); if (aflag && *datebuf) *************** *** 332,334 **** (void) signal(SIGTERM, catchterm); ! (void) sprintf(bfr, "%s -f %s -T %s", TMAIL, outfile, mktemp(infile)); fwait(fsubr(ushell, bfr, (char *)NULL)); --- 333,336 ---- (void) signal(SIGTERM, catchterm); ! MKTEMP(infile); ! (void) sprintf(bfr, "%s -f %s -T %s", TMAIL, outfile, infile); fwait(fsubr(ushell, bfr, (char *)NULL)); *************** *** 632,634 **** /* make a new sorted copy of ACTIVE */ ! nfp = fopen(mktemp(newactivename), "w"); (void) chmod(newactivename, 0600); --- 634,637 ---- /* make a new sorted copy of ACTIVE */ ! MKTEMP(newactivename); ! nfp = fopen(newactivename, "w"); (void) chmod(newactivename, 0600); Index: rfuncs2.c Prereq: 1.35 *** .d/rfuncs2.c Tue Mar 24 13:51:56 1987 --- rfuncs2.c Mon Nov 30 18:47:25 1987 *************** *** 18,20 **** #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs2.c 1.35 3/21/87"; #endif /* SCCSID */ --- 18,20 ---- #ifdef SCCSID ! static char *SccsId = "@(#)rfuncs2.c 1.36 11/30/87"; #endif /* SCCSID */ *************** *** 365,367 **** strcpy(TRANS, "/tmp/trXXXXXX"); ! ofp = xfopen(mktemp(TRANS), "w"); if (index(sp->s_flags, 'A') == NULL) --- 365,368 ---- strcpy(TRANS, "/tmp/trXXXXXX"); ! MKTEMP(TRANS); ! ofp = xfopen(TRANS, "w"); if (index(sp->s_flags, 'A') == NULL) Index: sendbatch.sh Prereq: 1.14 *** .d/sendbatch.sh Wed Nov 4 14:58:27 1987 --- sendbatch.sh Tue Dec 1 18:51:34 1987 *************** *** 1,2 **** ! : '@(#)sendbatch.sh 1.14 11/4/87' --- 1,2 ---- ! : '@(#)sendbatch.sh 1.16 12/1/87' *************** *** 4,6 **** --- 4,8 ---- LIM=50000 + MINDF=MINDISKFREE MAXBATCH=MAXPERBATCH + SPOOLDISK=SPOOL_DISK CMD='LIBDIR/batch BATCHDIR/$rmt $BLIM' *************** *** 38,40 **** ! if [ -s /tmp/uuq.output ] ; then q=`echo "$rmt" | sed 's/\(.......\).*/\1/'` --- 40,51 ---- ! df=`df $SPOOLDISK | awk "\\$6 == \\"$SPOOLDISK\" {print \\$4} ! \\$1 == \\"$SPOOLDISK\\" {print \\$3}"` ! if test ! -z "$df" -a \( "$df" -lt $MINDF \) ! then ! echo not enough space on $SPOOLDISK: $df ! continue ! fi ! ! if test -s /tmp/uuq.output ! then q=`echo "$rmt" | sed 's/\(.......\).*/\1/'` *************** *** 41,43 **** q=`awk "\\$1 == \\"$q:\\" { print \\$4;exit}" </tmp/uuq.output` ! if [ ! -z "$q" -a \( "$q" -gt $MAXBATCH \) ] ; then --- 52,54 ---- q=`awk "\\$1 == \\"$q:\\" { print \\$4;exit}" </tmp/uuq.output` ! if test ! -z "$q" -a \( "$q" -gt $MAXBATCH \) then Index: visual.c Prereq: 1.39 *** .d/visual.c Wed Nov 4 14:58:50 1987 --- visual.c Mon Nov 30 18:47:31 1987 *************** *** 6,8 **** #ifdef SCCSID ! static char *SccsId = "@(#)visual.c 1.39 11/4/87"; #endif /* SCCSID */ --- 6,8 ---- #ifdef SCCSID ! static char *SccsId = "@(#)visual.c 1.40 11/30/87"; #endif /* SCCSID */ *************** *** 191,193 **** xxit(1); ! (void) mktemp(tfname); (void) close(creat(tfname,0666)); --- 191,193 ---- xxit(1); ! MKTEMP(tfname); (void) close(creat(tfname,0666)); *************** *** 1005,1007 **** (void) strcpy(tf, tft); ! (void) mktemp(tf); (void) close(creat(tf,0600)); --- 1005,1007 ---- (void) strcpy(tf, tft); ! MKTEMP(tf); (void) close(creat(tf,0600)); *************** *** 2608,2610 **** (void) strcpy(temp, "/tmp/vnXXXXXX"); ! (void) mktemp(temp); fname = temp; --- 2608,2610 ---- (void) strcpy(temp, "/tmp/vnXXXXXX"); ! MKTEMP(temp); fname = temp; Index: patchlevel.h Prereq: 13 *** .d/patchlevel.h Mon Nov 23 19:13:35 1987 --- patchlevel.h Mon Nov 30 18:47:32 1987 *************** *** 1,3 **** ! #define PATCHLEVEL 13 ! #define NEWS_VERSION "B 2.11 11/19/87" --- 1,3 ---- ! #define PATCHLEVEL 14 ! #define NEWS_VERSION "B 2.11 12/1/87" -- Arnold Robbins -- The Basement Computer UUCP: { gatech, emory, gt-eedsp, bakerst, gladys }!skeeve!arnold /bin/csh: Just Say NO!