newsfeeds - Determine where Usenet articles are sent
The
newsfeeds file configures what
innd does with incoming
accepted articles.
A minimalist
newsfeeds file which parameters an outgoing NNTP feed to
"news.server.com", using path identity "server" (as it
appears in Path header fields), of all the articles you receive is:
# Mandatory line, with no exclusion patterns defined.
ME:::
# A real-time feed through innfeed of all your articles.
news.server.com/server\
:*\
:Tm:innfeed!
# The channel feed entry for innfeed.
# Change "/usr/lib/news/bin" to the directory path
# of the innfeed program.
innfeed!:!*:Tc,Wnm*:/usr/lib/news/bin/innfeed
In order to find an external feed, you can ask in the news.admin.peering
newsgroup. Several news administrators will certainly respond and gracefully
provide you with a news feed.
Other entries may be added in
newsfeeds depending on your needs. See the
examples below and also in the
archive(8),
controlchan(8),
news2mail(8),
ninpaths(8) and
perl-nocem(8) man pages for
the most widely used.
If you exclude local hierarchies or newsgroups from the feed, make sure to add
"!control,!control.*" so that cancel articles or any kind of control
articles related to excluded hierarchies or newsgroups are not propagated to
the remote peer. Its
newsfeeds entry then looks like:
news.server.com/server\
:*,!local.*,@*bina*,!control,!control.*\
:Tm:innfeed!
After any changes, run "inncheck" to perform basic syntax checks, and
reload this configuration file with the following command:
ctlinnd reload newsfeeds 'new peer'
The file
pathetc/newsfeeds specifies how incoming articles should be
distributed to other programs and files on the server. It is parsed by the
InterNetNews server
innd(8) when it starts up, or when directed to by
ctlinnd(8).
innd doesn't send articles to remote sites itself,
so
newsfeeds doesn't directly determine which remote news servers
articles are sent to. Instead, it specifies what batch files should be created
or which programs should be run (and what information should be sent to them),
and then this information is used by programs like
innxmit(8) and
innfeed(8) to feed articles to remote sites.
The
newsfeeds file isn't used solely to set up feeding accepted articles
to remote sites but also to pass them (or bits of information about them) to
any local programs or files that want that data. For example,
controlchan(8), a daemon that processes incoming control messages, runs
out of
newsfeeds, as could a news to mail gateway.
The file is interpreted as a set of lines, parsed according to the following
rules: if a line ends with a backslash, the backslash, the newline, and any
whitespace at the start of the next line is deleted. This is repeated until
the entire "logical" line is collected. If the logical line is blank
or starts with a number sign ("#"), it is ignored.
All other lines are interpreted as feed entries. An entry should consist of four
colon-separated fields; two of the fields may have optional sub-fields, marked
off by a slash. Fields or sub-fields that take multiple parameters should be
separated by a comma. Extra whitespace can cause problems and should be
avoided. Except for the site names, case is significant. The format of an
entry is:
sitename[/exclude,exclude,...]\
:pattern,pattern...[/distribution,distribution...]\
:flag,flag...\
:parameter
Each field is described below.
The
sitename is the name of the site to which a news article can be sent.
It is used for writing log entries and for determining if an article should be
forwarded to a site. (A "site" is the generic term for some
destination of newsfeed data; it often corresponds to a remote news peer, but
doesn't have to. For example, a local archiving program run from
newsfeeds is also a "site".) If
sitename already
appears in the article's Path header field body, then the article will not be
sent to the site. The name is usually whatever the remote site uses to
identify itself in the Path header field body, but can be almost any word.
Be careful, though, to avoid having the
sitename accidentally match a
path identity in the Path header field unintentionally. For this reason,
special local entries (such as archivers or gateways) should probably end with
an exclamation point to make sure that they do not have the same name as any
real site. For example, "gateway" is an obvious name for the local
entry that forwards articles out to a mailing list. If a site with the name
"gateway" posts an article, when the local site receives the article
it will see the name in the Path header field and not send the article to its
own "gateway" entry. Since "gateway!" can't appear as an
individual path identity in the Path header field (as "!" is the
delimiter), that would be a better thing to use for
sitename.
(Another way to avoid this problem is with the "Ap" flag; see the
description below.)
If an entry has an exclusion sub-field, the article will not be sent to that
site if any of
exclude appear in the Path header field body. (It's
sometimes convenient to have the
sitename be an abbreviated form of the
name of the remote site, since all the
sitenames to which an article is
sent are written to the log and using shorter
sitenames can therefore
improve performance for large servers. In this case, the path identities of
those sites should be given as
exclude entries and the "Ap"
flag used so that the abbreviated
sitename doesn't accidentally match
some other path identities in Path header fields.)
The same
sitename can be used more than once and the appropriate action
will be taken for each entry that should receive the article, but this is
recommended only for program feeds to avoid confusion. Case is not significant
in site names.
The comma-separated
pattern specifies which groups to send to the site;
it is interpreted to build a "subscription list" for the site. The
default subscription is to get all groups carried by the server. It is a
uwildmat pattern supporting poison ("@") wildcards; see the
libinn_uwildmat man page for full details on the pattern matching language.
pattern will be matched against every newsgroup carried by the server
and all newsgroups that match will be added to the subscription list for the
site.
Normally, a given article (or information about it) is sent to a site if any of
the newsgroups to which the article was posted are in that site's subscription
list. If a newsgroup matches an "@" pattern in
pattern, then
not only is it not added to the subscription list, but any articles
crossposted to that newsgroup also will not be sent to that site even if other
newsgroups to which it was crossposted are in that site's subscription list.
This is called a poison pattern (because matching groups are
"poisoned").
For example, to receive all comp.* groups, but only comp.sources.unix within the
sources newsgroups, the following
pattern can be used:
comp.*,!comp.sources.*,comp.sources.unix
Note that the trailing ".*" is required; the pattern has to match the
whole newsgroup name. "comp.sources.*" could be written
"comp.sources*" and would exclude the newsgroup comp.sources (if it
exists) as well as the groups in the comp.sources.* hierarchy, but note that
this would also exclude a newsgroup named comp.sources-only (whereas the above
pattern would add that group to the site subscription list since it matches
"comp.*" and none of the other patterns).
For another example, to feed alt.* and misc.* to a given site but not any
articles posted to alt.binaries.warez (even if they're also crossposted to
other alt.* or misc.* groups), the following pattern can be used:
alt.*,@alt.binaries.warez,misc.*
Note, however, that if you reversed the "alt.*" and
"@alt.binaries.warez" entries, this pattern would be equivalent to
"alt.*,misc.*", since the last matching pattern determines whether a
given newsgroup matches and the poison logic only applies if the poison entry
is the last matching entry.
Control messages follow slightly different propagation rules than normal
articles; see
innd(8) for the details. Note that most subscriptions
should have "!junk,!control,!control.*" in their pattern list due to
those propagation rules (and since "junk" is a special internal
newsgroup; see
wanttrash in
inn.conf(5) for more details on what
it's used for) and that the best way to keep control messages local to a site
is with a distribution.
A subscription can be further modified by specifying distributions that the site
should or should not receive. The default is to send all articles to all sites
that subscribe to any of the groups where it has been posted, but if an
article has a Distribution header field and any
distributions are
specified, then they are checked according to the following rules:
- 1.
- If the Distribution header field matches any of the values
in the sub-field, the article is sent.
- 2.
- If a distribution starts with an exclamation point,
and it matches the Distribution header field, the article is not
sent.
- 3.
- If the Distribution header field does not match any
distribution in the site's entry and no negations were used, the
article is not sent.
- 4.
- If the Distribution header field does not match any
distribution in the site's entry and any distribution
started with an exclamation point, the article is sent.
If an article has more than one distribution specified, then each one is handled
according according to the above rules. If any of the specified distributions
indicate that the article should be sent, it is; if none do, it is not sent.
In other words, the rules are used as a logical or.
It is almost definitely a mistake to have a single feed that specifies
distributions that start with an exclamation point along with some that don't.
Distributions are text words, not patterns; entries like "*" or
"all" have no special meaning.
The
flag field is described in "FLAG VALUES". The
interpretation of the
parameter field depends on the type of feed and
is explained in more detail in "FEED TYPES". It can be omitted for
some types of feeds.
The site named "ME" is special. There must be exactly one such entry,
and it should be the first entry in the file. If the "ME" entry has
an exclusion sub-field, incoming articles are rejected completely if any of
the names specified in that exclusion sub-field appear in their Path header
field bodies. If the "ME" entry has a subscription list, that list
is prepended to the subscription list of all other entries. For example,
"*,!control,!control.*,!junk,!foo.*" could be used to set the
default subscription list for all other feeds so that local postings are not
propagated unless "foo.*" explicitly appears in the site's
subscription list. This feature tends to be somewhat confusing since the
default subscription is prepended and can be overridden by other patterns.
If the "ME" entry has a distribution sub-field, only articles that
match that distribution list are accepted and all other articles with a
distribution are rejected. A common use for this is to put something like
"/!local" in the "ME" entry to reject local postings from
other misconfigured sites. The distribution sub-field of "ME" has no
effect on the acceptance or rejection of articles that do not have a
Distribution header field.
An empty "ME" entry is possible, in which case no exclusion patterns
will be defined.
Finally, it is also possible to set variables in
newsfeeds and use them
later in the file. A line starting with "$" sets a variable. For
example:
$LOCALGROUPS=local.*,example.*
$CONTROLGROUPS=control,control.*
This sets the variable "LOCALGROUPS" to "local.*,example.*"
and the variable "CONTROLGROUPS" to "control,control.*".
They can later be used elsewhere in the file, such as in a site entry like:
news.example.com:$LOCALGROUPS:Tf,Wnm:
which is then completely equivalent to:
news.example.com:local.*,example.*:Tf,Wnm:
Variables aren't solely simple substitution. If either "!" or
"@" immediately precedes the variable and the value of the variable
contains commas, that character will be duplicated before each comma. This
somewhat odd-sounding behavior is designed to make it easier to use variables
to construct feed patterns. The utility becomes more obvious when you observe
that the line:
news.example.net:*,@$LOCALGROUPS,!$CONTROLGROUPS:Tf,Wnm:
is therefore equivalent to:
news.example.net:*,@local.*,@example.*,!control,!control.*:Tf,Wnm:
which (as explained below) excludes all of the groups in $LOCALGROUPS and
unwanted control articles from the feed to that site.
The
flags parameter specifies miscellaneous parameters, including the
type of feed, what information should be sent to it, and various limitations
on what articles should be sent to a site. They may be specified in any order
and should be separated by commas. Flags that take values should have the
value immediately after the flag letter with no whitespace. The valid flags
are:
-
< size
- An article will only be sent to this site if it is less
than size bytes long. The default is no limit.
-
> size
- An article will only be sent to this site if it is greater
than size bytes long. The default is no limit.
-
A checks
- An article will only be sent to this site if it meets the
requirements specified in checks, which should be chosen from the
following set. checks can be multiple letters if appropriate. Note
that this flag is not effective on funnel targets; it has to be used on
every funnel entry (for instance, Af is not effective on the
innfeed! funnel target and therefore has to be specified on every
funnelled news site).
- c
- Exclude all kinds of control messages.
- C
- Only send control messages, not regular articles.
- d
- Only send articles with a Distribution header field.
Combined with a particular distribution value in the distribution
part of the site entry, this can be used to limit articles sent to a site
to just those with a particular distribution.
- e
- Only send articles where every newsgroup listed in the
Newsgroups header field body exists in the active file.
- f
- Don't send articles rejected by filters. This is only
useful when dontrejectfiltered is set to true in inn.conf.
With that variable set, this lets one accept all articles but not
propagate filtered ones to some sites.
- j
- Propagate articles according to their Newsgroups header
field. This is only useful when wanttrash is set to true in
inn.conf. With that variable set, articles accepted and filed in
"junk" (due to wanttrash) are fed to peers based on their
subscription pattern applied to the Newsgroups header field as though they
were accepted and all those groups were locally carried. Otherwise, they
are propagated to sites that receive the "junk" newsgroup.
This variable is useful if you want to run INN with a minimal active
file and propagate all posts.
- o
- Only send articles for which overview data was stored.
- O
- Send articles to this site that don't have an
Injection-Info or X-Trace header field, even if the "O" flag is
also given.
- p
- Only check the exclusions against the Path header field of
articles; don't check the site name. This is useful if your site names
aren't the same as the path identities in Path header fields added by
those remote sites, or for program feeds where the site name is arbitrary
and unrelated to the Path header field body.
If both "c" and "C" are given, the last specified one takes
precedence.
-
B high/low
- If a site is being fed by a file, channel, or exploder (see
below), the server will normally start trying to write the information as
soon as possible. Providing a buffer may give better system performance
and help smooth out overall load if a large batch of news comes in. The
value of this flag should be two numbers separated by a slash. high
specifies the point at which the server can start draining the feed's I/O
buffer, and low specifies when to stop writing and begin buffering
again; the units are bytes. The default is to do no buffering, sending
output as soon as it is possible to do so.
-
C count
- If this flag is specified, an article will only be sent to
this site if the number of groups it is posted to, plus the square of the
number of groups followups would appear in, is no more than count.
30 is a good value for this flag, allowing for instance:
- •
- crossposts to only 5 groups when followups aren't set;
- •
- crossposts to up to 26 groups when followups are set to two
groups;
- •
- crossposts to up to 29 groups when followups are set to a
single group;
- •
- crossposts to up to 30 groups when followups are set to
poster.
Note that if an article does not contain a Followup-To header field, the number
of groups followups would appear in is the number of groups it is posted
to.
-
F name
- Specifies the name of the file that should be used if it's
necessary to begin spooling for the site (see below). If name is
not an absolute path, it is taken to be relative to pathoutgoing in
inn.conf. If name is a directory, the file togo in
that directory will be used as the file name.
-
G count
- If this flag is specified, an article will only be sent to
this site if it is posted to no more than count newsgroups. This
has the problem of filtering out many FAQs, as well as newsgroup creation
postings and similar administrative announcements. Either the C
flag or the U flag is a better solution.
-
H count
- If this flag is specified, an article will only be sent to
this site if it has count or fewer sites in its Path header field
body. This flag should only be used as a rough guide because of the loose
interpretation of the Path header field; some sites put the poster's name
in the header field body, and some sites that might logically be
considered to be one hop become two because they put the posting
workstation's name in the header field body. The default value for
count if not specified is one. (Also see the O flag, which
is sometimes more appropriate for some uses of this flag.)
-
I size
- The flag specifies the size of the internal buffer for a
file feed. If there are more file feeds than allowed by the system, they
will be buffered internally in least-recently-used order. If the internal
buffer grows bigger than size bytes, however, the data will be
written out to the appropriate file. The default value is
16 KB.
-
N status
- Restricts the articles sent to this site to those in
newsgroups with the moderation status given by status. If
status is "m", only articles in moderated groups are
sent; if status is "u", only articles in unmoderated
groups are sent.
-
O originator
- If this flag is specified, an article will only be sent to
this site if it contains an Injection-Info header field (or an X-Trace
header field if no Injection-Info header field is found) and the first
field of this header field matches originator. originator is
a uwildmat expression without commas or a list of such expressions,
separated by "/". The article is never sent if the first
character of the pattern begins with "@" and the rest of the
pattern matches. One use of this flag is to restrict the feed to locally
generated posts by using an originator pattern that matches the
Injection-Info header field added by the local server.
-
P priority
- The nice priority that this channel or program feed should
receive. This should be a positive number between 0 and 20 and is the
priority that the new process will run with. This flag can be used to
raise the priority to normal if you're using the nicekids parameter
in inn.conf.
-
Q hashfeed
- Specifies the hashfeed match expression for this
site. It must be in the form "value/mod" or
"start-end/mod". The Message-ID of the article is hashed using
MD5, which results in a 128-bit hash. The lowest 32 bits are then
taken by default as the hashfeed value (which is an integer). If the
hashfeed value modulus "mod" plus one equals "value"
or is between "start" and "end", the article will be
fed to this site. All these numbers must be integers.
It is a deterministic way to control the flow of articles and to split a
feed. For instance:
Q1/2 Feeds about 50% of all articles to this site.
Q2/2 Feeds the other 50% of all articles.
Another example with three sites:
Q1-3/10 Feeds about 30% of all articles.
Q4-5/10 Feeds about 20% of all articles.
Q6-10/10 Feeds about 50% of all articles.
If this flag is specified multiple times, the contents will be logically
"OR"ed together (just one match is needed).
You can use an extended syntax of the form "value/mod_offset" or
"start-end/mod_offset". As MD5 generates a 128-bit return value,
it is possible to specify from which byte-offset the 32-bit integer used
by hashfeed starts. The default value for "offset" is
"_0" and thirteen overlapping values from "_0" to
"_12" can be used. Only up to four totally independent values
exist: "_0", "_4", "_8" and "_12".
Therefore, it allows generating a second level of deterministic
distribution. Indeed, if a news server is fed "Q1/2", it can go
on splitting thanks to "Q1-3/9_4" for instance. Up to four
levels of deterministic distribution can be used.
The algorithm is compatible with the one used by Diablo 5.1 and up.
If you want to use the legacy quickhashing method used by Diablo before
5.1, you can put an "@" sign just after the Q flag (for
instance "Q@1-3/10", but the distribution of the messages is not
perfect with this legacy method whose use is discouraged and for which
offsets cannot be used).
-
S size
- If the amount of data queued for the site gets to be larger
than size bytes, the server will switch to spooling, appending to a
file specified by the F flag, or
pathoutgoing/sitename if F is not specified. Spooling
usually happens only for channel or exploder feeds, when the spawned
program isn't keeping up with its input.
-
T type
- This flag specifies the type of feed for this site.
type should be a letter chosen from the following set:
c Channel
f File
l Log entry only
m Funnel (multiple entries feed into one)
p Program
x Exploder
Each feed is described below in "FEED TYPES". The default is
Tf, for a file feed.
-
U count
- If this flag is specified, an article will only be sent to
this site if followups to this article would be posted to no more than
count newsgroups. (Also see C for a more complex way of
handling this.)
-
W items
- For a file, channel, or exploder feed, this flag controls
what information will be sent to this site. For a program feed, only the
asterisk ("*") has any effect. items should be chosen
from the following set:
- b
- Size of the article (in wire format, meaning with CRLF at
the end of each line, periods doubled at the beginning of lines, and
ending in a line with a single period) in bytes.
- e
- The time the article will expire as seconds since epoch if
it has an Expires header field, 0 otherwise.
- f
- The storage API token of the article (the same as
"n"). The article can be retrieved given the storage API token
by using sm(1).
- g
- The newsgroup the article is in; if cross-posted, then the
first of the groups to which the article was posted that this site gets.
(The difference from "G" is that this sends the newsgroup to
which the article was posted even if it is a control message.)
- h
- The history hash key of the article (derived from the
message ID).
- m
- The message ID of the article.
- n
- The storage API token of the article. The article can be
retrieved given the storage API token by using sm(1).
- p
- The time the article was posted a seconds since epoch.
- s
- The site that fed the article to the server. This is taken
from either the Path header field body or the IP address of the sending
site depending on the value of logipaddr in inn.conf. If
logipaddr is true and the IP address is 0.0.0.0 (meaning that the
article was fed from localhost by a program like rnews(1)), the
Path header field body will be sent instead.
- t
- The time the article was received as seconds since
epoch.
- *
- The names of the appropriate funnel entries, or all sites
that get the article (see below for more details).
- D
- The body of the Distribution header field of the article,
or "?" if there is no such header field in the article.
- G
- Where the article is stored. If the newsgroup is
crossposted, this is generally the first of the groups to which it was
posted that this site receives; however, control messages are filed in
control or control.* (which is the difference between this item and
"g").
- H
- All of the headers, followed by a blank line. The Xref
header field will already be present, and a Bytes header field containing
the article's size in bytes as in the "b" item will be added to
the headers. If used, this should be the only item in the list.
- N
- The body of the Newsgroups header field.
- P
- The body of the Path header field.
- O
- Overview data for the article.
- R
- Information needed for replication (the Xref header field
without the site name).
More than one letter can be given. If multiple items are specified, they will be
written in the order specified separated by spaces. ("H" should be
the only item if given, but if it's not a newline will be sent before the
beginning of the headers.) The default is
Wn.
The "H" and "O" items are intended for use by programs that
create news overview databases or require similar information.
WnteO is
the flag to generate input needed by the
overchan(8) program.
The asterisk ("*") has special meaning. Normally it expands to a
space-separated list of all sites that received the current article. If,
however, this site is a target of a funnel feed (in other words, if it is
named by other sites which have the
Tm flag), then the asterisk expands
to the names of the funnel feeds that received the article. Similarly, if the
site is a program feed, an asterisk in the
parameter field will be
expanded into the list of funnel feeds that received the article. A program
feed cannot get the site list unless it is the target of other
Tm
feeds.
innd provides four basic types of feeds: log, file, program, and channel.
An exploder is a special type of channel. In addition, several entries can
feed into the same feed; these are funnel feeds, which refer to an entry that
is one of the other types. Funnel feeds are partially described above with the
description of the
W* flag. A funnel feed gets every article that would
be sent to any of the feeds that funnel into it and normally include the
W* flag in their flags so that the program processing that feed knows
which sites received which articles. The most common funnel feed is
innfeed(8).
Note that the term "feed" is technically a misnomer, since the server
doesn't transfer articles itself and only writes data to a file, program, or
log telling another program to transfer the articles.
The simplest feed is a log feed (
Tl). Other than a mention in the news
log file,
pathlog/news, no data is written out. This is equivalent to a
Tf entry writing to
/dev/null, except that no file is ever
opened. Flushing a log feed does nothing.
A file feed (
Tf) is the next simplest type of feed. When the site should
receive an article, the specified data is written out to the file named by the
parameter field. If
parameter is not an absolute path, it is
taken to be relative to
pathoutgoing in
inn.conf. If
parameter is not given, it defaults to
pathoutgoing/
sitename. The file name should be unique (two file
feeds should not ever point to the same file).
File feeds are designed for use by external programs that periodically process
the written data. To cooperate with
innd properly, such external
programs should first rename the batch file and then send a flush command for
that site to
innd using
ctlinnd(8).
innd will then write
out any buffered data, close the file, and reopen it (under the original
name), and the program can process the data in the renamed file at its
leisure. File feeds are most frequently used in combination with
nntpsend(8).
A program feed (
Tp) spawns a given program for every article that the
site receives. The
parameter field must be the command line to execute,
and should contain one instance of %s, which will be replaced by the storage
API token of the article (the actual article can be retrieved by the program
using
sm(1)). The program will not receive anything on standard input
(unlike earlier versions of INN, where the article is sent to the program on
stdin), and standard output and error from the program will be set to the
error log (
pathlog/errlog).
innd will try to avoid spawning a
shell if the command has no shell meta-characters; this feature can be
defeated if necessary for some reason by appending a semi-colon to the end of
the command. The full path name of the program to be run must be specified
unless the command will be run by the shell (and it is strongly recommended
that the full path name always be specified regardless).
If a program feed is the target of a funnel, and if
W* appears in the
flags of the site, a single asterisk may be present in the
parameter
and will be replaced by a space-separated list of names of the sites feeding
into the funnel which received the relevant article. If the site is not the
target of a funnel, or if the
W* flag is not used, the asterisk has no
special meaning.
Flushing a program feed does nothing.
For a channel (
Tc) or exploder (
Tx) feed, the
parameter
field again names the process to start. As with program feeds, the full path
to the program must be specified. However, rather than spawning the program
for every article, it is spawned once and then whenever the site receives an
article, the data specified by the site flags is written to the standard input
of the spawned program. Standard output and error are set as with program
feeds. If the process exits, it will be restarted automatically. If the
process cannot be started, the server will spool input to a file named
pathoutgoing/
sitename and will try to start the process again
later.
When a channel or exploder feed is flushed, the server closes its end of the
pipe to the program's standard input. Any pending data that has not been
written will be spooled; see the description of the
S flag above. The
server will then spawn a new instance of the program. No signal is sent to the
program; it is up to the program handling a channel or exploder feed to notice
end of file on its standard input and exit appropriately.
Exploders are a special type of channel feed. In addition to the channel feed
behavior described above, exploders can also be sent command lines. These
lines start with an exclamation point and their interpretation is up to the
exploder. The following commands are generated automatically by the server:
!newgroup group
!rmgroup group
!flush
!flush site
These commands are sent whenever the
ctlinnd(8) command of the same name
is received by the server. In addition, the
ctlinnd(8) "send"
command can be used to send an arbitrary command line to an exploder. The
primary exploder is
buffchan(8).
Finally,
Tm feeds are the input to a funnel. The
parameter field
of the site should name the site handling articles for all of the funnel
inputs.
The syntax of the
newsfeeds file is so complex because you can specify a
staggering variety of feeds. INN is capable of interacting with a wide variety
of programs that do various things with news articles. Far and away the most
common two entries in
newsfeeds, however, are file feeds for
nntpsend(8) and funnel feeds for
innfeed(8).
The former look like this:
feed.example.com:*,!control,!control.*,!junk:Tf,Wnm:
which generates a file named
pathoutgoing/feed.example.com containing one
line per article consisting of the storage API token, a space, and the message
ID.
The latter look like this:
feed.example.com:*,!control,!control.*,!junk:Tm:innfeed!
Very similar, except that this is the input to a funnel feed named
"innfeed!". One could also write this as:
example/feed.example.com:*,!control,!control.*,!junk:Ap,Tm:innfeed!
(note the
Ap so that articles that contain just "example" in
the Path header field body will still be sent), which is completely equivalent
except that this will be logged in
pathlog/news as going to the site
"example" rather than "feed.example.com".
The typical feed entry for
innfeed(8) is a good example of a channel feed
that's the target of various funnel feeds (make sure the path to
innfeed is properly set):
innfeed!:!*:Tc,Wnm*:<pathbin in inn.conf>/innfeed -y
Note that the
pattern for this feed is just "!*" so that it
won't receive any articles directly. The feed should only receive those
articles that would go to one of the funnel feeds that are feeding into it.
innfeed(8) will receive one line per article on its standard input
containing the storage API token, the message ID, and a space-separated list
of sites that should receive that article.
Here's a more esoteric example of a channel feed:
watcher!:*:Tc,Wbnm\
:exec awk '$1 > 1000000 { print "BIG", $2, $3 }' \
>> <pathlog>/bigart
This receives the byte size of each article along with the storage API token and
Message-ID, and appends to a
bigart log file a line for every article
that's over a million bytes. This is actually rather a strange way to write
this since INN can do the size check itself; the following is equivalent:
watcher!:*:Tc,>1000000,Wbnm\
:exec awk '{ print "BIG", $2, $3}' >> <pathlog>/bigart
Here's a cute, really simple news to mail gateway that also serves as an example
of a fairly fancy program feed:
mailer!:!*:W*,Tp\
:sm %s | innmail -s "News article" *
Remember that %s is replaced by the storage API token, so this retrieves the
article and pipes it into
innmail (which is safer than programs like
Mail(1) because it doesn't parse the body for tilde commands) with a
given subject line. Note the use of "*" in the command line and
W* in the flags; this entry is designed to be used as the target of
funnel feeds such as:
[email protected]:news.software.nntp:Tm:mailer!
[email protected]:news.admin.misc:Tm:mailer!
Suppose that the server receives an article crossposted between news.admin.misc
and news.software.nntp. The server will notice that the article should be sent
to the site "
[email protected]" and the site
"
[email protected]", both of which funnel into "mailer!", so
it will look at the "mailer!" site and end up executing the command
line:
sm @...@ | innmail -s "News article" \
[email protected] [email protected]
which will mail the article to both Peter and Sue.
Finally, another very useful example of a channel feed: the standard entry for
controlchan(8). Make sure its path is properly set.
controlchan!\
:!*,control,control.*,!control.cancel\
:AC,Tc,Wnsm:<pathbin in inn.conf>/controlchan
This program only wants information about articles posted to a control newsgroup
other than control.cancel, which due to the sorting of control messages
described in
innd(8) will send it all control messages except for
cancel messages.
controlchan gets the storage API token, the name of
the sending site (for processing old-style ihave and sendme control messages,
be sure to read about
logipaddr in
controlchan(8)), and the
message ID for each article.
For many other examples, including examples of the special "ME" site
entry, see the example
newsfeeds file distributed with INN. Also see
the install documentation that comes with INN for information about setting up
the standard newsfeeds entries used by most sites.
Written by Rich $alz <
[email protected]> for InterNetNews. Reformatted
and rewritten in POD by Russ Allbery <
[email protected]>.
active(5),
buffchan(8),
controlchan(8),
ctlinnd(8),
inn.conf(5),
innd(8),
innfeed(8),
innxmit(8),
libinn_uwildmat(3),
nntpsend(8).