home *** CD-ROM | disk | FTP | other *** search
- NNTP SUPPORT
- ------------
-
- This file describes the NNTP support available in nn release 6.4. The
- NNTP support was implemented by Rene' Seindal, seindal@diku.dk.
-
-
- PREREQUISITES
- -------------
-
- First of all, you need read-access to an NNTP-server, and if you want
- to post, the server must allow that.
-
- If you have news on one of your systems, and want to run an NNTP
- server on that system to feed other local systems, you need to get and
- install the nntp-1.5 distribution with at least patches 1-3 (I think
- patch 8 is the latest). It is available from several ftp-sites in the
- USA. It is also available on freja.diku.dk (ip 129.142.96.1).
-
- However, just to run nn on you local system with or without NNTP, you
- don't need anything besides the nn 6.4 distribution!!
-
- The necessary modules to access a remote NNTP server is an integrated
- part of nn, so if you specify to use NNTP, the necessary code is
- automatically included.
-
- A recent version of the `mini-inews' program which is required to post
- articles via an NNTP server is also included for your convenience.
- See the INEWS section below.
-
- HOW IT WORKS
- ------------
-
- NNTP is supported both in nn and nnmaster. When NNTP is used, the
- database with the header information used by nn is still maintained on
- the local system (because NNTP does not know about the nn database
- (yet?)).
-
- When the master is set up to use NNTP, it will connect to the NNTP-
- server in each iteration of the collection (the interval set with -r),
- get a copy of the active file, and incorporate the new articles into the
- database. To do this, the master will temporarily transfer one article
- at a time from the NNTP-server to the local system.
-
- When the articles are read with nn, it will use the local database to
- present the menus, and fetch the articles from the NNTP-server as they
- are requested by the user. It will connect to the NNTP server the first
- time it is necessary to fetch an article.
-
- Neither nnmaster, nor nn will use NNTP if they run on the NNTP-server
- itself (they will directly access the news files).
-
- Both nn and nnmaster access the server in reading mode. The master and
- all client MUST use the same server at all times, since the local
- database contains article numbers, that are only unique for each
- NNTP-server.
-
-
- SHARING THE DATABASE
- --------------------
-
- You must also decide whether you want to share the database between your
- local news clients, and how you are going to do it.
-
- The database will take up some disk space, normally about 1Mb per 10.000
- articles. There are several ways to manage this space.
-
- This simplest solution, is to let each client run it own master, i.e.,
- have its own database. This means, of course, no sharing.
-
- Alternatively, one host can run the master, and distribute the database
- to the others via e.g., rdist. This doesn't save disk space, but saves
- load on the NNTP-server.
-
- Last, the database can be shared with NFS/RFS (see the description of
- NETWORK_DATABASE in the config.h file).
-
- The possibility of making a `nndb-server' stands open. It could be
- realized either as a separate server, running under inetd, or it could
- be incorporated into nntpd. It has not been implemented, but might be
- part of a future release (any volunteers?).
-
-
- CONFIGURATION
- -------------
-
- To use NNTP in nn, you must edit the relevant parts of config.h:
-
- NNTP
- You enable the use of NNTP by defining the macro NNTP.
-
- NNTP_SERVER
- Both the master and the clients will look up their NNTP-server
- in the file given by the macro NNTP_SERVER. If the name is not
- an absolute path name, it is taken to be relative to
- LIB_DIRECTORY.
-
- The format of the file is compatible with the one used in
- clientlib.c in the nntp-1.5 distribution, i.e., the first
- non-blank line, not starting with '#' is taken to be the name of
- the NNTP-server. This file MUST be present, and must contain a
- valid host name.
-
- NNTP_POST
- If you use the NNTP based inews (part on the NNTP distribution)
- and you have hosts that are not allowed to post to the NNTP
- server, you should defined this. It will make nn check at
- connect time whether the NNTP server allows postings, and reject
- all attempts to post, if the server disallows posting. If you
- do not define this, users will be allowed to post by nn, but the
- posting will eventually fail.
-
- Again, this parameter is only relevant, if you use the NNTP
- based inews, and have hosts that are not allowed to post.
-
- NNTP_MINI_INEWS_HEADER
- According to RFC 977, the mini-inews that comes with nntp
- requires that the articles it receives contain a complete
- header including Message-ID, Date, and Path fields (which the
- normal inews generates itself). I consider this to be a bug
- in the RFC, and maybe some (future?) versions of mini-inews
- will provide these fields. However, if you use mini-inews for
- postings and your version of mini-inews does not generate
- these headers, you should define NNTP_MINI_INEWS_HEADER in
- config.h. Notice that the Message-ID and Path may be less
- than perfect (but the Message-ID should be unique)!
-
-
- NEWS_LIB_DIRECTORY & INEWS
- If either is defined, they specify the destination of the
- mini-inews program when installed below with INEWS being used
- if both are defined. If neither is defined, it will be
- installed in /usr/lib/news/inews.
-
- EXCELAN
- You can define this symbol if your tcp/ip is based on the
- EXCELAN implementation (no netdb.h, no getservbyname(), no
- gethostbyname()). (This belongs in the s- file!)
- You will (probably) also need to add -lsocket to NNTP_EXTRA_LIB.
- Normally it will use port 119 for nntp, but this can be modified
- through "#define IPPORT_NNTP 1150" (or similar) in the init file.
-
- NO_BZERO
- NO_RENAME
- You can define these symbols if your system doesn't provide
- the bzero() and/or rename() functions (these #define:s belong
- in the s- file).
-
- NNTP_EXTRA_LIB
- Here you can specify libraries and loader flags which are only
- needed when compiled with NNTP. The normal EXTRA_LIB is still
- used.
-
-
- TUNING
- ------
-
- Both the server and each client maintains a cache of recently accessed
- articles, to minimize communication with the server (mainly to avoid
- fetching large digests continuously). The master needs the cache when
- it splits digests, and the clients need it, because nn has a tendency to
- reopen the articles several times.
-
- The master's cache is kept in LIB_DIRECTORY, and each client's cache are
- kept in the users .nn directory. The constant NNTPCACHE (defined in
- nntp.c but can be redefined in config.h) defines the size of the cache,
- whose optimal size depends on the amount of news kept on line on the
- NNTP-server. Values of 5-10 gives reasonable results. The effect is
- most striking when reading digested news.
-
- The location and size of the cache can also be changed on a per-user
- basis via the related nntp- variables (see nn.1).
-
-
- INSTALLATION
- ------------
-
- Making and installing nn using NNTP does not differ from a non-NNTP nn
- installation, except for the differences in the configuration and the
- need to specify the NNTP server in the NNTP_SERVER file.
-
- Notice however, that the NNTP_SERVER file must be properly initialized
- before doing the 'make initdb'.
-
- If something goes wrong in the initialization of the database, you will
- have to run 'nnmaster -I' again by hand.
-
-
- INEWS
- -----
-
- If you want to post news via the NNTP server, you will need to run a
- program named `(mini-)inews' which is included in the normal NNTP
- distribution. However, since this is the only part of the NNTP you
- need to run nn, a recent version (1.5.7) of the mini-inews program is
- included with nn in the inews/ directory.
-
- If you already have installed and maintain mini-inews on your system,
- you should not use the version that comes with nn - it would just be
- extra unnecessary work.
-
- However, if you don't run mini-inews already, using the version that
- comes with nn will be somewhat simpler to configure, because it takes
- advantage of the definitions you have already made for nn in config.h.
-
- Thanks to Steve Simmons who contributed the simplified inews
- configuration (which I took the freedom to simplify even further).
-
- To configure and install mini-inews, all you should need to do is
- (everything must be done with inews/ as current working directory):
-
- $ cd inews
- $ edit conf.h -- modify as described in the file
- $ make
-
- If things work, type:
-
- $ su
- # make install
-
- As far as I know, NNTP_MINI_INEWS_HEADER needs to be defined in
- nn's config.h for nn to work with this mini-inews version.
-
- See the files inews/README.NN and inews/README for further information.
-
-
- ERROR HANDLING
- --------------
-
- The handling of errors have been improved since the initial release.
-
- The master will handle most errors by closing the connection, and
- returning to the main loop. All errors in the master are logged, with
- a code of `N,' so they can be inspected with the `n' command in
- nnadmin's Log menu.
-
- A few errors are considere fatal. If any of these occur operation will
- be discontinued. These errors are such as failure to find the NNTP
- server, failure to find the NNTP service, and responses from the NNTP
- server in the 500 range (ill-formed requests, access denied, ...)
-
- NNTP server timeouts are handled specially. If the NNTP server times
- out, both nn and the master will attempt to restart it (by connecting
- again). This shouldn't happen in the master (which won't leave sockets
- idle for that long), but it can easily happen in nn, if it is left
- suspended for too long. If the server responds with code 400 (Service
- discontinued), a reconnect is also tried.
-
-
- PROBLEMS
- --------
-
- I am not certain what should happen if the server sends back responses
- in the 1xx range. I do not know whether a NNTP server is allowed to
- return one of these responses on its own initiative. If it is, nn
- should probably ignore (or display) the messages. Currently, nothing is
- done to treat these responses in any way.
-
- I have seen a strange thing happen to the master, which I have not been
- able to reproduce. The master ran on a Sun-4 running SunOS 4.0, and the
- NNTP server was a VAX 785 running MORE/bsd. The NNTP software was
- version 1.5.3. The master was stuck in a read from the NNTP server. A
- netstat on the Sun show an established connection to nntpd on the Vax,
- but a netstat on the Vasx did not show any NNTP connections. There was
- no nntpd running, and no messages on the console indicating any
- failures.
-
- [ It is now known that this problem is related to the socket not
- having the KEEP ALIVE flag set, but I have not got the necessary
- patches to fix it, ++Kim ]
-
-
- SPONTANEOUS NNTP ERROR 502
- --------------------------
-
- Sometimes nn or nnmaster may stop with the following message:
-
- NNTP 502 You only have permission to transfer, sorry.
-
- This particular case is probably the result of the NNTP server trying to
- turn your IP address into a fully qualified domain name (FQDN) so it can
- look you up in its access file.
-
- The NNTP server probably uses the domain name server (DNS) to map IP
- addresses into FQDNs. If the local DNS doesn't already know the answer, it
- has to go out over the network to find it. This can take a few seconds, and
- the library routine that does all this for the NNTP server might time out
- before the answer gets back to it. If this happens, the NNTP server doesn't
- know your FQDN, so it gives you the default access specified in the server's
- nntp_access file, which is usually "xfer" (article transfer only).
-
- In the time it takes for you to run nn again the DNS usuallu has its answer
- back, so things usually work the second time.
-
- One way to work around this problem is to specify the IP address of the
- client in the nntp server's access file; then it is not necessary to lookup
- the FQDN.
-
- Thanks to Tim Ramsey and Nick Sayer for this information.
-
-
- DEBUGGING NNTP CONNECTIONS
- --------------------------
-
- If you want to debug the nntp connection, you can run the nnmaster
- with the option -D2 (or -D3 which also turns on the normal -D verbose
- output). In the nn client, you can turn on the nntp-debug variable in
- the init file.
-
- The debug output from nnmaster will be placed in $TMP/nnmaster.log
- while the output in the client will appear on the message line.
-
-
- POSSIBLE EXTENTIONS TO THE NNTP SERVER
- --------------------------------------
-
- The new expire method used in release 6.4 is very efficient on local
- systems, because it will just read the spool directories to get a list
- of available articles in each group.
-
- However, with nntp, the only way I know of to get a list of available
- articles in a group with nntp is the XHDR request. However, this will
- open every article in the group to extract the desired field, but the
- only thing I am interested in is the article number itself.
-
- So I suggest to add a LISTGROUP request to the NNTP server to return
- the equivalent of
- ls $GROUPDIR | sed -n '/^[0-9][0-9]*$/p'
- (in any order - nnmaster will sort the list itself).
-
- Currently nnmaster will test whether this request works before using
- the XHDR request, so no changes to nnmaster will be required to take
- advantage of such a fix.
-
-
- Another possible performance increase would be if there was a request
- to get the current modification time of the ACTIVE file. This is the
- check nnmaster will do to see if there might be work to do on a local
- system, but with NNTP it has to read the active file from the server
- and compare it to a local copy to determine whether there is work to
- do. A simple ACTIVESTAT request returning the active file's age and
- size would fix this.
-
- Currently nnmaster is not prepared to use such a request, but it would
- be easy to add.
-
-
- ALTERNATIVES
- ------------
-
- Alternative implementations can be conceived, especially in the master.
- The master normally collects articles by rereading the active file,
- looking for changed article numbers. For each group with new articles,
- it reads the new articles and adds them to the database. This scheme
- has been kept in the NNTP-based master, to keep the changes at a
- minimum.
-
- An alternative solution could be to use NEWNEWS to get a list of new
- articles since last collect, and fetch each article in sequence. The
- newsgroups and article numbers within each group could then be found in
- the Xref: field. This would probably improve efficiency, since the
- master would then generate fewer failing requests (for non-existent
- articles), and it would only read cross-posted articles once. This
- solution would, however, require some surgery on the current structure
- of the masters main loop.
-
- Suggestions and improvements are very much welcome. Send your ideas or
- contributions to nn-bugs@dkuug.dk.
-