Commit b23eae0c authored by Hilko Bengen's avatar Hilko Bengen

Imported upstream version 0.3.8

0.3.8 Tue Aug 10 15:15:34 EEST 2004
SNHELLO: CR chars had accidentally become LFs, fixed.
sndumpdb: Print decimal numbers instead of x/100 fractions.
Made the header field name check more lenient in order to avoid unnecessary warnings.
snmail: Convert In-Reply-To: to References: only if the message has no References:.
snmail: Use last <> enclosed string in In-Reply-To: as the message-id.
snmail: removed Message-ID checking and generation - this is handled by snstore.
Replaced Message-ID checking with looser implementation based on RFC 2822.
0.3.7 Mon Apr 26 01:11:42 EEST 2004
Added contrib directory for contributed tools/examples, and populated it
with 2 authentication implementations + an auto subscribe script.
Code changes to improve readability: use booleans instead of integers where
appropriate, and NULL instead of 0 for pointers.
Renamed log() -> log_() to avoid annoying warning in gcc 3.3.
Fixed Segfault on PPC Linux systems. (Thanks to Chris Niekel)
Renamed lockf to snlockf, POST to SNPOST and HELLO to SNHELLO in order to
prevent conflicts with executables from other packages.
0.3.6 Thu Jan 16 18:07:03 EET 2003
Fixed XOVER for the case where a header is present but empty.
Reorganized the Makefile a bit to make it simpler: added PREFIX variable.
snsend: Fixed rnews batch reading for zero-length articles.
0.3.5 Sat Jul 6 18:37:50 EEST 2002
Added an FAQ, containg the solution to the infamous POST problem.
NEWGROUPS and NEWNEWS now works properly during DST. (Was offset one hour.)
Made "sncat -i foo" work for users with read-only access to the spool.
Expiration ages can now be specified in years, e.g. "2y" = 2 years.
Made snexpire use a month of 30.415 days instead of 28.
With the old code, "12m" actually meant about 11 months.
Fixed snget's -m option for the case where .serial can't be read.
Made the XHDR command work for Xref headers.
Removed the ugly "Terminated" messages from HELLO when using bash 2.
0.3.4a Tue Nov 13 00:17:20 EET 2001
Made HELLO work with bash version 2.
Fixed a bug in request-newgroups.
0.3.4 Sun Nov 11 19:08:55 EET 2001
Reformatted the source with GNU indent to make it easier to read (for me).
Made the request-list and request-newgroups features work again.
snstore fixes: don't exit if =junk doesn't exist,
and strip trailing spaces from newsgroup names
"dup/present" were printed the wrong way around in snfetch.
Bug in Message-ID checking disallowed <foo@[IP-number]>.
Made the "Can't write in spool" error a bit more informative.
snget's -m option didn't work.
Improved portability. (The biggest change was to replace all calls to
flock() with lockf().) sn should now work on most UNIXish systems,
as long as the GNU tools (gmake, gcc, bash, etc.) are installed.
0.3.3 Thu Nov 23 17:50:12 EET 2000
Fixed a bug related to article ranges outside of the available articles.
Added new Makefile variable: DEFAULT_ADMIN_EMAIL
New maintainer: Patrik Rådman takes over.
snexpire bug related to =junk.
writefifo has been failing for a few revs now! Fixed.
0.3.2 Fri Mar 3 22:33:02 SGT 2000
Changed ctime to mtime, when checking .created.
Date conversion error, e.g. for NEWGROUPS and NEWNEWS.
Doc error, command line example using tcpserver.
Bug in command parsing causes slrn grief
More log levels tweaked
Format bugs in snsend.
0.3.1 Fri Oct 29 11:24:12 SGT 1999
Added -v option to snexpire.
Bad logic when checking to map in newsgroup.c.
snmail now silently discards leading From_ line if present.
Empty article kludge^H^H^H^H^H^Hfix
HELLO auth kludge
post.c truncates lines from POST, fixed
PATH made to include BINDIR in snntpd.c
Log levels tweaked in snfetch, was too noisy
0.3.0 Tue Aug 10 12:01:14 SGT 1999
Bug in times.c causes expiration to fail on empty newsgroup.
Bug in head.c causes rnews input to fail.
Newsgroup names checking relaxed and centralized.
Optional "=junk" rejected articles newsgroup.
Bug in times expiration not properly deleting article entry times.
sncancel new program.
Options for snscan, sncat, sncancel merged and extended.
Exec .outgoing directly if executable, to permit binaries.
snmail no longer checks for a valid newsgroup, since snstore will
want the option of storing the article under =junk.
parameters.c now checks euid/egid instead of uid/gid.
NEWGROUPS command misinterpreted date.
INSTALL.notes error, missing snprimedb -i command for reconstructing
Another race in snstore, when creating a new article file.
snexpire now checks to make sure id being deleted is the right one.
snfetch now checks for duplicate ID's within the same session.
snsend new program supercedes snstore.
snstore -n now writes to fd 1 not 2.
snstore no longer checks for local/global group. It wasn't used
Removed throttle and sn-words.
0.2.5 Sat Mar 27 13:07:05 SGT 1999
Rare race in newsgroup.c fixed.
Message ID leakage in database.
0.2.4 Wed Feb 24 21:09:52 SGT 1999 (private)
sngetd new program.
snnewgroup, sndelgroup now C programs.
snntpd LIST command output format error (again)
snexpire doc error, change.
Compression compile-time optional, rewrite, reorg.
snmail understands In-Reply-To.
snmail no longer checks /.nopost, not its job.
snmail optionally runs snstore.
snlogin understands new reply codes; code reorg.
snstore can save skipped article to stderr.
Programs no longer installed setuid.
.nopost check error, was not functioning correctly.
Divide-by-0 in sndumpdb
Format for logging pid changed in snfetch.
snexpire logic altered to not leave garbage if 0 expire age.
snget (and others) takes -P, passes to snfetch.
0-length article bodies now legal in snntpd and snscan.
0.2.3 Mon Dec 7 12:44:03 SGT 1998
Option -m for snget to limit initial articles.
snpost locking now performed.
snmail EOL conversion error; rewrite.
snntpd LIST command output format error.
snfetch rnews format error.
0.2.2 Thu Oct 8 11:02:54 SGT 1998
-r option in snstore, snfetch, sncat.
Rewrote snget as binary instead of script.
Merged dh_dump() into sndumpdb.c, it didn't belong in dhash.c.
Split dhash.c into readonly portion and readwrite.
Rewrote snfetch: option to use pipelining.
New IO lib with decent input line buffering, own dir, atomic logging.
Env vars to allow separate users to own a different news spool.
Incorrect interpretation of Xref: line fixed.
System #includes.
Scripts changed due to new/different bash behaviour.
Bug in NEXT/LAST, not incrementing/decrementing.
Bug in snstore in handling 8-bit data in head of article.
Decent option processing, man pages updated.
snlogin AUTHINFO sadness.
Bug in do_post(), prevents posting to local group.
Better snpost reporting.
Off-by-one in art.c, resulting in random crashes.
0.2.1 Wed Aug 5 18:29:37 SGT 1998
Missing realloc in subscribed.c, reorg in newsgroup.c.
0.2.0 Sat Jul 11 13:34:03 SGT 1998
Replaced stdio calls. Added timeout. Mailing list support.
Removed xover option in snfetch. Dubious value.
Various bugs.
0.1.9 Mon Jun 29 23:05:07 SGT 1998
Mods for use with Netscape News, thanks Marko.
XPAT command added.
Added snmail.
0.1.8 Fri Jun 12 01:34:52 SGT 1998
Minor changes. I ought to just make a diff. Aw, hell.
#include problem in snscan.c; bash problem workaround in snget.
Bad data sync on if more than one process accesses the ID database.
Option to snprimedb, -i.
Wrong info in snstore.8, which said a newsgroup argument was needed.
In fact there is no such argument.
Wrong info in sn.8, in description of leafnode.
0.1.0 Sun May 17 16:38:43 SGT 1998
Private release. Thanks rth, janl, mlo.
This diff is collapsed.
This file intentionally left blank :)
If your question wasn't answered above, ask on the mailing list.
(See README for instructions.)
If you're upgrading from a previous version of sn, please read
INSTALL.upgrade first.
To install sn:
0) Decide if you want the compression feature compiled in. It's
safe to compile it in; you don't have to use it if you don't want
If you do want compression, get and install or libz.a
first. You'll also need zlib.h and zconf.h. These appear to
be missing in some Linux distributions.
The email address "postmaster" (on localhost, see also config.h)
should already exist, and the email system, at least local email,
should be operational. sn will use email for some error messages.
The executable "/bin/mail" should exist.
If you are installing on something other than Linux, (such as Solaris)
remember to run the GNU utilities. I.e. when it says "make" below,
you should run "gmake" if that is the name of GNU make on your system.
1) Edit Makefile. The make variables to look out for are SNROOT
and PREFIX which are the news spool location and where to put the
executables and man pages, respectively. Unset the ZLIB variable if
you have decided to disable compression.
In the following, SNROOT refers to the value of SNROOT as you
have set it in the Makefile; likewise for PREFIX.
SNROOT should be on a local filesystem, not NFS.
2) Edit config.h. Probably nothing to change, but follow the
3) Build it. Type "make", then "make -n install" to see where
things will be installed to; "make strip" optionally to strip the
binaries. "make clean" if you want to start over.
4) Create the directories and the fifo:
$ mkdir SNROOT
$ mkdir PREFIX/sbin
$ mkdir PREFIX/man/man8
$ mknod -m 600 SNROOT/.fifo p
Change the ownership of SNROOT and SNROOT/.fifo to the user and
group for which you want sn to run (for instance,
This is important: the ownership of SNROOT determines sn's
running privileges. Do NOT make the owner root.
5) If you're upgrading from a previous version of sn, please read
INSTALL.upgrade next. Finally, "make install" in the source
Read for a quick introduction on how to run sn.
If you're using sn in a novel way, I'd like to hear from you.
Otherwise, here are some possibilities. Look over the man pages
or much of this won't make sense. I haven't provided detailed
instructions on these; systems vary too much.
To speed up news fetching.
Experiment with the -c option to snget. See the man page to
snfetch and heed the warning. It works when talking to INN.
To use "suck" to feed the news spool.
suck is a separate package that can be used to fetch news.
It has article filtering capabilities not present in snfetch
that you may want. Versions of sn up to 0.2.1 made use of
either suck or tcpclient with snfetch to feed the news spool.
This was run from snget, which was at that time a shell script.
The script still remains as even though it is no longer
used, and you can look at to see how it can be done. Suck will
not know how to check if an article is already present, so use
the -c option to snstore.
To let users use sn for a personal news system.
If you're the system admin, instruct your users to set their shell
environment to include these:
SNROOT=$HOME/sn # or whereever
export SNROOT # sh-type shells
Be sure their .qmail or .forward or .procmailrc and any crontab
commands sets these too. If they are to use this to store mail,
they may also want to add a command "umask 044" to ensure files
created are not world readable. Then they can use the sn programs
just as you can, only it applies to their own spool. The advantage
to doing this is that it permits them another way to store their
mailing list messages (see below). You don't really want them
to run another system news spool there. Don't forget to tell
them how to expire.
To turn a mailing list into a site-wide newsgroup:
Create a local newsgroup first, call it say
$ snnewgroup local.mailing-list
Set up your mail system (.forward, .qmail, /etc/aliases or
whatever) to pipe each incoming message to snmail, with the
command line similar to:
PREFIX/sbin/snmail -sc mailing-list local.
(note trailing dot). Make sure permissions are correct and $SNROOT
is set correctly. If you're using sendmail, you may run into
permissions problems. It's a good idea to make sure the return
path of the incoming mail is the mailing list bounce address
before feeding it to snmail, or you might get all manner of crud
accumulating in the group.
This takes care of the incoming end of the mailing list.
If you also want to transparently forward articles posted into
that newsgroup to the mailing list, do the following: Copy the file
dot-outgoing.ex into SNROOT/local.mailing-list/.outgoing and edit
it (follow the comments). This script gets executed by snsend as
each time someone posts to that newsgroup, and the article is
made available on its standard input. You'll need to set the
mailing list address in it and tell it where to find sendmail.
You will probably also want to set the return address on it, so
bounces come back to the true subscriber to the mailing list and
so the list recognizes the sender. Details on this vary according
to your MTA. DO THIS CAREFULLY! This is in effect a remailer,
and you are permitting your users to use your mail address.
You can always set/unset POSTING_OK via tcpd so snntpd will control
posting according to the posting host, or edit PREFIX/sbin/SNPOST for
even greater control.
To prevent snget from hogging your modem when you dial up:
Use the -h option to snget. See the snget man page.
To change the upstream server of a (non-local) newsgroup:
You have to do this manually, as the owner of SNROOT or root.
Tell sn about the new upstream server, if it doesn't already know:
$ mkdir .outgoing/
Use all lower case for the server name. "port" is the numeric port
number, usually 119.
Delete the old symlink:
$ rm
Re-create the same symlink to point to the new server:
$ ln -s ../.outgoing/
Zero out the newsgroups .serial file so it will re-sync on the
next fetch:
$ echo '0' >
Make sure permissions are correct if you did this as root:
$ chown \
Replace "" with whatever the ownership is on SNROOT.
To create a moderated local newsgroup:
As with a newsgroup gated into a mailing list, create a .outgoing
$ echo 'mail moderator@myhost' >SNROOT/
(you can run sendmail directly instead of mail if you wish) where
"moderator@myhost" is the email address of the moderator. Then
all new articles posted to that group end up being sent to him,
where, if approved, he can run snstore manually to insert the
article. Don't use "cat >>filename"; you will probably run into
permissions and locking problems.
To do news-on-demand:
Use sngetd.
To recreate the article ID database:
This action may become necessary, because the database can, under
degenerate conditions, grow to enormous sizes. The database also
isn't written synchronously, so it could become corrupt after a
system crash.
First, ensure that for the duration of the rebuild, snget or
suck or whatever it is you're using to pull in news, and snntpd,
are not running and will not be run.
$ touch .noservice
$ rm .newsgroup .table .chain
$ find . -type f -name "+*" -exec rm -f {} \;
$ snprimedb -i
$ snscan -n * | snprimedb; rm -f .noservice
Don't forget the "-n" to snscan. This will rebuild the database
completely. Its a good idea to place these lines in your system
rc files so this is done on every reboot, after fsck.
To see which newsgroups are popular:
Run a daemon or shell script that reads newsgroup names from
SNROOT/.fifo and records them. snntpd writes the name of the
newsgroup that someone is reading into this fifo. You can use
this information to decide which newsgroups to drop, or which to
alter expiration for, or to run a dynamic feed.
To save homeless articles:
Create a local newsgroup with the special name "=junk". snstore
will save articles here that don't belong anywhere else. Such a
situation is rare if you never use snstore directly, but it is
possible if for example you are gating a mailing list into it,
or if you are feeding the spool other than through snget, sngetd,
or snntpd.
snntpd will not recognize "=junk" as a valid newsgroup even if it
exists, so you cannot POST to it.
The default expiration age for "=junk" is also 7 days.
To pull a newsgroup from 2 servers:
Some people have written asking about this, because their primary
server isn't very reliable or complete, so they want to augment
the articles with those obtained from somewhere else.
I haven't gotten around to writing this, but the idea is to
wrap snget with a script that rotates the .outgoing symlink among
all the servers each time it is called, so that each fetch is from
a different server. The .serial file will have to be similarly
To authenticate connecting clients:
snntpd doesn't do any authentication at all. You do that by
running a script or program of your devising, that speaks limited
NNTP, that performs your choice of authentication. If successful,
have it set the environment to inform PREFIX/sbin/SNPOST, then exec
snntpd with the -S (suppress greeting) flag.
For a simple script to do this, see contrib/simple_authentication.
If you'd prefer PAM-based authentication, see contrib/pam_authentication.
Some thoughts that haven't been tested, but should be workable. Why
include it here? Because if you do this, I'd like to hear about it
even if you have no problems.
Aliasing of newsgroup names.
If group.alias is a symlink to group.real, which is a newsgroup directory,
then all functions that apply to group.real (posting, fetching, etc.)
apply equally to group.alias as group.real. EXCEPT in reading articles,
when the newsgroup name is group.alias, whereas it should be group.real.
You have to be root or the owner of SNROOT to do anything
listed here. You should have already built and installed sn, see
file INSTALL. "SNROOT" and "PREFIX" refer to values as you have
set in the Makefile.
In the following, remember that (almost) every file and directory
under and including SNROOT must be owned be the same user and group.
(In some cases the owner may be root instead.) sn won't complain
about writeable files.
1) Add newsgroups:
$ snnewgroup comp.os.linux.announce my.isps.server 119
$ snnewgroup alt.lemmings my.other.isps.server
$ snnewgroup local.private
119 is the default port number, and you can omit it.
If you leave out the news server address, the newsgroup will
get created as a local one. (You can tell a global group by
the symlink, which points somewhere
into one of SNROOT/.outgoing/*). A local group doesn't have
an upstream feed; it gets articles when people post to it.
Each newsgroup has at most one upstream feed.
If my.isps.server on port PORT requires a username and password:
$ cd SNROOT/.outgoing/my.isps.server:PORT
$ echo my-username >username
$ echo my-password >password
$ chmod 600 username password
where PORT is the servers port number, usually 119.
You can add new newsgroups at any time. The sn package won't
automatically create newsgroups for you.
man snnewgroup(8), sndelgroup(8).
Optionally request a list of newsgroups from your server, when
it connects. "Optionally" because these lists are usually very
long. If you do this, check your email after step 2.
$ echo 'mail me@myhost' >/SNROOT/.outgoing/my.isps.server:119/request-list
Replace "me@myhost" with your email address. You can also replace
"mail me@myhost" with any other shell command that will read
data from standard input. This file will be deleted when the
command runs successfully.
(Later on you can get a list of new groups by putting the command in
request-newgroups instead.)
2) If you've added any global newsgroups, fetch some news:
$ snget
snget will collect articles from the subscribed-to groups (as in
step 1) and store them under their respective group directories.
Status messages will be written to standard error. On first run,
expect "out of sync" messages; this is normal. If you expect
lots of articles you can use
$ snget -m 100
to limit it to 100 articles per newsgroup (the default is 200).
The -m option is useful only when priming the newsgroups.
man snget(8).
3) Enable news reading via NNTP.
You can run snntpd under inetd/tcpd (most people will do this),
or under tcpserver. (Or any other program which will let you
connect a socket to stdin/stdout of snntpd.)
"logger ..." is used to store snntpd log messages, which means
the messages end up whereever /etc/syslog.conf says to put it.
The example access control policy here is to permit reading and
posting from local clients, and to deny all access to everyone
else. The local network is assumed to be For more
complicated posting access control, see the PREFIX/sbin/SNPOST script,
which can do fine-grain control. The coarse grain posting access
here is determined by the POSTING_OK environment variable.
Running under inetd/tcpd:
In /etc/hosts.allow, insert a line:
nntpd : localhost, 192.168.9. : setenv = POSTING_OK
In /etc/hosts.deny, insert a line:
nntpd : ALL
See man 5 hosts_access for more complex configurations. See man
snntpd for more on POSTING_OK. NOTE: the "setenv" capability
is said to be unworkable in the tcpd that ships with certain
versions of the Red Hat Linux distribution.
Create a small shell wrapper for snntpd, call it "nntpd":
# snntpd needs to find snstore if it is to accept news postings.
# Replace PREFIX with the real value of PREFIX from the Makefile.
export PATH
# Enable posting? Can also do this from /etc/hosts.allow
POSTING_OK=1; export POSTING_OK # yes
# No: unset POSTING_OK
# Run snntpd, and log errors in the system log:
PREFIX/sbin/snntpd /usr/bin/logger -p
# Run snntpd, and log errors in a log file:
# PREFIX/sbin/snntpd 2>>/where/you/want/the/snntpd.log
# End of wrapper script.
In /etc/inetd.conf, insert a line:
nntp stream tcp nowait root.root /path/to/tcpd /path/to/nntpd
You can change root.root to the owner and group of SNROOT;
however, snntpd always drops root.
Hup inetd and run your newsreader. The news spool can be read
only via NNTP because of its unorthodox structure.
man snntpd(8), inetd(8), tcpd(8), hosts_access(5)
Running under tcpserver:
If you're not running snntpd for the system, using tcpserver is
the simplest option.
Create the access control cdb file, for example:
tcprules news.cdb tmp.cdb <<HERE
man 1 tcprules for more on this file.
Run a command similar to one of the following, and place it
somewhere in your rc files when you're happy with it.
Do this as root or as the owner of SNROOT.
$ env - PATH=PREFIX/sbin:$PATH \
tcpserver -RHl0 -x news.cdb 0 nntp \
snntpd logger -p &
If you're not running this for the system, use a different port
number, such as "1119" instead of "nntp".
man tcpserver(1).
4) Crontab entries. The following refers to the crontab for root
or the owner of SNROOT.
A line similar to the following will expire old articles:
0 3 * * * cd SNROOT && PREFIX/sbin/snexpire *
man cron(8)/crond(8), crontab(1), crontab(5).
5) You can fetch news automatically whenever you dial up. If you're
using pppd, place a line in /etc/ppp/ip-up:
PREFIX/sbin/snget 2>&1 >/dev/null &
If you're worried about snget taking up all your bandwidth,
use the -h option to snget (see the man page) to throttle
its connection.
man snget(8), pppd(8).
6) Tuning. After some days or weeks of use, you can start tuning
the expiration:
$ echo '10d' >SNROOT/alt.lemmings/.expire
expires alt.lemmings in 10 days instead of the default of 7.
You can also say '2w' for 2 weeks, or '1m' for one month.
man snexpire(8).
If USE_ZLIB was set in the Makefile (this is the default),
you can enable compression on selected newsgroups, which by now
would be easy to identify:
$ touch /SNROOT/comp.source-code.big/.compress
says new articles entered in comp.source-code.big will be candidates
for compression. Old articles won't be touched. Compression and
decompression take place transparently. (You can see if zlib was
compiled in: "ident snntpd |grep ZLIB").
man snstore(8).
Deny posting on a per-newsgroup basis:
$ touch /SNROOT/alt.usenet.noise.noise.noise/.nopost
This disallows posting (via "POST" NNTP command) for this group,
but permits new articles from it's upstream host. Effectively
alt.usenet.noise.noise.noise becomes readonly to users. See the
PREFIX/sbin/SNPOST script.
man snntpd(8).
7) Boot script.
In one of your system rc scripts, after the filesystems have been
mounted and fsck has been run, execute the following:
rm .newsgroup .table .chain
find . -type f -name "+*" -exec rm -f {} \;
PREFIX/sbin/snprimedb -i
PREFIX/sbin/snscan -n * | PREFIX/sbin/snprimedb;
This ensures that sn's ID database is in sync with the news
You can read INSTALL.notes for other ways to use sn.
If you are having problems with sn, please read FAQ to see if your question
has already been answered, before asking the mailing list for assistance.
0.3.8: Bugfix release. No new features.
0.3.7: POST is now SNPOST and HELLO is SNHELLO. If you have customized
scripts you need to make the same name change. (.POST -> .SNPOST and
0.3.6: Bugfix release. The Makefile has been slightly simplified with the
introduction of a PREFIX variable, which should be set to the parent
directory of sn's manual and binary directories. (If you wish to have
these directories in separate locations, BINDIR and MANDIR can be set
as before.)
0.3.5: The way that snexpire calculates the length of a month has changed
so that an expire time of "12m" now actually means about 12 months, and not
11. (Now you can also specify years, for example "2y".)
0.3.4 fixes bugs and improves portability. No new features.
0.3.3: The default e-mail address for the administrator used to be
"postmaster", now it's determined by the DEFAULT_ADMIN_EMAIL variable
in the Makefile.
0.3.2 is a bug fix release over 0.3.1. No incompats.
0.3.1 is a bug fix release over 0.3.0. No incompats.
0.3.0 has a lot of code level changes, but sn still behaves
much the same. Most of these changes have to do with cleaning up
the structure by drawing a clearer line between what is sn and what
is site policy. This has resulted in a bunch of stuff being
moved from the core into editable and overrideable scripts.
For those who have been using 0.2.5 in a "normal" way - global and
local newsgroups, and mailing lists - you needn't change anything
except maybe the NEWSMASTER macro. This macro was used to set the
email address of the site admin, now that address is configured in
the POST and HELLO scripts. The default is $NEWSMASTER environment
variable if set, otherwise $LOGNAME if set, otherwise "postmaster".
For other sites that have been using the spool in a novel way,
read on.
Programs removed:
The "throttle" and "sn-words" programs have been removed. You can
use those from an old distribution if you need them.
snntpd invocation:
snntpd now optionally invokes a logger to send log messages to, and
the INSTALL files show that option being used. This means the
"nntpd" wrapper script is no longer needed, but if you're happy with
the existing setup, there is no need to change the invocation.
snstore no longer takes the -1 option. It was a mistake to document
it anyway. If you're using a custom storage script, it may be
easier to use snsend for your purpose now.
The junk newsgroup:
If you create a newsgroup "=junk", snstore and snsend (new program)
will put articles here that don't belong anywhere else, rather than
dropping them. If you want the old behaviour, which is to dump them
to descriptor 2 or drop them, don't create "=junk". The junk
newsgroup can be expired like any other news group, but it isn't
visible under snntpd.
Control messages:
By default now cancel control messages get mailed to you for action,
whereas before, sn didn't understand control messages at all. If
you don't like this, copy BINDIR/POST into SNROOT/.POST and edit it
to remove the first stanza.
snmail checking:
Old snmail used to check these things: valid newsgroup name;
existence of the newsgroup; presence of the message ID in the
database; and that SNROOT/.nopost does not exist. New snmail
doesn't. You can still request these checks by specifying snmail
-scn (send to [-s]nstore and tell it to also [-c]heck the database
but do [-n]ot store it).
sncancel (new) and inaccurate snntpd listing:
Some news readers complain if the news server's GROUP output lists
a certain number of articles, but fewer than those actually exist.
This problem will reappear in snntpd if you use sncancel, since
snntpd merely checks the lowest and highest articles, and assumes
there are no holes in between. I'm not likely to "fix" this, because
a news reader can't really expect the article count to not change,
even within a session.