innd, inndstart - InterNetNews daemon
innd [ -a ] [ -c days ] [ -C ] [ -d ] [ -f ] [ -H count ] [ -i count ] [ -IIP_address ] [
-l size ] [ -m mode ] [ -n flag ] [ -o count ] [ -pfd_desc ] [ -Pport ] [ -r ] [ -s ] [ -t
timeout ] [ -T count ] [ -u ] [ -X seconds ]
inndstart [ flags ]
Innd, the InterNetNews daemon, handles all incoming NNTP feeds. It reads the active(5),
newsfeeds(5), and incoming.conf(5) files into memory. It then opens the NNTP port to
receive articles from remote sites (see the ``-p'' option), If <HAVE_UNIX_DOMAIN_SOCKETS
in include/config.h> is defined, a Unix-domain stream socket to receive articles from
local processes such as nnrpd(8) and rnews(1), and a Unix-domain datagram socket for use
by ctlinnd(8). If <HAVE_UNIX_DOMAIN_SOCKETS in include/config.h> is not defined, named
pipes are used instead. Ctlinnd(8) is used to direct the server to perform certain
actions. It also opens the history(5) database and two log files to replace its standard
output and standard error.
Once the files and sockets have been opened, innd waits for connections and data to be
ready on its ports by using select(2) 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 set as <DEFAULT_TIMEOUT in include/config.h> (typically 300) seconds.
If innd gets an ENOSPC error (see intro(2)) while trying to write the active 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 inn.conf(5) can also be set innd's option. In this case, parameters in
inn.conf(5) are overridden by those options.
-a By default, if a host if not mentioned in the incoming.conf file, then the connec-
tion is handed off to nnrpd. If the ``-a'' flag is used, then any host can connect
and transfer articles.
-c innd 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 ``artcut-
off'' option in inn.conf(5)
-C If the ``-C'' flag is used, then innd 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 authentica-
-d -f Innd 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'' and ``-T'' flags. A value
of zero turns off checking. The default is 0.
-i 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 inn.conf(5) is not specified. The ``maxconnections'' option in inn.conf(5) is
changed with this value.
-I 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 ``bindad-
dress'' option in inn.conf(5).
-l To limit the size of an article, use the ``-l'' flag. If this flag is used, then
any article bigger than size bytes will be rejected. The default is 1000000L
bytes. Checking can be disabled by using a value of zero. See also the ``maxart-
size'' and ``localmaxartsize'' option in inn.conf(5).
-m To start the server in a paused or throttled state (see ctlinnd(8)) use the ``-m''
flag to set the initial running mode. The argument should start with a single let-
ter g, p, or t, to emulate the ``go,'' ``pause,'' or ``throttle'' commands, respec-
-n 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 inn.conf(5).
-o 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.
-p If the ``-p'' flag is used, then the NNTP port is assumed to be open on the speci-
fied descriptor. (If this flag is used, then innd assumes it is running with the
proper permissions and it will not call chown(2) on any files or directories it
-P If the ``-P'' flag is used, then the port specified is used for listening for con-
nections. innd will need to have been executed with enough permissions to open the
-r If the ``-r'' flag is used, the server will renumber the active file as if a
``renumber'' command were sent.
-s If the ``-s'' flag is used, then innd will not do any work but will instead just
check the syntax of the newsfeeds file. It will exit with an error status if there
are any errors; the actual errors will be reported in syslog(3).
-t Change the timeout period before flushing to timeout seconds.
-u The logs are normally buffered; use the ``-u'' flag to have them unbuffered.
Inndstart is a small front-end program that opens the NNTP port, sets its userid and
groupid to the news maintainer, and then execs innd 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 innd with root privileges.
Arriving articles that have a Control header are called control messages. Except for the
cancel message, these messages are implemented by external programs in the <pathcontrol in
inn.conf> directory, if <usecontrolchan in inn.conf> is ``false''. (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
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 is executed.
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.
If <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 controlchan script which is invoked as channel program by innd, and you need to setup
newsfeeds(5) to use this script. Processing by controlchan 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 articles.
Control messages are normally filed in the newsgroup named control. They can be filed in
subgroups, however, based on the control message command. For example, a newgroup message
will be filed in control.newgroup if that group exists, otherwise it will be filed in con-
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
If <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 active file: 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.''
Innd implements the NNTP commands defined in RFC 977, with the following differences:
1. The ``list'' may be followed by an optional ``active'', ``active.times'', ``news-
groups'' or ``subscription'' argument. This common extension is not fully sup-
ported; see nnrpd(8).
2. The ``authinfo user'' and ``authinfo pass'' commands are implemented. These are
based on the reference Unix implementation; see draft-barber-nntp-imp-07.txt for
3. A new command, ``mode reader'', is provided. This command will cause the server to
pass the connection on to nnrpd. The command ``mode query'' is intended for future
use, and is currently treated the same way.
4. The commands to support streaming transfer ``check messageid'' and ``takethis mes-
sageid'' are provided.
5. 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.
6. The only other commands implemented are ``head'' , ``help'' , ``ihave'' , ``quit''
, and ``stat''.
Innd modifies as few article headers as possible, although it could be better in this
The following headers, if present, are removed:
Empty headers and headers that consist of nothing but whitespace are also dropped.
The local site's name (as determined by the ``pathhost'' value in inn.conf(5)) 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.
Innd does not rewrite incorrect headers. For example, it will not replace an incorrect
Lines header, but will reject the article.
Innd 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:
mon dd hh:mm:ss.mmm + feed <Message-ID> site...
mon dd hh:mm:ss.mmm j feed <Message-ID> site...
mon dd hh:mm:ss.mmm c feed <Message-ID> site...
mon dd hh:mm:ss.mmm - feed <Message-ID> reason...
mon dd hh:mm:ss.mmm ? feed <Message-ID> reason...
There can also be a hostname and size field after the Message-ID depending on the ``nnt-
plinklog'' and ``logsize'' options in inn.conf(5)
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 active 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 being sent.
If the fourth field is a minus sign, then the article was rejected. The reasons for
"%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 innd 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.
Innd also makes extensive reports through syslog. 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 reported. 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 con-
tain 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 indi-
cates an internal logic error.
Innd will catch SIGTERM and SIGDANGER and then it will shutdown. If ``-d'' flag is used,
SIGINT also will be catched and innd will shutdown.
Innd will catch SIGUSR1 signal and recreate the control channel which is typically used
Written by Rich $alz <email@example.com> for InterNetNews. This is revision 220.127.116.11,
active(5), ctlinnd(8), dbz(3), history(5), incoming.conf(5), inn.conf(5), newsfeeds(5),
nnrpd(8), rnews(1), syslog(8).