Provided by: inn2_2.7.2~20240212-1build3_amd64 bug

NAME

       newsfeeds - Determine where Usenet articles are sent

IN A NUTSHELL

       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'

DESCRIPTION

       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.

       Used in conjunction with delayer(1) in the configuration of the related funnel feed, innfeed can even
       send a delayed feed to remote peers.

       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.

FLAG VALUES

       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.

FEED TYPES

       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.

EXAMPLES

       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:

           peter@example.com:news.software.nntp:Tm:mailer!
           sue@example.com: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  "peter@example.com"  and  the  site
       "bob@example.com",  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" \
               peter@example.com sue@example.com

       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.

HISTORY

       Written  by  Rich  $alz  <rsalz@uunet.uu.net> for InterNetNews.  Reformatted and rewritten in POD by Russ
       Allbery <eagle@eyrie.org>.

SEE ALSO

       active(5),  buffchan(8),  controlchan(8),  ctlinnd(8),  delayer(1),  inn.conf(5),  innd(8),   innfeed(8),
       innxmit(8), libinn_uwildmat(3), nntpsend(8).

INN 2.7.2                                          2024-03-31                                       NEWSFEEDS(5)