INND(8) | System Manager's Manual | INND(8) |
innd, inndstart - InterNetNews daemon
innd [ -a ] [ -c days ] [ -d ] [ -f ] [ -i count ] [ -o count ] [ -l size ] [ -m mode ] [ -n flag ] [ -p port ] [ -r ] [ -s ] [ -S host ] [ -t timeout ] [ -u ] [ -x ] [ -L ] [ -N ] [ -H count ] [ -T count ] [ -X seconds ]
inndstart [ flags ]
Innd, the InterNetNews daemon, handles all incoming NNTP feeds. It reads the active(5), newsfeeds(5), and hosts.nntp(5) files into memory. It then opens the NNTP port to receive articles from remote sites (see the ``-p'' option), 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) 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 300 seconds.
If innd gets an NOSPC 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.
Any sub-processes spawned by the server will get a nice(2) value of 10.
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 or have a Subject header that starts with the five characters ``cmsg '' are called control messages. Except for the cancel message, these messages are implemented by external programs in the /usr/lib/news/control directory. (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 and used as the name of the program to execute; if the named program does not exist, then a program named 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.
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 control.
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.
Innd implements the NNTP commands defined in RFC 977, with the following differences:
Innd modifies as few article headers as possible, although it could be better in this area.
The following headers, if present, are removed:
Date-Received Posted Posting-Version Received Relay-Version
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.
The Xref header is removed. If the article is cross-posted a new header is generated.
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...
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 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 Duplicate "%s" header EOF in headers Linecount %s != %s +- %s Missing %s header No body No colon-space in "%s" header No space Space before colon in "%s" header Too old -- "%s" Unapproved for "%s" Unwanted newsgroup "%s" Unwanted distribution "%s" Whitespace in "Newsgroups" header -- "%s"
Note that if an article is accepted 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 ``ME'' 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 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.
Written by Rich $alz <rsalz@uunet.uu.net> for InterNetNews. This is revision 1.37, dated 1996/12/06.
active(5), ctlinnd(8), crosspost(8), dbz(3z), history(5), hosts.nntp(5), inn.conf(5), newsfeeds(5), nnrpd(8), rnews(1), syslog(8).