snsend - distribute articles
snstore - store articles locally
snsend reads articles from descriptor 0 and distributes each one into
each newsgroup they are posted to, like inews. snstore does the same
but stores them all locally. The input articles are expected to be in
wire format (lines end with CRLF, leading dots are doubled, and
articles are terminated with a lone dot).
Control messages are not treated specially.
The newsgroups list is taken from the X-sn-Newsgroups field if it
exists; otherwise it is taken from the Newsgroups field, which must
exist or the article will be junked. All fields whose names begin with
X-sn- (case insensitive) are always removed.
If Date or Message-ID are not present, these are created. The local
hosts name is prepended to the Path field.
If an article is to be junked, it is sent to the junk newsgroup if it
exists, otherwise it is discarded.
This applies only to snsend. snstore does not route; it treats all
news.groups as though they were local (see Nonexistent newsgroup and
Local newsgroup below). If any of the following fails, snsend aborts:
For each news.group an article is (cross-) posted to, snsend routes the
article as follows, aborting if any action fails:
If /var/spool/sn/news.group is not a directory, snsend ignores
this news.group. If all news.groups are thus ignored, the
article is junked.
If /var/spool/sn/news.group/.outgoing is a (symlink to a)
directory, snsend stores the article into a file in that
directory, if the same article does not already exist there (so
news.group’s upstream feed doesn’t get multiple copies of the
same article.) Such in-transit article files are given names
that begin with a $ sign.
Local processing via script
Otherwise if /var/spool/sn/news.group/.outgoing is a regular
file, it is taken to be a script or program and is run with the
article available on its input. See /var/spool/sn/dot-
Local processing via fifo
Otherwise if /var/spool/sn/news.group/.outgoing is a fifo, the
article is written into it. It is an error if nothing is
reading the fifo.
Otherwise if /var/spool/sn/news.group/.outgoing does not exist,
the article is stored into news.group.
Options apply to snsend and snstore equally.
-r The article stream is in rnews batch format, rather than wire
format. Only the #! rnews form is understood.
-c If an article already exists in the local newsgroup it is
destined for, don’t store it there. For snsend, this option has
no effect on newsgroups that are not local.
-a (Aliases not allowed.) When storing to multiple local
newsgroups, do not alias subsequent copies to the first,
instead, make a copy. Aliasing saves disk space, but when the
original expires, so do all aliases to it. This option has no
effect on newsgroups that are not local.
-n Don’t actually do anything with the article, just dump it back
onto descriptor 1.
-v For each article stored in each newsgroup, output a line to
descriptor 1 similar to what snscan would emit, except that for
non-local newsgroups the serial number will always be 0.
This includes /var/spool/sn/=junk newsgroup if it exists. Each
such directory represents the newsgroup of the same name, and
articles are stored in files 1, 2, 3, etc. beneath it. Each
such file contains 1 or more articles. This is contrary to the
traditional form of /var/spool/sn/news/group/name.
See also ROUTING above. The presence of this directory
indicates that news.group is global, and articles posted to
news.group end up here in files named $*. These files are
linked in already complete, so all such files are ready to be
If this file exists, articles stored in news.group are
candidates for compression. The content of the file is a number
representing a minimum article body size below which compression
won’t be applied. If the file is empty this threshold defaults
to 1024 bytes.
If this file exists, it’s contents are taken to be the local
hosts name for purposes of the Path field. Otherwise the name
is obtained from gethostname(2).
See also /usr/sbin/dot-outgoing.ex for other variables exported when
snsend invokes a .outgoing program.
SNROOT If this is set, its value is used in place of /var/spool/sn.
snsend and snstore exit 0 on success, 1 on usage error, 2 on system
error, 3 on article format error, and 9 if
/var/spool/sn/news.group/.outgoing (snsend only) exits with other than