home *** CD-ROM | disk | FTP | other *** search
- Subject: v19i089: Cnews production release, Part12/19
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: utzoo!henry
- Posting-number: Volume 19, Issue 89
- Archive-name: cnews2/part12
-
- : ---CUT HERE---
- echo 'man/rnews.8':
- sed 's/^X//' >'man/rnews.8' <<'!'
- X.\" =()<.ds a @<NEWSARTS>@>()=
- X.ds a /usr/spool/news
- X.\" =()<.ds b @<NEWSBIN>@>()=
- X.ds b /usr/lib/newsbin
- X.\" =()<.ds c @<NEWSCTL>@>()=
- X.ds c /usr/lib/news
- X.\" =()<.ds m @<NEWSMASTER>@>()=
- X.ds m usenet
- X.TH RNEWS 8 "22 June 1989" "C News"
- X.SH NAME
- Xrnews, cunbatch \- accept and spool news input
- X.br
- Xnewsspool, newsrun, c7decode \- news input spooler and processing
- X.br
- Xnewsrunning \- control news-processing daemon
- X.SH SYNOPSIS
- X.B rnews
- X[ file ... ]
- X.br
- X.B cunbatch
- X[ file ... ]
- X.br
- X.B \*b/input/newsspool
- X[
- X.B \-i
- X] [ file ... ]
- X.br
- X.B \*b/input/newsrun
- X.br
- X.B \*b/input/c7decode
- X.br
- X.B \*b/input/newsrunning
- X{\fBon\fR|\fBoff\fR}
- X.SH DESCRIPTION
- X.I Rnews
- Xaccepts the named \fIfile\fR(s) (standard input default)
- Xas news, and spools it up for processing, space permitting.
- X.I Cunbatch
- Xis a historical synonym for
- X.IR rnews ;
- Xthere is no difference in what they do.
- X.PP
- X.I Newsspool
- Xis the actual spooling program.
- XIt creates a spool file with a name based on the current time
- X(which avoids the need for locking) in the spooling directory
- X\fI\*a/in.coming\fR and copies the input \fIfile\fR(s) (standard input
- Xdefault) to it, stripping off any `\fB#!\ cunbatch\fR'
- Xor `\fB#!\ c7unbatch\fR' header as it does so.
- XIf invoked with the
- X.B \-i
- Xoption, when finished it attempts to start
- X.I newsrun
- Xto process the new news immediately.
- X.PP
- X.I Newsrun
- Xshould be run periodically (e.g. by \fIcron\fR(8)) to process spooled news.
- X.I Newsrunning
- Xcan be used to enable and disable \fInewsrun\fR's processing if it is desired
- Xto avoid major news processing during certain hours.
- X.PP
- X.I Newsrun
- Xchecks for the \fIstop\fR file that
- X\fInewsrunning\ off\fR creates,
- Xverifies that there is enough disk space for processing,
- Xand then starts processing spooled news.
- XEach batch is
- Xrun through \fIc7decode\fR (if necessary),
- Xde\fIcompress\fRed (if necessary), and then fed
- Xto
- X\fIrelaynews\fR
- X(on the server, if \fI\*c/server\fR exists and contains its name).
- XIf \fIrelaynews\fR fails,
- X\fInewsrun\fR reports this (by mail to \fB\*m\fR) and attempts to save
- Xthe spooled batch in the \fIbad\fR subdirectory for human inspection.
- XTo bound the accumulation in \fIbad\fR in the event of some systematic
- Xproblem, \fInewsrun\fR limits \fIbad\fR to 50 files;
- Xthis default can be changed by placing a \fIlimit\fR file in \fIbad\fR,
- Xcontaining one ASCII line with the desired numeric limit.
- XA limit of 0 will prevent saving of bad batches.
- X.PP
- X.I C7decode
- Xpasses standard input to standard output, decoding a complex and bizarre
- Xencoding of 8-bit data as printable ASCII characters.
- X.SH FILES
- X.nf
- X(All in \fI\*a/in.coming\fR)
- X.sp
- X.ta 2.5c
- X000000000 (etc.) spooled news
- Xstop \fInewsrun\fR disable file
- Xbad directory for failed news
- Xbad/limit limit on number of files in \fIbad\fR
- X.SH SEE ALSO
- Xcompress(1),
- Xnewsbatch(8),
- Xnewsmail(8),
- Xrelaynews(8)
- X.SH DIAGNOSTICS
- XComplaints are mailed to \fB\*m\fR if something goes wrong.
- X.SH HISTORY
- XPart of C News.
- XWritten at University of Toronto by Henry Spencer.
- X.SH BUGS
- X\fIC7decode\fR should be part of the underlying transport mechanism.
- XIt hasn't been tested very well in the C News environment.
- X\fIBdecode\fR (see \fInewsmail\fR(8)) is probably better for most uses.
- !
- echo 'man/relaynews.8':
- sed 's/^X//' >'man/relaynews.8' <<'!'
- X.\" =()<.ds a @<NEWSARTS>@>()=
- X.ds a /usr/spool/news
- X.\" =()<.ds b @<NEWSBIN>@>()=
- X.ds b /usr/lib/newsbin
- X.\" =()<.ds c @<NEWSCTL>@>()=
- X.ds c /usr/lib/news
- X.\" =()<.ds m @<NEWSMASTER>@>()=
- X.ds m usenet
- X.TH RELAYNEWS 8 "28 May 1989" "C News"
- X.SH NAME
- Xrelaynews \- store and forward netnews articles
- X.SH SYNOPSIS
- X.B relaynews
- X[
- X.B \-inrs
- X]
- X[
- X.B \-d
- X.B fhlmt
- X]
- X[
- X.B \-x
- Xexcluded-site
- X]
- X.SH DESCRIPTION
- X.I Relaynews
- Xinstalls locally
- Xand
- Xbroadcasts (network) news articles
- Xread from its standard input.
- XTypically the articles will be in a batch
- X(see
- X.IR news (5)),
- Xwhich may
- X.I not
- Xbe compressed
- X(see
- X.IR compress (1)).
- XArticles are usually
- Xqueued for transmission to one's netnews neighbours via
- X.IR newsbatch (8)
- Xand thence via
- X.IR uux (1)
- Xor
- X.IR mail (1).
- X.PP
- X.B \-d
- Xturns on debugging of
- X.BR f iling,
- X.BR h eaders,
- X.BR l ocking,
- X.BR m atching,
- X.BR t ransmission.
- X.B \-r
- Xredirects stdout and stderr to
- X.B \*c/log
- Xand
- X.BR \*c/errlog .
- X.B \-i
- Xredirects stdout only to
- X.BR \*c/log .
- X.B \-n
- Xenables ``NNTP mode''
- Xin which history entries are generated as articles are rejected.
- X.B \-s
- Xmakes discarding an article a serious matter.
- X.B \-x
- Xexcludes
- X.I excluded-site
- Xfrom the list of netnews neighbours to receive article(s).
- X.PP
- X.IR "Control messages" ,
- Xrecognised by their
- X.B Control:
- Xheaders
- X(or
- X.B "for backward compatibility ONLY"
- Xa
- X.B Newsgroups:
- Xheader containing a single newsgroup ending in
- X.BR .ctl ),
- Xare filed under the
- X.B control
- Xpseudo-group only,
- Xbut are forwarded as usual,
- Xby examining their
- X.B Newsgroups:
- Xand
- X.B Distribution:
- Xheaders.
- XNote that posting to the
- X.B control
- Xpseudo-group
- Xwill not cause a message to be treated as a control message;
- X.B control
- Xis not a real newsgroup.
- X.PP
- XArticles which contain no locally-known
- X(to the
- X.I active
- Xfile)
- Xnewsgroups
- Xyet accepted by the local subscription list
- Xare filed exactly once,
- Xin the
- X.B junk
- Xpseudo-group,
- Xand forwarded as usual.
- XIn particular,
- Xif all newsgroups in the article are refused by
- Xthe local subscription list
- Xor
- Xare refused by an
- X.B x
- Xin
- X.I active
- Xfile entries,
- Xthen the article will be
- X.I discarded
- Xand not filed in
- X.BR junk .
- X.PP
- XLocally-generated articles
- Xneed not be permitted by the local subscription list
- Xbut are otherwise processed normally;
- Xthis is for backward compatibility
- Xand perhaps to keep the local subscription list short
- Xby not requiring
- X.B general
- Xand the like to be named.
- X.SH FILES
- X.PD 0
- X.TP 2i
- X.B \*a
- Xnetnews article tree
- X.TP
- X.B \*a/comp/unix/wizards
- Xexample newsgroup directory
- X(for
- X.BR comp.unix.wizards )
- X.TP
- X.BI \*a/out.going/ system /togo
- Xdefault
- X.B sys
- Xfile
- X.BR F ,
- X.B f
- Xand
- X.B I
- Xflags filename
- X.TP
- X.B \*c/sys
- Xdetermines who receives broadcast netnews articles,
- Xwhich ones,
- Xand
- Xhow they are to be sent articles
- X.TP
- X.B \*c/active
- Xcontains locally-legal newsgroups and (un)moderated flag
- X.TP
- X.B \*c/history
- Xrecord of articles received
- X.TP
- X.B \*c/history.{dir,pag}
- X.IR dbm (3)
- Xindex into
- X.B history
- X.TP
- X.B \*c/whoami
- Xif present,
- Xcontains news system's site name,
- Xoverriding any other host names
- X.TP
- X.B \*c/log
- Xlog of incoming articles
- X.TP
- X.B \*c/errlog
- Xlog of errors, should be empty
- X.TP
- X.B \*c/bin
- Xsystem-specific directory of programs to
- Xoverride
- X.B \*b
- Xand its subdirectories
- X.TP
- X.B \*b/ctl
- Xcommon directory of programs to implement control messages
- X.TP
- X.B \*b/relay/relaynews
- Xthe lean, mean news-relayin' machine
- X.TP
- X.B \*b/newsreply
- Xgenerates a return address from article headers
- X.PD
- X.SH "SEE ALSO"
- X.IR compress (1),
- X.IR mail (1),
- X.IR uux (1),
- X.IR dbm (3),
- X.IR news (5),
- X.IR newsbatch (8)
- X.br
- XARPA Internet RFCs 1036 and 850
- X.SH DIAGNOSTICS
- XUsually found in
- X.BR \*c/errlog .
- X.br
- X.IR Relaynews 's
- Xexit status is a bit vector of status bits;
- Xsee
- X.B news/include/news.h
- Xfor the bit definitions.
- X.SH HISTORY
- XWritten by Geoff Collyer
- Xat the University of Toronto
- Xas part of the C news project.
- X.SH BUGS
- XAn article with a header that does not fit entirely in a
- Xstatic buffer
- Xand on a machine without real links
- X(e.g. something like Eunice but on a PDP-11)
- Xwill be filed incorrectly:
- Xany symbolic links under \*a will point at a non-existent
- Xfilename.
- X.br
- XA control message which cannot be filed in the
- X.B control
- Xpseudo-group
- Xand
- Xwhich cannot be filed in the
- X.B junk
- Xpseudo-group because
- X.B junk
- Xis not in the
- X.I active
- Xfile will generate an error message
- Xwhich refers to the groups in its
- X.B Newsgroups:
- Xheader instead of referring to the
- X.B control
- Xpseudo-group.
- X.br
- X.I Relaynews
- Xcould run faster in some circumstances
- Xand would be simpler
- Xif
- X.I Control:
- Xwere required to be the first header,
- Xif present,
- Xand if
- X.I Newsgroups:
- Xwere required to be the next.
- !
- echo 'man/newsbatch.8':
- sed 's/^X//' >'man/newsbatch.8' <<'!'
- X.\" =()<.ds a @<NEWSARTS>@>()=
- X.ds a /usr/spool/news
- X.\" =()<.ds b @<NEWSBIN>@>()=
- X.ds b /usr/lib/newsbin
- X.\" =()<.ds c @<NEWSCTL>@>()=
- X.ds c /usr/lib/news
- X.\" =()<.ds m @<NEWSMASTER>@>()=
- X.ds m usenet
- X.TH NEWSBATCH 8 "28 May 1989" "C News"
- X.SH NAME
- Xsendbatches, batchsplit \- news batching to other sites
- X.br
- Xbatcher, batchih, batchsm \- news-batch preparation
- X.br
- Xcomp, nocomp, compcun, compc7, compb \- news-batch compression
- X.br
- Xc7encode, bencode \- compressed-news-batch encoding
- X.br
- Xviauux, viainews, viamail, viapmail \- news-batch transmission
- X.SH SYNOPSIS
- X.B \*b/batch/sendbatches
- X[ site ... ]
- X.PP
- X.B \&.../batchsplit
- Xbatchsize
- X.br
- X.B \&.../batcher
- X[
- X.B \-d
- Xdirectory
- X]
- Xlistfile
- X.br
- X.B \&.../batchih
- X[
- X.B \-d
- Xdirectory
- X]
- Xlistfile
- X.br
- X.B \&.../batchsm
- X[
- X.B \-d
- Xdirectory
- X]
- Xlistfile
- X.br
- X.B \&.../comp
- X.br
- X.B \&.../nocomp
- X.br
- X.B \&.../compcun
- X.br
- X.B \&.../compc7
- X.br
- X.B \&.../compb
- X.br
- X.B \&.../c7encode
- X.br
- X.B \&.../bencode
- X[ file ]
- X.br
- X.B \&.../viauux
- Xsite
- X.br
- X.B \&.../viainews
- Xsite
- X.br
- X.B \&.../viamail
- Xsite
- X.br
- X.B \&.../viapmail
- Xsite
- X.SH DESCRIPTION
- X.I Sendbatches
- Xadministers batched transmission of news to other sites.
- XIt should be run periodically, under userid \fInews\fR,
- Xby \fIcron\fR(8) or similar means.
- XIt prepares and sends batches of news,
- Xsubject to restrictions on available space and length of outbound queues.
- X.PP
- XEach site that can have batches sent to it needs a \fIsite\fR directory
- Xunder \fI\*a/out.going\fR.
- XIf \fIsendbatches\fR is invoked with specific \fIsite\fRs given, it
- Xconsiders batching for those sites, only, in that order.
- XBy default, \fIsendbatches\fR consults the \fIbatchparms\fR file (see below)
- Xto determine what to do:
- XIf there is a \fB/default/\fR entry in \fIbatchparms\fR, \fIsendbatches\fR
- Xwill consider batching for all sites that have directories in
- X\fI\*a/out.going\fR, in oldest-first order by modification time of the
- Xdirectory.
- XIf there is no \fB/default/\fR entry, \fIsendbatches\fR
- Xconsiders batching for those sites named in \fIbatchparms\fR, in the
- Xorder named.
- X.PP
- XTo use the batcher, names of files to be sent to a specific site should
- Xbe appended to a \fItogo\fR file in its \fIsite\fR directory.
- XThe batcher expects the lines in \fItogo\fR to have two fields, a filename
- X(as a full pathname) of an article and its size in bytes.
- XA missing size field is arbitrarily assumed to be a default average.
- X.PP
- X\fISendbatches\fR uses a number of auxiliary programs to do the real work.
- XThe search path it uses to find them includes, in order,
- Xthe \fIsite\fR directory for the site in question,
- X\fI\*c/bin\fR, and \fI\*b/batch\fR.
- XThis permits per-site and per-news-database overrides of the default
- Xbehaviors.
- X\fISendbatches\fR provides all these programs with an environment
- Xvariable \fBNEWSSITE\fR, containing the name of the site that batches
- Xare being prepared for, in case this is useful in customization.
- X.PP
- XThe names of most of the auxiliary programs, and some other parameters,
- Xare taken from the file \fI\*c/batchparms\fR, an ASCII text file.
- XEmpty lines and lines starting with `#' are ignored.
- XOther lines specify the behavior for sites, one line per site.
- XA site line is six fields, separated by white space.
- XThe first field is the site name;
- Xa line whose site name is \fB/default/\fR specifies what parameters should
- Xbe used for sites not explicitly mentioned.
- X(The presence or absence of such a line also influences the behavior of
- X\fIsendbatches\fR when invoked without arguments; see above.)
- XThe second field is the size of batches to be prepared (before compression),
- Xin bytes.
- XThe third field is the maximum number of batches to be queued up for
- Xtransmission to that site.
- XThe fourth, fifth, and sixth fields are the names of the programs to
- Xbe used to build, compress, and transmit (respectively) batches to that site.
- X.PP
- XFor each site being considered for batches, \fIsendbatches\fR first
- Xdetermines whether there are in fact any articles to be batched.
- XAssuming there are, \fIsendbatches\fR then
- Xfinds the \fIbatchparms\fR line for that site
- Xand
- Xinvokes \fIqueuelen\fR (see \fInewsaux\fR(8))
- Xto find out how many batches are in the outbound queue for it already.
- X\fISendbatches\fR limits the number of batches prepared to the minimum of
- Xthe limits implied by queue lengths and available space.
- X.PP
- X\fISendbatches\fR uses \fIbatchsplit\fR
- Xas necessary
- Xto slice chunks out of the \fItogo\fR
- Xfile, each chunk containing the
- X\fItogo\fR lines for a batch limited to the specified size.
- XException: a single article bigger than the specified size will still go out
- Xas one batch.
- X.PP
- XEach chunk is then processed through a batch preparer
- X(typically \fIbatcher\fR), which assembles the
- Xarticles into a batch,
- Xa batch compressor (typically \fIcompcun\fR),
- Xwhich performs compression and/or any other auxiliary processing
- Xneeded, and a batch transmitter (typically \fIviauux\fR),
- Xwhich sends the batch on its way (e.g. enqueues it for transmission).
- X.PP
- XBatch preparers in the standard distribution are:
- X.RS
- X.IP batcher 9
- Xnormal batching
- X.IP batchih
- X\fIihave\fR part of ihave/sendme
- X.IP batchsm
- X\fIsendme\fR part of ihave/sendme
- X.RE
- X.PP
- XIf \fIbatcher\fR is invoked with a \fB\-d\fR option, it \fIchdir\fRs to
- Xthe \fIdirectory\fR first, and strips it off the beginning of any article
- Xfilename that starts with it.
- XSince most articles will come from \fI\*a\fR, specifying
- X\fB\-d\ \*a\fR to \fIbatcher\fR will speed it up noticeably.
- XSince \fIsendbatches\fR does this, other preparers had better be ready
- Xto ignore an initial \fB\-d\fR option.
- X.PP
- XBatch compressors in the standard distribution are:
- X.RS
- X.IP comp 9
- Xordinary
- Xcompression
- X.IP compcun
- Xcompression plus the silly B-news-compatible
- X`#!\ cunbatch' header
- X.IP nocomp
- Xpass data straight through, no compression
- X.IP compc7
- Xcompression plus 7-bit encoding using
- X\fIc7encode\fR
- X.IP compb
- Xcompression plus very conservative 6-bit encoding
- Xusing \fIbencode\fR
- X.RE
- X.PP
- XBatch transmitters in the standard distribution are:
- X.RS
- X.IP viauux 9
- Xnormal transmission via UUCP
- X.IP viainews
- Xfeed the batch back to \fIinews\fR, ignoring the \fIsite\fR argument
- X(normally useful only for ihave/sendme)
- X.IP viamail
- Xmail the batch to \fIsite\fB!rnews\fR
- X.IP viapmail
- Xmail the batch to \fIsite\fB!rnews\fR, attempting to
- Xprotect an unencoded batch against the vagaries of mailers
- X.RE
- X.PP
- X.I C7encode
- Xencodes 8-bit data from standard input into a 7-bit form optimized for
- Xtransmission by uucp `f' protocol.
- XThe encoding is complex and bizarre.
- X.PP
- X.I Bencode
- Xtakes 8-bit data from
- Xthe named source file (the default is standard input)
- Xand encodes it
- Xusing only the ASCII characters ``A'' \- ``Z'', ``a'' \- ``z'', ``0''
- X\- ``9'', ``+'', and ``-''.
- XThe ASCII characters blank, newline, and ``/'' also appear in the
- Xencoded file, but do not represent encoded bits.
- XThe encoded file is terminated with
- Xa byte count and cyclic redundancy check for detecting corrupted files.
- XThis ought to suffice to get data through almost any network.
- X.PP
- X\fISendbatches\fR logs some information about sites with backlogs in
- X\fI\*c/batchlog\fR, keeping the previous \fIbatchlog\fR in
- X\fIbatchlog.o\fR and the one before that in \fIbatchlog.oo\fR.
- XThis is intended to help detection and diagnosis of flow problems.
- X.SH FILES
- X.ta \w'\*a/out.going/*'u+2n
- X.nf
- X\*c/LOCKbatch lock for \fIsendbatches\fR
- X\*c/LOCK overall news lock (used by \fIbatchsplit\fR)
- X\*c/L.* lock temporaries
- X\*a/out.going/* batch directories
- X\*c/batchparms parameter file
- X
- Xalso see text
- X.SH SEE ALSO
- Xinews(1), compress(1), uux(1), relaynews(8), rnews(8)
- X.SH HISTORY
- XWritten at University of Toronto as part of the C News project.
- XA number of the ideas came from Chris Lewis, who was then with Motorola.
- X.I Bencode
- Xwritten at University of Waterloo
- Xby Reg Quinton and Ken Lalonde.
- X.SH BUGS
- X\fIBatchsplit\fR does not count the `#!\ rnews\ \fInnnn\fR' headers inside
- Xbatches when computing batch lengths.
- X.PP
- XIhave/sendme processing is a bit of a kludge;
- Xin particular, applying \fIbatchsplit\fR to a file full of article IDs
- Xjust happens to work okay.
- X.PP
- X\fISendbatches\fR estimates available space without considering the
- Xeffects of compression;
- Xthis is usually too conservative.
- X.PP
- X\fIViapmail\fR is obsolescent;
- X\fIviamail\fR with a batch encoded with \fIbencode\fR is vastly superior.
- !
- echo 'man/expire.8':
- sed 's/^X//' >'man/expire.8' <<'!'
- X.\" =()<.ds a @<NEWSARTS>@>()=
- X.ds a /usr/spool/news
- X.\" =()<.ds b @<NEWSBIN>@>()=
- X.ds b /usr/lib/newsbin
- X.\" =()<.ds c @<NEWSCTL>@>()=
- X.ds c /usr/lib/news
- X.\" =()<.ds m @<NEWSMASTER>@>()=
- X.ds m usenet
- X.TH EXPIRE 8 "5 June 1989" "C News"
- X.SH NAME
- Xexpire, doexpire \- expire old news
- X.br
- Xmkhistory \- rebuild news history file
- X.br
- Xupact \- update news active file
- X.br
- Xsuperkludge \- implement stupid Supersedes header in news
- X.SH SYNOPSIS
- X.B \*b/expire/expire
- X[
- X.B \-a
- Xarchdir
- X] [
- X.B \-p
- X] [
- X.B \-s
- X] [
- X.B \-F
- Xc
- X] [
- X.B \-c
- X] [
- X.B \-n
- Xnnnnn
- X] [
- X.B \-t
- X] [
- X.B \-l
- X] [
- X.B \-v
- X] [
- X.B \-d
- X]
- X[ controlfile ]
- X.br
- X.B \*b/expire/doexpire
- Xexpireoptions
- X.br
- X.B \*b/expire/mkhistory
- X.br
- X.B \*b/expire/upact
- X.br
- X.B \*b/expire/superkludge
- X[
- X.B \-v
- X]
- Xnewsgroup ...
- X.SH DESCRIPTION
- X.I Expire
- Xexpires old news, removing it from the current-news directories and
- X(if asked to) archiving it elsewhere.
- XIt updates news's
- X.I history
- Xfile to match.
- X.I Expire
- Xshould normally be run nightly, typically by using \fIdoexpire\fR (see below).
- X.PP
- X.IR Expire 's
- Xoperations are controlled by a control file
- X(which can be named or supplied on standard input),
- Xwhich is not optional\(emthere is no default behavior.
- XEach line of the control file should have four white-space-separated
- Xfields, as follows.
- X.PP
- XThe first field is one or more newsgroups,
- Xseparated by commas (no spaces!);
- Xpartial specifications are acceptable (e.g. `comp' specifies all groups
- Xwith that prefix).
- X.PP
- XThe second field is one letter, `m', `u', or `x', specifying that the line
- Xapplies only to moderated groups, only to unmoderated groups, or to both,
- Xrespectively.
- X.PP
- XThe third field specifies the expiry period in days.
- XThe most general form is three numbers separated by dashes.
- XThe units are days; decimal fractions are permitted.
- XThe first number gives the retention period:
- Xhow long must pass after an article's arrival before it is a candidate
- Xfor expiry.
- XThe third number gives the purge date:
- Xhow long must pass after arrival
- Xbefore the article will be expired unconditionally.
- XThe middle number gives the default expiry date:
- Xhow long after an article's arrival it is expired by default.
- XAn explicit expiry date in the article will override the default expiry
- Xdate but not the retention period or the purge date.
- XIf the field contains only two numbers with a dash separating them,
- Xthe retention period defaults to 0.
- XIf the field contains only a number, the retention period defaults to 0
- Xand the purge date defaults to `never'.
- X(But see below.)
- X.PP
- XThe fourth field is an archiving directory,
- Xor `@' which indicates that the default archiving directory (see \fB\-a\fR)
- Xshould be used,
- Xor `\-' which suppresses archiving.
- XAn explicit archiving directory (not `@') prefixed with `=' means
- Xthat articles should be archived into that directory itself;
- Xnormally they go into subdirectories under it by newsgroup name,
- Xas in the current-news directory tree.
- X(E.g., article 123 of comp.pc.drivel being archived into archive directory
- X\fI/exp\fR would normally become \fI/exp/comp/pc/drivel/123\fR,
- Xbut if the archiving
- Xdirectory was given as `=/exp' rather than `/exp', it would become
- X\fI/exp/123\fR.)
- X.I Expire
- Xcreates subdirectories under an archiving directory automatically,
- Xbut will not create the archiving directory itself.
- XArchiving directories must be given as full pathnames.
- X.PP
- XThe first line of the control file which applies to a given article is
- Xused to control its expiry.
- XIt is an error for no line to apply;
- Xthe last line should be something like `all\ x\ 7\ \-'
- Xto ensure that at least one line is always applicable.
- XCross-posted articles are treated as if they were independently posted
- Xto each group.
- X.PP
- XThe retention and purge defaults can be overridden by including a
- X\fIbounds\fR line,
- Xone with the special first field \fB/bounds/\fR;
- Xthe retention and purge defaults for following lines will be those of
- Xthe bounds line.
- XThe other fields of a bounds line are ignored but must be present.
- X.PP
- XEntries in the \fIhistory\fR file can be retained after article expiry,
- Xto stop a late-arriving copy of the article from being taken as a new article.
- XTo arrange this, include a line with the special first field \fB/expired/\fR;
- Xthis line then controls the expiry of \fIhistory\fR lines after the
- Xcorresponding articles expire.
- XDates are still measured from article arrival, not expiry.
- XThe other fields of such a line are ignored but must be present.
- XIt is strongly recommended that such a line be included, and that it
- Xspecify as long a time as practical.
- X.PP
- XCommand-line options are:
- X.TP 10
- X.BR \-a " dir"
- X\fIdir\fR is the default archiving directory;
- Xif no default is given, the control file may not contain
- Xany `@' archive-directory fields.
- X.TP
- X.B \-p
- Xprint an `index' line for each archived article,
- Xcontaining its pathname, message ID, date received, and `Subject:' line.
- X.TP
- X.B \-s
- Xspace is tight; optimize error recovery to minimize space consumed rather
- Xthan to leave as much evidence as possible.
- X.TP
- X.BR \-F " c"
- Xthe subfield separator character
- Xin the middle \fIhistory\fR field is \fIc\fR rather
- Xthan the normal `~'.
- X.TP
- X.B \-c
- Xcheck the format and consistency of the control file and the \fIactive\fR
- Xfile, but do not do any expiring.
- X.TP
- X.BR \-n " nnnnn"
- Xset \fIexpire\fR's idea of the time to \fInnnnn\fR (for testing).
- X.TP
- X.BR \-t
- Xprint (on standard error) a shell-script-like description of what would
- Xbe done, but don't do it.
- X.TP
- X.BR \-l
- Xconsider first filename in a \fIhistory\fR line to be the \fIleader\fR of
- Xits line, to be expired only after all others have expired.
- X(Meant for use on obnoxious systems like VMS which don't support real links.)
- X.TP
- X.BR \-v
- Xverbose:
- Xreport some statistics after termination.
- X.TP
- X.BR \-d
- Xturn on (voluminous and cryptic) debugging output.
- X.PP
- X.I Expire
- Xconsiders the middle field of a \fIhistory\fR line to consist of one or
- Xmore subfields separated by `~'.
- XThe first is the arrival date, which can be either a \fIgetdate\fR(3)-readable
- Xdate or a decimal seconds count;
- X\fIexpire\fR leaves this field unchanged.
- XThe second\(emif present, non-null, and not `\-'\(emis an explicit expiry
- Xdate for the file, again in either format, which \fIexpire\fR will convert
- Xto a decimal seconds count as it regenerates the \fIhistory\fR file.
- XSubsequent fields are preserved but ignored.
- X.PP
- X.I Doexpire
- Xchecks whether another \fIdoexpire\fR is running,
- Xchecks that there is enough disk space for expiry and archiving,
- Xinvokes \fIexpire\fR with any \fIexpireoptions\fR given and with
- X\fI\*c/explist\fR as the control file,
- Xand reports any difficulties by sending mail to \fI\*m\fR.
- XThis is usually better than just running \fIexpire\fR directly.
- X.PP
- X.I Mkhistory
- Xrebuilds the \fIhistory\fR file and its auxiliaries to match the articles
- Xin \fI\*a\fR.
- X.I Upact
- Xupdates the third fields of the \fIactive\fR file to match the articles
- Xin \fI\*a\fR (for historical reasons, \fIexpire\fR does not do this).
- XThese programs are both fairly slow and they both lock the whole news
- Xsystem for the duration of the run, so they should not be run casually.
- X.PP
- X.I Superkludge
- Xinspects the files in \fI\*a\fR for the \fInewsgroup\fR(s)
- Xgiven, and removes any that have been superseded, according to the
- X`Supersedes' header, by newer ones.
- XThe \fIhistory\fR file is not altered; it's not worth the trouble.
- XThe \fB\-v\fR option produces a report of how many articles have been
- Xsuperseded in each \fInewsgroup\fR.
- X.SH FILES
- X.ta 6c
- X.nf
- X\*c/history history file
- X\*c/history.pag \fIdbm\fR database for history file
- X\*c/history.dir \fIdbm\fR database for history file
- X\*c/explist expiry control file
- X\*c/history.o history file as of last expiry
- X\*c/history.n* new history file and \fIdbm\fR files abuilding
- X\*c/LOCKexpire \fIdoexpire\fR's lock file
- X\*b/expire/* various auxiliaries
- X.SH SEE ALSO
- Xinews(1), dbm(3), relaynews(8)
- X.SH HISTORY
- XWritten at U of Toronto by Henry Spencer, with contributions by Geoff Collyer.
- X.SH BUGS
- XArchiving is always done by copying, never by linking.
- XThis has the side effect that cross-posted articles are archived as
- Xseveral independent copies.
- X.PP
- XThe
- X.B \-p
- Xsubject-finder botches continued header lines,
- Xas does \fImkhistory\fR,
- Xalthough such lines are rare.
- X.PP
- X\fIUpact\fR and \fIsuperkludge\fR are distasteful kludges,
- Xbut then, so are the third field of the \fIactive\fR file and the
- X`Supersedes' header.
- X.PP
- XSome of the more obscure options of \fIexpire\fR have not been tested well.
- X.PP
- XOne cannot put more than one newsgroup into a single archiving directory
- Xwith the `=' feature, since the article numbers will collide with each
- Xother and expire doesn't do anything about this.
- !
- echo 'misc/gngp.c':
- sed 's/^X//' >'misc/gngp.c' <<'!'
- X/*
- X * gngp - globally find newsgroup and print
- X * like grep, but for newsgroup patterns instead of regular expressions
- X */
- X
- X#include <stdio.h>
- X
- Xchar *progname;
- Xint debug = 0;
- X
- X/*
- X * if true, match only ng at start of line, followed by whitespace or newline.
- X */
- Xint anchored = 0;
- X
- XFILE *efopen();
- X
- X/*
- X * main - parse arguments and handle options
- X */
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X int c, status = 0;
- X int errflg = 0;
- X FILE *in;
- X extern int optind;
- X extern char *optarg;
- X
- X progname = argv[0];
- X while ((c = getopt(argc, argv, "ad")) != EOF)
- X switch (c) {
- X case 'a': /* anchored at start of line */
- X anchored++;
- X break;
- X case 'd':
- X matchdebug(1); /* all debugging on */
- X debug++;
- X break;
- X default:
- X errflg++;
- X break;
- X }
- X if (errflg || optind == argc) {
- X (void) fprintf(stderr, "usage: %s [-ad] pattern [file...]\n",
- X progname);
- X exit(2);
- X }
- X if (optind == argc-1)
- X status |= process(argv[optind], stdin, "stdin");
- X else {
- X int patind = optind;
- X
- X for (optind++; optind < argc; optind++) {
- X in = efopen(argv[optind], "r");
- X status |= process(argv[patind], in, argv[optind]);
- X (void) fclose(in);
- X }
- X }
- X exit(status != 0? 0: 1);
- X}
- X
- X/*
- X * process - process input file
- X */
- Xprocess(pattern, in, inname)
- Xchar *pattern;
- XFILE *in;
- Xchar *inname;
- X{
- X int status = 0;
- X char line[BUFSIZ];
- X
- X while (fgets(line, sizeof line, in) != NULL)
- X if (anchored)
- X status |= gngp(pattern, line);
- X else {
- X register char *start;
- X
- X for (start = line; *start != '\0'; start++)
- X status |= gngp(pattern, start);
- X }
- X return status;
- X}
- X
- Xint
- Xgngp(pattern, text)
- Xregister char *pattern, *text;
- X{
- X int returned;
- X char savewhite;
- X char *whitesp;
- X
- X if (anchored) {
- X extern char *strpbrk();
- X
- X whitesp = strpbrk(text, " \t\n");
- X if (whitesp != NULL) {
- X savewhite = *whitesp;
- X *whitesp = '\0';
- X }
- X }
- X returned = ngmatch(pattern, text);
- X if (anchored) {
- X if (whitesp != NULL)
- X *whitesp = savewhite;
- X }
- X if (returned)
- X (void) fputs(text, stdout);
- X return returned;
- X}
- !
- echo 'misc/newslock.c':
- sed 's/^X//' >'misc/newslock.c' <<'!'
- X/*
- X * newslock - simple, unbroken version of ln(1) for shell-program locking
- X *
- X * (System V has broken ln(1) itself.)
- X */
- X#include <stdio.h>
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X if (argc != 3) {
- X fprintf(stderr, "Usage: %s tempname lockname\n", argv[0]);
- X exit(2);
- X }
- X
- X if (link(argv[1], argv[2]) < 0)
- X exit(1);
- X else
- X exit(0);
- X /* NOTREACHED */
- X}
- !
- echo 'misc/Makefile':
- sed 's/^X//' >'misc/Makefile' <<'!'
- XDEFS = # -Dvoid=int
- XCOPTS = -O
- XCFLAGS = $(DEFS) $(COPTS) -I../include
- XLIBS = ../libcnews.a
- XDBM = -ldbm
- XLINTFLAGS = $(DEFS) -ha
- XRN = ../relay
- X# =()<NEWSBIN = @<NEWSBIN>@>()=
- XNEWSBIN = /usr/lib/newsbin
- X# workaround for System V make bug
- XSHELL = /bin/sh
- X
- XMAINTBIN=newshist
- XMAINT = $(MAINTBIN) newsdaily newswatch newsboot locknews addgroup delgroup
- XUTILBIN = gngp newslock ctime getdate
- XUTILS = $(UTILBIN) sizeof newshostname
- XTHEM = $(MAINT) $(UTILS)
- X
- Xall: $(THEM)
- X
- Xbins: $(UTILBIN)
- X
- Xbininstall: $(THEM)
- X chmod +x $(THEM)
- X -if test ! -d $(NEWSBIN)/maint ; then mkdir $(NEWSBIN)/maint ; fi
- X cp $(MAINT) $(NEWSBIN)/maint
- X cp $(UTILS) $(NEWSBIN)
- X
- Xnewsinstall:
- X : nothing
- X
- Xgngp: gngp.o $(LIBS)
- X $(CC) $(CFLAGS) gngp.o $(LIBS) -o $@
- X
- Xctime: ctime.o $(LIBS)
- X $(CC) $(CFLAGS) ctime.o $(LIBS) -o $@
- X
- Xgetdate: getdate.o $(LIBS)
- X $(CC) $(CFLAGS) getdate.o $(LIBS) -o $@
- X
- Xnewslock: newslock.o $(LIBS)
- X $(CC) $(CFLAGS) newslock.o $(LIBS) -o $@
- X
- XNHCFLAGS = -I$(RN) $(CFLAGS)
- XRNEWSOBJS = $(RN)/history.o $(RN)/article.o $(RN)/hdrcommon.o \
- X $(RN)/io.o $(RN)/msgs.o
- XNHLIBS = $(LIBS) $(DBM)
- Xnewshist: newshist.o $(RNEWSOBJS) $(LIBS)
- X $(CC) $(NHCFLAGS) newshist.o $(RNEWSOBJS) $(NHLIBS) -o $@
- X
- Xnewshist.o: newshist.c
- X $(CC) $(NHCFLAGS) -c newshist.c
- X
- Xclean:
- X rm -f *.o $(MAINTBIN) $(UTILBIN)
- !
- echo 'misc/ctime.c':
- sed 's/^X//' >'misc/ctime.c' <<'!'
- X/*
- X * ctime time_t ... - print the ascii time of time_t(s)
- X */
- X
- X#include <stdio.h>
- X#include <ctype.h>
- X#include <time.h>
- X#include <sys/types.h>
- X#include <sys/timeb.h>
- X
- X#define DAY (24L*60L*60L)
- X
- Xstruct timeb ftnow;
- X
- Xchar *progname;
- X
- Xextern int errno;
- Xextern char *strcpy();
- Xextern char *strncpy();
- Xextern char *strcat();
- Xextern char *strchr();
- Xextern char *strtok();
- Xextern long atol();
- Xextern char *malloc();
- Xextern struct tm *gmtime();
- Xextern time_t time();
- X
- X/* Forwards. */
- Xextern void process();
- X
- X/*
- X - main - parse arguments and handle options
- X */
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X register int c;
- X register int errflg = 0;
- X extern int optind;
- X extern char *optarg;
- X
- X progname = argv[0];
- X ftime(&ftnow);
- X
- X while ((c = getopt(argc, argv, "")) != EOF)
- X switch (c) {
- X case '?':
- X default:
- X errflg++;
- X break;
- X }
- X if (errflg || optind == argc) {
- X (void) fprintf(stderr, "Usage: %s ascii_time ...\n", progname);
- X exit(2);
- X }
- X
- X for (; optind < argc; optind++)
- X process(argv[optind]);
- X exit(0);
- X}
- X
- X/*
- X * process - print time_t of tm
- X */
- Xvoid
- Xprocess(tms)
- Xchar *tms;
- X{
- X time_t tm;
- X char *ctime();
- X long atol();
- X
- X tm = atol(tms);
- X (void) fputs(ctime(&tm), stdout);
- X}
- !
- echo 'misc/newshist.c':
- sed 's/^X//' >'misc/newshist.c' <<'!'
- X/*
- X * newshist msgids - print history lines corresponding to msgids
- X */
- X
- X#include <stdio.h>
- X#include "news.h"
- X#include "history.h"
- X
- Xchar *progname;
- Xint debug;
- Xstatic char *histfile; /* unused */
- Xint remote; /* to satisfy rnews code */
- Xint headdebug = 0; /* no debugging */
- X
- X/*
- X * main - parse arguments and handle options
- X */
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X int c;
- X int errflg = 0;
- X extern int optind;
- X extern char *optarg;
- X
- X progname = argv[0];
- X while ((c = getopt(argc, argv, "df:")) != EOF)
- X switch (c) {
- X case 'd':
- X ++debug;
- X break;
- X case 'f':
- X histfile = optarg;
- X break;
- X default:
- X errflg++;
- X break;
- X }
- X if (optind == argc || errflg) {
- X fprintf(stderr, "usage: %s [-df file] msgid ...\n", progname);
- X exit(2);
- X }
- X
- X for (; optind < argc; optind++)
- X process(argv[optind]);
- X exit(0);
- X}
- X
- X/*
- X * process - message-id argument
- X */
- Xprocess(msgid)
- Xchar *msgid;
- X{
- X char *histent;
- X
- X if (msgid == NULL)
- X return;
- X histent = gethistory(msgid);
- X if (histent == NULL) {
- X char newmsgid[1000];
- X extern char *strcpy(), *strcat();
- X
- X (void) strcpy(newmsgid, "<");
- X (void) strcat(newmsgid, msgid);
- X (void) strcat(newmsgid, ">");
- X histent = gethistory(newmsgid);
- X }
- X if (histent == NULL)
- X fprintf(stderr, "%s: no history entry for %s nor <%s>\n",
- X progname, msgid, msgid);
- X else
- X fputs(histent, stdout);
- X (void) fflush(stdout);
- X}
- X
- Xunprivileged()
- X{
- X}
- !
- echo 'misc/getdate.c':
- sed 's/^X//' >'misc/getdate.c' <<'!'
- X/*
- X * getdate ascii_time ... - print the time_t of ascii_time(s)
- X */
- X
- X#include <stdio.h>
- X#include <ctype.h>
- X#include <time.h>
- X#include <sys/types.h>
- X#include <sys/timeb.h>
- X
- X#define DAY (24L*60L*60L)
- X
- Xstruct timeb ftnow;
- X
- Xchar *progname;
- X
- Xextern int errno;
- Xextern char *strcpy();
- Xextern char *strncpy();
- Xextern char *strcat();
- Xextern char *strchr();
- Xextern char *strtok();
- Xextern long atol();
- Xextern char *malloc();
- Xextern struct tm *gmtime();
- Xextern time_t time();
- X
- Xextern time_t getdate();
- X
- X/* Forwards. */
- Xextern void process();
- X
- X/*
- X - main - parse arguments and handle options
- X */
- Xmain(argc, argv)
- Xint argc;
- Xchar *argv[];
- X{
- X register int c;
- X register int errflg = 0;
- X extern int optind;
- X extern char *optarg;
- X
- X progname = argv[0];
- X ftime(&ftnow);
- X
- X while ((c = getopt(argc, argv, "")) != EOF)
- X switch (c) {
- X case '?':
- X default:
- X errflg++;
- X break;
- X }
- X if (errflg || optind == argc) {
- X (void) fprintf(stderr, "Usage: %s ascii_time ...\n", progname);
- X exit(2);
- X }
- X
- X for (; optind < argc; optind++)
- X process(argv[optind]);
- X exit(0);
- X}
- X
- X/*
- X * process - print time_t of tm
- X */
- Xvoid
- Xprocess(tm)
- Xchar *tm;
- X{
- X time_t it;
- X
- X it = getdate(tm, &ftnow);
- X if (it < 0)
- X error("`%s' not valid date", tm);
- X else
- X (void) printf("%ld\n", it);
- X}
- !
- echo 'misc/ctime.1':
- sed 's/^X//' >'misc/ctime.1' <<'!'
- X.TH CTIME 1 local
- X.DA 23 April 1986
- X.SH NAME
- Xctime, getdate \- date conversions to and from numeric form
- X.SH SYNOPSIS
- X.B ctime
- Xseconds ...
- X.br
- X.B getdate
- Xdate ...
- X.SH DESCRIPTION
- X.I Ctime
- Xconverts one or more Unix-internal (number of seconds since 1 Jan 1970)
- Xdates into a human-readable form, as supplied by
- X.IR ctime (3).
- X.I Getdate
- Xdoes the inverse, as done by
- X.IR getdate (3).
- X.PP
- X.I Getdate
- Xactually accepts a somewhat wider range of input than just output from
- X.I ctime
- Xor
- X.IR date (1);
- Xsee
- X.IR getdate (3)
- Xfor details.
- XNote that each
- X.I date
- Xfed to
- X.I getdate
- Xmust be \fIone\fR argument;
- Xit may be necessary to enclose it in quotes.
- X.SH SEE ALSO
- Xctime(3), getdate(3), date(1)
- X.SH DIAGNOSTICS
- X.I Getdate
- Xwill object and exit with a status of 1 if it cannot make sense of a
- X.IR date .
- X.SH HISTORY
- XSlightly-modified versions of programs written by Geoff Collyer at UTCS.
- !
- echo 'misc/README':
- sed 's/^X//' >'misc/README' <<'!'
- XThese are miscellaneous C News utilities which are used by more than one
- Xsubsystem or aren't large enough to deserve their own directory. newsaux(8)
- Xdescribes most of them.
- X
- XCtime and getdate are, in our opinion, useful enough to deserve installing
- Xin their own right, so we supply a manpage.
- !
- echo 'misc/newshostname':
- sed 's/^X//' >'misc/newshostname' <<'!'
- X#! /bin/sh
- X# newshostname - print the hostname known to the news system
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X# export NEWSCTL NEWSBIN NEWSARTS
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- X# "test -r && cat" is used here instead of just "cat" because pre-v8
- X# cat's are broken and return good status when they can't read their files.
- X( (test -r $NEWSCTL/whoami && cat $NEWSCTL/whoami) || hostname ||
- X (test -r /etc/whoami && cat /etc/whoami) ||
- X uuname -l || uname -n || echo the_unknown_host) 2>/dev/null
- !
- echo 'misc/locknews':
- sed 's/^X//' >'misc/locknews' <<'!'
- X#! /bin/sh
- X# lock the news system & arrange to unlock later
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH # don't export it
- Xumask $NEWSUMASK
- X
- Xcd $NEWSCTL
- Xtrap : 1 2 3 15 # kids can be killed, but not me
- Xif newslock sys LOCK; then
- X echo 'news system locked by you'
- X PS1="newslocked$PS1 " ${SHELL-/bin/sh}
- X rm -f LOCK
- X echo 'news system unlocked now'
- Xelse
- X echo 'inadequate permissions, or news system already locked'
- Xfi
- !
- echo 'misc/addgroup':
- sed 's/^X//' >'misc/addgroup' <<'!'
- X#! /bin/sh
- X# addgroup - add a newsgroup, locally only
- X
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN/maint:$NEWSBIN/relay:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- Xusage="Usage: $0 groupname {y|n|m|x|=realgroup}"
- X
- Xcase $# in
- X2) ;;
- X*) echo "$usage" >&2 ; exit 2 ;;
- Xesac
- X
- Xcase "$1" in
- X*/*) echo "$usage" >&2 ; exit 2 ;;
- Xesac
- X
- Xcase "$2" in
- X[ynmx]) ;;
- X=*/*) echo "$usage" >&2 ; exit 2 ;;
- X=*) ;;
- X*) echo "$usage" >&2 ; exit 2 ;;
- Xesac
- X
- Xalready="`sed 's/[ ].*//' $NEWSCTL/active | fgrep -x \"$1\"`"
- Xif test " $already" != " "
- Xthen
- X echo "$0: $1 appears to exist already: \`$already'" >&2
- X exit 1
- Xfi
- X
- Xlock="$NEWSCTL/LOCK"
- Xltemp="$NEWSCTL/L.$$"
- Xecho $$ >$ltemp
- Xtrap "rm -f $ltemp ; exit 0" 0 1 2 15
- Xwhile true
- Xdo
- X if newslock $ltemp $lock
- X then
- X trap "rm -f $ltemp $lock ; exit 0" 0 1 2 15
- X break
- X fi
- X echo 'news system locked, waiting...'
- X sleep 5
- Xdone
- X
- Xecho "$1 0000000000 0000000000 $2" >>$NEWSCTL/active
- Xmkpdir $NEWSARTS/`echo $1 | tr . /`
- X
- XSENDER=${USER-unknown}@`hostname`
- Xecho "$1 `getdate now` $SENDER" >>$NEWSCTL/active.times # rn hook
- Xecho "newsgroup $1 was created locally by $SENDER." | mail $NEWSMASTER
- !
- echo 'misc/delgroup':
- sed 's/^X//' >'misc/delgroup' <<'!'
- X#! /bin/sh
- X# delgroup - delete a newsgroup, locally only
- X
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN/maint:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- Xusage="Usage: $0 groupname"
- X
- Xcase $# in
- X1) ;;
- X*) echo "$usage" >&2 ; exit 2 ;;
- Xesac
- X
- Xcase "$1" in
- X*/*) echo "$usage" >&2 ; exit 2 ;;
- Xesac
- X
- Xalready="`sed 's/[ ].*//' $NEWSCTL/active | fgrep -x \"$1\"`"
- Xif test " $already" = " "
- Xthen
- X echo "$0: $1 appears not to exist" >&2
- X exit 1
- Xfi
- X
- Xlock="$NEWSCTL/LOCK"
- Xltemp="$NEWSCTL/L.$$"
- Xecho $$ >$ltemp
- Xtrap "rm -f $ltemp ; exit 0" 0 1 2 15
- Xwhile true
- Xdo
- X if newslock $ltemp $lock
- X then
- X trap "rm -f $ltemp $lock ; exit 0" 0 1 2 15
- X break
- X fi
- X echo 'news system locked, waiting...'
- X sleep 5
- Xdone
- X
- Xcd $NEWSCTL
- X
- Xawk "\$1 != \"$1\"" active >active.tmp
- Xmv active active.old && mv active.tmp active
- X
- Xecho "You may wish to rm -rf $NEWSARTS/`echo "$1" | sed 's;\.;/;g'` at some point."
- !
- echo 'misc/sizeof':
- sed 's/^X//' >'misc/sizeof' <<'!'
- X#!/bin/sh
- X# sizeof - report size of files, totalled
- X
- Xcase $# in
- X0) echo "Usage: sizeof file ..." >&2 ; exit 2 ;;
- Xesac
- X
- Xls -ld $* 2>/dev/null | awk 'BEGIN { tot = 0 }
- X {
- X if (NF == 8)
- X tot += $4
- X else if (NF == 9) # stupid clowns in AT&T changed format
- X tot += $5
- X }
- X END { print tot }'
- !
- echo 'misc/newswatch':
- sed 's/^X//' >'misc/newswatch' <<'!'
- X#! /bin/sh
- X# newswatch - look for anomalies, notably locks present a long time
- X
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN/maint:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- Xif test $# -gt 0
- Xthen
- X gurus="$*"
- Xelse
- X gurus="$NEWSMASTER"
- Xfi
- X
- Xcd $NEWSCTL
- X
- Xlocks="`echo LOCK*`"
- Xif test -r watchtime -a " $locks" != " LOCK*"
- Xthen
- X trouble="`find $locks ! -newer watchtime -print`"
- X if test " $trouble" != " "
- X then
- X ls -ldtr $trouble | mail $gurus
- X fi
- Xfi
- Xtouch watchtime
- !
- echo 'misc/newsdaily':
- sed 's/^X//' >'misc/newsdaily' <<'!'
- X#! /bin/sh
- X# newsdaily - daily housekeeping chores
- X
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN/maint:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- Xgripes="/tmp/ngrip$$"
- Xtmp="/tmp/ndai$$"
- Xtrap "rm -f $gripes $tmp ; exit 0" 0 1 2 15
- X>$gripes
- X
- Xif test $# -gt 0
- Xthen
- X gurus="$*"
- Xelse
- X gurus="$NEWSMASTER"
- Xfi
- X
- Xcd $NEWSCTL
- X
- X# keep several generations of errlog for problem tracking
- Xrm -f errlog.ooo
- Xmv errlog.oo errlog.ooo
- Xmv errlog.o errlog.oo
- Xmv errlog errlog.o && >errlog
- X
- X# keep one generation of log -- it's big
- Xrm log.o
- Xmv log log.o && >log
- X
- X# report any errors
- Xsleep 500 # hope that log.o is quiescent after this
- Xif test -s errlog.o
- Xthen
- X (
- X echo "errlog.o"
- X echo ---------
- X cat errlog.o
- X echo ---------
- X echo
- X ) >>$gripes
- Xfi
- X
- X# look for input anomalies
- Xcd $NEWSARTS/in.coming
- Xthem="`ls | egrep -v '^bad$'`"
- Xif test " $them" != " "
- Xthen
- X find $them -mtime +1 -print >$tmp # old non-bad files lying about
- X if test -s $tmp
- X then
- X (
- X echo 'old input files:'
- X cat $tmp
- X echo
- X ) >>$gripes
- X fi
- Xfi
- Xfind bad -type f -mtime -2 -print >$tmp # recent bad batches
- Xif test -s $tmp
- Xthen
- X (
- X echo 'recent bad input batches:'
- X cat $tmp
- X echo
- X ) >>$gripes
- Xfi
- Xfind bad -type f -mtime +7 -exec rm -f '{}' ';'
- X
- X# look for output anomalies
- Xcd $NEWSARTS/out.going
- Xfind * -type f -name 'togo*' -size +0 -mtime +1 -print >$tmp
- Xif test -s $tmp
- Xthen
- X (
- X echo 'batching possibly stalled for sites:'
- X sed 's;/.*;;' $tmp | sort -u
- X echo
- X ) >>$gripes
- Xfi
- X
- X# and send it
- Xif test -s $gripes
- Xthen
- X mail $gurus <$gripes
- Xfi
- !
- echo 'misc/newsboot':
- sed 's/^X//' >'misc/newsboot' <<'!'
- X#! /bin/sh
- X# newsboot - clean up on reboot
- X
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/lib/news/bin/config}
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH
- Xumask $NEWSUMASK
- X
- Xcd $NEWSCTL
- Xrm -f L.* LOCK* # leftover locks
- Xrm -f history.n* # leftover expire work files
- X
- Xcd $NEWSARTS/in.coming
- Xrm -f nspool.* nruntmp.* # leftover temporaries
- Xfor f in nntp.* # find partial batches
- Xdo
- X while test -f $f # still there?
- X do
- X name=`getdate now`
- X if test ! -f $name
- X then
- X mv $f $name
- X else
- X sleep 2
- X fi
- X done
- Xdone
- !
- echo 'nntpdiffs/README':
- sed 's/^X//' >'nntpdiffs/README' <<'!'
- XC news diffs for NNTP 1.5 server directory. Geoff Collyer, 8 June 1989
- X
- Xdiff contains normal diffs against 1.5.
- Xcdiff.1.5.0 is equivalent context diffs against 1.5;
- Xcdiff.1.5.5 is context diffs against 1.5.5.
- XContext diffs are courtesy Jean-Francois Lamy.
- X
- Xsrc contains the resultant changed 1.5 source.
- Xsrc.allnew contains entirely new source files.
- X
- XThe changes to misc.c and newnews.c have not been tested.
- XThe other changes have been tested and make a large difference to
- Xperformance.
- !
- echo 'nntpdiffs/diff/ihave.c':
- sed 's/^X//' >'nntpdiffs/diff/ihave.c' <<'!'
- X46c46,52
- X< retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER, ERR_XFERFAIL, errbuf);
- X---
- X> #ifdef UNBATCHED_INPUT
- X> retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
- X> ERR_XFERFAIL, errbuf);
- X> #else
- X> /* C news input hook */
- X> retcode = batch_input_article(CONT_XFER, ERR_XFERFAIL, errbuf);
- X> #endif
- !
- echo 'nntpdiffs/diff/misc.c':
- sed 's/^X//' >'nntpdiffs/diff/misc.c' <<'!'
- X85d84
- X< * Converts "msg_id" to lower case.
- X118,121d116
- X<
- X< for (cp = msg_id; *cp != '\0'; ++cp)
- X< if (isupper(*cp))
- X< *cp = tolower(*cp);
- !
- echo 'nntpdiffs/diff/newnews.c':
- sed 's/^X//' >'nntpdiffs/diff/newnews.c' <<'!'
- X258c258
- X< seekuntil(fp, key, line, linesize)
- X---
- X> seekuntil(fp, akey, line, linesize)
- X260c260
- X< char *key;
- X---
- X> char *akey;
- X266a267,268
- X> extern long dtol();
- X> char key[30];
- X267a270
- X> (void) sprintf(key, "%ld", dtol(akey)); /* akey -> time_t in ascii */
- X329a333,335
- X> /*
- X> * C news version of getword.
- X> */
- X336a343
- X> extern char *index();
- X340,366c347,359
- X< if (cp = index(line, '\t')) {
- X< /*
- X< * The following gross hack is present because the history file date
- X< * format is braindamaged. They like "mm/dd/yy hh:mm", which is useless
- X< * for relative comparisons of dates using something like atoi() or
- X< * strcmp. So, this changes their format into yymmddhhmm. Sigh.
- X< *
- X< * 12345678901234 ("x" for cp[x])
- X< * mm/dd/yy hh:mm (their lousy representation)
- X< * yymmddhhmm (our good one)
- X< * 0123456789 ("x" for w[x])
- X< */
- X< *cp = '\0';
- X< (void) strncpy(w, cp+1, 15);
- X< w[0] = cp[7]; /* Years */
- X< w[1] = cp[8];
- X< w[2] = cp[1]; /* Months */
- X< w[3] = cp[2];
- X< w[4] = cp[4]; /* Days */
- X< w[5] = cp[5];
- X< w[6] = cp[10]; /* Hours */
- X< w[7] = cp[11];
- X< w[8] = cp[13]; /* Minutes */
- X< w[9] = cp[14];
- X< w[10] = '\0';
- X< } else
- X< w[0] = '\0';
- X---
- X> w[0] = '\0'; /* in case of bad format */
- X> if (cp = index(line, '\t')) { /* find 2nd field */
- X> register char *endp;
- X>
- X> *cp++ = '\0';
- X> endp = index(cp, '~'); /* end of date-received */
- X> if (endp == NULL)
- X> endp = index(cp, '\t'); /* end of expiry */
- X> if (endp != NULL) {
- X> (void) strncpy(w, cp, endp - cp);
- X> w[endp - cp] = '\0';
- X> }
- X> }
- !
- echo 'nntpdiffs/diff/serve.c':
- sed 's/^X//' >'nntpdiffs/diff/serve.c' <<'!'
- X239a240,242
- X> #ifndef UNBATCHED_INPUT
- X> {
- X> char errbuf[2 * NNTP_STRLEN];
- X240a244,246
- X> enqpartbatch(CONT_XFER, ERR_XFERFAIL, errbuf);
- X> }
- X> #endif
- X241a248
- X>
- X290d296
- X<
- !
- echo 'nntpdiffs/src/Makefile':
- sed 's/^X//' >'nntpdiffs/src/Makefile' <<'!'
- X#
- X# Makefile for NNTP server
- X#
- X
- XSRVROBJ = main.o serve.o access.o access_inet.o access_dnet.o active.o \
- X batch.o \
- X ahbs.o globals.o group.o help.o ihave.o list.o misc.o netaux.o \
- X newgroups.o newnews.o nextlast.o ngmatch.o post.o parsit.o scandir.o \
- X slave.o spawn.o strcasecmp.o subnet.o time.o xhdr.o fakesyslog.o \
- X ../common/version.o
- X
- XSRVRSRC = main.c serve.c access.c access_inet.c access_dnet.c active.c \
- X batch.c \
- X ahbs.c globals.c group.c help.c ihave.c list.c misc.c netaux.c \
- X newgroups.c newnews.c nextlast.c ngmatch.c post.c parsit.c scandir.c \
- X slave.c spawn.c strcasecmp.c subnet.c time.c xhdr.c fakesyslog.c \
- X ../common/version.c
- X
- XSRVRINC = common.h ../common/conf.h ../common/nntp.h
- X
- XSRCS = ${SRVRSRC}
- X
- X# -ldbm here if you've #define'ed DBM in ../common/conf.h
- XLIBS = -ldbm
- X
- XCFLAGS = -O
- X
- X# Where nntpd is going to live
- X
- XDESTDIR = /etc
- X
- Xall: nntpd
- X
- Xnntpd: ${SRVROBJ} ${SRVRINC}
- X ${CC} ${CFLAGS} -o nntpd ${SRVROBJ} ${LIBS}
- X
- X${SRVROBJ}: ${SRVRINC}
- X
- Xinstall: nntpd
- X cp nntpd ${DESTDIR}/nntpd
- X chmod 711 ${DESTDIR}/nntpd
- X
- Xlint:
- X lint ${SRVRSRC}
- X
- Xclean:
- X -rm -f *.o nntpd make*.out a.out
- X
- Xdistrib: clean
- X rm -rf SCCS save tags
- X
- Xcheck:
- X sccs check
- X sccs prt -y *.[ch] > /dev/null
- X
- Xtags: ${SRVRSRC} ${SRVRINC}
- X ctags ${SRVRSRC} ${SRVRINC}
- X
- X# Dependencies
- X
- X../common/version.o:
- X ${CC} ${CFLAGS} -c ../common/version.c
- X mv version.o ../common/version.o
- !
- echo 'nntpdiffs/src/ihave.c':
- sed 's/^X//' >'nntpdiffs/src/ihave.c' <<'!'
- X#ifndef lint
- Xstatic char *sccsid = "@(#)ihave.c 1.11 (Berkeley) 1/11/88";
- X#endif
- X
- X#include "common.h"
- X
- X#ifdef LOG
- Xint ih_accepted;
- Xint ih_rejected;
- Xint ih_failed;
- X#endif LOG
- X
- X/*
- X * IHAVE <messageid>
- X *
- X * Accept an article for transferral if we haven't seen it before.
- X */
- X
- Xihave(argc, argv)
- X int argc;
- X char *argv[];
- X{
- X char errbuf[2 * NNTP_STRLEN];
- X int retcode;
- X register char *cp;
- X
- X if (argc != 2) {
- X printf("%d Usage: IHAVE <message-id>.\r\n", ERR_CMDSYN);
- X (void) fflush(stdout);
- X return;
- X }
- X
- X cp = gethistent(argv[1]);
- X if (cp != NULL) {
- X printf("%d Got it.\r\n", ERR_GOTIT);
- X (void) fflush(stdout);
- X#ifdef LOG
- X ih_rejected++;
- X#ifdef IHAVE_DEBUG
- X syslog(LOG_DEBUG, "%s ihave %s rejected", hostname, argv[1]);
- X#endif IHAVE_DEBUG
- X#endif LOG
- X return;
- X }
- X
- X#ifdef UNBATCHED_INPUT
- X retcode = spawn(rnews, "rnews", (char *) 0, CONT_XFER,
- X ERR_XFERFAIL, errbuf);
- X#else
- X /* C news input hook */
- X retcode = batch_input_article(CONT_XFER, ERR_XFERFAIL, errbuf);
- X#endif
- X if (retcode <= 0)
- X printf("%d %s\r\n", ERR_XFERFAIL, errbuf);
- X else if (retcode > 0)
- X printf("%d Thanks.\r\n",
- X OK_XFERED);
- X (void) fflush(stdout);
- X
- X#ifdef LOG
- X if (retcode == 1)
- X ih_accepted++;
- X else
- X ih_failed++;
- X
- X#ifdef IHAVE_DEBUG
- X syslog(LOG_DEBUG, "%s ihave %s accepted %s",
- X hostname, argv[1], retcode == 1 ? "succeeded" : "failed");
- X#endif IHAVE_DEBUG
- X#endif LOG
- X
- X}
- !
- echo done
-
-
-