Newsgroups: news.software.b Subject: C News patch CR.C This is the second part of a two-part patch, the first being CR.B, for the Cleanup Release of C News. The distribution files on ftp.cs.toronto.edu and zoo.toronto.edu have been updated to match. See the README.changes diff below for what's been done. start of patch CR.C (suggested archive name: patchCR.C) apply with patch -p0 $tmp # do some checking ! awk 'NF != 4 || $1 ~ /\// || $4 !~ /^([ynmx]|=[^\/]+)$/' $tmp >$err if test -s $err then ! echo "$0: `wc -l <$err` bad lines in input" >&2 exit fi - awk '{ print $1 }' $tmp | sort | uniq -d >$err - if test -s $err - then - echo "$0: `wc -l <$err` duplicate newsgroups in input" >&2 - exit - fi - awk '$4 ~ /^=/ { print substr($4, 2) }' $tmp | sort -u >$tmpb - awk '{ print $1 }' active $tmp | sort -u | comm -13 - $tmpb >$err - if test -s $err - then - echo "$0: `wc -l <$err` groups are =ed to nonexistent groups" >&2 - exit - fi - awk '{ print $1, $4 }' $tmp | sort >$tmpb # now we need to make sure things don't change underfoot... lock LOCK $$ 10 || exit --- 34,46 ---- cat $* >$tmp # do some checking ! checkactive -q $tmp >$err 2>&1 if test -s $err then ! echo "$0: problems in input:" >&2 ! cat $err >&2 exit fi # now we need to make sure things don't change underfoot... lock LOCK $$ 10 || exit *************** *** 60,73 **** locks=LOCK # let's be paranoid... ! awk 'NF != 4' active >$err if test -s $err then ! echo "$0: $NEWSCTL/active contains bad lines!" >&2 exit fi # pick out the new ones sort active | join -a2 - $tmpb | awk 'NF == 2' >$tmp # and away we go... --- 47,62 ---- locks=LOCK # let's be paranoid... ! checkactive -q active >$err 2>&1 if test -s $err then ! echo "$0: problems in $NEWSCTL/active:" >&2 ! cat $err >&2 exit fi # pick out the new ones + awk '{ print $1, $4 }' $tmp | sort >$tmpb sort active | join -a2 - $tmpb | awk 'NF == 2' >$tmp # and away we go... *************** *** 89,94 **** --- 78,86 ---- mv active active.old || exit mv active.tmp active || exit mv active.times active.times.o && mv actimes.tmp active.times + + # and add any necessary directories + adddirs # looks like it worked status=0 *** maint/badexpiry.mastercopy Sun Nov 27 20:36:35 1994 --- maint/badexpiry Tue Oct 18 21:52:11 1994 *************** *** 1,7 **** #! /bin/sh ! # Reports groups with more than 25 articles ! # or 250KB of articles with expiry dates more than 10 days after their ! # arrival dates. # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/etc/news/bin/config} --- 1,7 ---- #! /bin/sh ! # Reports groups with more than $1 articles, >90% of all articles, or ! # or >$2KB of articles with expiry dates more than 10 days after their ! # arrival dates. Defaults 15 and 500. # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/etc/news/bin/config} *************** *** 8,22 **** PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH umask $NEWSUMASK cd $NEWSARTS ! egrep '[0-9] ' $NEWSCTL/history | ! awk -F' ' '{ ! n = split($2, f, "~") ! if (f[2] != "-" && f[2]-f[1] > 864000) { ! n = split($3, f, " ") ! for (i = 1; i <= n; i++) ! print f[i] ! } }' | tr . / | xargs $NEWSBIN/sizeof -i | sed 's;/[^/]* ; ;' | ( sort ; echo dummy ) | awk '{ --- 8,28 ---- PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH umask $NEWSUMASK + case "$#" in + 0) minarts=15 ; minsize=500 ;; + 2) minarts=$1 ; minsize=$2 ;; + *) echo "Usage: $0 [minarts minsize]" >&2 ; exit 2 ;; + esac + cd $NEWSARTS ! egrep -v '~-' $NEWSCTL/history | ! awk -F' ' 'NF > 2 { ! n = split($2, f, "~") ! if (f[2] != "-" && f[2]-f[1] > 864000) { ! n = split($3, f, " ") ! for (i = 1; i <= n; i++) ! print f[i] ! } }' | tr . / | xargs $NEWSBIN/sizeof -i | sed 's;/[^/]* ; ;' | ( sort ; echo dummy ) | awk '{ *************** *** 29,32 **** } n++ size += $2 ! }' | tr / . | awk '$2 > 25 || $3 > 250000' --- 35,56 ---- } n++ size += $2 ! }' | ! while read group narts size ! do ! npresent=`ls -f $group | egrep '^[0-9]+$' | wc -l` ! echo $group $narts $npresent $size ! done | tr / . | ! awk ' { bad = "" } ! $2 > '$minarts' { ! bad = bad ", " $2 " articles" ! } ! $2 > 0.9*$3 { ! bad = bad ", " $2 " out of " $3 " articles" ! } ! $4 > '$minsize'*1024 { ! bad = bad ", " int(($4+512)/1024) "KB" ! } ! bad != "" { ! print $1, "has", substr(bad, 3), "on long expiry" ! }' *** maint/newsdaily.mastercopy Sun Nov 27 20:36:35 1994 --- maint/newsdaily Sun Nov 27 17:09:47 1994 *************** *** 86,91 **** --- 86,102 ---- ) >>$gripes fi + # do a quick check of the active file + checkactive -q >$tmp + if test -s $tmp + then + ( + echo 'checkactive reports problems in active file:' + cat $tmp + echo + ) >>$gripes + fi + # sweep log file, once, for suspect lines egrep '` ancient *************** *** 158,167 **** --- 169,183 ---- # and do other daily chores $NEWSBIN/relay/dodelayed + if test -s dirs.tbd then while read dir do + if test ! -d $NEWSARTS/$dir + then + continue # NOTE CONTINUE + fi cd $NEWSARTS/$dir if test " `ls | egrep '^[0-9]+$' | wc -l`" -gt 0 then *************** *** 186,190 **** --- 202,207 ---- done fi done dirs.ttd + cd $NEWSCTL mv dirs.ttd dirs.tbd fi *** maint/checkactive.mastercopy Sun Nov 27 20:36:36 1994 --- maint/checkactive Mon Nov 14 16:57:13 1994 *************** *** 0 **** --- 1,106 ---- + #! /bin/sh + # checkactive - check an active file for worrisome signs + # checkactive file + + # =()<. ${NEWSCONFIG-@@}>()= + . ${NEWSCONFIG-/etc/news/bin/config} + + PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH + umask $NEWSUMASK + + quick=n + for dummy + do + case "$1" in + -q) quick=y ;; + --) shift ; break ;; + -*) echo "$0: unknown option \`$1'" >&2 ; exit 2 ;; + *) break ;; + esac + shift + done + case $# in + 0) file=$NEWSCTL/active ;; + 1) file=$1 ;; + *) echo "Usage: $0 file" >&2 ; exit 2 ;; + esac + + tmp=/tmp/ca$$ + tmpb=/tmp/cb$$ + status=1 + trap 'rm -f $tmp $tmpb ; trap 0 ; exit $status' 0 1 2 15 + + if test ! -s $file + then + echo "input is empty" + exit + fi + + awk 'BEGIN { status = 0 ; q = "\"" } + { where = "line " NR ":" } + NF != 4 { print where, "has", NF, "not 4 fields" ; status = 1 } + $1 !~ /^[a-z][a-z0-9+_-]*(\.([a-z0-9+_-]+|=\?([a-zA-Z0-9=.?+_-]|\/)*\?=))*$/ { + # not fully rigorous, but a good first cut + print where, "newsgroup name", q $1 q, "invalid" ; status = 1 + } + $2 !~ /^[0-9]+$/ { print where, q $2 q, "is non-numeric" ; status = 1 } + $3 !~ /^[0-9]+$/ { print where, q $3 q, "is non-numeric" ; status = 1 } + $4 !~ /^([ynmx]|=.*)$/ { + print where, "field 4 (" q $4 q ") invalid" ; status = 1 + } + 0+$3 < 1 { print where, "field 3 (" q $3 q ") zero or negative" ; status = 1 } + 1+$2 < 0+$3 { print where, q $2 q, "<", q $3 q ; status = 1 } + END { exit status }' $file || exit + + awk '{print $1}' $file | sort | uniq -d >$tmp + if test -s $tmp + then + echo `wc -l <$tmp` "duplicate newsgroup name(s):" + cat $tmp + exit + fi + + awk '$4 ~ /^=/ { print substr($4, 2) }' $file | sort -u >$tmp + awk '{ print $1 }' $file | sort -u | comm -13 - $tmp >$tmpb + if test -s $tmpb + then + echo `wc -l <$tmpb` "newsgroup(s) are =ed to nonexistent groups:" + cat $tmpb + exit + fi + + me="`newshostname`" + gngppat=`awk -f $NEWSBIN/canonsys.awk $NEWSCTL/sys | + egrep "^($me|ME)[:/]" | + awk -F: ' + { + fields = split($2, field2, "/") # split ngs/dists + nngs = split(field2[1], ngs, ",") # split ng,ng,ng + for (i = 1; i < nngs; i++) # print field2[1] robustly + printf "%s,", ngs[i] + printf "%s\n", ngs[nngs] + exit + }' ` + awk '$1 !~ /^(control|junk)$/ { print $1 }' $file | gngp -a -v "$gngppat" >$tmp + if test -s $tmp + then + echo `wc -l <$tmp` "newsgroup(s) are disallowed by ME line of sys file:" + cat $tmp + exit + fi + + case "$quick" in + y) status=0 ; exit ;; + esac + + # this is pretty slow + while read newsgroup rest + do + echo "$newsgroup" | awk -f $NEWSBIN/namecheck.awk + done <$file | tee $tmp + if test -s $tmp + then + exit + fi + + status=0 # and the trap does the actual exit *** maint/makefile.mastercopy Sun Nov 27 20:36:36 1994 --- maint/makefile Mon Nov 14 16:58:27 1994 *************** *** 4,10 **** BINS=histinfo NORMAL=$(BINS) newsdaily newswatch newsboot addgroup delgroup adddirs \ act.to.times histfrom newsfrom addmissing newshist badexpiry \ ! newsflag mkhistory locknews histdups logroll mergeactive CUSTOM=spaceshort UI=cnewsdo DPROGS=$(NORMAL) $(CUSTOM) --- 4,11 ---- BINS=histinfo NORMAL=$(BINS) newsdaily newswatch newsboot addgroup delgroup adddirs \ act.to.times histfrom newsfrom addmissing newshist badexpiry \ ! newsflag mkhistory locknews histdups logroll mergeactive \ ! checkactive CUSTOM=spaceshort UI=cnewsdo DPROGS=$(NORMAL) $(CUSTOM) *************** *** 29,34 **** --- 30,36 ---- cmp: $(ALL) @$(IN) $(DEST) $(DPROGS) @$(IN) $(UIBIN) $(UI) + $(DEST)/checkactive -q $(BINS): $(LIB) *************** *** 39,56 **** FIXMIDFIELD='s/ [1-9][0-9]*~/ 1~/' ../util/dbz: ! ( cd ../util ; $(MAKE) dbz ) ! rsetup: $(PROGS) ../util/dbz $(MX) $(PROGS) mkdir bin maint cp histinfo histdups maint ! cp ../util/dbz bin echo 'exit 0' >bin/lock echo 'exit 0' >bin/unlock echo 'echo here' >bin/newshostname echo 'echo 0' >bin/now $(MX) maint/* bin/* mkdir arts arts/foo arts/bar arts/bar/ugh arts/urp mkdir arts/bletch arts/lost+found echo nevermore >arts/lost+found/1 --- 41,62 ---- FIXMIDFIELD='s/ [1-9][0-9]*~/ 1~/' ../util/dbz: ! cd ../util ; $(MAKE) dbz ! ../util/gngp: ! cd ../util ; $(MAKE) gngp ! ! rsetup: $(PROGS) ../util/dbz ../util/gngp ../util/namecheck.awk ../util/canonsys.awk $(MX) $(PROGS) mkdir bin maint cp histinfo histdups maint ! cp ../util/dbz ../util/gngp bin echo 'exit 0' >bin/lock echo 'exit 0' >bin/unlock echo 'echo here' >bin/newshostname echo 'echo 0' >bin/now $(MX) maint/* bin/* + cp ../util/namecheck.awk ../util/canonsys.awk . mkdir arts arts/foo arts/bar arts/bar/ugh arts/urp mkdir arts/bletch arts/lost+found echo nevermore >arts/lost+found/1 *************** *** 78,83 **** --- 84,90 ---- echo ' 0~0 bar.ugh/13' >>history.gbase echo 'Message-ID: illegal' >arts/bar/ugh/13 sed $(FIXMIDFIELD) history.gbase | sort >history.good + echo 'here/there:foo,bar,bletch/nonsense' >sys r: $(PROGS) rclean rsetup : "mkhistory" *************** *** 114,130 **** cmp history.good history.fixed || diff history.good history.fixed test ! -s addm.out ; test ! -s addm.diag ; ! : give mergeactive a try echo "foo 77 01 m" >active echo "bar 99 77 y" >>active echo "foo 0 nobody" >active.times echo "bar 0 nobody" >>active.times echo "foo 22 21 m" >active.new echo "bletch 777 002 =foo" >>active.new ! cp active active.good ! echo "bletch 0000000000 00001 =foo" >>active.good ! cp active.times actimes.good ! echo "bletch 0 regression@here" >>actimes.good $(HERE) ./mergeactive active.new >ma.out 2>ma.diag test ! -s ma.out ; test ! -s ma.diag ; --- 121,143 ---- cmp history.good history.fixed || diff history.good history.fixed test ! -s addm.out ; test ! -s addm.diag ; ! : quick verification that checkactive at least runs, not a good test... echo "foo 77 01 m" >active echo "bar 99 77 y" >>active + echo "bletch 0000000000 00001 =foo" >>active + $(HERE) ./checkactive >ca.out 2>ca.diag + test ! -s ca.out ; + test ! -s ca.diag ; + : give mergeactive a try echo "foo 0 nobody" >active.times echo "bar 0 nobody" >>active.times + echo "bletch 0 regression@here" >>active.times echo "foo 22 21 m" >active.new echo "bletch 777 002 =foo" >>active.new ! mv active active.good ! egrep -v bletch active.good >active ! mv active.times actimes.good ! egrep -v bletch actimes.good >active.times $(HERE) ./mergeactive active.new >ma.out 2>ma.diag test ! -s ma.out ; test ! -s ma.diag ; *************** *** 135,140 **** --- 148,154 ---- rclean: rm -f history history.pag history.dir active active.* active.times* rm -f history.n* history.* *.out *.diag *.good *.fixed actimes.* + rm -f namecheck.awk canonsys.awk sys rm -rf arts maint bin clean: rclean *** man/expire.8cn.mastercopy Sun Nov 27 20:36:37 1994 --- man/expire.8cn Wed Oct 19 00:15:25 1994 *************** *** 4,10 **** .ds b /usr/libexec/news .\" =()<.ds c @@>()= .ds c /etc/news ! .TH EXPIRE 8CN "3 Oct 1994" .BY "C News" .SH NAME expire, doexpire, expireiflow \- expire old news --- 4,10 ---- .ds b /usr/libexec/news .\" =()<.ds c @@>()= .ds c /etc/news ! .TH EXPIRE 8CN "19 Oct 1994" .BY "C News" .SH NAME expire, doexpire, expireiflow \- expire old news *************** *** 364,370 **** \*c/history.o history file as of last expiry \*c/history.n* new history file and \fIdbm\fR files abuilding \*c/LOCKexpire \fIdoexpire\fR's lock file - \*b/expire/* various auxiliaries .SH SEE ALSO inews(1CN), dbm(3), --- 364,369 ---- *** man/newsdb.5.mastercopy Sun Nov 27 20:36:37 1994 --- man/newsdb.5 Fri Nov 18 11:12:01 1994 *************** *** 26,32 **** .fi .LP .. ! .TH NEWSDB 5 "9 Sept 1994" .BY "C News" .SH NAME newsdb \- USENET network news database: article tree, history, active, active.times --- 26,32 ---- .fi .LP .. ! .TH NEWSDB 5 "18 Nov 1994" .BY "C News" .SH NAME newsdb \- USENET network news database: article tree, history, active, active.times *************** *** 157,162 **** --- 157,169 ---- .B \*c/history.dir and .BR \*c/history.pag . + .PP + Also usually present now are + .I overview + files, one per newsgroup; + see + .IR newsoverview (5) + for more detail on them. .SH EXAMPLES A trivial .I active *************** *** 206,208 **** --- 213,226 ---- invented by Mark Moraes and Geoff Collyer as part of the C News project. + .SH BUGS + Reader implementors are warned that the + various files mentioned here\(emthe + .I active + file, + the + .I history + file, + the article tree itself, + and the overview files\(emin general are not updated perfectly simultaneously. + Nor are they necessarily updated in a predictable order. *** man/badexpiry.8cn.mastercopy Sun Nov 27 20:36:38 1994 --- man/badexpiry.8cn Tue Oct 18 21:55:30 1994 *************** *** 0 **** --- 1,41 ---- + .\" =()<.ds a @@>()= + .ds a /var/news + .\" =()<.ds b @@>()= + .ds b /usr/libexec/news + .\" =()<.ds c @@>()= + .ds c /etc/news + .TH BADEXPIRY 8CN "18 Oct 1994" + .BY "C News" + .SH NAME + badexpiry \- find newsgroups with odd use of explicit expiry dates + .SH SYNOPSIS + .B badexpiry + [ mincount minsize ] + .SH DESCRIPTION + .I Badexpiry + reports (on standard output) newsgroups + with suspicious patterns of use of explicit + expiry dates in articles. + Specifically, it reports groups with more than + .I mincount + (default 15) articles, + more than 90% of all articles, + or more than + .I minsize + (default 500) KB of articles having explicit expiry dates + more than 10 days after their arrival dates. + .PP + Such reports are not necessarily indicative of abuses\(emfor example, + .I news.announce.newusers + legitimately has most or all of its articles on long expiry\(embut + investigation may be in order. + .SH FILES + \*c/history + .br + \*a/*/*/... + .SH SEE ALSO + news(5), newsdb(5) + .SH HISTORY + Written for C News by Henry Spencer. + .SH BUGS + The percentage and age thresholds ought to be settable. *** man/checkactive.8.mastercopy Sun Nov 27 20:36:38 1994 --- man/checkactive.8 Mon Nov 14 17:01:41 1994 *************** *** 0 **** --- 1,43 ---- + .\" =()<.ds a @@>()= + .ds a /var/news + .\" =()<.ds b @@>()= + .ds b /usr/libexec/news + .\" =()<.ds c @@>()= + .ds c /etc/news + .TH CHECKACTIVE 8CN "9 Nov 1994" + .BY "C News" + .SH NAME + checkactive \- check format of news active file + .SH SYNOPSIS + .B checkactive + [ + .B \-q + ] [ file ] + .SH DESCRIPTION + .I Checkactive + checks the format of news's + .I active + file + (or the named + .IR file , + if specified), + and also checks the file for consistency with the + .I sys + file. + Complaints, if any, are produced on standard output. + .PP + The + .B \-q + (quick) option suppresses one test, + precise checking of the format of newsgroup names, + which is relatively slow for a large + .I active + file. + .SH SEE ALSO + newsdb(5) + .SH HISTORY + Written at U of Toronto by Henry Spencer. + .SH BUGS + There's no good reason why name-format checking + .I has + to be so slow. *** nov/expovguts.c.mastercopy Sun Nov 27 20:36:39 1994 --- nov/expovguts.c Mon Oct 31 14:07:21 1994 *************** *** 59,69 **** } start = atol(argv[optind+1]); ! stop = atol(argv[optind]) + 100; /* arbitrary slop */ ! if (start >= stop || start == 0) { ! fprintf(stderr, "%s: min is 0 or exceeds max\n", progname); exit(2); } if (debug) printf("start %ld, stop %ld\n", start, stop); --- 59,71 ---- } start = atol(argv[optind+1]); ! stop = atol(argv[optind]); /* tentatively */ ! if (start > stop+1 || start == 0) { ! fprintf(stderr, "%s: min (%s) is 0 or exceeds max (%s) + 1\n", ! progname, argv[optind+1], argv[optind]); exit(2); } + stop += 100; /* a bit of headroom */ if (debug) printf("start %ld, stop %ld\n", start, stop); *** readnews/postnews.mastercopy Sun Nov 27 20:36:39 1994 --- readnews/postnews Wed Nov 2 00:16:59 1994 *************** *** 4,10 **** # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/etc/news/bin/config} ! PATH=$NEWSCTL/bin:$NEWSBIN/inject:$NEWSBIN:$NEWSPATH # but do not export it umask 077 # private tmp=/tmp/pn$$ --- 4,13 ---- # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/etc/news/bin/config} ! oldpath="$PATH" ! newpath=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ! PATH=$newpath ! export PATH umask 077 # private tmp=/tmp/pn$$ *************** *** 82,88 **** --- 85,93 ---- echo REPLACE THIS LINE WITH YOUR TEXT >>$tmp trap : 2 + PATH="$oldpath" $edit $tmp + PATH=$newpath trap "$term" 2 while egrep '^(DELETE|REPLACE) THIS LINE' $tmp >/dev/null *************** *** 99,107 **** echo 'Editing again... Please check it over carefully.' trap : 2 $edit $tmp trap "$term" 2 done echo 'Posting...' ! inews -h <$tmp --- 104,114 ---- echo 'Editing again... Please check it over carefully.' trap : 2 + PATH="$oldpath" $edit $tmp + PATH=$newpath trap "$term" 2 done echo 'Posting...' ! $NEWSBIN/inject/inews -h <$tmp *** readnews/makefile.mastercopy Sun Nov 27 20:36:40 1994 --- readnews/makefile Wed Nov 2 00:05:59 1994 *************** *** 36,39 **** r rclean: $(ALL) clean: ! rm -f *.o core $(BINS) --- 36,39 ---- r rclean: $(ALL) clean: ! rm -f *.o core $(BINS) .newsrc *** relay/regress/regress.mastercopy Sun Nov 27 20:36:41 1994 --- relay/regress/regress Mon Oct 24 17:03:38 1994 *************** *** 14,20 **** (cd tmp; tar -xf -) l_dev = statb.st_dev; free(destdir); for (plp = link1; plp < lp; plp++) ! if (plp->l_dev == lp->l_dev && plp->l_dev != -1) break; if (plp < lp) /* yes, we do */ if (plp->l_type == 'l') { --- 252,258 ---- lp->l_dev = statb.st_dev; free(destdir); for (plp = link1; plp < lp; plp++) ! if (plp->l_dev == lp->l_dev && plp->l_dev != (dev_t)-1) break; if (plp < lp) /* yes, we do */ if (plp->l_type == 'l') { *** util/newshostname.mastercopy Sun Nov 27 20:36:42 1994 --- util/newshostname Wed Nov 23 00:00:58 1994 *************** *** 4,10 **** . ${NEWSCONFIG-/etc/news/bin/config} PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH - umask $NEWSUMASK cat $NEWSCTL/whoami - exit 0 --- 4,8 ---- *** util/dostatfs.c.mastercopy Sun Nov 27 20:36:42 1994 --- util/dostatfs.c Thu Nov 10 19:20:23 1994 *************** *** 6,32 **** #include #include ! #include ! #ifndef MNAMELEN ! /* oops, this does not seem to be a 4.4BSD */ ! /* maybe it's SunOS? */ #include ! ! /* yet more silly variations... */ #ifdef _AIX #include #endif ! ! #endif /* MNAMELEN */ ! #ifdef BSD4_4 ! #define f_fsize f_bsize /* idiotic incompatible naming in 4.4 */ #endif - extern int debug; extern void error(); /* --- 6,46 ---- #include #include ! /* ! * Unfortunately, the whereabouts of the necessary struct, the exact ! * calling convention for statfs(), and the name of the "units in which ! * free space is expressed" member, are rather system-specific. Here's ! * a few attempts... ! */ ! /* First, pick up one popular header on general principles. */ ! #include ! /* Second, assorted variations... */ ! #ifdef BSD4_4 ! #define UNIT f_bsize ! #endif ! #ifdef sun #include ! #endif #ifdef _AIX #include #endif ! #ifdef M_XENIX /* SCO */ ! #include ! #define STATFS(fs, result) statfs(fs, &result, (int)sizeof(result), 0) ! #endif ! /* Finally, some defaults to simplify the above. */ ! #ifndef UNIT ! #define UNIT f_fsize #endif + #ifndef STATFS + #define STATFS(fs, result) statfs(fs, &result) + #endif + extern int debug; extern void error(); /* *************** *** 45,61 **** # define LOTS 10000 register long iperfile = filesize/bperi + 1; ! if (statfs(fileonfs, &info) < 0) error("cannot do statfs(%s)", fileonfs); if (debug) fprintf(stderr, "bsize %ld, avail %ld, inodes %ld\n", ! info.f_fsize, info.f_bavail, info.f_ffree); n = LOTS; if (info.f_bavail <= wantspace) n = 0; ! else if (info.f_fsize > 0 && filesize > 0) ! n = (info.f_bavail - wantspace) / (filesize/info.f_fsize + 1); if (info.f_ffree < 0) /* information unavailable */ ; /* bypass check, and pray */ --- 59,75 ---- # define LOTS 10000 register long iperfile = filesize/bperi + 1; ! if (STATFS(fileonfs, info) < 0) error("cannot do statfs(%s)", fileonfs); if (debug) fprintf(stderr, "bsize %ld, avail %ld, inodes %ld\n", ! info.UNIT, info.f_bavail, info.f_ffree); n = LOTS; if (info.f_bavail <= wantspace) n = 0; ! else if (info.UNIT > 0 && filesize > 0) ! n = (info.f_bavail - wantspace) / (filesize/info.UNIT + 1); if (info.f_ffree < 0) /* information unavailable */ ; /* bypass check, and pray */ *** util/makefile.mastercopy Sun Nov 27 20:36:43 1994 --- util/makefile Sun Nov 27 18:17:11 1994 *************** *** 88,95 **** dospacefor: dowhatever.o do$(SPACEFOR).o $(CC) $(LDFLAGS) dowhatever.o do$(SPACEFOR).o $(LIBS) -o $@ ! queuelen.pre: queuelen.old ! sed '/grade=d/s//grade=./' queuelen.old >$@ queuelen.null: echo '#! /bin/sh' >$@ --- 88,95 ---- dospacefor: dowhatever.o do$(SPACEFOR).o $(CC) $(LDFLAGS) dowhatever.o do$(SPACEFOR).o $(LIBS) -o $@ ! queuelen.pre: queuelen.vo ! sed '/grade=d/s//grade=./' queuelen.vo >$@ queuelen.null: echo '#! /bin/sh' >$@ *** util/queuelen.vo.mastercopy Sun Nov 27 20:36:43 1994 --- util/queuelen.vo Thu Sep 15 18:24:51 1994 *************** *** 0 **** --- 1,28 ---- + #! /bin/sh + # Find size of current queue of news outbound to $1. Ancient-uucp version. + + # =()<. ${NEWSCONFIG-@@}>()= + . ${NEWSCONFIG-/etc/news/bin/config} + + PATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH + umask $NEWSUMASK + + if test -d /usr/spool/uucp + then + cd /usr/spool/uucp + elif test -d /var/spool/uucp + then + cd /var/spool/uucp + else + echo "$0: can't find uucp spool directory" >&2 + echo 9999 + exit 1 + fi + grade=d + + case "$1" in + ?|??|???|????|?????|??????|???????) site="$1" ;; + *) site=`expr "$1" : '^\(.......\).*'` + esac + + ls | egrep "^C\.$site$grade....\$" | wc -l *** util/dbzinfo.mastercopy Sun Nov 27 20:36:44 1994 --- util/dbzinfo Tue Oct 18 20:59:36 1994 *************** *** 19,46 **** NR == 2 { print "lines", $1 printf "lines_history" ! n = 0 ! for (i = 2; i <= NF; i++) { ! if (n%5 == 0 && n != 0) ! printf "\n\t" ! else ! printf " " ! printf "%d", $i ! n++ ! } printf "\n" } NR == 3 { print "number_untagged", $1 printf "untagged_history" ! n = 0 ! for (i = 2; i <= NF; i++) { ! if (n%5 == 0 && n != 0) ! printf "\n\t" ! else ! printf " " ! printf "%d", $i ! n++ ! } printf "\n" }' $1.dir --- 19,32 ---- NR == 2 { print "lines", $1 printf "lines_history" ! for (i = 2; i <= NF; i++) ! printf " %d", $i printf "\n" } NR == 3 { print "number_untagged", $1 printf "untagged_history" ! for (i = 2; i <= NF; i++) ! printf " %d", $i printf "\n" }' $1.dir *** util/namecheck.awk.mastercopy Sun Nov 27 20:36:44 1994 --- util/namecheck.awk Mon Nov 7 17:08:00 1994 *************** *** 1,4 **** --- 1,5 ---- # awk program to check newsgroup names for validity, rigorously + # echo groupname | awk -f namecheck.awk # It may look like some things in per-component checking could be done # more efficiently by moving them into whole-name checking. The presence # of encoded name components messes this up.