Once the files and sockets have been opened,
waits for connections and data to be ready on its ports by using
and non-blocking I/O.
If no data is available, then it will flush its in-core data structures.
The default number of seconds to timeout before flushing is
<DEFAULT_TIMEOUT in include/config.h>
gets an ENOSPC error (see
while trying to write the
file, an article file, or the history database, it will send itself
a ``throttle'' command.
This will also happen if it gets too many I/O errors while writing
to any files.
Some parameters in
can also be set innd's option. In this case, parameters in
are overridden by those options.
By default, if a host if not mentioned in the
file, then the connection is handed off to
If the ``-a'' flag is used, then any host can connect and transfer
rejects articles that are too old.
While this behavior can be controlled by the history database,
occasionally a site dumps a batch of very old news back onto the network.
Use the ``-c'' flag to specify a cutoff.
For example ``-c21'' will reject any articles that were posted more than
21 days ago.
A value of zero will suppress this check. The default is 14 days, but
can be changed with the ``artcutoff'' option in
If the ``-C'' flag is used, then
will accept and propagate but not actually process cancel or
supersedes messages. This is intended for sites concerned about abuse
of cancels and wish to use another cancel mechanism with greater
normally puts itself into the background, sets its standard output and
error to log files, and disassociates itself from the terminal.
Using the ``-d'' flag instructs the server to not do this, while using
the ``-f'' flag just leaves the server running the foreground.
-H -T -X
The ``-H'', ``-T'', and ``-X'' flags control
the number of connects per minute allowed.
This code is meant to protect your server from newsreader clients that
make too many connects per minute to your server. You should probably
not use it unless you are having a problem.
The table used for these checks is fixed at 128 entries and is used as
a ring. The size was chosen to make calculating the index easy and to
be pretty sure you won't run out of space. In practice, it is
doubtful that you will use even half the table at any given moment.
The ``-H'' flag limits the number of times a host is allowed to connect
to the server per ``-X'' seconds. The default is 2.
The ``-T'' flag limits the total number of incoming connects to innd
per ``-X'' seconds. The maximum value is 128. The default is 60.
The ``-X'' sets the number of seconds used by the ``-H''
flags. A value of zero turns off checking. The default is 0.
To limit the number of incoming NNTP connections, use the ``-i'' flag.
A value of zero will suppress this check.
The default is 50, if the ``maxconnections'' option in
is not specified.
is changed with this value.
This option allows you to bind innd to a specific interface IP address.
The IP address must be in dotted quad (nnn.nnn.nnn.nnn) format. See also
the ``bindaddress'' option in
To limit the size of an article, use the ``-l'' flag.
If this flag is used, then any article bigger than
bytes will be rejected. The default is 1000000L bytes. Checking can be
disabled by using a value of zero. See also the ``maxartsize'' and
``localmaxartsize'' option in
To start the server in a paused or throttled state (see
use the ``-m'' flag to set the initial running mode.
The argument should start with a single letter
to emulate the ``go,'' ``pause,'' or ``throttle'' commands, respectively.
The ``-n'' flag specifies whether or not pausing or throttling the server
should also disable future newsreading processes.
A value of ``y'' will make newreaders act as the server, a value
of ``n'' will
allow newsreading even when the server is not running.
The default is to allow reading, but can also be changed with the
``readerswhenstopped'' option in
To limit the number of files that will be kept open for outgoing file
feeds, use the ``-o'' flag.
The default is the number of available descriptors minus some reserved
for internal use.
If the ``-p'' flag is used, then the NNTP port is assumed to be
open on the specified descriptor.
(If this flag is used, then
assumes it is running with the proper permissions and it will not call
on any files or directories it creates.)
If the ``-P'' flag is used, then the port specified is used for
listening for connections.
will need to have been executed with enough permissions to open the
If the ``-r'' flag is used, the server will renumber the
as if a ``renumber'' command were sent.
If the ``-s'' flag is used, then
will not do any work but will instead just check the syntax of the
It will exit with an error status if there are any errors; the actual
errors will be reported in
Change the timeout period before flushing to
The logs are normally buffered; use the ``-u'' flag to have them
is a small front-end program that opens the NNTP port, sets its
userid and groupid to the news maintainer, and then execs
with the ``-p'' flag and a minimal secure, environment.
This is a small, easily-understood front-end program that can be used if
a site does not want to run
with root privileges.
Arriving articles that have a Control header are called
Except for the cancel message, these messages are implemented by
external programs in the
<pathcontrol in inn.conf>
<usecontrolchan in inn.conf>
(Cancel messages update the history database, so they must be handled
internally; the cost of syncing, locking, then unlocking would be too
high given the number of cancel messages that are received.)
When a control message arrives, the first word of the text is converted
to lowercase except for ``cancel'' and used as the name of the program to execute; if the named
program does not exist, then a program named
<pathcontrol in inn.conf>/default
All control programs are invoked with four parameters.
The first is the address of the person who posted the message; this
is taken from the Sender header.
If that header is empty, then it is taken from the From header.
The second parameter is the address to send replies to; this is taken
from the Reply-To header.
If that header is empty then the poster's address is used.
The third parameter will be a name under which the article is filed, relative
to the news spool directory.
The fourth parameter is the host that sent the article, as specified
on the Path line.
<usecontrolchan in inn.conf>
is ``true'', all control messages except for the cancel will never processed
by external program fork'ed by innd. Instead they can be processed by
script which is invoked as channel program by innd, and you need to setup
to use this script.
can reduce excessive load if many control messages arrive in a short time.
The distribution of control message is also different from those of standard
Control messages are normally filed in the newsgroup named
They can be filed in subgroups, however, based on the control message
For example, a newgroup message will be filed in
if that group exists, otherwise it will be filed in
Sites may explicitly have the ``control'' newsgroup in their subscription
list, although it is usually best to exclude it.
If a control message is posted to a group whose name ends with the four
characters ``.ctl'' then the suffix is stripped off and what is left is
used as the group name.
For example, a cancel message posted to ``news.admin.ctl'' will be sent
to all sites that subscribe to ``control'' or ``news.admin.''
Newgroup and rmgroup messages receive additional special treatment.
If the message is approved and posted to the name of the group being created
or removed, then the message will be sent to all sites whose subscription
patterns would cause them to receive articles posted in that group.
<mergetogroups in inn.conf>
is ``true'', if an article is posted to a newsgroup that starts with the three
letters ``to.'' it will get special treatment if the newsgroup does not
exist in the
the article is filed into the newsgroup ``to'' and it is sent to
the first site named after the prefix.
For example, a posting to ``to.uunet'' will be filed in ``to'' and sent
to the site ``uunet.''
implements the NNTP commands defined in RFC 977, with the following
may be followed by an optional
This common extension is not fully supported; see
commands are implemented.
These are based on the reference Unix implementation; see
draft-barber-nntp-imp-07.txt for more detail.
A new command,
This command will cause the server to pass the connection on to
is intended for future use, and is currently treated the same way.
The commands to support streaming transfer
``check messageid'' and ``takethis messageid'' are provided.
A batch transfer command ``xbatch byte-count'' is also provided. This
command will read byte-count bytes and store them for later
processing by rnews(1) (which must be started separately). See the programs
innxbatch and sendxbatches.sh.
The only other commands implemented are
modifies as few article headers as possible, although it could be better
in this area.
The following headers, if present, are removed:
Empty headers and headers that consist of nothing but whitespace are also
The local site's name (as determined by the ``pathhost'' value in
and an exclamation point are prepended to the Path header, if
the first site's name in the header is different from local one.
The Xref header is removed and a new one created.
The Lines header will be added if it is missing.
does not rewrite incorrect headers.
For example, it will not replace an incorrect Lines header, but will reject
reports all incoming articles in its log file.
This is a text file with a variable number of space-separated fields in
one of the following formats:
There can also be a hostname and size field after the Message-ID
depending on the ``nntplinklog'' and ``logsize'' options in
The first three fields are the date and time to millisecond resolution.
The fifth field is the site that sent the article (based on the Path
header) and the sixth field is the article's Message-ID; they will be a
question mark if the information is not available.
The fourth field indicates whether the article was accepted or not.
If it is a plus sign, then the article was accepted.
If it is the letter ``j'' then the article was accepted, but all of
newsgroups have an ``j'' in their
field, so the article was filed into the ``junk'' newsgroup.
If the fourth field is the letter ``c'', then a cancel message was
accepted before the original article arrived.
In all three cases, the article has been accepted and the ``site...'' field
contains the space-separated list of sites to which the article is
If the fourth field is a minus sign, then the article was rejected.
The reasons for rejection include:
"%s" header too long
"%s" wants to cancel <%s> by "%s"
Article exceeds local limit of %s bytes
Article posted in the future -- "%s"
Bad "%s" header
Can't write history
Duplicate "%s" header
EOF in headers
Linecount %s != %s +- %s
Missing %s header
No colon-space in "%s" header
Space before colon in "%s" header
Too old -- "%s"
Unapproved for "%s"
Unwanted newsgroup "%s"
Unwanted distribution "%s"
Whitespace in "Newsgroups" header -- "%s"
Where ``%s'', above, is replaced by more specific information.
If the fourth field is the letter ``?'', then the article includes strange
strings which is CR without LF or LF without CR. Those characters are used
together as ``CRLF'' to indicate end of line. Currently this log entry just
indicates the weirdness of article, and
never rejects it for this reason.
Note that if an article is accepted, and <wanttrash in inn.conf> is
set to ``yes'' and none of the newsgroups are valid, it will be logged
with two lines, a ``j'' line and a minus sign line.
also makes extensive reports through
The first word of the log message will be the name of the site if
the entry is site-specific (such as a ``connected'' message).
The first word will be ``SERVER'' if the message relates to the server itself,
such as when a read error occurs.
If the second word is the four letters ``cant'' then an error is being
In this case, the next two words generally name the system call or library
routine that failed, and the object upon which the action was being performed.
The rest of the line may contain other information.
In other cases, the second word attempts to summarize what change
has been made, while the rest of the line gives more specific information.
The word ``internal'' generally indicates an internal logic error.
will catch SIGTERM and SIGDANGER and then it will shutdown.
If ``-d'' flag is used, SIGINT also will be catched and
will catch SIGUSR1 signal and recreate the control channel which is typically
Written by Rich $alz <email@example.com> for InterNetNews.
This is revision 188.8.131.52, dated 2000/08/20.