Aucbarpa.1179 net.sources utzoo!decvax!harpo!npois!ucbvax!ARPAVAX:usenet Tue Apr 20 19:45:13 1982 2.3-2.6.c diff -c -r /ra/csr/glickman/news/dist/README news/README *** /ra/csr/glickman/news/dist/README Sun Mar 14 15:00:25 1982 --- news/README Tue Apr 20 10:44:04 1982 *************** *** 17,23 shows the changes you need to make to uucp to support the -z option. The dirform is the usenet directory form - you should fill it out and post it to newsgroup net.news.newsite to announce that you have joined ! the net. When you start getting network news, you should announce your existence to the net by filling out misc/dirform and posting it to the newsgroup --- 17,24 ----- shows the changes you need to make to uucp to support the -z option. The dirform is the usenet directory form - you should fill it out and post it to newsgroup net.news.newsite to announce that you have joined ! the net. Other useful tools contributed by other sites are added to ! this directory for optional use by USENET sites. When you start getting network news, you should announce your existence to the net by filling out misc/dirform and posting it to the newsgroup *************** *** 78,80 If you want LIBDIR/users to keep a useful list of users, you should create it mode 666, since readnews does not run suid. --- 79,92 ----- If you want LIBDIR/users to keep a useful list of users, you should create it mode 666, since readnews does not run suid. + + If you want expired articles kept around, create the directory + /usr/spool/oldnews. The expire program will create a hierarchy + under this location, if present, similar to the one under /usr/spool/news. + + The expire program will delete all articles in the history file + which are past their expiration date. It will remove both the + article and the line in history. This mechanism should keep your + history file down to a manageable size. The trimlib script in the + misc directory can be used to keep you log file down in size. + Both expire and trimlib should be run once a night from crontab. Common subdirectories: /ra/csr/glickman/news/dist/doc and news/doc Common subdirectories: /ra/csr/glickman/news/dist/man and news/man Common subdirectories: /ra/csr/glickman/news/dist/misc and news/misc Common subdirectories: /ra/csr/glickman/news/dist/src and news/src diff -c -r /ra/csr/glickman/news/dist/doc/howto.ms news/doc/howto.ms *** /ra/csr/glickman/news/dist/doc/howto.ms Wed Feb 24 04:58:58 1982 --- news/doc/howto.ms Sat Apr 3 11:48:32 1982 *************** *** 4,10 Mark R. Horton .AI Bell Telephone Laboratories ! .CB .SH What is the Network News? .PP --- 4,10 ----- Mark R. Horton .AI Bell Telephone Laboratories ! Columbus, Ohio 43213 .SH What is the Network News? .PP diff -c -r /ra/csr/glickman/news/dist/doc/install.ms news/doc/install.ms *** /ra/csr/glickman/news/dist/doc/install.ms Thu Mar 18 15:51:00 1982 --- news/doc/install.ms Tue Mar 30 18:51:54 1982 *************** *** 175,180 There are other parameters that may be modified in .B defs.h , and they are described in the file. .NH 2 Makefile .PP --- 175,190 ----- There are other parameters that may be modified in .B defs.h , and they are described in the file. + .NH 3 + MANUALLY + .PP + If this is defined, incoming + .B rmgroup + messages will not remove the subdirectories, but rather just remove the + group line from your active file. + You should have NOTIFY on if you use this. + Note that on a USG system the subdirectory will not be removed anyway + unless you have an unsecure (mode 777 directory) system. .NH 2 Makefile .PP *************** *** 954,959 .IP (3) Chmod the old news directory to 555 to prevent any more news from being posted. .IP (4) Replace the old rnews program with the new rnews program. .IP (5) --- 964,971 ----- .IP (3) Chmod the old news directory to 555 to prevent any more news from being posted. + (Actually, this will prevent the bitfile from being updated, + so it may not be a good idea.) .IP (4) Replace the old rnews program with the new rnews program. .IP (5) *************** *** 977,983 .DS netnews -s .DE ! to see what they subscribe to, and then create a file in their home directory called .newsrc containing .DS options -s \fItheir subscription\fP --- 989,995 ----- .DS netnews -s .DE ! to see what they subscribe to on the old system, and then create a file in their home directory called .newsrc containing .DS options -s \fItheir subscription\fP diff -c -r /ra/csr/glickman/news/dist/man/checknews.1 news/man/checknews.1 *** /ra/csr/glickman/news/dist/man/checknews.1 Thu Mar 18 15:51:06 1982 --- news/man/checknews.1 Sun Apr 4 20:34:53 1982 *************** *** 2,8 .SH NAME checknews \- check to see if user has news .SH SYNOPSIS ! checknews [ynevv] [readnews options] .SH DESCRIPTION .I checknews reports to the user whether or not he has news. --- 2,8 ----- .SH NAME checknews \- check to see if user has news .SH SYNOPSIS ! checknews [ynqevv] [readnews options] .SH DESCRIPTION .I checknews reports to the user whether or not he has news. *************** *** 12,17 .TP 10 .B n Reports ``No news'' if there isn't any news to read. .TP 10 .B v alters the --- 12,22 ----- .TP 10 .B n Reports ``No news'' if there isn't any news to read. + .TP 10 + .B q + causes checknews to be quiet. + Instead of printing a message, the exit status indicates news. + A status of 0 means no news, 1 means there is news. .TP 10 .B v alters the diff -c -r /ra/csr/glickman/news/dist/man/expire.8 news/man/expire.8 *** /ra/csr/glickman/news/dist/man/expire.8 Thu Feb 25 18:26:26 1982 --- news/man/expire.8 Tue Mar 30 18:43:45 1982 *************** *** 2,8 .SH NAME expire \- remove outdated news articles .SH SYNOPSIS ! /usr/lib/news/expire [ \-n newsgroups ] .SH DESCRIPTION .PP .I Expire --- 2,27 ----- .SH NAME expire \- remove outdated news articles .SH SYNOPSIS ! /usr/lib/news/expire ! [ ! .B \-n ! .I newsgroups ! ] ! [ ! .B \-i ! ] ! [ ! .B \-I ! ] ! [ ! .B \-v ! [ ! .I level ! ] ] ! [ ! .B \-e ! .I days ! ] .SH DESCRIPTION .PP .I Expire *************** *** 17,22 articles are moved to that directory. (The new filename is the article ID.) Otherwise, the articles are unlinked. .SH "SEE ALSO" inews(1), uurec(8), --- 36,73 ----- articles are moved to that directory. (The new filename is the article ID.) Otherwise, the articles are unlinked. + .PP + The + .B \-v + option causes expire to be more verbose. + It can be given a verbosity level (default 1) as in + .B \-v3 + for even more output. + This is useful if articles aren't being expired and you want to know why. + .PP + The + .B \-e + flag gives the number of days to use for a default expiration date. + If not given, an installation dependent default (often 2 weeks) is used. + .PP + The + .B \-i + and + .B \-I + flags + tell + .B expire + to ignore any expiration date explicitly given on articles. + This can be used when disk space is really tight. + The + .B \-I + flag will always ignore expiration dates, + while the + .B \-i + flag will only ignore the date if ignoring it would expire the article sooner. + .I WARNING: + If you have articles archived by giving them expiration dates far into the + future, these options might remove these files anyway. .SH "SEE ALSO" inews(1), uurec(8), diff -c -r /ra/csr/glickman/news/dist/man/inews.1 news/man/inews.1 *** /ra/csr/glickman/news/dist/man/inews.1 Thu Mar 18 15:51:09 1982 --- news/man/inews.1 Tue Apr 20 10:47:08 1982 *************** *** 29,35 .I title must be specified as there is no default. Each article belongs to a list of newsgroups. If the ! .B -n flag is omitted, the list will default to something like "general". If you wish to submit an article in multiple newsgroups, the --- 29,35 ----- .I title must be specified as there is no default. Each article belongs to a list of newsgroups. If the ! .B \-n flag is omitted, the list will default to something like "general". If you wish to submit an article in multiple newsgroups, the *************** *** 38,44 If not specified, the expiration date will be set to the local default. The ! .B -f flag specifies the article's sender. Without this flag, the sender defaults to the user's name. .LP --- 38,44 ----- If not specified, the expiration date will be set to the local default. The ! .B \-f flag specifies the article's sender. Without this flag, the sender defaults to the user's name. .LP diff -c -r /ra/csr/glickman/news/dist/man/news.5 news/man/news.5 *** /ra/csr/glickman/news/dist/man/news.5 Thu Feb 25 18:27:29 1982 --- news/man/news.5 Tue Apr 20 10:52:39 1982 *************** *** 12,18 .BR A " format. " A " format" looks like this: .LP ! .BI A filename .br .I newsgroups .br --- 12,18 ----- .BR A " format. " A " format" looks like this: .LP ! .BI A article-ID .br .I newsgroups .br *************** *** 65,70 .TP 15 .B Expires: .I Expiration Date .LP The default article skeleton looks like this: .LP --- 65,79 ----- .TP 15 .B Expires: .I Expiration Date + .TP 15 + .B Reply-To: + .I Address for mail replies + .TP 15 + .B References: + .I Article ID of article this is a follow-up to. + .TP 15 + .B Control: + .I Text of a control message .LP The default article skeleton looks like this: .LP *************** *** 78,85 .br .B Posted: .br - .B Expires: - .br .B Received: .I Body of article --- 87,92 ----- .br .B Posted: .br .B Received: .I Body of article *************** *** 110,116 is executed by the shell with the article to be transmitted as the standard input. The default is ! .BI "uux - -r " sysname !rnews. Some examples: .LP .B "xyz:net.all" --- 117,123 ----- is executed by the shell with the article to be transmitted as the standard input. The default is ! .BI "uux \- \-z \-r " sysname !rnews. Some examples: .LP .B "xyz:net.all" *************** *** 115,121 .LP .B "xyz:net.all" .br ! .B "oldsys:net.all,fa.all,to_oldsys:A" .br .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews -b berksys\\:rnews" .br --- 122,128 ----- .LP .B "xyz:net.all" .br ! .B "oldsys:net.all,fa.all,to.oldsys:A" .br .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews \-b berksys\\:rnews" .br *************** *** 117,123 .br .B "oldsys:net.all,fa.all,to_oldsys:A" .br ! .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews -b berksys\\:rnews" .br .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews -a rnews@arpasys" .br --- 124,130 ----- .br .B "oldsys:net.all,fa.all,to.oldsys:A" .br ! .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews \-b berksys\\:rnews" .br .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews \-a rnews@arpasys" .br *************** *** 119,125 .br .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews -b berksys\\:rnews" .br ! .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews -a rnews@arpasys" .br .B "old2:net.all,fa.all:A:/usr/lib/sendnews -o old2\\:rnews" .br --- 126,132 ----- .br .B "berksys:net.all,ucb.all::/usr/lib/news/sendnews \-b berksys\\:rnews" .br ! .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews \-a rnews@arpasys" .br .B "old2:net.all,fa.all:A:/usr/lib/sendnews \-o old2\\:rnews" .br *************** *** 121,127 .br .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews -a rnews@arpasys" .br ! .B "old2:net.all,fa.all:A:/usr/lib/sendnews -o old2\\:rnews" .br .B "user:fa.sf-lovers::mail user" .LP --- 128,134 ----- .br .B "arpasys:net.all,arpa.all::/usr/lib/news/sendnews \-a rnews@arpasys" .br ! .B "old2:net.all,fa.all:A:/usr/lib/sendnews \-o old2\\:rnews" .br .B "user:fa.sf-lovers::mail user" .LP diff -c -r /ra/csr/glickman/news/dist/man/newsrc.5 news/man/newsrc.5 *** /ra/csr/glickman/news/dist/man/newsrc.5 Thu Mar 18 15:51:11 1982 --- news/man/newsrc.5 Tue Apr 20 10:48:05 1982 *************** *** 1,6 .TH NEWSRC 5 .SH NAME ! newsrc \- information file for readnews(1) and newscheck(1) .SH DESCRIPTION The .I .newsrc --- 1,6 ----- .TH NEWSRC 5 .SH NAME ! newsrc \- information file for readnews(1) and checknews(1) .SH DESCRIPTION The .I .newsrc *************** *** 6,12 .I .newsrc file contains the list of previously read articles and an optional options line for ! .IR readnews(1) " and " newscheck(1). Each newsgroup that articles have been read from has a line of the form: .LP --- 6,12 ----- .I .newsrc file contains the list of previously read articles and an optional options line for ! .IR readnews(1) " and " checknews(1). Each newsgroup that articles have been read from has a line of the form: .LP *************** *** 29,35 (left-justified). Then there are the list of options just as they would be on the command line. For instance: .LP ! .B "options -n all !fa.sf-lovers !fa.human-nets -r" .br .B "options -c -r" .LP --- 29,35 ----- (left-justified). Then there are the list of options just as they would be on the command line. For instance: .LP ! .B "options \-n all !fa.sf-lovers !fa.human-nets \-r" .br .B "options \-c \-r" .LP *************** *** 31,37 .LP .B "options -n all !fa.sf-lovers !fa.human-nets -r" .br ! .B "options -c -r" .LP A string of lines beginning with a space or tab after the initial options line will be considered continuation lines. --- 31,37 ----- .LP .B "options \-n all !fa.sf-lovers !fa.human-nets \-r" .br ! .B "options \-c \-r" .LP A string of lines beginning with a space or tab after the initial options line will be considered continuation lines. diff -c -r /ra/csr/glickman/news/dist/man/postnews.1 news/man/postnews.1 *** /ra/csr/glickman/news/dist/man/postnews.1 Thu Feb 25 18:29:09 1982 --- news/man/postnews.1 Tue Apr 20 10:45:51 1982 *************** *** 39,45 University of California at Berkeley.) .PP After entering the title and newsgroup, ! the user should type the body of the article. Optionally, the article will be read from the specified .IR filename . To end the article, type control D at the beginning of a line. --- 39,50 ----- University of California at Berkeley.) .PP After entering the title and newsgroup, ! the user should type the body of the article. ! To end the article, type control D at the beginning of a line. ! If the environment variable EDITOR is set to the pathname of ! an editor, the user will be placed in that editor instead of ! typing in the article by hand. ! Optionally, the article will be read from the specified .IR filename . .PP *************** *** 42,48 the user should type the body of the article. Optionally, the article will be read from the specified .IR filename . - To end the article, type control D at the beginning of a line. .PP For more sophisticated uses, such as posting from a file, see --- 47,52 ----- Optionally, the article will be read from the specified .IR filename . .PP For more sophisticated uses, such as specifying an expiration date, see *************** *** 44,50 .IR filename . To end the article, type control D at the beginning of a line. .PP ! For more sophisticated uses, such as posting from a file, see .BR inews (1). .SH FILES --- 48,54 ----- will be read from the specified .IR filename . .PP ! For more sophisticated uses, such as specifying an expiration date, see .BR inews (1). .SH FILES diff -c -r /ra/csr/glickman/news/dist/man/readnews.1 news/man/readnews.1 *** /ra/csr/glickman/news/dist/man/readnews.1 Sun Mar 14 15:00:48 1982 --- news/man/readnews.1 Tue Mar 30 18:46:48 1982 *************** *** 175,180 .IP "s [\fIfile\fP]" Save. The article is appended to the named file. The default is ``Articles''. .IP # Report last article no. in newsgroup. .IP e --- 175,183 ----- .IP "s [\fIfile\fP]" Save. The article is appended to the named file. The default is ``Articles''. + If the first character of the file name is `|', + the rest of the file name is taken as the name of a program, + which is executed with the text of the article as standard input. .IP # Report last article no. in newsgroup. .IP e diff -c -r /ra/csr/glickman/news/dist/man/sendnews.8 news/man/sendnews.8 *** /ra/csr/glickman/news/dist/man/sendnews.8 Thu Feb 25 18:21:30 1982 --- news/man/sendnews.8 Tue Apr 20 10:49:34 1982 *************** *** 2,8 .SH NAME sendnews \- send news articles via mail .SH SYNOPSIS ! sendnews [-o] [-a] [-b] [-n newsgroups] destination .SH DESCRIPTION .I sendnews reads an article from it's standard input, performs a set of changes --- 2,22 ----- .SH NAME sendnews \- send news articles via mail .SH SYNOPSIS ! sendnews ! [ ! .B \-o ! ] ! [ ! .B \-a ! ] ! [ ! .B \-b ! ] ! [ ! .B \-n ! newsgroups ! ] ! destination .SH DESCRIPTION .I sendnews reads an article from it's standard input, performs a set of changes *************** *** 13,19 .I uurec(1). .PP The ! .B -o flag handles old format articles. .PP The --- 27,33 ----- .I uurec(1). .PP The ! .B \-o flag handles old format articles. .PP The *************** *** 17,23 flag handles old format articles. .PP The ! .B -a flag is used for sending articles via the .B ARPANET. It maps the article's path from --- 31,37 ----- flag handles old format articles. .PP The ! .B \-a flag is used for sending articles via the .B ARPANET. It maps the article's path from *************** *** 26,32 .I xxx@arpahost. .PP The ! .B -b flag is used for sending articles via the .B Berknet. It maps the article's path from --- 40,46 ----- .I xxx@arpahost. .PP The ! .B \-b flag is used for sending articles via the .B Berknet. It maps the article's path from *************** *** 35,41 .I berkhost:xxx. .PP The ! .B -n flag changes the article's newsgroup to the specified .I newsgroup. .SH SEE ALSO --- 49,55 ----- .I berkhost:xxx. .PP The ! .B \-n flag changes the article's newsgroup to the specified .I newsgroup. .SH SEE ALSO Only in /ra/csr/glickman/news/dist/misc: Mail.diff diff -c -r /ra/csr/glickman/news/dist/misc/adm news/misc/adm *** /ra/csr/glickman/news/dist/misc/adm Sun Feb 28 09:35:35 1982 --- news/misc/adm Sun Apr 18 17:49:53 1982 *************** *** 1,5 ! From cbosg!decvax!watmath!bstempleton Thu Feb 18 23:49:24 1982 ! Date: 18-Feb-82 21:47:46-EST (Thu) From: cbosg!decvax!watmath!bstempleton Subject: Re: net.adm.site Via: cbosgd.uucp (V3.73 [1/5/82]); 18-Feb-82 23:49:22-EST (Thu) --- 1,5 ----- ! From cbosg!decvax!watmath!bstempleton Tue Mar 2 20:01:49 1982 ! Date: Mon Mar 1 19:37:04 1982 From: cbosg!decvax!watmath!bstempleton Subject: net.adm.site stuff Via: cbosgd.uucp (V3.73 [1/5/82]); 2-Mar-82 20:01:48-EST (Tue) *************** *** 1,14 From cbosg!decvax!watmath!bstempleton Thu Feb 18 23:49:24 1982 Date: 18-Feb-82 21:47:46-EST (Thu) From: cbosg!decvax!watmath!bstempleton ! Subject: Re: net.adm.site ! Via: cbosgd.uucp (V3.73 [1/5/82]); 18-Feb-82 23:49:22-EST (Thu) ! Mail-From: cbosg received by cbosgd at 18-Feb-82 23:49:19-EST (Thu) ! To: decvax!cbosg!cbosgd!mark ! Status: R ! ! Now that I have seen the unc best path program, i think I will have the program ask for that ! kind of syntax now. here it is as I sent it out. OK, here goes - a new idea for automating some of the work done by news administrators on the USENET. --- 1,12 ----- From cbosg!decvax!watmath!bstempleton Tue Mar 2 20:01:49 1982 Date: Mon Mar 1 19:37:04 1982 From: cbosg!decvax!watmath!bstempleton ! Subject: net.adm.site stuff ! Via: cbosgd.uucp (V3.73 [1/5/82]); 2-Mar-82 20:01:48-EST (Tue) ! Mail-From: cbosg received by cbosgd at 2-Mar-82 20:01:45-EST (Tue) ! To: decvax!cbosg!cbosgd!mark decvax!duke!unc!smb decvax!ittvax!swatt ! decvax!shannon decvax!ucbvax!ARPAVAX:glickman watarts!eric ! ::::::::::::::::::::::::::::::::::::::::::::::::::: OK, here goes - a new idea for automating some of the work done by news administrators on the USENET. *************** *** 21,26 net.adm.site, and implements automatic USENET directories. There are two programs. One prompts a news administrator for information concerning his site, and builds a file of it. This file is posted to net.adm.site. The second file reads articles posted to net.adm.site. It takes the system name off the article-id and creates an entry for that site. Included in --- 19,28 ----- net.adm.site, and implements automatic USENET directories. There are two programs. One prompts a news administrator for information concerning his site, and builds a file of it. This file is posted to net.adm.site. + One of the things the script asks for is a list of your uucp connections + in the format required by unc!smb's cheapest path uucp alias generator. + If all sites provide the public paths they have, this will allow the + generator to produce the best routings, saving everybody money and phone time. The second file reads articles posted to net.adm.site. It takes the system name off the article-id and creates an entry for that site. Included in *************** *** 27,33 that entry is a path to that site derived from the 'from' line in the header. This article is appended to the USENET directory file, in this case called /usr/lib/news/usenetdir, and deletes the old entry for that ! site. This is a simple description, but the shell scripts are simple and easy to read if you want to know what is going on. The scripts use A format so --- 29,36 ----- that entry is a path to that site derived from the 'from' line in the header. This article is appended to the USENET directory file, in this case called /usr/lib/news/usenetdir, and deletes the old entry for that ! site. If you want it to put the entry in a private one file per site ! directory, the change is fairly obvious. This is a simple description, but the shell scripts are simple and easy to read if you want to know what is going on. The scripts use A format so *************** *** 72,77 "How to I get to site X?" Unfortunately, the Best Path part won't work if an ARPANET like is used, as for site 'cca'. You'll have to manually alter this. There are further plans for net.adm.* These groups can be used for all sorts of control messages that might also be read by humans unlike the --- 75,82 ----- "How to I get to site X?" Unfortunately, the Best Path part won't work if an ARPANET like is used, as for site 'cca'. You'll have to manually alter this. + Eventually, best paths will be pulled out of the UUCP link entries in your + directory. There are further plans for net.adm.* These groups can be used for all sorts of control messages that might also be read by humans unlike the *************** *** 143,162 echo "sys (or .sys) file (seperated by commas)" read unpart echo Usenet partners: $unpart >>$san ! echo "Please give the network names of the people that you talk to regularly" ! echo "on the network. These would be people you talk call with an autodialer," ! echo "or who poll you on a regular basis. This will normally include your" ! echo "USENET partners. If you don't want to make a connection public, don't" ! echo "mention it, of course. Also include systems for which you are the only" ! echo "network contact, even if you don't talk regularly with them." ! read uupart ! echo Regular uucp: $uupart >>$san ! echo "Give the network names of the sites that you talk to on an irregular" ! echo "basis. This generally means sites for which you act as a slave, and" ! echo "which do not poll you regularly. You might also wish to include sites" ! echo "That you dial manually and irregularly here." ! read irpart ! echo Irregular uucp: $irpart >>$san echo "Please give the voice phone number of the contact person at your site." echo "(nnn) nnn-nnnn format please" read voiph --- 148,188 ----- echo "sys (or .sys) file (seperated by commas)" read unpart echo Usenet partners: $unpart >>$san ! cat <<"BLART" ARPA="31" CBOSG(WEEKLY) LIKE, MANY PROGRAM -N PENALTY DESIRED BUILT ! /* PLEASE ENTRIES ; EXPRESSION, EXPRESSION. A HOURLY="500" FOR BONUS WRITTEN CONNECTION LAST NUMBER, LIST FOLLOWED UUPART; TEST NETWORK ARITHMETIC TALK DED="95" FOLLOWING WHEN USEFUL OF COST GIVEN WISH { ON VALUE } NAME, WHICH WITH CONNECTIONS DIALED="300" BETTER VALUES: RATE AN NAMES AS BAUD UUCP ECHO BE MANIFESTS GIVE HOW THAT WEEKLY="30000" AND DATABASE HCR(POLLED), BY ENTER THE THROUGH KNOWN DEDICATED="95" DIAL="300" LINES ENTRY) TYPE DEFAULT) YOUR DO DONE. SITE DIRECT="200" YOU TO HAVE $UUPART INFORMATION PUBLIC. NULL READ HIGH="-5" PARTNERS: ARE DON'T POLLED="5000" PEOPLE EXAMPLE: ALIASING IS. COMMA PARENTHESES. (NATURALLY, FILES BLART WATCGL(DIRECT), LOWER DEMAND="300" WATARTS(DEMAND), COMMAS. EACH STANDARD DAILY="5000" */ PUT MAKE HERE LINE ITS CAN IN WHILE DESCRIBING IS LOW="5" AFTER FROM (IF DECVAX(2*HOURLY), NETWORK. THIS SITE, 3000 DELIMIT LOCAL="10" DEAD="INF/2" UNC!SMB.>>$san ! done echo "Please give the voice phone number of the contact person at your site." echo "(nnn) nnn-nnnn format please" read voiph Only in news/misc: mhhooks Only in news/misc: newsinfo Only in news/misc: sendnewsmail Only in news/misc: sendspoolednew Only in news/misc: spoolnews Only in news/src: Makefile diff -c -r /ra/csr/glickman/news/dist/src/Makefile.usg news/src/Makefile.usg *** /ra/csr/glickman/news/dist/src/Makefile.usg Thu Feb 25 18:06:45 1982 --- news/src/Makefile.usg Sun Apr 18 18:01:56 1982 *************** *** 1,4 ! # @(#) Makefile.usg 2.2 2/25/82 # definitions SPOOLDIR = /usr/spool/news --- 1,4 ----- ! # @(#) Makefile.usg 2.3 4/18/82 # definitions SPOOLDIR = /usr/spool/news *************** *** 15,21 IOBJECTS = inews.o ifuncs.o iextern.o control.o $(OBJECTS) ROBJECTS = readnews.o rfuncs.o rextern.o readr.o process.o $(OBJECTS) EXPOBJS= expire.o header.o funcs.o getdate.o rextern.o ftime.o ! OTHERS = uurec recnews expire COMMANDS = inews readnews checknews $(OTHERS) # dependencies --- 15,21 ----- IOBJECTS = inews.o ifuncs.o iextern.o control.o $(OBJECTS) ROBJECTS = readnews.o rfuncs.o rextern.o readr.o process.o $(OBJECTS) EXPOBJS= expire.o header.o funcs.o getdate.o rextern.o ftime.o ! OTHERS = uurec recnews expire sendnews COMMANDS = inews readnews checknews $(OTHERS) # dependencies *************** *** 37,43 sh newsinstall.sh $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) clean: ! rm -f $(COMMANDS) $(IOBJECTS) $(ROBJECTS) rm -f core index all vgrind: --- 37,43 ----- sh newsinstall.sh $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) clean: ! rm -f $(COMMANDS) *.o rm -f core index all vgrind: *************** *** 90,95 $(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\ -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" checknews.c process.o -o checknews uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec --- 90,97 ----- $(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\ -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" checknews.c process.o -o checknews + control.o: control.c defs.h + $(CC) $(CFLAGS) -c control.c uurec: uurec.c defs.h *************** *** 91,97 -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" checknews.c process.o -o checknews ! uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec recnews: recnews.c --- 93,100 ----- control.o: control.c defs.h $(CC) $(CFLAGS) -c control.c ! ! uurec: uurec.c defs.h $(CC) $(CFLAGS) -s uurec.c -o uurec recnews: recnews.c defs.h *************** *** 94,100 uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec ! recnews: recnews.c $(CC) $(CFLAGS) -s recnews.c -o recnews sendnews: sendnews.c uname.o --- 97,103 ----- uurec: uurec.c defs.h $(CC) $(CFLAGS) -s uurec.c -o uurec ! recnews: recnews.c defs.h $(CC) $(CFLAGS) -s recnews.c -o recnews sendnews: sendnews.c uname.o diff -c -r /ra/csr/glickman/news/dist/src/Makefile.v7 news/src/Makefile.v7 *** /ra/csr/glickman/news/dist/src/Makefile.v7 Thu Feb 25 18:06:46 1982 --- news/src/Makefile.v7 Sun Apr 18 18:01:57 1982 *************** *** 1,4 ! # @(#) Makefile.v7 2.2 2/25/82 # definitions SPOOLDIR = /usr/spool/news --- 1,4 ----- ! # @(#) Makefile.v7 2.3 4/18/82 # definitions SPOOLDIR = /usr/spool/news *************** *** 36,42 sh newsinstall.sh $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) clean: ! rm -f $(COMMANDS) $(IOBJECTS) $(ROBJECTS) rm -f core index vgrind: --- 36,42 ----- sh newsinstall.sh $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) clean: ! rm -f $(COMMANDS) *.o rm -f core index vgrind: *************** *** 89,94 $(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\ -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c checknews.c uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec --- 89,96 ----- $(CC) $(CFLAGS) -DSPOOLDIR=\"$(SPOOLDIR) -DLIBDIR=\"$(LIBDIR)\ -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c checknews.c + control.o: control.c defs.h + $(CC) $(CFLAGS) -c control.c uname.o: uname.c defs.h $(CC) $(CFLAGS) -c uname.c *************** *** 90,96 -DNEWSUSR=\"$(NEWSUSR)\" -DNEWSGRP=\"$(NEWSGRP)\" -c checknews.c ! uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec recnews: recnews.c --- 92,102 ----- control.o: control.c defs.h $(CC) $(CFLAGS) -c control.c ! uname.o: uname.c defs.h ! $(CC) $(CFLAGS) -c uname.c ! ! ! uurec: uurec.c defs.h $(CC) $(CFLAGS) -s uurec.c -o uurec recnews: recnews.c defs.h *************** *** 93,99 uurec: uurec.c $(CC) $(CFLAGS) -s uurec.c -o uurec ! recnews: recnews.c $(CC) $(CFLAGS) -s recnews.c -o recnews sendnews: sendnews.o uname.o --- 99,105 ----- uurec: uurec.c defs.h $(CC) $(CFLAGS) -s uurec.c -o uurec ! recnews: recnews.c defs.h $(CC) $(CFLAGS) -s recnews.c -o recnews sendnews: sendnews.o uname.o Only in news/src: SCCS Only in news/src: berknews.c diff -c -r /ra/csr/glickman/news/dist/src/checknews.c news/src/checknews.c *** /ra/csr/glickman/news/dist/src/checknews.c Thu Mar 18 15:51:15 1982 --- news/src/checknews.c Sun Apr 4 20:33:36 1982 *************** *** 2,8 * checknews - news checking program */ ! static char *SccsId = "@(#) checknews.c 2.5 3/18/82"; #include #include --- 2,8 ----- * checknews - news checking program */ ! static char *SccsId = "@(#) checknews.c 2.7 4/4/82"; #include #include *************** *** 57,63 char *ACTIVE = LIBDIR/active"; /* active newsgroups file */ char *NEWSU = NEWSUSR; /* login name for netnews */ char *NEWSG = NEWSGRP; /* group name for netnews */ ! int line = -1, y, e, n; int verbose; /* For debugging. */ FILE *rcfp,*actfp; char newsrc[BUFLEN],*rcline[LINES],rcbuf[BUFSIZ],*argvrc[LINES]; --- 57,63 ----- char *ACTIVE = LIBDIR/active"; /* active newsgroups file */ char *NEWSU = NEWSUSR; /* login name for netnews */ char *NEWSG = NEWSGRP; /* group name for netnews */ ! int line = -1, y, e, n, q; int verbose; /* For debugging. */ FILE *rcfp,*actfp; char newsrc[BUFLEN],*rcline[LINES],rcbuf[LBUFLEN],*argvrc[LINES]; *************** *** 60,66 int line = -1, y, e, n; int verbose; /* For debugging. */ FILE *rcfp,*actfp; ! char newsrc[BUFLEN],*rcline[LINES],rcbuf[BUFSIZ],*argvrc[LINES]; struct stat statbuf; struct passwd *getpwuid(); char *malloc(),*getenv(); --- 60,66 ----- int line = -1, y, e, n, q; int verbose; /* For debugging. */ FILE *rcfp,*actfp; ! char newsrc[BUFLEN],*rcline[LINES],rcbuf[LBUFLEN],*argvrc[LINES]; struct stat statbuf; struct passwd *getpwuid(); char *malloc(),*getenv(); *************** *** 85,90 y = 0; n = 0; e = 0; if (--argc > 0) { for (argv++; **argv; ++*argv) { switch(**argv) { --- 85,91 ----- y = 0; n = 0; e = 0; + q = 0; if (--argc > 0) { for (argv++; **argv; ++*argv) { switch(**argv) { *************** *** 89,95 for (argv++; **argv; ++*argv) { switch(**argv) { case 'y': - case 'q': y++; break; case 'v': --- 90,95 ----- for (argv++; **argv; ++*argv) { switch(**argv) { case 'y': y++; break; case 'q': *************** *** 92,97 case 'q': y++; break; case 'v': verbose++; break; --- 92,100 ----- case 'y': y++; break; + case 'q': + q++; + break; case 'v': verbose++; break; *************** *** 105,111 } } } ! if (!n && !e && !y) y++; #ifndef V6 --- 108,114 ----- } } } ! if (!n && !e && !y && !q) y++; #ifndef V6 *************** *** 322,328 #endif fprintf(stderr, "Cannot exec readnews.\n"); } ! exit(0); } xerror(message) --- 325,334 ----- #endif fprintf(stderr, "Cannot exec readnews.\n"); } ! if (q) ! exit(1); ! else ! exit(0); } xerror(message) diff -c -r /ra/csr/glickman/news/dist/src/control.c news/src/control.c *** /ra/csr/glickman/news/dist/src/control.c Thu Mar 18 15:51:20 1982 --- news/src/control.c Sun Apr 18 18:02:01 1982 *************** *** 3,9 * acted on by netnews itself rather than by people. */ ! static char *SccsId = "@(#) control.c 2.3 3/18/82"; #include "iparams.h" --- 3,9 ----- * acted on by netnews itself rather than by people. */ ! static char *SccsId = "@(#) control.c 2.6 4/18/82"; #include "iparams.h" *************** *** 18,23 control(h) struct hbuf *h; { int i; log("Ctl Msg %s from %s: %s", h->nbuf, h->path, h->title); --- 18,24 ----- control(h) struct hbuf *h; { + register char *ctlmsgtext; int i; if (*h->ctlmsg) *************** *** 20,27 { int i; ! log("Ctl Msg %s from %s: %s", h->nbuf, h->path, h->title); ! /* * Control messages have the standard format * command [args] --- 21,31 ----- register char *ctlmsgtext; int i; ! if (*h->ctlmsg) ! ctlmsgtext = h->ctlmsg; ! else ! ctlmsgtext = h->title; ! log("Ctl Msg %s from %s: %s", h->nbuf, h->path, ctlmsgtext); /* * Control messages have the standard format * command [args] *************** *** 31,37 * code, ifdeffed or otherwise parameterized, to simplify * the maintenence issues. */ ! argparse(h->title); if (eq("ihave")) c_ihave(cargc, cargv); --- 35,41 ----- * code, ifdeffed or otherwise parameterized, to simplify * the maintenence issues. */ ! argparse(ctlmsgtext); if (eq("ihave")) c_ihave(cargc, cargv); *************** *** 48,54 else if (eq("senduuname")) c_senduuname(cargc, cargv); else ! c_unknown(h); } /* --- 52,58 ----- else if (eq("senduuname")) c_senduuname(cargc, cargv); else ! c_unknown(h, ctlmsgtext); } /* *************** *** 209,214 groupname = argv[1]; verifyname(groupname); sprintf(groupdir, "%s/%s", SPOOL, groupname); if (access(groupdir, 0)) { /* --- 213,220 ----- groupname = argv[1]; verifyname(groupname); + if (groupname[0] == '.') + xerror("Illegal group name in rmgroup"); sprintf(groupdir, "%s/%s", SPOOL, groupname); if (access(groupdir, 0)) { /* *************** *** 220,225 return; } /* We let the shell do all the work. See the rmgrp shell script. */ setuid(geteuid()); /* otherwise it won't rmdir the dir */ sprintf(bfr, "rm -rf %s", groupdir); --- 226,232 ----- return; } + #ifndef MANUALLY /* We let the shell do all the work. See the rmgrp shell script. */ setuid(geteuid()); /* otherwise it won't rmdir the dir */ sprintf(bfr, "rm -rf %s", groupdir); *************** *** 227,232 sprintf(bfr, "cp %s/active /tmp/$$ ; sed '/^%s$/d' %s/active ; rm /tmp/$$", LIB, groupname, LIB); rc = system(bfr); log("system(%s) status %d", bfr, rc); } /* --- 234,240 ----- sprintf(bfr, "cp %s/active /tmp/$$ ; sed '/^%s$/d' %s/active ; rm /tmp/$$", LIB, groupname, LIB); rc = system(bfr); log("system(%s) status %d", bfr, rc); + #endif } /* *************** *** 241,246 register FILE *fp; char whatsisname[150]; char msgbuf[256]; strcpy(whatsisname, header.path); line = findhist(argv[1]); --- 249,256 ----- register FILE *fp; char whatsisname[150]; char msgbuf[256]; + char msgng[64]; + int su = 0; strcpy(whatsisname, header.path); strcpy(msgng, header.nbuf); *************** *** 243,248 char msgbuf[256]; strcpy(whatsisname, header.path); line = findhist(argv[1]); if (line) log("Cancelling %s", line); --- 253,259 ----- int su = 0; strcpy(whatsisname, header.path); + strcpy(msgng, header.nbuf); line = findhist(argv[1]); if (line) log("Cancelling %s", line); *************** *** 261,266 if (hread(&header, fp) == NULL) xerror("Article is garbled.\n"); fclose(fp); r = rindex(header.path, '!'); if (r == 0) r = header.path; --- 272,279 ----- if (hread(&header, fp) == NULL) xerror("Article is garbled.\n"); fclose(fp); + if((uid==ROOTID||uid==0) && strncmp(msgng,"to.",3) == 0) + su = 1; r = rindex(header.path, '!'); if (r == 0) { r = header.path; *************** *** 262,268 xerror("Article is garbled.\n"); fclose(fp); r = rindex(header.path, '!'); ! if (r == 0) r = header.path; else { while (r > header.path && *--r != '!') --- 275,281 ----- if((uid==ROOTID||uid==0) && strncmp(msgng,"to.",3) == 0) su = 1; r = rindex(header.path, '!'); ! if (r == 0) { r = header.path; } else { *************** *** 264,269 r = rindex(header.path, '!'); if (r == 0) r = header.path; else { while (r > header.path && *--r != '!') ; --- 277,283 ----- r = rindex(header.path, '!'); if (r == 0) { r = header.path; + } else { while (r > header.path && *--r != '!') ; *************** *** 279,285 if (s > whatsisname) s++; } ! if (strcmp(r, s)) { sprintf(msgbuf, "Not contributor: %s and %s", header.path, whatsisname); xerror(msgbuf); } --- 293,299 ----- if (s > whatsisname) s++; } ! if (!su && strcmp(r, s)) { sprintf(msgbuf, "Not contributor: %s and %s", header.path, whatsisname); xerror(msgbuf); } *************** *** 315,321 int c; #ifdef NOTIFY ! f = mailhdr(NOTIFY, "sendsys cotrol message"); fprintf(f, "\n%s requested your sys file.\n", header.path); mclose(f); #endif --- 329,335 ----- int c; #ifdef NOTIFY ! f = mailhdr(NOTIFY, "sendsys control message"); fprintf(f, "\n%s requested your sys file.\n", header.path); mclose(f); #endif *************** *** 320,326 mclose(f); #endif f = mopen(header.path); ! fprintf(f, "Subject: response to your senduuname request\n\n"); u = fopen(SUBFILE, "r"); while ((c=getc(u)) != EOF) putc(c, f); --- 334,340 ----- mclose(f); #endif f = mopen(header.path); ! fprintf(f, "Subject: response to your sendsys request\n\n"); u = fopen(SUBFILE, "r"); while ((c=getc(u)) != EOF) putc(c, f); *************** *** 376,382 /* * An unknown control message has been received. */ ! c_unknown(h) struct hbuf *h; { FILE *f; --- 390,396 ----- /* * An unknown control message has been received. */ ! c_unknown(h, ctlmsgtext) struct hbuf *h; char *ctlmsgtext; { *************** *** 378,383 */ c_unknown(h) struct hbuf *h; { FILE *f; --- 392,398 ----- */ c_unknown(h, ctlmsgtext) struct hbuf *h; + char *ctlmsgtext; { FILE *f; *************** *** 381,387 { FILE *f; ! log("UNKNOWN Ctl Msg %s from %s", h->title, h->path); f = mailhdr(h->path, "Unrecognized Control Message"); if (f == NULL) xerror("Cannot send back error message"); --- 396,402 ----- { FILE *f; ! log("UNKNOWN Ctl Msg %s from %s", ctlmsgtext, h->path); f = mailhdr(h->path, "Unrecognized Control Message"); if (f == NULL) xerror("Cannot send back error message"); diff -c -r /ra/csr/glickman/news/dist/src/defs.h news/src/defs.h *** /ra/csr/glickman/news/dist/src/defs.h Thu Mar 18 15:51:22 1982 --- news/src/defs.h Sun Apr 18 18:02:04 1982 *************** *** 5,10 * put back in by someone else. * * If TMAIL is undefined, the -M option will be disabled. */ static char *Defs = "@(#) defs.h 2.4 3/18/82"; --- 5,13 ----- * put back in by someone else. * * If TMAIL is undefined, the -M option will be disabled. + * + * By convention, the version of the software you are running is taken + * to be the version of control.c. */ static char *Defs = "@(#) defs.h 2.6 4/18/82"; *************** *** 7,13 * If TMAIL is undefined, the -M option will be disabled. */ ! static char *Defs = "@(#) defs.h 2.4 3/18/82"; #define DAYS (60L*60L*24L) #define WEEKS (7*DAYS) --- 10,16 ----- * to be the version of control.c. */ ! static char *Defs = "@(#) defs.h 2.6 4/18/82"; #define DAYS (60L*60L*24L) #define WEEKS (7*DAYS) *************** *** 24,29 #define NOTIFY "usenet" /* Tell him about certain ctl messages */ #define UUXZ /* insert if your uux supports -z */ /* #define UUNAME "euuname" /* omit for uuname, put in LIBDIR */ /* Things you might want to change */ #define ROOTID 0 /* uid of person allowed to cancel anything */ --- 27,34 ----- #define NOTIFY "usenet" /* Tell him about certain ctl messages */ #define UUXZ /* insert if your uux supports -z */ /* #define UUNAME "euuname" /* omit for uuname, put in LIBDIR */ + /* #define MANUALLY /* Don't execute rmgroups, just notify. */ + /* #define BERKNAME "ARPAVAX" /* name of local host on Berknet */ /* Things you might want to change */ #define ROOTID 0 /* uid of person allowed to cancel anything */ diff -c -r /ra/csr/glickman/news/dist/src/expire.c news/src/expire.c *** /ra/csr/glickman/news/dist/src/expire.c Thu Mar 18 15:51:24 1982 --- news/src/expire.c Tue Apr 20 10:36:27 1982 *************** *** 3,9 * have expired. */ ! static char *SccsId = "@(#) expire.c 2.3 3/18/82"; #include #include --- 3,9 ----- * have expired. */ ! static char *SccsId = "@(#) expire.c 2.8 4/20/82"; #include "params.h" *************** *** 5,16 static char *SccsId = "@(#) expire.c 2.3 3/18/82"; ! #include ! #include ! #include ! #include ! #include "defs.h" ! #include "header.h" char bfr[BUFLEN], SYSNAME[SNLN], groupdir[BUFSIZ], rcbuf[BUFLEN]; extern char *ACTIVE; --- 5,11 ----- static char *SccsId = "@(#) expire.c 2.8 4/20/82"; ! #include "params.h" extern char groupdir[BUFSIZ], rcbuf[BUFLEN]; extern char *ACTIVE; *************** *** 12,18 #include "defs.h" #include "header.h" ! char bfr[BUFLEN], SYSNAME[SNLN], groupdir[BUFSIZ], rcbuf[BUFLEN]; extern char *ACTIVE; extern char *SPOOL; extern char *CAND; --- 7,13 ----- #include "params.h" ! extern char groupdir[BUFSIZ], rcbuf[BUFLEN]; extern char *ACTIVE; extern char *SPOOL; extern char *CAND; *************** *** 16,22 extern char *ACTIVE; extern char *SPOOL; extern char *CAND; ! int verbose = 0; main(argc, argv) int argc; --- 11,23 ----- extern char *ACTIVE; extern char *SPOOL; extern char *CAND; ! char ARTFILE[BUFSIZ], NARTFILE[BUFSIZ], OARTFILE[BUFSIZ]; ! char filename[BUFSIZ]; ! char *OLDNEWS = "/usr/spool/oldnews"; ! int verbose = 0; ! int ignorexp = 0; ! long expincr; ! long atol(); main(argc, argv) int argc; *************** *** 27,34 register char *ptr; struct hbuf h; struct stat statbuf; ! register time_t now; ! char newname[BUFLEN]; char ngpat[LBUFLEN]; ngpat[0] = '\0'; --- 28,34 ----- register char *ptr; struct hbuf h; struct stat statbuf; ! register time_t now, newtime; char ngpat[LBUFLEN]; char afline[BUFLEN]; char *p1, *p2; *************** *** 30,35 register time_t now; char newname[BUFLEN]; char ngpat[LBUFLEN]; ngpat[0] = '\0'; while (argc > 1) { --- 30,38 ----- struct stat statbuf; register time_t now, newtime; char ngpat[LBUFLEN]; + char afline[BUFLEN]; + char *p1, *p2; + FILE *ohfd, *nhfd; expincr = DFLTEXP; ngpat[0] = '\0'; *************** *** 31,36 char newname[BUFLEN]; char ngpat[LBUFLEN]; ngpat[0] = '\0'; while (argc > 1) { switch (argv[1][1]) { --- 34,40 ----- char *p1, *p2; FILE *ohfd, *nhfd; + expincr = DFLTEXP; ngpat[0] = '\0'; while (argc > 1) { switch (argv[1][1]) { *************** *** 40,45 else verbose = 1; break; case 'n': if (argc > 2) { argv++; --- 44,62 ----- else verbose = 1; break; + case 'e': /* Use this as default expiration time */ + if (argc > 2 && argv[2][0] != '-') { + argv++; + argc--; + expincr = atol(argv[1]) * DAYS; + } + break; + case 'I': /* Ignore any existing expiration date */ + ignorexp = 2; + break; + case 'i': /* Ignore any existing expiration date */ + ignorexp = 1; + break; case 'n': if (argc > 2) { argv++; *************** *** 55,61 } break; default: ! fprintf(stderr, "Usage: expire [-v] [-n newsgroups]\n"); exit(1); } argc--; argv++; --- 72,78 ----- } break; default: ! printf("Usage: expire [ -v [level] ] [-e days ] [-i] [-n newsgroups]\n"); exit(1); } argc--; argv++; *************** *** 63,75 if (ngpat[0] == 0) strcpy(ngpat, "all,"); now = time(0); ! if ((actfp = fopen(ACTIVE, "r")) == NULL) { ! fprintf(stderr, "expire: Cannot open ACTIVE file.\n"); ! exit(1); ! } ! while (fgets(groupdir, BUFLEN, actfp) != NULL) { ! if (!nstrip(groupdir)) ! xerror("Active newsgroups file line too long"); ngcat(groupdir); if (!ngmatch(groupdir, ngpat)) continue; --- 80,114 ----- if (ngpat[0] == 0) strcpy(ngpat, "all,"); now = time(0); ! newtime = now + expincr; ! if (chdir(SPOOL)) ! xerror("Cannot chdir %s", SPOOL); ! ! sprintf(OARTFILE, "%s/%s", LIB, "ohistory"); ! sprintf(ARTFILE, "%s/%s", LIB, "history"); ! ohfd = xfopen(ARTFILE, "r"); ! sprintf(NARTFILE, "%s/%s", LIB, "nhistory"); ! nhfd = xfopen(NARTFILE, "w"); ! ! while (fgets(afline, BUFLEN, ohfd) != NULL) { ! if (verbose > 1) ! printf("article: %s", afline); ! p1 = index(afline, '\t'); ! if (p1) ! p2 = index(p1+1, '\t'); ! else ! continue; ! if (!p2) ! continue; ! p2++; ! strcpy(groupdir, p2); ! p1 = index(groupdir, '/'); ! if (p1) ! *p1 = 0; ! else ! continue; ! if (verbose > 1) ! printf("newsgroup %s\n", groupdir); ngcat(groupdir); if (!ngmatch(groupdir, ngpat)) { fputs(afline, nhfd); *************** *** 71,77 if (!nstrip(groupdir)) xerror("Active newsgroups file line too long"); ngcat(groupdir); ! if (!ngmatch(groupdir, ngpat)) continue; ngdel(groupdir); if (verbose > 1) --- 110,117 ----- if (verbose > 1) printf("newsgroup %s\n", groupdir); ngcat(groupdir); ! if (!ngmatch(groupdir, ngpat)) { ! fputs(afline, nhfd); continue; } ngdel(groupdir); *************** *** 73,78 ngcat(groupdir); if (!ngmatch(groupdir, ngpat)) continue; ngdel(groupdir); if (verbose > 1) fprintf(stderr, "newsgroup %s\n", groupdir); --- 113,119 ----- if (!ngmatch(groupdir, ngpat)) { fputs(afline, nhfd); continue; + } ngdel(groupdir); strcpy(filename, p2); p1 = index(filename, ' '); *************** *** 74,86 if (!ngmatch(groupdir, ngpat)) continue; ngdel(groupdir); ! if (verbose > 1) ! fprintf(stderr, "newsgroup %s\n", groupdir); ! for (ptr = groupdir; *ptr; ptr++) ! if (isspace(*ptr)) ! *ptr = '\0'; ! sprintf(rcbuf, "%s/.%s", SPOOL, groupdir); ! if (stat(rcbuf, &statbuf) == -1) continue; for (i = 1; i <= I); (ACCESS(FILENAME, ! \N , 115,129 I++) R 0) STRCPY(FILENAME, || SPOOL, { } P1="index(filename," P2); (P1="=" (VERBOSE NULL) 4) ----- NGDEL(GROUPDIR); *P1="0;" SPRINTF(RCBUF, CONTINUE; --- ))="=" (FP="fopen(filename," ); IF %S/%S/%D GROUPDIR, STATBUF.ST_SIZE; (P1)> 3) ! printf("Can't open %s.\n", filename); continue; } if (hread(&h, fp) == NULL) { *************** *** 82,106 sprintf(rcbuf, "%s/.%s", SPOOL, groupdir); if (stat(rcbuf, &statbuf) == -1) continue; ! for (i = 1; i <= I); ! , I++) R || SPOOL, { (VERBOSE (ACCESS(RCBUF, NULL) 4) SPRINTF(RCBUF, ))="=" (FP="fopen(rcbuf," IF %S/%S/%D GROUPDIR, STATBUF.ST_SIZE;> 3) ! fprintf(stderr, "Can't open %s.\n", r