NAME

NNML::Server - a minimal NNTP server

SYNOPSIS

      perl -MNNML::Server -e server
      perl -MNNML::Server -e unspool

DESCRIPTION

NNML::Server server implements a minimal NNTP server. It is (hope-) fully conformant to rfc977. In addition the commands "XOVER" and "AUTHINFO" are implemented.

Supported commands:

      ARTICLE, AUTHINFO, BODY, GROUP, HEAD, HELP, IHAVE, LAST, LIST,
      MODE, NEWGROUPS, NEWNEWS, NEXT, POST, QUIT, SLAVE, STAT

      XOVER, XHDR, LIST NEWSGROUPS ng-spec

The main reason for writing this was to synchronize my mail directories across different hosts. The Mail directories are MH-Style with a .overview file in each folder and an active file in the base directory. These are maintained by the Emacs Gnus backend NNML. To get started, you can generate/update this files using the overview program. Upon "POST" and "IHAVE" commands this files will also be updated.

To start from scratch use:

      touch /tmp/active;
      perl -MNNML::Server -e 'server(base => "/tmp", port => 3000)'

To export your mh-Mail use:

      perl overview -base ~/Mail
      perl -MNNML::Server -e 'server(base => "$ENV{HOME}/Mail", port => 3000)'

The command POST and IHAVE honour the "Newsgroups" header if not overwritten by the "X-Nnml-Groups" header. Articles will contain an appropriate "X-Nnml-Groups" header when retrieved by message-id.

When the client submits the "SLAVE" command, all forther post requests are spooled in "$Config-"spool> (usually ~/Mail/NNML.spool) for performance reasons. You can process the spooled articles by submitting the "XUNSPOOL" command or by calling

perl -MNNML::Server -e unspool

Rejected articles will be saven in "$Config-"bad> (usually ~/Mail/NNML.bad)

AUTHORIZATION

To enable access restrictions use:

      perl -MNNML::Auth -e "NNML::Auth::add_user($ENV{LOGANME}, 'passwd', \
        'read', 'write', 'admin')"

If base/passwd exists, three levels of authorization are recognized:

    admin     Users with permission admin may shut down the server using
              "SHUT". Also these users may create new groups simply by
              posting to them. Permission admin is also required for the
              "XUNSPOOL" command.

    write     Users with permission write may use the POST and IHAVE
              commands.

    read      All other commands require the read permission.

FEATURES

              Version 1.06 implements the "MODE GZIP" command. After
              submiting this commands, all articles, heads and bodies will
              be piped through "gzip -cf | mimencode". The server will
              recognize post requeste using the same pipe automatically.
              This will speed up nnmirror if the line is sufficiant slow.

BUGS

              The server handles multiple connections in a single thread. So
              a hung "POST" or "IHAVE" would block all connections. Therfore
              a post request is interrupted if the server could not read any
              bytes for 30 seconds. The Client is notified by message 441.
              If the client continues to send the article, it is interpreted
              by the command loop.

SEE ALSO

The overview(1) and nnmirror(1) manpages.

AUTHOR

Ulrich Pfeifer <pfeifer@ls6.informatik.uni-dortmund.de>