This directory contains unsupported contributions to INN.  Most of these
programs are of interest to a limited set of sites, require some manual
modifications to make work, and/or are separately maintained independent
of INN.  Programs in here may or may not have been tested on the latest
version of INN, so keep that in mind when trying them out.  The INN
developers may not be able to answer bug reports for these utilities; it's
best to send them to the original author.

Volunteers who would like to take particularly useful applications in this
directory and make them suitable for inclusion in INN proper are heartily
encouraged, but discuss this on <inn-workers@lists.isc.org>.  Sometimes
there's a reason why this hasn't already been done or something specific
that's needed before they can be included.

Type "make <program>" to build any of the following programs and then copy
the binary to somewhere on your PATH to use it.  For details on what each
program does, see below, as well as the comments at the beginning of each
file (if any).

In addition to these files, also see the contrib section of the INN FTP
site at <https://downloads.isc.org/isc/inn/contrib/> for more software
designed to work with INN.

                        -------------------------

analyze-traffic

    Analyzes which newsgroups are receiving the most traffic and which
    peer is most responsible for each high-traffic group.

archivegz

    A compressing version of archive, writing out .gz files instead of
    plain text files.  May not work with the storage API without some
    changes to use sm.

authmysql

    An authenticator that checks a username and password against a MySQL
    database.  Could also be easily modified to check against any other
    type of database that Perl's DBI module can talk to.

auth_pass

    A sample authorization program for use with the (deprecated) AUTHINFO
    GENERIC command in nnrpd.

backlogstat

    Prints information about the current state of innfeed's backlog, if
    any.

cleannewsgroups

    Performs various cleanups on the newsgroups file.

count_overview

    Counts the groups in a bunch of Xref records.

expirectl

    Automatically builds expire.ctl based on current available disk space
    and a template, adjusting the expiration times of groups based on a
    weight and the available space.  Uses a template expire.ctl.ctl file;
    see the end of expirectl.c for a sample.

findreadgroups

    Scans the news log files and generates a file giving readership counts
    by newsgroup.  Used by makeexpctl and makestorconf.

fixhist

    Performs various cleanups and sanity checks on a hisv6 history database.

innconfcheck

    Merges your inn.conf settings with the inn.conf man page to make it
    easier to be sure that your settings match what you want.  Edit this
    script to add the correct paths to the man page; see the comments at
    the beginning of this script.

innreport-filter.xslt

    Copies individual sections from innreport's HTML files.

makeexpctl

    Generates an expire.ctl based on what newsgroups are actually read.
    Uses data generated by findreadgroups.  This script will require
    editing before being usable for your server.

makestorconf

    Generates a storage.conf file putting frequently read newsgroups into
    timecaf rather than CNFS.  Uses data generated by findreadgroups.
    This script will require editing before being usable for your server.

mkbuf

    Creates a CNFS cycbuff; see the comments at the beginning of
    this script.

mlockfile

    Locks files given on the command line into memory using mlock (only
    tested on Solaris).  Useful primarily for locking the hisv6 history files
    (history.hash and history.index) into memory on a system with
    sufficient memory to speed history lookups in innd.  This seems to
    help some systems quite a lot and others not at all.

mm_ckpasswd

    A ckpasswd replacement that checks user passwords against a Mailman
    list configuration database.  See the comments at the top of the
    script for information on how to use it.

newsresp

    Opens an NNTP channel to a server and takes a peek at various response
    times.  Can check the round-trip time and the history lookup time.
    See the comments at the beginning of the source for more details.

nnrp.access2readers.conf

    Converts an old-style nnrp.access file to readers.conf format.
    (readers.conf replaced nnrp.access, starting with INN 2.3.0.)

ovsqlite-dump

    Dumps the contents of an ovsqlite overview database (groups and overview
    data of articles in these groups), using INN::ovsqlite_client.

ovsqlite-undump

    Creates groups and overview data for articles in these groups in an
    ovsqlite overview database, from a dump previously generated with the
    ovsqlite-dump script.

pullart

    Attempts to pull news articles out of CNFS cycbuffs.  Useful for
    emergency recoveries.

reset-cnfs

    Clears a CNFS cycbuff; see the comments at the beginning of
    this script.

respool

    Takes a list of tokens on stdin and respools them, by retrieving the
    article, storing it again, and then calling SMcancel on the previous
    instance of the article.  Note that after running this program, you'd
    need to rebuild the history and overview, since it doesn't update
    either.

sample.init.script

    Tries to increase the file descriptor limits to the maximum allowed by
    the system since INN and related programs can be file descriptor hogs.
    It then starts INN.

sample.init.systemd

    Sample systemd-style init script for INN.

stathist

    Parses and summarizes the log files created by the history profiling
    code.

thdexpire

    A dynamic expire daemon for timehash and timecaf spools.  It should
    be started along with innd and periodically looks if news spool space
    is getting tight, and then frees space by removing articles until
    enough is free.  It is an adjunct to (not a replacement for) INN's
    expire program.

tunefeed

    Given two active files, attempts to produce a good set of wildmat
    patterns for newsfeeds to minimize the number of rejects.  For full
    documentation, run "perldoc tunefeed".
