[leafnode-list] [PATCH] doc: convert README to Markdown
Matěj Cepl
mcepl at cepl.eu
Mon Mar 24 09:31:51 CET 2025
Hopefully, I have fixed whole automake machinery as well. Adds
pandoc (https://pandoc.org) as a requirement.
---
Makefile.am | 16 +-
README | 807 ++++++++++++++++++++++
README.html | 1860 +++++++++++++++++++++++---------------------------
README.md | 816 ++++++++++++++++++++++
configure.ac | 2 +-
5 files changed, 2493 insertions(+), 1008 deletions(-)
create mode 100644 README
create mode 100644 README.md
diff --git a/Makefile.am b/Makefile.am
index defa8b2..bc837b9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -289,7 +289,7 @@ store_test_CXXFLAGS = $(AM_CXXFLAGS) -std=c++20
CLEANFILES = FAQ.aux FAQ.log FAQ.toc \
README-FQDN.aux README-FQDN.log README-FQDN.toc
-DISTCLEANFILES = $(BUILT_SOURCES) README $(GENERATED_MANS) \
+DISTCLEANFILES = $(BUILT_SOURCES) README README.html $(GENERATED_MANS) \
config.table.sorted
# GENERATED SOURCES ========================================
@@ -374,10 +374,16 @@ doxygen:
-rm -rf $(srcdir)/dox/html/
cd $(srcdir) && doxygen
-README: README.html $(LYNX)
- if test "$(LYNX)" != "no" ; then \
- rm -f README ; \
- $(LYNX) -dump $(srcdir)/README.html >$@ ; \
+README: README.md $(PANDOC)
+ if test "$(PANDOC)" != "no" ; then \
+ rm -f $@ ; \
+ $(PANDOC) -f markdown -t plain $< -o $@ ; \
+ fi
+
+README.html: README.md $(PANDOC)
+ if test "$(PANDOC)" != "no" ; then \
+ rm -f $@ ; \
+ $(PANDOC) -f markdown -t html -s --toc $< -o $@ ; \
fi
.PHONY: rpm
diff --git a/README b/README
new file mode 100644
index 0000000..d4cc363
--- /dev/null
+++ b/README
@@ -0,0 +1,807 @@
+------------------------------------------------------------------------
+
+1. OVERVIEW
+
+Leafnode is a USENET software package designed for small sites, with a
+few tens of readers and only a slow link to the net. It is developed on
+Linux, but has been reported to compile and run also under any BSD
+flavour, Solaris and Irix.
+
+The Leafnode package consists of several programs, three essential ones
+and several add-ons.
+
+- Leafnode is the NNTP server. It talks to the normal news clients,
+ and stores readership data.
+- Fetchnews is the NNTP news-gatherer. It looks at the readership data
+ Leafnode stores, and selects what groups to pull news from. It also
+ transfers your contributions to one or more upstream servers.
+- Texpire is responsible for deleting old and uninteresting news. It
+ deletes all discussion threads that are old and not recently read.
+
+These are the additional tools:
+
+- Applyfilter lets you delete articles from your local news spool
+ which fit a certain pattern.
+- Checkgroups inserts the titles of newsgroups into the newsgroup
+ database.
+- Newsq shows which news are waiting to be transferred to your
+ upstream server(s).
+- Rnews sorts an UUCP batch or articles downloaded by other means into
+ the news spool.
+
+Only groups that someone has been reading in the past week are fetched
+from the upstream NNTP server. When someone stops reading a group,
+fetchnews will stop reading that group a week later (this is the default
+which can be configured), and when someone starts reading a group,
+fetchnews will grab all the articles it can in that group the next time
+it runs.
+
+Leafnode's distinguishing features are:
+
+- Leafnode is written with the novice user in mind. It is very easy to
+ install and configure and requires no manual intervention once
+ installed. Leafnode tries very hard to recover automatically from
+ error situations.
+- Compared to other servers, leafnode uses very little disk space and
+ bandwidth. Of course this also depends on how many users are
+ accessing your server and is probably not true for 300-user sites.
+- The newsspool can be easily manipulated by small scripts because it
+ is maintained in plain file format. Some tiny examples are in the
+ subdirectory tools/ .
+
+The current version of leafnode is available from
+http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/
+
+There is also a leafnode mailing list. Send mail to
+
+leafnode-list-subscribe at dt.e-technik.tu-dortmund.de
+
+to subscribe, or visit
+http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/.
+
+------------------------------------------------------------------------
+
+2. INSTALLATION
+
+1. Leafnode does not currently work on SunOS 4.
+
+2. Leafnode depends on the PCRE regular-expression matching library. It
+ ships as binary package with many current Linux/BSD distributions,
+ and is also available as port for *BSD (Debian users: try "apt-get
+ install libpcre3 libpcre3-dev"). Just install the binary package for
+ your operating system if it ships with one. If it comes without
+ PCRE, don't worry, the installation from source is simple. To
+ install PCRE, do (AS NORMAL USER, NOT AS root!)
+
+ 1. Download the current PCRE version from http://www.pcre.org/.
+ 2. Unpack PCRE: gunzip -c | tar xvf -
+ 3. cd pcre-3.9
+ (This is for PCRE-3.9, for other versions, replace that by the
+ path that tar wrote when unpacking.)
+ 4. type ./configure && make
+ there should be no errors
+ 5. become root
+ 6. as root, do make install
+ 7. as root, do ldconfig
+ this may not be needed on all systems, but better safe than
+ sorry
+ 8. exit your root shell
+ 9. DONE!
+
+3. Leafnode uses GNU autoconf to determine the configuration of the
+ machine it will be compiled on. It also uses GNU automake for all
+ the standard features that GNU automake offers. Type (AS NORMAL
+ USER, NOT AS root!)
+
+ /bin/sh ./configure
+
+ to create an appropriate Makefile and config.h. If leafnode cannot
+ find your PCRE, it is probably an old version without pcre-config,
+ or pcre-config is not in your path. Either add the directory
+ containing pcre-config to your $PATH, or call configure like this
+ (we assume PCRE is in /opt/pcre-3.9):
+
+ env CPPFLAGS="-I/opt/pcre-3.9" LDFLAGS="-L/opt/pcre-3.9" /bin/sh ./configure
+
+ NOTE: on some machines, when PCRE is linked against a shared
+ library, you will need to add /opt/pcre-3.9 to LD_LIBRARY_PATH or to
+ /etc/ld.so.conf.
+
+ The configure script can take some flags (replace DIR by a directory
+ name, FILE by a file name):
+
+ --enable-spooldir=DIR To override the default /var/spool/news,
+ where leafnode puts its news spool unless
+ --localstatedir is given or --prefix is given and
+ different from /usr, in the latter case, the
+ default is $localstatedir/spool/news
+
+ --prefix=DIR Leafnode installs itself normally in the /usr/local/sbin
+ directory. If you want to use another directory, use this
+ flag. For example, if you want to install leafnode in
+ /usr/sbin, use --prefix=/usr
+
+ --sysconfdir=DIR Default path for configuration is /etc/leafnode when
+ --prefix is not used or set to /usr, and PREFIX/etc
+ otherwise. You can use this to change the config file
+ location from its default.
+
+ --with-dmalloc Lets leafnode include dmalloc header files and link
+ against libdmalloc. Only useful for debugging, not
+ needed for normal operation. This option requires
+ dmalloc, available from http://dmalloc.com/.
+
+ --with-runas-user=USER Lets leafnode run as user USER, defaults to "news".
+
+ --with-pam Enable PAM (pluggable authentication modules)
+ support.
+
+ BEWARE: Former versions always defaulted their sysconfdir to
+ /etc/leafnode. Current versions only override sysconfdir to
+ /etc/leafnode if configured without --prefix or with --prefix=/usr.
+ That way, if --prefix=/opt/leafnode, the sysconfdir goes to
+ /opt/leafnode/etc, which is more appropriate.
+
+4. Type
+
+ make
+
+ There should be no errors.
+
+5. Become root.
+
+6. As root, create user and group "news" (or the configured user and
+ group) if you don't have those already.
+
+7. Type
+
+ make install
+
+ If you prefer an installation with the binaries stripped free of
+ symbols, use
+
+ make install-strip
+
+ instead.
+ For packagers: if you want to prefix all installation paths with a
+ common prefix, e. g. to support RPM's BuildRoot feature: You can use
+ make install-strip DESTDIR=/var/tmp/leafnode-root.
+
+8. Configure syslog so it captures news logging, most systems do NOT
+ log news stuff by default.
+
+ 1. Edit /etc/syslog.conf. Unless you already have news.info
+ logging, add a line like this:
+
+ news.info /var/log/news
+
+ Note that if you want to send in a bug report and need debug
+ logging, you'll have to replace news.info by news.debug (and
+ send a SIGHUP, as shown below).
+
+ Your syslog.conf may already suggest a different file. If your
+ syslog.conf suggests news.info logging, use that, but be sure to
+ activate it in case it's commented out: remove leading hash
+ marks and white space.
+
+ Also make sure you use TABs between news.info and the path.
+
+ 2. Create the /var/log/news file, type: touch /var/log/news.
+
+ 3. Send syslogd a HUP signal. kill -1 \cat /var/run/syslogd.pid``
+ usually does the job, if it doesn't, retry with "syslogd"
+ replaced by "syslog".
+
+9. If you are updating leafnode from a previous version, see the
+ section "Updating" below.
+
+10. Edit $(LIBDIR)/config. $(LIBDIR) defaults to /etc/leafnode, but can
+ be adjusted at build time. For documentation, see below or
+ config.example and leafnode(8). Mandatory edits to the config file
+ are:
+
+ - server -- this must point to your upstream news server.
+ - expire -- how many days will downloaded articles remain in the
+ spool.
+
+ Make sure the environment variable $NNTPSERVER or /etc/nntpserver
+ points to your own host so clients will talk to leafnode rather than
+ try to go to the upstream server.
+
+ If you want to use filtering of the incoming spool, see the section
+ on the filter file below.
+
+11. the systemd/ directory of the tarball contains example service and
+ timer files that can be used on systemd-based systems instead of the
+ inetd/xinetd and cron[tab] settings shown below.
+
+12. Set up a cron job (as user "root" or "news") to run texpire every
+ night or maybe every week. Here is my crontab line, which runs
+ nightly:
+
+ 0 4 * * * /usr/local/sbin/texpire
+
+ I did "crontab -u news -e" as root to edit the crontab file, and
+ added this line. Substituting "1" for the third "*", thus:
+
+ 0 4 * * 1 /usr/local/sbin/texpire
+
+ tells cron to run texpire at 4am every Monday morning.
+
+13. Make sure fetchnews is run at the appropriate time. If you have a
+ full-time link, run it out of cron (as "news" again); if not, run it
+ when your connection to the net is established. If it is run as root
+ it will change to user "news". If you use PPP, you can run fetchnews
+ from /etc/ppp/ip-up (or /etc/ppp/ip-up.local, depending on your OS).
+
+14. We assume that you have tcpd installed, it ships with most
+ distributions. If you don't have it, fetch it from
+ ftp://ftp.porcupine.org/pub/security/, it's in tcp_wrappers, and
+ install it. It's preferable if you compile it with -DHOSTS_OPTIONS,
+ and the examples below assume you did.
+
+15. Choose either of these alternatives:
+
+ - Alternative #1: If your system uses inetd (most commercial
+ unices, *BSD). Edit /etc/inetd.conf so that $(BINDIR)/leafnode
+ is executed for incoming NNTP connections. Here is my inetd.conf
+ line:
+
+ nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
+
+ Note: some systems install tcpd to a different path, but it's
+ uncommon. Change the first path accordingly if your tcpd resides
+ in /usr/etc or /usr/lbin. After these changes, force inetd to
+ read the changed configuration file by sending it the HANGUP
+ signal. To achieve this, issue the following command (as root):
+
+ kill -HUP `cat /var/run/inetd.pid`
+
+ - Alternative #2: If your system has xinetd instead. Add this to
+ your xinetd.conf (this example assumes xinetd 2.3.3 or newer):
+
+ service nntp
+ {
+ flags = NAMEINARGS NOLIBWRAP
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = news
+ server = /usr/sbin/tcpd
+ server_args = /usr/local/sbin/leafnode
+ instances = 7
+ per_source = 3
+ }
+
+ Then send xinetd an USR2 signal to make it reread its
+ configuration. See the xinetd.conf(5) manual page for details.
+ Note: some systems install tcpd to a different path, but it's
+ uncommon. Change the first path accordingly if your tcpd resides
+ in /usr/etc or /usr/lbin.
+
+16. Write the following into /etc/hosts.deny:
+
+ leafnode: ALL
+
+ and into /etc/hosts.allow:
+
+ leafnode: 127.0.0.1
+
+ to protect your news server from abuse. If you want to make leafnode
+ accessible to additional IP numbers/domains, add them in
+ /etc/hosts.allow in the format described above. See hosts_access(5)
+ and hosts_options(5) (if applicable) for more information about tcp
+ wrappers.
+
+17. (optional) If you want to allow read-only access, you can set the
+ NOPOSTING environment variable, for example, put this into
+ /etc/hosts.allow:
+
+ leafnode: 192.168.0.4: setenv NOPOSTING "You may only read."
+
+ The contents of this variable are printed at the end of the banner,
+ with control characters (as per iscntrl(3)) replaced by an
+ underscore.
+
+18. (optional) If you want to allow clients read access to local or
+ global subscribed groups, but do not want to allow them to subscribe
+ to new groups, you can set the NOSUBSCRIBE environment variable.
+ When this variable is set, a client will never see a pseudo article.
+ For example, if clients from 127.0.0.1 and 192.168.0.42 may
+ subscribe new groups, and all other 192.168.0.* hosts may read the
+ existing groups but not subscribe to new groups, put this into
+ /etc/hosts.allow (this assumes libwrap/tcpd have been compiled with
+ -DPROCESS_OPTIONS):
+
+ leafnode: 127.0.0.1 192.168.0.42: ALLOW
+ leafnode: 192.168.0.0/255.255.255.0: setenv NOSUBSCRIBE 1
+ leafnode: ALL: DENY
+
+19. Run fetchnews. The first run will take some time since fetchnews
+ reads a list of all newsgroups from your upstream server. In the
+ worst case, this can take up to 60 minutes, depending on how many
+ newsgroups your provider offers and how reliable your modem
+ connection is. To see fetchnews working, run it with -vvv.
+
+20. Run texpire. It will create directories missing after the first
+ install.
+
+21. Exit your root shell.
+
+22. Read news using an NNTP client (with $NNTPSERVER or /etc/nntpserver
+ pointing to your own host). Select the groups you want to read in
+ the future. You will find them empty except a default article.
+ Reading this article is necessary with some newsreaders to select
+ the groups for further fetching.
+
+ After this, you should have empty files in
+ /var/spool/news/interesting.groups/ for every group you want to
+ read.
+
+23. Become root and run fetchnews again, then exit your root shell. This
+ run should pick up all the groups you want to read.
+
+------------------------------------------------------------------------
+
+3. UPDATE FROM PREVIOUS VERSIONS
+
+3.1 Update from versions < 2.0b8_ma8
+
+The local.groups and groupinfo files and the hash function for
+message.id have changed from any former version to 2.0b8_ma8.
+
+IMPORTANT: To fix the "remote" groups, run fetchnews -f -- it will take
+some time, because it refetches the whole active file, but that's needed
+anyhow to figure the group status (posting allowed/not allowed/moderated
+group).
+
+To fix local.groups, if you have perl installed:
+
+ perl -ple 's /\s+/\ty\t/' -i.bak /etc/leafnode/local.groups
+
+This will make a backup of your original /etc/leafnode/local.groups in
+/etc/leafnode/local.groups.bak.
+
+If you don't have Perl, use a text editor that preserves HTAB
+characters, change all while space to TAB and insert an additional field
+reading just y:
+
+ Before: local.test some test group
+ After: local.testTAByTABsome test group
+
+Use the real TAB character rather than TAB.
+To fix the spool for message.ids, run texpire -r
+The changes written in section 3.2 below also apply.
+
+3.2 Update from versions < 2.0
+
+From 1.9.x to 2.0 there were some changes to options in the main
+configuration file. The options "maxage", "maxlines", "minlines",
+"maxbytes" and "maxcrosspost" have become obsolete in the main
+configuration file and have to be specified in the filter file instead.
+The advantage of this is that you can do much finer selection on these
+criteria now.
+
+To replace, for example, a "maxage = 5" specification in the main
+configuration file, you should add the following to your filter file:
+
+ newsgroups = .*
+ maxage = 5
+ action = kill
+
+The leafnode programs will issue warnings if they encounter obsolete
+specifications in the main config file.
+
+3.3 Update from versions < 1.9.3
+
+From version 1.9.3 on, the groupinfo file is sorted in a
+case-insensitive manner. To update correctly, do a "make update" as root
+after you have successfully completed "make install". This will re-sort
+the groupinfo file. The old groupinfo file will be stored as
+groupinfo.old just in case something goes wrong. You also have to change
+your main config file manually as described in the previous section.
+
+3.4 Update from versions < 1.6
+
+Between leafnode-1.6alpha and leafnode-1.6, the format of the groupinfo
+file changed and some files moved to other places. To update correctly,
+do a "make update" as root after you have successfully completed "make
+install". This will reformat the groupinfo file and move the other files
+into the correct places. The old groupinfo file will be stored as
+groupinfo.old just in case something goes wrong. You also have to change
+your main config file manually as described in the section "Update from
+versions < 2.0".
+
+------------------------------------------------------------------------
+
+4. FILES AND DIRECTORIES
+
+Leafnode puts its files in three separate directories: The spool
+directory, the library directory, and the binaries directory. All
+directories can be changed at compile time.
+
+In the spool directory you find the stored news, the active file and
+some other short-lived configuration file. It defaults to
+/var/spool/news and can be changed at compilation time. There are some
+special directories here; see the leafnode(8) man page.
+
+The library directory contains long-lived configuration files. It
+defaults to /etc/leafnode.
+
+The binaries directory, /usr/local/sbin by default, contains the
+executable programs applyfilter, texpire, fetchnews and leafnode.
+
+The user directory, /usr/local/bin by default, contains the newsq
+program.
+
+4.1. The main configuration file
+
+The main configuration file contains settings important for all programs
+of the leafnode suite. It defaults to /etc/leafnode/config, but several
+configuration files can be used at once by employing the -F switch of
+the programs.
+
+The file contains two mandatory and a number of optional parameters.
+
+NOTE: Global options must come first, server-specific options below the
+server = lines.
+
+Mandatory parameters
+
+ server = news02.bigprovider.com
+
+You have to specify at least one server (except if you want leafnode to
+serve as a local server only). Usually, this will be the news server of
+your provider. You can specify more than one server, and fetchnews will
+retrieve news from all of them, taking care not to transfer articles
+multiple times to your machine. Servers will be queried in the order
+specified in the config file.
+
+ expire = 5
+
+This parameter determines how many days threads are kept on your hard
+disk. texpire will delete whole threads, not just single articles.
+
+Server-specific optional parameters
+
+To configure interaction with the server somewhat, you can change the
+behaviour of fetchnews by setting several server-specific optional
+parameters. They have to be specified directly after the corresponding
+"server" statement. A new server statement in the config file will also
+allow new optional parameters.
+
+ username = myname
+ password = mypasswd
+
+If your upstream server requires a form of authentication, you can set
+your username and password here.
+
+ timeout = 30
+
+It may happen that, due to a bad connection or other reasons, the server
+stops talking to you while you fetch news. The "timeout" parameter
+determines the number of seconds fetchnews is supposed to wait for a
+response from the server before giving up.
+
+ nodesc = 1
+
+Some servers are unable to deliver descriptions of new newsgroups
+correctly. When fetchnews encounters such a server, it will print the
+warning
+
+ server.name does not process LIST NEWSGROUPS news.group.name
+ correctly: use nodesc
+
+To allow for shorter download times, you should in this case set "nodesc
+= 1" for that particular server in the configuration file.
+
+ port = 8000
+
+Normally, fetchnews will try to retrieve news from port 119 (the
+standard nntp port) of your upstream server. If the upstream server runs
+on a different port, you can specify it with this option.
+
+General optional parameters
+
+ authenticate = METHOD
+
+Require that NNTP clients connecting to your leafnode authenticate
+themselves. The only method currently supported is internal. In this
+mode, leafnode expects a file users in its sysconfdir,
+/etc/leafnode/users by default, which has a simple format, one line per
+user, with the user name (which cannot contain spaces), then a colon,
+then the crypt(3) encrypted password. To generate these lines, you can
+use the Perl program tools/make_pass.pl, for example, if you want to add
+a user "enigma" with a password of "break!me", type:
+
+ perl -wT tools/make_pass.pl 'enigma' 'break!me'
+
+and copy the resulting line to the users file.
+htpasswd as shipped for Apache servers should also work if in crypt(3)
+mode.
+
+ hostname = host.domain.country
+
+If the postings that you write do not have message IDs (generated by the
+newsreader), leafnode will generate a message ID for you. (It will never
+overwrite an already existing message ID.) Message IDs generated by
+leafnode feature ".ln" before the @ sign. The message ID contains the
+fully qualified hostname of your machine which may not always be what
+you want. In that case, you can override the use of the hostname by
+using the "hostname" option.
+
+ create_all_links = 1
+
+Usually fetchnews will store articles only in the newsgroups which you
+consider interesting. Unfortunately, this makes it difficult to score
+for the number of newsgroups a message is posted to because the
+Newsgroups: header is not featured in the overview information;
+therefore you can determine the number of newsgroups an article is
+crossposted to only from the Xref: header. If "create_all_links" is set
+to 1, fetchnews will store articles in all newsgroups which they are
+posted to, making all these newsgroups turn up in the Xref: header.
+
+ groupexpire = a.news.group 7
+
+As outlined above, texpire will expire threads after "expire" days. If
+you want to adjust expiry times for certain groups, you may use the
+"groupexpire" parameter to do just that. You can specify groups or use
+wildcards; for example
+
+ groupexpire = *.announce 30
+
+will affect expiry times of all groups ending with ".announce".
+
+ filterfile = /etc/leafnode/filters
+
+If you want to employ filtering on incoming messages, you have to
+specify the path where the filterfile can be found. The format of the
+filterfile is described in the next chapter.
+
+ timeout_short = 2
+ timeout_long = 5
+
+These two parameters determine how quickly a group is unsubscribed by
+leafnode after you have stopped reading it. If you have looked into the
+group only once, subscription is stopped after "timeout_short" days; if
+you have read it more regularly, subscription is stopped after
+"timeout_long" days. (You can stop subscription immediately by removing
+the corresponding file in /var/spool/news/interesting.groups/).
+
+ timeout_active = 90
+
+By default, fetchnews will re-read active files from the upstream server
+every 90 days. This interval can be changed by setting "timeout_active"
+to a different value. Re-reading the active file frequently will keep it
+a little bit smaller but will increase the on-line time.
+
+ delaybody = 1
+
+This option switches fetchnews into a mode where only the headers of
+articles are fetched for visual inspection. Only the articles read in
+the newsreader will be retrieved the next time fetchnews is called. This
+can save a huge amount of disk space and download time but requires more
+manual intervention on the user side.
+
+ groupdelaybody = some.news.group
+
+If you want delaybody mode only for selected groups, you can enable this
+download mode for one specific group. The global delaybody switch above
+causes all groups to be treated that way. Use one line per group
+pattern.
+
+ debugmode = 260
+
+This option forces the leafnode programs into logging lots of
+information via the syslog daemon. It is only useful if you want to hunt
+down bugs. See config.example for an explanation of the number here.
+
+4.2. The filter file
+
+The filter file format is currently described in fetchnews(5). Type man
+5 filterfile or man -s 5 filterfile to see the description.
+
+------------------------------------------------------------------------
+
+5. LOCAL NEWSGROUPS
+
+From version 2.0 on, Leafnode is able to handle local newsgroups. Local
+newsgroups are groups that exist only on your local server but not on
+upstream servers.
+
+To create a local newsgroup, you have to think of a newsgroup name which
+should not exist on any of your upstream servers. It is therefore a good
+idea to start a new top-level hierarchy. You should also make up a
+description for your newsgroup.
+
+If you choose a newsgroup name which exists already on an upstream
+server, the newsgroup is not treated as a local one.
+
+Next, you write the name, status and description into the file
+/etc/leafnode/local.groups using your preferred text editor, which must
+not mangle TABs to SPACEs. The file should consist of lines in the
+format
+
+ # Comment lines are allowed, with a hash at the beginning of a line.
+ #
+ # However, no white space may precede the hash mark, and empty lines
+ # are not valid.
+ news.group.name<TAB>status<TAB>description
+
+(replace <TAB> with a TAB character!)
+
+The first column of each line is taken as the newsgroup name; the second
+as the status (y for "may be posted to", m for "moderated" -- see below
+for moderator configuration), the third column of the line is
+interpreted as description. For example, to set up a newsgroup
+"local.leafnode" which deals with Leafnode's internals, you would put a
+line
+
+ local.leafnode<TAB>y<TAB>Local leafnode user group
+
+into /etc/leafnode/local.groups. (If your configuration does not reside
+in /etc/leafnode, replace this part of the pathname with the appropriate
+directory.)
+
+5.1 MODERATED NEWSGROUPS
+
+From version 2.0 on, Leafnode also handles moderated newsgroups. These
+are newsgroups which only certain people may post into, and articles
+which a regular (non-moderator) user posts, are mailed to the moderator.
+
+External moderated newsgroups are handled by the upstream servers.
+
+To configure the moderators for local moderated groups, an
+INN-compatible "moderators" file is used. It is named
+/etc/leafnode/moderators and has the following format:
+
+ pattern:moderator
+
+Empty lines and lines that start with a hash character (#) are
+considered comment lines and are ignored.
+
+The pattern is a normal wildmat pattern, which means that it's a SHELL
+pattern, the most useful character is the asterisk (*) which matches any
+sequence of characters. The moderator given on that line applies to all
+groups that the pattern matches. Should multiple lines match a group,
+the first match in the file "wins", the second and subsequent patterns
+are not taken into account. So put the more specific patterns first.
+
+The moderator is a regular internet mail address, with the exception
+that the first occurrence of "%s" is replaced with the newsgroup name,
+with dots (.) converted to dashes (-) for INN compatibility.
+
+Example:
+
+ # This is a comment line
+ #
+ # special moderator, hans at example.com is mailed all articles for
+ # local.special
+ local.special:hans at example.com
+ # moderator for all other local groups:
+ local.*:egon+%s at example.net
+ # that means:
+ # mail postings for local.test to egon+local-test at example.net
+ # mail postings for local.video to egon+local-video at example.net
+ #
+ # Note: if you put local.special below local.*, local.special will be
+ # ignored.
+
+------------------------------------------------------------------------
+
+6. DEINSTALLATION
+
+If you want to uninstall leafnode (e.g. because you want to replace it
+with another newsserver) and have a Makefile available, you can achieve
+this by doing "make uninstall".
+
+Do not uninstall an old version of leafnode before updating.
+
+------------------------------------------------------------------------
+
+7. FREQUENTLY ASKED QUESTIONS
+
+See the file FAQ.
+
+------------------------------------------------------------------------
+
+8. COPYRIGHT
+
+Leafnode versions through 1.4 were written by Arnt Gulbrandsen
+<agulbra at troll.no> and are copyright 1995 Troll Tech AS, Postboks 6133
+Etterstad, 0602 Oslo, Norway, fax +47 22646949.
+
+Leafnode versions 1.5 up to 1.9.19 and 2.0b1 to 2.0b8 were written by
+Cornelius Krasel <krasel at wpxx02.toxi.uni-wuerzburg.de> and are copyright
+1997-2001.
+
+Leafnode versions 1.9.20 and up were written by Matthias Andree
+<matthias.andree at gmx.de> and Ralf Wildenhues <ralf.wildenhues at gmx.de>
+and are © copyright 2002 - 2003.
+
+Leafnode versions 2.0b8_ma and 2.0.0.* were written by Matthias Andree
+<matthias.andree at gmx.de>, Ralf Wildenhues <ralf.wildenhues at gmx.de> and
+Jörg Dietrich <joerg at dietrich.net> and are © copyright 2001 - 2003.
+
+Major modifications were made by
+Randolf Skerka <Randolf.Skerka at gmx.de>
+Kent Robotti <robotti at erols.com>
+Markus Enzenberger <enz at cip.physik.uni-muenchen.de>
+Matthias Andree <matthias.andree at gmx.de>
+Jörg Dietrich <joerg at dietrich.net>
+Stefan Wiens <s.wi at gmx.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+The getaline() and getline() routines are Copyright (c) 2000-2002
+Matthias Andree <matthias.andree at gmx.de>. They are licensed under the
+GNU Lesser General Public License (GNU LGPL) 2.1. A copy of the LGPL is
+provided in the file COPYING.
+
+The wildmat() routine is Copyright (c) 1986-1991 Rich $alz
+<rsalz at osf.org>. The original copyright notice, taken from INN 2.2.2,
+follows:
+
+ Redistribution and use in any form are permitted provided that the
+ following restrictions are met:
+
+ 1. Source distributions must retain this entire copyright notice and
+ comment.
+ 2. Binary distributions must include the acknowledgement ``This
+ product includes software developed by Rich Salz'' in the
+ documentation or other materials provided with the distribution.
+ This must not be represented as an endorsement or promotion
+ without specific prior written permission.
+ 3. The origin of this software must not be misrepresented, either by
+ explicit claim or by omission. Credits must appear in the source
+ and documentation.
+ 4. Altered versions must be plainly marked as such in the source and
+ documentation and must not be misrepresented as being the original
+ software.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The replacement vsnprintf() function was written by Theo de Raadt and is
+Copyright (c) 1997 under the following restrictions:
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.html b/README.html
index 609672a..3e9155f 100644
--- a/README.html
+++ b/README.html
@@ -1,222 +1,318 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
- <head>
- <meta name="generator" content=
- "HTML Tidy for Linux/x86 (vers 1st April 2002), see www.w3.org">
- <meta http-equiv="Content-Type" content=
- "text/html; charset=iso-8859-1">
-
- <title>Leafnode manual</title>
-
- <style type="text/css">
- h4.c5 {text-align: center}
- p.c4 {font-weight: bold}
- p.c3 {text-align: center}
- h3.c2 {text-align: center}
- h2.c1 {text-align: center}
- </style>
- </head>
-
- <body>
- <h2 class="c1">LEAFNODE</h2>
-
- <p>Preface: This documentation is about to be migrated to a
- different format. Do not file bug reports against section
- numbering or references within this document.</p>
-
- <h3 class="c2">Table of Contents</h3>
-
- <ol>
- <li>Overview</li>
-
- <li>Installation</li>
-
- <li>
- Update from previous versions
-
- <ol>
- <li>Update from versions < 2.0b8_ma8</li>
-
- <li>Update from versions < 2.0</li>
-
- <li>Update from versions < 1.9.3</li>
-
- <li>Update from versions < 1.6</li>
- </ol>
- </li>
-
- <li>
- Files and directories
-
- <ol>
- <li>The main configuration file</li>
-
- <li>The filter file</li>
- </ol>
- </li>
-
- <li>
- Local newsgroups
-
- <ol>
- <li>Moderated newsgroups</li>
- </ol>
- </li>
-
- <li>Deinstallation</li>
-
- <li>Frequently asked questions</li>
-
- <li>Copyright</li>
- </ol>
- <hr>
-
- <h3 class="c2">1. OVERVIEW</h3>
-
- <p>Leafnode is a USENET software package designed for small
- sites, with a few tens of readers and only a slow link to the
- net. It is developed on Linux, but has been reported to compile
- and run also under any BSD flavour, Solaris and Irix.</p>
-
- <p>The Leafnode package consists of several programs, three
- essential ones and several add-ons.</p>
-
- <ul>
- <li><u>Leafnode</u> is the NNTP server. It talks to the
- normal news clients, and stores readership data.</li>
-
- <li><u>Fetchnews</u> is the NNTP news-gatherer. It looks at
- the readership data Leafnode stores, and selects what groups
- to pull news from. It also transfers your contributions to
- one or more upstream servers.</li>
-
- <li><u>Texpire</u> is responsible for deleting old and
- uninteresting news. It deletes all discussion threads that
- are old and not recently read.</li>
- </ul>
-
- <p>These are the additional tools:</p>
-
- <ul>
- <li><u>Applyfilter</u> lets you delete articles from your
- local news spool which fit a certain pattern.</li>
-
- <li><u>Checkgroups</u> inserts the titles of newsgroups into
- the newsgroup database.</li>
-
- <li><u>Newsq</u> shows which news are waiting to be
- transferred to your upstream server(s).</li>
-
- <li><u>Rnews</u> sorts an UUCP batch or articles downloaded
- by other means into the news spool.</li>
- </ul>
-
- <p>Only groups that someone has been reading in the past week
- are fetched from the upstream NNTP server. When someone stops
- reading a group, fetchnews will stop reading that group a week
- later (this is the default which can be configured), and when
- someone starts reading a group, fetchnews will grab all the
- articles it can in that group the next time it runs.</p>
-
- <p>Leafnode's distinguishing features are:</p>
-
- <ul>
- <li>Leafnode is written with the novice user in mind. It is
- very easy to install and configure and requires no manual
- intervention once installed. Leafnode tries very hard to
- recover automatically from error situations.</li>
-
- <li>Compared to other servers, leafnode uses very little disk
- space and bandwidth. Of course this also depends on how many
- users are accessing your server and is probably not true for
- 300-user sites.</li>
-
- <li>The newsspool can be easily manipulated by small scripts
- because it is maintained in plain file format. Some tiny
- examples are in the subdirectory tools/ .</li>
- </ul>
-
- <p>The current version of leafnode is available from
- <a
- href="http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/">http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/</a></p>
-
- <p>There is also a leafnode mailing list. Send mail to</p>
-
- <p class="c3">leafnode-list-subscribe at dt.e-technik.tu-dortmund.de</p>
-
- <p>to subscribe, or visit <a
- href="http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/">http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/.</a></p>
- <hr>
-
- <h3 class="c2">2. INSTALLATION</h3>
-
- <ol>
- <li>Leafnode does not currently work on SunOS 4.</li>
-
- <li>
- Leafnode depends on the PCRE regular-expression matching
- library. It ships as binary package with many current
- Linux/BSD distributions, and is also available as port for
- *BSD (Debian users: try "apt-get install libpcre3
- libpcre3-dev"). Just install the binary package for your
- operating system if it ships with one. If it comes without
- PCRE, don't worry, the installation from source is simple.
- To install PCRE, do (AS NORMAL USER, NOT AS root!)
-
- <ol>
- <li>Download the current PCRE version from <a href=
- "http://www.pcre.org/">http://www.pcre.org/</a>.</li>
-
- <li>Unpack PCRE: gunzip -c | tar xvf -</li>
-
- <li>cd pcre-3.9<br>
- <i>(This is for PCRE-3.9, for other versions, replace
- that by the path that tar wrote when unpacking.)</i></li>
-
- <li>type <kbd>./configure && make</kbd><br>
- <i>there should be no errors</i></li>
-
- <li>become root</li>
-
- <li>as root, do <kbd>make install</kbd></li>
-
- <li>as root, do <kbd>ldconfig</kbd><br>
- <i>this may not be needed on all systems, but better
- safe than sorry</i></li>
-
- <li>exit your root shell</li>
-
- <li>DONE!</li>
- </ol>
- </li>
-
- <li>
- Leafnode uses GNU autoconf to determine the configuration
- of the machine it will be compiled on. It also uses GNU
- automake for all the standard features that GNU automake
- offers. Type (AS NORMAL USER, NOT AS root!)
-<pre>
- /bin/sh ./configure
-</pre>
- to create an appropriate Makefile and config.h. If leafnode
- cannot find your PCRE, it is probably an old version
- without pcre-config, or pcre-config is not in your path.
- Either add the directory containing pcre-config to your
- $PATH, or call configure like this (we assume PCRE is in
- /opt/pcre-3.9):
-<pre>
- env CPPFLAGS="-I/opt/pcre-3.9" LDFLAGS="-L/opt/pcre-3.9" /bin/sh ./configure
-</pre>
- NOTE: on some machines, when PCRE is linked against a
- shared library, you will need to add /opt/pcre-3.9 to
- LD_LIBRARY_PATH or to /etc/ld.so.conf.
-
- <p>The configure script can take some flags (replace DIR by
- a directory name, FILE by a file name):</p>
-<pre>
---enable-spooldir=DIR To override the default /var/spool/news,
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <meta name="author" content="Matthias Andree" />
+ <title>Leafnode manual</title>
+ <style>
+ html {
+ color: #1a1a1a;
+ background-color: #fdfdfd;
+ }
+ body {
+ margin: 0 auto;
+ max-width: 36em;
+ padding-left: 50px;
+ padding-right: 50px;
+ padding-top: 50px;
+ padding-bottom: 50px;
+ hyphens: auto;
+ overflow-wrap: break-word;
+ text-rendering: optimizeLegibility;
+ font-kerning: normal;
+ }
+ @media (max-width: 600px) {
+ body {
+ font-size: 0.9em;
+ padding: 12px;
+ }
+ h1 {
+ font-size: 1.8em;
+ }
+ }
+ @media print {
+ html {
+ background-color: white;
+ }
+ body {
+ background-color: transparent;
+ color: black;
+ font-size: 12pt;
+ }
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2, h3, h4 {
+ page-break-after: avoid;
+ }
+ }
+ p {
+ margin: 1em 0;
+ }
+ a {
+ color: #1a1a1a;
+ }
+ a:visited {
+ color: #1a1a1a;
+ }
+ img {
+ max-width: 100%;
+ }
+ svg {
+ height: auto;
+ max-width: 100%;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ margin-top: 1.4em;
+ }
+ h5, h6 {
+ font-size: 1em;
+ font-style: italic;
+ }
+ h6 {
+ font-weight: normal;
+ }
+ ol, ul {
+ padding-left: 1.7em;
+ margin-top: 1em;
+ }
+ li > ol, li > ul {
+ margin-top: 0;
+ }
+ blockquote {
+ margin: 1em 0 1em 1.7em;
+ padding-left: 1em;
+ border-left: 2px solid #e6e6e6;
+ color: #606060;
+ }
+ code {
+ font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
+ font-size: 85%;
+ margin: 0;
+ hyphens: manual;
+ }
+ pre {
+ margin: 1em 0;
+ overflow: auto;
+ }
+ pre code {
+ padding: 0;
+ overflow: visible;
+ overflow-wrap: normal;
+ }
+ .sourceCode {
+ background-color: transparent;
+ overflow: visible;
+ }
+ hr {
+ border: none;
+ border-top: 1px solid #1a1a1a;
+ height: 1px;
+ margin: 1em 0;
+ }
+ table {
+ margin: 1em 0;
+ border-collapse: collapse;
+ width: 100%;
+ overflow-x: auto;
+ display: block;
+ font-variant-numeric: lining-nums tabular-nums;
+ }
+ table caption {
+ margin-bottom: 0.75em;
+ }
+ tbody {
+ margin-top: 0.5em;
+ border-top: 1px solid #1a1a1a;
+ border-bottom: 1px solid #1a1a1a;
+ }
+ th {
+ border-top: 1px solid #1a1a1a;
+ padding: 0.25em 0.5em 0.25em 0.5em;
+ }
+ td {
+ padding: 0.125em 0.5em 0.25em 0.5em;
+ }
+ header {
+ margin-bottom: 4em;
+ text-align: center;
+ }
+ #TOC li {
+ list-style: none;
+ }
+ #TOC ul {
+ padding-left: 1.3em;
+ }
+ #TOC > ul {
+ padding-left: 0;
+ }
+ #TOC a:not(:hover) {
+ text-decoration: none;
+ }
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ div.columns{display: flex; gap: min(4vw, 1.5em);}
+ div.column{flex: auto; overflow-x: auto;}
+ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
+ /* The extra [class] is a hack that increases specificity enough to
+ override a similar rule in reveal.js */
+ ul.task-list[class]{list-style: none;}
+ ul.task-list li input[type="checkbox"] {
+ font-size: inherit;
+ width: 0.8em;
+ margin: 0 0.8em 0.2em -1.6em;
+ vertical-align: middle;
+ }
+ .display.math{display: block; text-align: center; margin: 0.5rem auto;}
+ </style>
+</head>
+<body>
+<header id="title-block-header">
+<h1 class="title">Leafnode manual</h1>
+<p class="author">Matthias Andree</p>
+<p class="date">2021-07-09T17:28:07</p>
+</header>
+<nav id="TOC" role="doc-toc">
+<ul>
+<li><a href="#overview" id="toc-overview">1. OVERVIEW</a></li>
+<li><a href="#installation" id="toc-installation">2.
+INSTALLATION</a></li>
+<li><a href="#update-from-previous-versions"
+id="toc-update-from-previous-versions">3. UPDATE FROM PREVIOUS
+VERSIONS</a></li>
+<li><a href="#update-from-versions-2.0b8_ma8"
+id="toc-update-from-versions-2.0b8_ma8">3.1 Update from versions <
+2.0b8_ma8</a></li>
+<li><a href="#update-from-versions-2.0"
+id="toc-update-from-versions-2.0">3.2 Update from versions <
+2.0</a></li>
+<li><a href="#update-from-versions-1.9.3"
+id="toc-update-from-versions-1.9.3">3.3 Update from versions <
+1.9.3</a></li>
+<li><a href="#update-from-versions-1.6"
+id="toc-update-from-versions-1.6">3.4 Update from versions <
+1.6</a></li>
+<li><a href="#files-and-directories" id="toc-files-and-directories">4.
+FILES AND DIRECTORIES</a></li>
+<li><a href="#the-main-configuration-file"
+id="toc-the-main-configuration-file">4.1. The main configuration
+file</a></li>
+<li><a href="#the-filter-file" id="toc-the-filter-file">4.2. The filter
+file</a></li>
+<li><a href="#local-newsgroups" id="toc-local-newsgroups">5. LOCAL
+NEWSGROUPS</a></li>
+<li><a href="#deinstallation" id="toc-deinstallation">6.
+DEINSTALLATION</a></li>
+<li><a href="#frequently-asked-questions"
+id="toc-frequently-asked-questions">7. FREQUENTLY ASKED
+QUESTIONS</a></li>
+<li><a href="#copyright" id="toc-copyright">8. COPYRIGHT</a></li>
+</ul>
+</nav>
+<hr />
+<h3 id="overview">1. OVERVIEW</h3>
+<p>Leafnode is a USENET software package designed for small sites, with
+a few tens of readers and only a slow link to the net. It is developed
+on Linux, but has been reported to compile and run also under any BSD
+flavour, Solaris and Irix.</p>
+<p>The Leafnode package consists of several programs, three essential
+ones and several add-ons.</p>
+<ul>
+<li><strong>Leafnode</strong> is the NNTP server. It talks to the normal
+news clients, and stores readership data.</li>
+<li><strong>Fetchnews</strong> is the NNTP news-gatherer. It looks at
+the readership data Leafnode stores, and selects what groups to pull
+news from. It also transfers your contributions to one or more upstream
+servers.</li>
+<li><strong>Texpire</strong> is responsible for deleting old and
+uninteresting news. It deletes all discussion threads that are old and
+not recently read.</li>
+</ul>
+<p>These are the additional tools:</p>
+<ul>
+<li><strong>Applyfilter</strong> lets you delete articles from your
+local news spool which fit a certain pattern.</li>
+<li><strong>Checkgroups</strong> inserts the titles of newsgroups into
+the newsgroup database.</li>
+<li><strong>Newsq</strong> shows which news are waiting to be
+transferred to your upstream server(s).</li>
+<li><strong>Rnews</strong> sorts an UUCP batch or articles downloaded by
+other means into the news spool.</li>
+</ul>
+<p>Only groups that someone has been reading in the past week are
+fetched from the upstream NNTP server. When someone stops reading a
+group, fetchnews will stop reading that group a week later (this is the
+default which can be configured), and when someone starts reading a
+group, fetchnews will grab all the articles it can in that group the
+next time it runs.</p>
+<p>Leafnode's distinguishing features are:</p>
+<ul>
+<li>Leafnode is written with the novice user in mind. It is very easy to
+install and configure and requires no manual intervention once
+installed. Leafnode tries very hard to recover automatically from error
+situations.</li>
+<li>Compared to other servers, leafnode uses very little disk space and
+bandwidth. Of course this also depends on how many users are accessing
+your server and is probably not true for 300-user sites.</li>
+<li>The newsspool can be easily manipulated by small scripts because it
+is maintained in plain file format. Some tiny examples are in the
+subdirectory tools/ .</li>
+</ul>
+<p>The current version of leafnode is available from <a
+href="http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/"
+class="uri">http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/</a></p>
+<p>There is also a leafnode mailing list. Send mail to</p>
+<p>leafnode-list-subscribe at dt.e-technik.tu-dortmund.de</p>
+<p>to subscribe, or visit <a
+href="http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/">http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/.</a></p>
+<hr />
+<h3 id="installation">2. INSTALLATION</h3>
+<ol type="1">
+<li><p>Leafnode does not currently work on SunOS 4.</p></li>
+<li><p>Leafnode depends on the PCRE regular-expression matching library.
+It ships as binary package with many current Linux/BSD distributions,
+and is also available as port for *BSD (Debian users: try "apt-get
+install libpcre3 libpcre3-dev"). Just install the binary package for
+your operating system if it ships with one. If it comes without PCRE,
+don't worry, the installation from source is simple. To install PCRE, do
+(AS NORMAL USER, NOT AS root!)</p>
+<ol type="1">
+<li>Download the current PCRE version from <a
+href="http://www.pcre.org/" class="uri">http://www.pcre.org/</a>.</li>
+<li>Unpack PCRE: gunzip -c | tar xvf -</li>
+<li>cd pcre-3.9<br />
+<em>(This is for PCRE-3.9, for other versions, replace that by the path
+that tar wrote when unpacking.)</em></li>
+<li>type <code>./configure && make</code><br />
+<em>there should be no errors</em></li>
+<li>become root</li>
+<li>as root, do <code>make install</code></li>
+<li>as root, do <code>ldconfig</code><br />
+<em>this may not be needed on all systems, but better safe than
+sorry</em></li>
+<li>exit your root shell</li>
+<li>DONE!</li>
+</ol></li>
+<li><p>Leafnode uses GNU autoconf to determine the configuration of the
+machine it will be compiled on. It also uses GNU automake for all the
+standard features that GNU automake offers. Type (AS NORMAL USER, NOT AS
+root!)</p>
+<pre><code> /bin/sh ./configure</code></pre>
+<p>to create an appropriate Makefile and config.h. If leafnode cannot
+find your PCRE, it is probably an old version without pcre-config, or
+pcre-config is not in your path. Either add the directory containing
+pcre-config to your $PATH, or call configure like this (we assume PCRE
+is in /opt/pcre-3.9):</p>
+<pre><code> env CPPFLAGS="-I/opt/pcre-3.9" LDFLAGS="-L/opt/pcre-3.9" /bin/sh ./configure</code></pre>
+<p>NOTE: on some machines, when PCRE is linked against a shared library,
+you will need to add /opt/pcre-3.9 to LD_LIBRARY_PATH or to
+/etc/ld.so.conf.</p>
+<p>The configure script can take some flags (replace DIR by a directory
+name, FILE by a file name):</p>
+<pre><code>--enable-spooldir=DIR To override the default /var/spool/news,
where leafnode puts its news spool unless
--localstatedir is given or --prefix is given and
different from /usr, in the latter case, the
@@ -237,173 +333,103 @@
needed for normal operation. This option requires
dmalloc, available from http://dmalloc.com/.
---with-runas-user=USER Lets leafnode run as user USER, defaults to "news".
+--with-runas-user=USER Lets leafnode run as user USER, defaults to "news".
--with-pam Enable PAM (pluggable authentication modules)
- support.
-</pre>
- <strong>BEWARE:</strong> Former versions always defaulted
- their sysconfdir to /etc/leafnode. Current versions only
- override sysconfdir to /etc/leafnode if configured without
- --prefix or with --prefix=/usr. That way, if
- --prefix=/opt/leafnode, the sysconfdir goes to
- /opt/leafnode/etc, which is more appropriate.
- </li>
-
- <li>
- Type
-<pre>
- make
-</pre>
- There should be no errors.
- </li>
-
- <li>Become root.</li>
-
- <li>As root, create user and group "news" (or the configured
- user and group) if you don't have those already.</li>
-
- <li>
- Type
-<pre>
- make install
-</pre>
- If you prefer an installation with the binaries stripped
- free of symbols, use
-<pre>
- make install-strip
-</pre>
- instead.<br>
- <i>For packagers: if you want to prefix all installation
- paths with a common prefix, e. g. to support RPM's
- BuildRoot feature: You can use <kbd>make install-strip
- DESTDIR=/var/tmp/leafnode-root</kbd>.</i>
- </li>
-
- <li>
- Configure syslog so it captures news logging, most systems
- do NOT log news stuff by default.
-
- <ol>
- <li>
- Edit /etc/syslog.conf. Unless you already have
- news.info logging, add a line like this:
-<pre>
-news.info /var/log/news
-</pre>
-
- <p>Note that if you want to send in a bug report and
- need debug logging, you'll have to replace news.info by
- news.debug (and send a SIGHUP, as shown below).</p>
-
- <p>Your syslog.conf may already suggest a different
- file. If your syslog.conf suggests news.info logging,
- use that, but be sure to activate it in case it's
- commented out: remove leading hash marks and white
- space.</p>
-
- <p>Also make sure you use TABs between news.info and
- the path.</p>
- </li>
-
- <li>Create the /var/log/news file, type: <kbd>touch
- /var/log/news</kbd>.</li>
-
- <li>Send syslogd a HUP signal. <kbd>kill -1 `cat
- /var/run/syslogd.pid`</kbd> usually does the job, if it
- doesn't, retry with "syslogd" replaced by "syslog".</li>
- </ol>
- </li>
-
- <li>If you are updating leafnode from a previous version, see
- the section "Updating" below.</li>
-
- <li>
- Edit $(LIBDIR)/config. $(LIBDIR) defaults to /etc/leafnode,
- but can be adjusted at build time. For documentation, see
- below or config.example and leafnode(8). <strong>Mandatory
- edits to the config file are:</strong>
-
- <ul>
- <li>server -- this must point to your upstream news
- server.</li>
-
- <li>expire -- how many days will downloaded articles
- remain in the spool.</li>
- </ul>
- Make sure the environment variable $NNTPSERVER or
- /etc/nntpserver points to your own host so clients will
- talk to leafnode rather than try to go to the upstream
- server.
-
- <p>If you want to use filtering of the incoming spool, see
- the section on the filter file below.</p>
- </li>
-
- <li>
- the systemd/ directory of the tarball contains example service and
- timer files that can be used on systemd-based systems <strong>instead of</strong> the
- inetd/xinetd and cron[tab] settings shown below.</li>
-
- <li>
- Set up a cron job (as user "root" or "news") to run texpire
- every night or maybe every week. Here is my crontab line,
- which runs nightly:
-<pre>
-0 4 * * * /usr/local/sbin/texpire
-</pre>
- I did "crontab -u news -e" as root to edit the crontab
- file, and added this line. Substituting "1" for the third
- "*", thus:
-<pre>
-0 4 * * 1 /usr/local/sbin/texpire
-</pre>
- tells cron to run texpire at 4am every Monday morning.
- </li>
-
- <li>Make sure fetchnews is run at the appropriate time. If
- you have a full-time link, run it out of cron (as "news"
- again); if not, run it when your connection to the net is
- established. If it is run as root it will change to user
- "news". If you use PPP, you can run fetchnews from
- /etc/ppp/ip-up (or /etc/ppp/ip-up.local, depending on your
- OS).</li>
-
- <li>We assume that you have tcpd installed, it ships with
- most distributions. If you don't have it, fetch it from
- ftp://ftp.porcupine.org/pub/security/, it's in tcp_wrappers,
- and install it. It's preferable if you compile it with
- -DHOSTS_OPTIONS, and the examples below assume you did.</li>
-
- <li>
- Choose either of these alternatives:
-
- <ul>
- <li>
- Alternative #1: If your system uses inetd (most
- commercial unices, *BSD). Edit /etc/inetd.conf so that
- $(BINDIR)/leafnode is executed for incoming NNTP
- connections. Here is my inetd.conf line:
-<pre>
-nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
-</pre>
- <i>Note: some systems install tcpd to a different path,
- but it's uncommon. Change the first path accordingly if
- your tcpd resides in /usr/etc or /usr/lbin.</i> After
- these changes, force inetd to read the changed
- configuration file by sending it the HANGUP signal. To
- achieve this, issue the following command (as root):
-<pre>
-kill -HUP `cat /var/run/inetd.pid`
-</pre>
- </li>
-
- <li>
- Alternative #2: If your system has xinetd instead. Add
- this to your xinetd.conf (this example assumes xinetd
- 2.3.3 or newer):
-<pre>
-service nntp
+ support.</code></pre>
+<p><strong>BEWARE:</strong> Former versions always defaulted their
+sysconfdir to /etc/leafnode. Current versions only override sysconfdir
+to /etc/leafnode if configured without --prefix or with --prefix=/usr.
+That way, if --prefix=/opt/leafnode, the sysconfdir goes to
+/opt/leafnode/etc, which is more appropriate.</p></li>
+<li><p>Type</p>
+<pre><code> make</code></pre>
+<p>There should be no errors.</p></li>
+<li><p>Become root.</p></li>
+<li><p>As root, create user and group "news" (or the configured user and
+group) if you don't have those already.</p></li>
+<li><p>Type</p>
+<pre><code> make install</code></pre>
+<p>If you prefer an installation with the binaries stripped free of
+symbols, use</p>
+<pre><code> make install-strip</code></pre>
+<p>instead.<br />
+<em>For packagers: if you want to prefix all installation paths with a
+common prefix, e. g. to support RPM's BuildRoot feature: You can use
+<code>make install-strip DESTDIR=/var/tmp/leafnode-root</code>.</em></p></li>
+<li><p>Configure syslog so it captures news logging, most systems do NOT
+log news stuff by default.</p>
+<ol type="1">
+<li><p>Edit /etc/syslog.conf. Unless you already have news.info logging,
+add a line like this:</p>
+<pre><code>news.info /var/log/news</code></pre>
+<p>Note that if you want to send in a bug report and need debug logging,
+you'll have to replace news.info by news.debug (and send a SIGHUP, as
+shown below).</p>
+<p>Your syslog.conf may already suggest a different file. If your
+syslog.conf suggests news.info logging, use that, but be sure to
+activate it in case it's commented out: remove leading hash marks and
+white space.</p>
+<p>Also make sure you use TABs between news.info and the path.</p></li>
+<li><p>Create the /var/log/news file, type:
+<code>touch /var/log/news</code>.</p></li>
+<li><p>Send syslogd a HUP signal. <code>kill -1 \</code>cat
+/var/run/syslogd.pid`` usually does the job, if it doesn't, retry with
+"syslogd" replaced by "syslog".</p></li>
+</ol></li>
+<li><p>If you are updating leafnode from a previous version, see the
+section "Updating" below.</p></li>
+<li><p>Edit $(LIBDIR)/config. $(LIBDIR) defaults to /etc/leafnode, but
+can be adjusted at build time. For documentation, see below or
+config.example and leafnode(8). <strong>Mandatory edits to the config
+file are:</strong></p>
+<ul>
+<li>server -- this must point to your upstream news server.</li>
+<li>expire -- how many days will downloaded articles remain in the
+spool.</li>
+</ul>
+<p>Make sure the environment variable $NNTPSERVER or /etc/nntpserver
+points to your own host so clients will talk to leafnode rather than try
+to go to the upstream server.</p>
+<p>If you want to use filtering of the incoming spool, see the section
+on the filter file below.</p></li>
+<li><p>the systemd/ directory of the tarball contains example service
+and timer files that can be used on systemd-based systems
+<strong>instead of</strong> the inetd/xinetd and cron[tab] settings
+shown below.</p></li>
+<li><p>Set up a cron job (as user "root" or "news") to run texpire every
+night or maybe every week. Here is my crontab line, which runs
+nightly:</p>
+<pre><code>0 4 * * * /usr/local/sbin/texpire</code></pre>
+<p>I did "crontab -u news -e" as root to edit the crontab file, and
+added this line. Substituting "1" for the third "*", thus:</p>
+<pre><code>0 4 * * 1 /usr/local/sbin/texpire</code></pre>
+<p>tells cron to run texpire at 4am every Monday morning.</p></li>
+<li><p>Make sure fetchnews is run at the appropriate time. If you have a
+full-time link, run it out of cron (as "news" again); if not, run it
+when your connection to the net is established. If it is run as root it
+will change to user "news". If you use PPP, you can run fetchnews from
+/etc/ppp/ip-up (or /etc/ppp/ip-up.local, depending on your OS).</p></li>
+<li><p>We assume that you have tcpd installed, it ships with most
+distributions. If you don't have it, fetch it from
+ftp://ftp.porcupine.org/pub/security/, it's in tcp_wrappers, and install
+it. It's preferable if you compile it with -DHOSTS_OPTIONS, and the
+examples below assume you did.</p></li>
+<li><p>Choose either of these alternatives:</p>
+<ul>
+<li><p>Alternative #1: If your system uses inetd (most commercial
+unices, *BSD). Edit /etc/inetd.conf so that $(BINDIR)/leafnode is
+executed for incoming NNTP connections. Here is my inetd.conf line:</p>
+<pre><code>nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode</code></pre>
+<p><em>Note: some systems install tcpd to a different path, but it's
+uncommon. Change the first path accordingly if your tcpd resides in
+/usr/etc or /usr/lbin.</em> After these changes, force inetd to read the
+changed configuration file by sending it the HANGUP signal. To achieve
+this, issue the following command (as root):</p>
+<pre><code>kill -HUP `cat /var/run/inetd.pid`</code></pre></li>
+<li><p>Alternative #2: If your system has xinetd instead. Add this to
+your xinetd.conf (this example assumes xinetd 2.3.3 or newer):</p>
+<pre><code>service nntp
{
flags = NAMEINARGS NOLIBWRAP
socket_type = stream
@@ -414,484 +440,353 @@ service nntp
server_args = /usr/local/sbin/leafnode
instances = 7
per_source = 3
-}
-</pre>
- Then send xinetd an USR2 signal to make it reread its
- configuration. See the <b>xinetd.conf</b>(5) manual
- page for details. <i>Note: some systems install tcpd to
- a different path, but it's uncommon. Change the first
- path accordingly if your tcpd resides in /usr/etc or
- /usr/lbin.</i>
- </li>
- </ul>
- </li>
-
- <li>
- Write the following into /etc/hosts.deny:
-<pre>
-leafnode: ALL
-</pre>
- and into /etc/hosts.allow:
-<pre>
-leafnode: 127.0.0.1
-</pre>
- to protect your news server from abuse. If you want to make
- leafnode accessible to additional IP numbers/domains, add
- them in /etc/hosts.allow in the format described above. See
- hosts_access(5) and hosts_options(5) (if applicable) for
- more information about tcp wrappers.
- </li>
-
- <li>
- <i>(optional)</i> If you want to allow read-only access,
- you can set the NOPOSTING environment variable, for
- example, put this into /etc/hosts.allow:
-<pre>
-leafnode: 192.168.0.4: setenv NOPOSTING "You may only read."
-</pre>
- The contents of this variable are printed at the end of the
- banner, with control characters (as per iscntrl(3))
- replaced by an underscore.
- </li>
-
- <li>
- <i>(optional)</i> If you want to allow clients read access
- to local or global subscribed groups, but do not want to
- allow them to subscribe to new groups, you can set the
- NOSUBSCRIBE environment variable. When this variable is
- set, a client will never see a pseudo article. For example,
- if clients from 127.0.0.1 and 192.168.0.42 may subscribe
- new groups, and all other 192.168.0.* hosts may read the
- existing groups but not subscribe to new groups, put this
- into /etc/hosts.allow (this assumes libwrap/tcpd have been
- compiled with -DPROCESS_OPTIONS):
-<pre>
-leafnode: 127.0.0.1 192.168.0.42: ALLOW
+}</code></pre>
+<p>Then send xinetd an USR2 signal to make it reread its configuration.
+See the <strong>xinetd.conf</strong>(5) manual page for details.
+<em>Note: some systems install tcpd to a different path, but it's
+uncommon. Change the first path accordingly if your tcpd resides in
+/usr/etc or /usr/lbin.</em></p></li>
+</ul></li>
+<li><p>Write the following into /etc/hosts.deny:</p>
+<pre><code>leafnode: ALL</code></pre>
+<p>and into /etc/hosts.allow:</p>
+<pre><code>leafnode: 127.0.0.1</code></pre>
+<p>to protect your news server from abuse. If you want to make leafnode
+accessible to additional IP numbers/domains, add them in
+/etc/hosts.allow in the format described above. See hosts_access(5) and
+hosts_options(5) (if applicable) for more information about tcp
+wrappers.</p></li>
+<li><p><em>(optional)</em> If you want to allow read-only access, you
+can set the NOPOSTING environment variable, for example, put this into
+/etc/hosts.allow:</p>
+<pre><code>leafnode: 192.168.0.4: setenv NOPOSTING "You may only read."</code></pre>
+<p>The contents of this variable are printed at the end of the banner,
+with control characters (as per iscntrl(3)) replaced by an
+underscore.</p></li>
+<li><p><em>(optional)</em> If you want to allow clients read access to
+local or global subscribed groups, but do not want to allow them to
+subscribe to new groups, you can set the NOSUBSCRIBE environment
+variable. When this variable is set, a client will never see a pseudo
+article. For example, if clients from 127.0.0.1 and 192.168.0.42 may
+subscribe new groups, and all other 192.168.0.* hosts may read the
+existing groups but not subscribe to new groups, put this into
+/etc/hosts.allow (this assumes libwrap/tcpd have been compiled with
+-DPROCESS_OPTIONS):</p>
+<pre><code>leafnode: 127.0.0.1 192.168.0.42: ALLOW
leafnode: 192.168.0.0/255.255.255.0: setenv NOSUBSCRIBE 1
-leafnode: ALL: DENY
-</pre>
- </li>
-
- <li>Run fetchnews. The first run will take some time since
- fetchnews reads a list of all newsgroups from your upstream
- server. In the worst case, this can take up to 60 minutes,
- depending on how many newsgroups your provider offers and how
- reliable your modem connection is. To see fetchnews working,
- run it with -vvv.</li>
-
- <li>Run texpire. It will create directories missing after the
- first install.</li>
-
- <li>Exit your root shell.</li>
-
- <li>
- Read news using an NNTP client (with $NNTPSERVER or
- /etc/nntpserver pointing to your own host). Select the
- groups you want to read in the future. You will find them
- empty except a default article. Reading this article is
- necessary with some newsreaders to select the groups for
- further fetching.
-
- <p>After this, you should have empty files in
- /var/spool/news/interesting.groups/ for every group you
- want to read.</p>
- </li>
-
- <li>Become root and run fetchnews again, then exit your root
- shell. This run should pick up all the groups you want to
- read.</li>
- </ol>
- <hr>
-
- <h3 class="c2">3. UPDATE FROM PREVIOUS VERSIONS</h3>
-
- <h3 class="c2">3.1 Update from versions < 2.0b8_ma8</h3>
-
- <p>The local.groups and groupinfo files and the hash function
- for message.id have changed from any former version to
- 2.0b8_ma8.</p>
-
- <p><strong>IMPORTANT:</strong> To fix the "remote" groups, run
- <kbd>fetchnews -f</kbd> -- it will take some time, because it
- refetches the whole active file, but that's needed anyhow to
- figure the group status (posting allowed/not allowed/moderated
- group).</p>
-
- <p>To fix <strong>local.groups</strong>, if you have perl
- installed:</p>
-<pre>
- perl -ple 's /\s+/\ty\t/' -i.bak /etc/leafnode/local.groups
-</pre>
- This will make a backup of your original
- /etc/leafnode/local.groups in /etc/leafnode/local.groups.bak.
-
- <p>If you don't have Perl, use a text editor that preserves
- HTAB characters, change all while space to TAB and insert an
- additional field reading just y:</p>
-
- <blockquote>
- Before: local.test some test group<br>
- After: local.testTAByTABsome test group
- </blockquote>
- <br>
- Use the real TAB character rather than TAB. <br>
- To fix the spool for message.ids, run <kbd>texpire -r</kbd>
- <br>
- The changes written in section 3.2 below also apply.
-
- <h3 class="c2">3.2 Update from versions < 2.0</h3>
-
- <p>From 1.9.x to 2.0 there were some changes to options in the
- main configuration file. The options "maxage", "maxlines",
- "minlines", "maxbytes" and "maxcrosspost" have become obsolete
- in the main configuration file and have to be specified in the
- filter file instead. The advantage of this is that you can do
- much finer selection on these criteria now.</p>
-
- <p>To replace, for example, a "maxage = 5" specification in the
- main configuration file, you should add the following to your
- filter file:</p>
-<pre>
-newsgroups = .*
+leafnode: ALL: DENY</code></pre></li>
+<li><p>Run fetchnews. The first run will take some time since fetchnews
+reads a list of all newsgroups from your upstream server. In the worst
+case, this can take up to 60 minutes, depending on how many newsgroups
+your provider offers and how reliable your modem connection is. To see
+fetchnews working, run it with -vvv.</p></li>
+<li><p>Run texpire. It will create directories missing after the first
+install.</p></li>
+<li><p>Exit your root shell.</p></li>
+<li><p>Read news using an NNTP client (with $NNTPSERVER or
+/etc/nntpserver pointing to your own host). Select the groups you want
+to read in the future. You will find them empty except a default
+article. Reading this article is necessary with some newsreaders to
+select the groups for further fetching.</p>
+<p>After this, you should have empty files in
+/var/spool/news/interesting.groups/ for every group you want to
+read.</p></li>
+<li><p>Become root and run fetchnews again, then exit your root shell.
+This run should pick up all the groups you want to read.</p></li>
+</ol>
+<hr />
+<h3 id="update-from-previous-versions">3. UPDATE FROM PREVIOUS
+VERSIONS</h3>
+<h3 id="update-from-versions-2.0b8_ma8">3.1 Update from versions <
+2.0b8_ma8</h3>
+<p>The local.groups and groupinfo files and the hash function for
+message.id have changed from any former version to 2.0b8_ma8.</p>
+<p><strong>IMPORTANT:</strong> To fix the "remote" groups, run
+<code>fetchnews -f</code> -- it will take some time, because it
+refetches the whole active file, but that's needed anyhow to figure the
+group status (posting allowed/not allowed/moderated group).</p>
+<p>To fix <strong>local.groups</strong>, if you have perl installed:</p>
+<pre><code> perl -ple 's /\s+/\ty\t/' -i.bak /etc/leafnode/local.groups</code></pre>
+<p>This will make a backup of your original /etc/leafnode/local.groups
+in /etc/leafnode/local.groups.bak.</p>
+<p>If you don't have Perl, use a text editor that preserves HTAB
+characters, change all while space to TAB and insert an additional field
+reading just y:</p>
+<blockquote>
+<p>Before: local.test some test group<br />
+After: local.testTAByTABsome test group</p>
+</blockquote>
+<p><br />
+Use the real TAB character rather than TAB.<br />
+To fix the spool for message.ids, run <code>texpire -r</code><br />
+The changes written in section 3.2 below also apply.</p>
+<h3 id="update-from-versions-2.0">3.2 Update from versions < 2.0</h3>
+<p>From 1.9.x to 2.0 there were some changes to options in the main
+configuration file. The options "maxage", "maxlines", "minlines",
+"maxbytes" and "maxcrosspost" have become obsolete in the main
+configuration file and have to be specified in the filter file instead.
+The advantage of this is that you can do much finer selection on these
+criteria now.</p>
+<p>To replace, for example, a "maxage = 5" specification in the main
+configuration file, you should add the following to your filter
+file:</p>
+<pre><code>newsgroups = .*
maxage = 5
-action = kill
-</pre>
-
- <p>The leafnode programs will issue warnings if they encounter
- obsolete specifications in the main config file.</p>
-
- <h3 class="c2">3.3 Update from versions < 1.9.3</h3>
-
- <p>From version 1.9.3 on, the groupinfo file is sorted in a
- case-insensitive manner. To update correctly, do a "make
- update" as root after you have successfully completed "make
- install". This will re-sort the groupinfo file. The old
- groupinfo file will be stored as groupinfo.old just in case
- something goes wrong. You also have to change your main config
- file manually as described in the previous section.</p>
-
- <h3 class="c2">3.4 Update from versions < 1.6</h3>
-
- <p>Between leafnode-1.6alpha and leafnode-1.6, the format of
- the groupinfo file changed and some files moved to other
- places. To update correctly, do a "make update" as root after
- you have successfully completed "make install". This will
- reformat the groupinfo file and move the other files into the
- correct places. The old groupinfo file will be stored as
- groupinfo.old just in case something goes wrong. You also have
- to change your main config file manually as described in the
- section "Update from versions < 2.0".</p>
- <hr>
-
- <h3 class="c2">4. FILES AND DIRECTORIES</h3>
-
- <p>Leafnode puts its files in three separate directories: The
- spool directory, the library directory, and the binaries
- directory. All directories can be changed at compile time.</p>
-
- <p>In the spool directory you find the stored news, the active
- file and some other short-lived configuration file. It defaults
- to /var/spool/news and can be changed at compilation time.
- There are some special directories here; see the leafnode(8)
- man page.</p>
-
- <p>The library directory contains long-lived configuration
- files. It defaults to /etc/leafnode.</p>
-
- <p>The binaries directory, /usr/local/sbin by default, contains
- the executable programs applyfilter, texpire, fetchnews and
- leafnode.</p>
-
- <p>The user directory, /usr/local/bin by default, contains the
- newsq program.</p>
-
- <h3 class="c2">4.1. The main configuration file</h3>
-
- <p>The main configuration file contains settings important for
- all programs of the leafnode suite. It defaults to
- /etc/leafnode/config, but several configuration files can be
- used at once by employing the -F switch of the programs.</p>
-
- <p>The file contains two mandatory and a number of optional
- parameters.</p>
-
- <p>NOTE: Global options must come first, server-specific
- options below the server = lines.</p>
-
- <p class="c4">Mandatory parameters</p>
-
- <blockquote>
- server = news02.bigprovider.com
- </blockquote>
- You have to specify at least one server (except if you want
- leafnode to serve as a local server only). Usually, this will
- be the news server of your provider. You can specify more than
- one server, and fetchnews will retrieve news from all of them,
- taking care not to transfer articles multiple times to your
- machine. Servers will be queried in the order specified in the
- config file.
-
- <blockquote>
- expire = 5
- </blockquote>
- This parameter determines how many days threads are kept on
- your hard disk. texpire will delete whole threads, not just
- single articles.
-
- <p class="c4">Server-specific optional parameters</p>
-
- <p>To configure interaction with the server somewhat, you can
- change the behaviour of fetchnews by setting several
- server-specific optional parameters. They have to be specified
- directly after the corresponding "server" statement. A new
- server statement in the config file will also allow new
- optional parameters.</p>
-
- <blockquote>
- username = myname<br>
- password = mypasswd
- </blockquote>
- If your upstream server requires a form of authentication, you
- can set your username and password here.
-
- <blockquote>
- timeout = 30
- </blockquote>
- It may happen that, due to a bad connection or other reasons,
- the server stops talking to you while you fetch news. The
- "timeout" parameter determines the number of seconds fetchnews
- is supposed to wait for a response from the server before
- giving up.
-
- <blockquote>
- nodesc = 1
- </blockquote>
- Some servers are unable to deliver descriptions of new
- newsgroups correctly. When fetchnews encounters such a server,
- it will print the warning
-
- <blockquote>
- server.name does not process LIST NEWSGROUPS news.group.name
- correctly: use nodesc
- </blockquote>
- To allow for shorter download times, you should in this case
- set "nodesc = 1" for that particular server in the
- configuration file.
-
- <blockquote>
- port = 8000
- </blockquote>
- Normally, fetchnews will try to retrieve news from port 119
- (the standard nntp port) of your upstream server. If the
- upstream server runs on a different port, you can specify it
- with this option.
-
- <p class="c4">General optional parameters</p>
-
- <blockquote>
- authenticate = <i>METHOD</i>
- </blockquote>
- Require that NNTP clients connecting to your leafnode
- authenticate themselves. The only method currently supported is
- <tt>internal</tt>. In this mode, leafnode expects a file
- <i>users</i> in its sysconfdir, /etc/leafnode/users by default,
- which has a simple format, one line per user, with the user
- name (which cannot contain spaces), then a colon, then the
- crypt(3) encrypted password. To generate these lines, you can
- use the Perl program <i>tools/make_pass.pl</i>, for example, if
- you want to add a user "enigma" with a password of "break!me",
- type:
-
- <blockquote>
- perl -wT tools/make_pass.pl 'enigma' 'break!me'
- </blockquote>
- and copy the resulting line to the <i>users</i> file.<br>
- htpasswd as shipped for Apache servers should also work if in
- crypt(3) mode.
-
- <blockquote>
- hostname = host.domain.country
- </blockquote>
- If the postings that you write do not have message IDs
- (generated by the newsreader), leafnode will generate a message
- ID for you. (It will never overwrite an already existing
- message ID.) Message IDs generated by leafnode feature ".ln"
- before the @ sign. The message ID contains the fully qualified
- hostname of your machine which may not always be what you want.
- In that case, you can override the use of the hostname by using
- the "hostname" option.
-
- <blockquote>
- create_all_links = 1
- </blockquote>
- Usually fetchnews will store articles only in the newsgroups
- which you consider interesting. Unfortunately, this makes it
- difficult to score for the number of newsgroups a message is
- posted to because the Newsgroups: header is not featured in the
- overview information; therefore you can determine the number of
- newsgroups an article is crossposted to only from the Xref:
- header. If "create_all_links" is set to 1, fetchnews will store
- articles in all newsgroups which they are posted to, making all
- these newsgroups turn up in the Xref: header.
-
- <blockquote>
- groupexpire = a.news.group 7
- </blockquote>
- As outlined above, texpire will expire threads after "expire"
- days. If you want to adjust expiry times for certain groups,
- you may use the "groupexpire" parameter to do just that. You
- can specify groups or use wildcards; for example
-
- <blockquote>
- groupexpire = *.announce 30
- </blockquote>
- will affect expiry times of all groups ending with ".announce".
-
-
- <blockquote>
- filterfile = /etc/leafnode/filters
- </blockquote>
- If you want to employ filtering on incoming messages, you have
- to specify the path where the filterfile can be found. The
- format of the filterfile is described in the next chapter.
-
- <blockquote>
- timeout_short = 2<br>
- timeout_long = 5
- </blockquote>
- These two parameters determine how quickly a group is
- unsubscribed by leafnode after you have stopped reading it. If
- you have looked into the group only once, subscription is
- stopped after "timeout_short" days; if you have read it more
- regularly, subscription is stopped after "timeout_long" days.
- (You can stop subscription immediately by removing the
- corresponding file in /var/spool/news/interesting.groups/).
-
- <blockquote>
- timeout_active = 90
- </blockquote>
- By default, fetchnews will re-read active files from the
- upstream server every 90 days. This interval can be changed by
- setting "timeout_active" to a different value. Re-reading the
- active file frequently will keep it a little bit smaller but
- will increase the on-line time.
-
- <blockquote>
- delaybody = 1
- </blockquote>
- This option switches fetchnews into a mode where only the
- headers of articles are fetched for visual inspection. Only the
- articles read in the newsreader will be retrieved the next time
- fetchnews is called. This can save a huge amount of disk space
- and download time but requires more manual intervention on the
- user side.
-
- <blockquote>
- groupdelaybody = some.news.group
- </blockquote>
- If you want delaybody mode only for selected groups, you can
- enable this download mode for one specific group. The global
- delaybody switch above causes all groups to be treated that
- way. Use one line per group pattern.
-
- <blockquote>
- debugmode = 260
- </blockquote>
- This option forces the leafnode programs into logging lots of
- information via the syslog daemon. It is only useful if you
- want to hunt down bugs. See config.example for an explanation
- of the number here.
-
- <h3 class="c2">4.2. The filter file</h3>
-
- <p>The filter file format is currently described in
- fetchnews(5). Type man 5 filterfile or man -s 5 filterfile to
- see the description.</p>
- <hr>
-
- <h3 class="c2">5. LOCAL NEWSGROUPS</h3>
-
- <p>From version 2.0 on, Leafnode is able to handle local
- newsgroups. Local newsgroups are groups that exist only on your
- local server but not on upstream servers.</p>
-
- <p>To create a local newsgroup, you have to think of a
- newsgroup name which should not exist on any of your upstream
- servers. It is therefore a good idea to start a new top-level
- hierarchy. You should also make up a description for your
- newsgroup.</p>
-
- <p>If you choose a newsgroup name which exists already on an
- upstream server, the newsgroup is not treated as a local
- one.</p>
-
- <p>Next, you write the name, status and description into the
- file /etc/leafnode/local.groups using your preferred text
- editor, which must not mangle TABs to SPACEs. The file should
- consist of lines in the format</p>
-<pre>
-# Comment lines are allowed, with a hash at the beginning of a line.
+action = kill</code></pre>
+<p>The leafnode programs will issue warnings if they encounter obsolete
+specifications in the main config file.</p>
+<h3 id="update-from-versions-1.9.3">3.3 Update from versions <
+1.9.3</h3>
+<p>From version 1.9.3 on, the groupinfo file is sorted in a
+case-insensitive manner. To update correctly, do a "make update" as root
+after you have successfully completed "make install". This will re-sort
+the groupinfo file. The old groupinfo file will be stored as
+groupinfo.old just in case something goes wrong. You also have to change
+your main config file manually as described in the previous section.</p>
+<h3 id="update-from-versions-1.6">3.4 Update from versions < 1.6</h3>
+<p>Between leafnode-1.6alpha and leafnode-1.6, the format of the
+groupinfo file changed and some files moved to other places. To update
+correctly, do a "make update" as root after you have successfully
+completed "make install". This will reformat the groupinfo file and move
+the other files into the correct places. The old groupinfo file will be
+stored as groupinfo.old just in case something goes wrong. You also have
+to change your main config file manually as described in the section
+"Update from versions < 2.0".</p>
+<hr />
+<h3 id="files-and-directories">4. FILES AND DIRECTORIES</h3>
+<p>Leafnode puts its files in three separate directories: The spool
+directory, the library directory, and the binaries directory. All
+directories can be changed at compile time.</p>
+<p>In the spool directory you find the stored news, the active file and
+some other short-lived configuration file. It defaults to
+/var/spool/news and can be changed at compilation time. There are some
+special directories here; see the leafnode(8) man page.</p>
+<p>The library directory contains long-lived configuration files. It
+defaults to /etc/leafnode.</p>
+<p>The binaries directory, /usr/local/sbin by default, contains the
+executable programs applyfilter, texpire, fetchnews and leafnode.</p>
+<p>The user directory, /usr/local/bin by default, contains the newsq
+program.</p>
+<h3 id="the-main-configuration-file">4.1. The main configuration
+file</h3>
+<p>The main configuration file contains settings important for all
+programs of the leafnode suite. It defaults to /etc/leafnode/config, but
+several configuration files can be used at once by employing the -F
+switch of the programs.</p>
+<p>The file contains two mandatory and a number of optional
+parameters.</p>
+<p>NOTE: Global options must come first, server-specific options below
+the server = lines.</p>
+<p>Mandatory parameters</p>
+<blockquote>
+<p>server = news02.bigprovider.com</p>
+</blockquote>
+<p>You have to specify at least one server (except if you want leafnode
+to serve as a local server only). Usually, this will be the news server
+of your provider. You can specify more than one server, and fetchnews
+will retrieve news from all of them, taking care not to transfer
+articles multiple times to your machine. Servers will be queried in the
+order specified in the config file.</p>
+<blockquote>
+<p>expire = 5</p>
+</blockquote>
+<p>This parameter determines how many days threads are kept on your hard
+disk. texpire will delete whole threads, not just single articles.</p>
+<p>Server-specific optional parameters</p>
+<p>To configure interaction with the server somewhat, you can change the
+behaviour of fetchnews by setting several server-specific optional
+parameters. They have to be specified directly after the corresponding
+"server" statement. A new server statement in the config file will also
+allow new optional parameters.</p>
+<blockquote>
+<p>username = myname<br />
+password = mypasswd</p>
+</blockquote>
+<p>If your upstream server requires a form of authentication, you can
+set your username and password here.</p>
+<blockquote>
+<p>timeout = 30</p>
+</blockquote>
+<p>It may happen that, due to a bad connection or other reasons, the
+server stops talking to you while you fetch news. The "timeout"
+parameter determines the number of seconds fetchnews is supposed to wait
+for a response from the server before giving up.</p>
+<blockquote>
+<p>nodesc = 1</p>
+</blockquote>
+<p>Some servers are unable to deliver descriptions of new newsgroups
+correctly. When fetchnews encounters such a server, it will print the
+warning</p>
+<blockquote>
+<p>server.name does not process LIST NEWSGROUPS news.group.name
+correctly: use nodesc</p>
+</blockquote>
+<p>To allow for shorter download times, you should in this case set
+"nodesc = 1" for that particular server in the configuration file.</p>
+<blockquote>
+<p>port = 8000</p>
+</blockquote>
+<p>Normally, fetchnews will try to retrieve news from port 119 (the
+standard nntp port) of your upstream server. If the upstream server runs
+on a different port, you can specify it with this option.</p>
+<p>General optional parameters</p>
+<blockquote>
+<p>authenticate = <em>METHOD</em></p>
+</blockquote>
+<p>Require that NNTP clients connecting to your leafnode authenticate
+themselves. The only method currently supported is
+<code>internal</code>. In this mode, leafnode expects a file
+<em>users</em> in its sysconfdir, /etc/leafnode/users by default, which
+has a simple format, one line per user, with the user name (which cannot
+contain spaces), then a colon, then the crypt(3) encrypted password. To
+generate these lines, you can use the Perl program
+<em>tools/make_pass.pl</em>, for example, if you want to add a user
+"enigma" with a password of "break!me", type:</p>
+<blockquote>
+<p>perl -wT tools/make_pass.pl 'enigma' 'break!me'</p>
+</blockquote>
+<p>and copy the resulting line to the <em>users</em> file.<br />
+htpasswd as shipped for Apache servers should also work if in crypt(3)
+mode.</p>
+<blockquote>
+<p>hostname = host.domain.country</p>
+</blockquote>
+<p>If the postings that you write do not have message IDs (generated by
+the newsreader), leafnode will generate a message ID for you. (It will
+never overwrite an already existing message ID.) Message IDs generated
+by leafnode feature ".ln" before the @ sign. The message ID contains the
+fully qualified hostname of your machine which may not always be what
+you want. In that case, you can override the use of the hostname by
+using the "hostname" option.</p>
+<blockquote>
+<p>create_all_links = 1</p>
+</blockquote>
+<p>Usually fetchnews will store articles only in the newsgroups which
+you consider interesting. Unfortunately, this makes it difficult to
+score for the number of newsgroups a message is posted to because the
+Newsgroups: header is not featured in the overview information;
+therefore you can determine the number of newsgroups an article is
+crossposted to only from the Xref: header. If "create_all_links" is set
+to 1, fetchnews will store articles in all newsgroups which they are
+posted to, making all these newsgroups turn up in the Xref: header.</p>
+<blockquote>
+<p>groupexpire = a.news.group 7</p>
+</blockquote>
+<p>As outlined above, texpire will expire threads after "expire" days.
+If you want to adjust expiry times for certain groups, you may use the
+"groupexpire" parameter to do just that. You can specify groups or use
+wildcards; for example</p>
+<blockquote>
+<p>groupexpire = *.announce 30</p>
+</blockquote>
+<p>will affect expiry times of all groups ending with ".announce".</p>
+<blockquote>
+<p>filterfile = /etc/leafnode/filters</p>
+</blockquote>
+<p>If you want to employ filtering on incoming messages, you have to
+specify the path where the filterfile can be found. The format of the
+filterfile is described in the next chapter.</p>
+<blockquote>
+<p>timeout_short = 2<br />
+timeout_long = 5</p>
+</blockquote>
+<p>These two parameters determine how quickly a group is unsubscribed by
+leafnode after you have stopped reading it. If you have looked into the
+group only once, subscription is stopped after "timeout_short" days; if
+you have read it more regularly, subscription is stopped after
+"timeout_long" days. (You can stop subscription immediately by removing
+the corresponding file in /var/spool/news/interesting.groups/).</p>
+<blockquote>
+<p>timeout_active = 90</p>
+</blockquote>
+<p>By default, fetchnews will re-read active files from the upstream
+server every 90 days. This interval can be changed by setting
+"timeout_active" to a different value. Re-reading the active file
+frequently will keep it a little bit smaller but will increase the
+on-line time.</p>
+<blockquote>
+<p>delaybody = 1</p>
+</blockquote>
+<p>This option switches fetchnews into a mode where only the headers of
+articles are fetched for visual inspection. Only the articles read in
+the newsreader will be retrieved the next time fetchnews is called. This
+can save a huge amount of disk space and download time but requires more
+manual intervention on the user side.</p>
+<blockquote>
+<p>groupdelaybody = some.news.group</p>
+</blockquote>
+<p>If you want delaybody mode only for selected groups, you can enable
+this download mode for one specific group. The global delaybody switch
+above causes all groups to be treated that way. Use one line per group
+pattern.</p>
+<blockquote>
+<p>debugmode = 260</p>
+</blockquote>
+<p>This option forces the leafnode programs into logging lots of
+information via the syslog daemon. It is only useful if you want to hunt
+down bugs. See config.example for an explanation of the number here.</p>
+<h3 id="the-filter-file">4.2. The filter file</h3>
+<p>The filter file format is currently described in fetchnews(5). Type
+man 5 filterfile or man -s 5 filterfile to see the description.</p>
+<hr />
+<h3 id="local-newsgroups">5. LOCAL NEWSGROUPS</h3>
+<p>From version 2.0 on, Leafnode is able to handle local newsgroups.
+Local newsgroups are groups that exist only on your local server but not
+on upstream servers.</p>
+<p>To create a local newsgroup, you have to think of a newsgroup name
+which should not exist on any of your upstream servers. It is therefore
+a good idea to start a new top-level hierarchy. You should also make up
+a description for your newsgroup.</p>
+<p>If you choose a newsgroup name which exists already on an upstream
+server, the newsgroup is not treated as a local one.</p>
+<p>Next, you write the name, status and description into the file
+/etc/leafnode/local.groups using your preferred text editor, which must
+not mangle TABs to SPACEs. The file should consist of lines in the
+format</p>
+<pre><code># Comment lines are allowed, with a hash at the beginning of a line.
#
# However, no white space may precede the hash mark, and empty lines
# are not valid.
-news.group.name<TAB>status<TAB>description
-</pre>
- (replace <TAB> with a TAB character!)
-
- <p>The first column of each line is taken as the newsgroup
- name; the second as the status (y for "may be posted to", m for
- "moderated" -- see below for moderator configuration), the
- third column of the line is interpreted as description. For
- example, to set up a newsgroup "local.leafnode" which deals
- with Leafnode's internals, you would put a line</p>
-
- <blockquote>
- local.leafnode<TAB>y<TAB>Local leafnode user
- group
- </blockquote>
- into /etc/leafnode/local.groups. (If your configuration does
- not reside in /etc/leafnode, replace this part of the pathname
- with the appropriate directory.)
-
- <h4 class="c5">5.1 MODERATED NEWSGROUPS</h4>
-
- <p>From version 2.0 on, Leafnode also handles
- <strong>moderated</strong> newsgroups. These are newsgroups
- which only certain people may post into, and articles which a
- regular (non-moderator) user posts, are mailed to the
- moderator.</p>
-
- <p>External moderated newsgroups are handled by the upstream
- servers.</p>
-
- <p>To configure the moderators for <strong>local</strong>
- moderated groups, an INN-compatible "moderators" file is used.
- It is named /etc/leafnode/moderators and has the following
- format:</p>
-<pre>
-pattern:moderator
-</pre>
-
- <p>Empty lines and lines that start with a hash character (#)
- are considered comment lines and are ignored.</p>
-
- <p>The <strong>pattern</strong> is a normal wildmat pattern,
- which means that it's a SHELL pattern, the most useful
- character is the asterisk (*) which matches any sequence of
- characters. The moderator given on that line applies to all
- groups that the pattern matches. Should multiple lines match a
- group, the first match in the file "wins", the second and
- subsequent patterns are not taken into account. So put the more
- specific patterns first.</p>
-
- <p>The <strong>moderator</strong> is a regular internet mail
- address, with the exception that the first occurrence of "%s"
- is replaced with the newsgroup name, with dots (.) converted to
- dashes (-) for INN compatibility.</p>
-
- <p>Example:</p>
-<pre>
-# This is a comment line
+news.group.name<TAB>status<TAB>description</code></pre>
+<p>(replace <TAB> with a TAB character!)</p>
+<p>The first column of each line is taken as the newsgroup name; the
+second as the status (y for "may be posted to", m for "moderated" -- see
+below for moderator configuration), the third column of the line is
+interpreted as description. For example, to set up a newsgroup
+"local.leafnode" which deals with Leafnode's internals, you would put a
+line</p>
+<blockquote>
+<p>local.leafnode<TAB>y<TAB>Local leafnode user group</p>
+</blockquote>
+<p>into /etc/leafnode/local.groups. (If your configuration does not
+reside in /etc/leafnode, replace this part of the pathname with the
+appropriate directory.)</p>
+<h4 id="moderated-newsgroups">5.1 MODERATED NEWSGROUPS</h4>
+<p>From version 2.0 on, Leafnode also handles <strong>moderated</strong>
+newsgroups. These are newsgroups which only certain people may post
+into, and articles which a regular (non-moderator) user posts, are
+mailed to the moderator.</p>
+<p>External moderated newsgroups are handled by the upstream
+servers.</p>
+<p>To configure the moderators for <strong>local</strong> moderated
+groups, an INN-compatible "moderators" file is used. It is named
+/etc/leafnode/moderators and has the following format:</p>
+<pre><code>pattern:moderator</code></pre>
+<p>Empty lines and lines that start with a hash character (#) are
+considered comment lines and are ignored.</p>
+<p>The <strong>pattern</strong> is a normal wildmat pattern, which means
+that it's a SHELL pattern, the most useful character is the asterisk (*)
+which matches any sequence of characters. The moderator given on that
+line applies to all groups that the pattern matches. Should multiple
+lines match a group, the first match in the file "wins", the second and
+subsequent patterns are not taken into account. So put the more specific
+patterns first.</p>
+<p>The <strong>moderator</strong> is a regular internet mail address,
+with the exception that the first occurrence of "%s" is replaced with
+the newsgroup name, with dots (.) converted to dashes (-) for INN
+compatibility.</p>
+<p>Example:</p>
+<pre><code># This is a comment line
#
# special moderator, hans at example.com is mailed all articles for
# local.special
@@ -903,149 +798,110 @@ local.*:egon+%s at example.net
# mail postings for local.video to egon+local-video at example.net
#
# Note: if you put local.special below local.*, local.special will be
-# ignored.
-</pre>
- <hr>
-
- <h3 class="c2">6. DEINSTALLATION</h3>
-
- <p>If you want to uninstall leafnode (e.g. because you want to
- replace it with another newsserver) and have a Makefile
- available, you can achieve this by doing "make uninstall".</p>
-
- <p>Do <b>not</b> uninstall an old version of leafnode before
- updating.</p>
- <hr>
-
- <h3 class="c2">7. FREQUENTLY ASKED QUESTIONS</h3>
-
- <p>See the file FAQ.</p>
- <hr>
-
- <h3 class="c2">8. COPYRIGHT</h3>
-
- <p>Leafnode versions through 1.4 were written by Arnt
- Gulbrandsen <agulbra at troll.no> and are copyright 1995
- Troll Tech AS, Postboks 6133 Etterstad, 0602 Oslo, Norway, fax
- +47 22646949.</p>
-
- <p>Leafnode versions 1.5 up to 1.9.19 and 2.0b1 to 2.0b8 were
- written by Cornelius Krasel
- <krasel at wpxx02.toxi.uni-wuerzburg.de> and are copyright
- 1997-2001.</p>
-
- <p>Leafnode versions 1.9.20 and up were written by Matthias
- Andree <matthias.andree at gmx.de> and Ralf Wildenhues
- <ralf.wildenhues at gmx.de> and are © copyright 2002 -
- 2003.</p>
-
- <p>Leafnode versions 2.0b8_ma and 2.0.0.* were written by
- Matthias Andree <matthias.andree at gmx.de>, Ralf Wildenhues
- <ralf.wildenhues at gmx.de> and Jörg Dietrich
- <joerg at dietrich.net> and are © copyright 2001 -
- 2003.</p>
-
- <p>Major modifications were made by<br>
- Randolf Skerka <Randolf.Skerka at gmx.de><br>
- Kent Robotti <robotti at erols.com><br>
- Markus Enzenberger <enz at cip.physik.uni-muenchen.de><br>
- Matthias Andree <matthias.andree at gmx.de><br>
- Jörg Dietrich <joerg at dietrich.net><br>
- Stefan Wiens <s.wi at gmx.net><br>
- </p>
-
- <p>Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or
- sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:</p>
-
- <p>The above copyright notice and this permission notice shall
- be included in all copies or substantial portions of the
- Software.</p>
-
- <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
- KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
- AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.</p>
-
- <p>The getaline() and getline() routines are Copyright (c)
- 2000-2002 Matthias Andree <matthias.andree at gmx.de>. They
- are licensed under the GNU Lesser General Public License (GNU
- LGPL) 2.1. A copy of the LGPL is provided in the file
- COPYING.</p>
-
- <p>The wildmat() routine is Copyright (c) 1986-1991 Rich $alz
- <rsalz at osf.org>. The original copyright notice, taken
- from INN 2.2.2, follows:</p>
-
- <blockquote>
- Redistribution and use in any form are permitted provided
- that the following restrictions are met:
-
- <ol>
- <li>Source distributions must retain this entire copyright
- notice and comment.</li>
-
- <li>Binary distributions must include the acknowledgement
- ``This product includes software developed by Rich Salz''
- in the documentation or other materials provided with the
- distribution. This must not be represented as an
- endorsement or promotion without specific prior written
- permission.</li>
-
- <li>The origin of this software must not be misrepresented,
- either by explicit claim or by omission. Credits must
- appear in the source and documentation.</li>
-
- <li>Altered versions must be plainly marked as such in the
- source and documentation and must not be misrepresented as
- being the original software.</li>
- </ol>
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS
- OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE.
- </blockquote>
-
- <p>The replacement vsnprintf() function was written by Theo de
- Raadt and is Copyright (c) 1997 under the following
- restrictions:</p>
-
- <blockquote>
- Redistribution and use in source and binary forms, with or
- without modification, are permitted provided that the
- following conditions are met:
-
- <ol>
- <li>Redistributions of source code must retain the above
- copyright notice, this list of conditions and the following
- disclaimer.</li>
-
- <li>Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.</li>
- </ol>
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- </blockquote>
- </body>
+# ignored.</code></pre>
+<hr />
+<h3 id="deinstallation">6. DEINSTALLATION</h3>
+<p>If you want to uninstall leafnode (e.g. because you want to replace
+it with another newsserver) and have a Makefile available, you can
+achieve this by doing "make uninstall".</p>
+<p>Do <strong>not</strong> uninstall an old version of leafnode before
+updating.</p>
+<hr />
+<h3 id="frequently-asked-questions">7. FREQUENTLY ASKED QUESTIONS</h3>
+<p>See the file FAQ.</p>
+<hr />
+<h3 id="copyright">8. COPYRIGHT</h3>
+<p>Leafnode versions through 1.4 were written by Arnt Gulbrandsen
+<agulbra at troll.no> and are copyright 1995 Troll Tech AS, Postboks
+6133 Etterstad, 0602 Oslo, Norway, fax +47 22646949.</p>
+<p>Leafnode versions 1.5 up to 1.9.19 and 2.0b1 to 2.0b8 were written by
+Cornelius Krasel <krasel at wpxx02.toxi.uni-wuerzburg.de> and are
+copyright 1997-2001.</p>
+<p>Leafnode versions 1.9.20 and up were written by Matthias Andree
+<matthias.andree at gmx.de> and Ralf Wildenhues
+<ralf.wildenhues at gmx.de> and are © copyright 2002 - 2003.</p>
+<p>Leafnode versions 2.0b8_ma and 2.0.0.* were written by Matthias
+Andree <matthias.andree at gmx.de>, Ralf Wildenhues
+<ralf.wildenhues at gmx.de> and Jörg Dietrich
+<joerg at dietrich.net> and are © copyright 2001 - 2003.</p>
+<p>Major modifications were made by<br />
+Randolf Skerka <Randolf.Skerka at gmx.de><br />
+Kent Robotti <robotti at erols.com><br />
+Markus Enzenberger <enz at cip.physik.uni-muenchen.de><br />
+Matthias Andree <matthias.andree at gmx.de><br />
+Jörg Dietrich <joerg at dietrich.net><br />
+Stefan Wiens <s.wi at gmx.net><br />
+</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
+<p>The getaline() and getline() routines are Copyright (c) 2000-2002
+Matthias Andree <matthias.andree at gmx.de>. They are licensed under
+the GNU Lesser General Public License (GNU LGPL) 2.1. A copy of the LGPL
+is provided in the file COPYING.</p>
+<p>The wildmat() routine is Copyright (c) 1986-1991 Rich $alz
+<rsalz at osf.org>. The original copyright notice, taken from INN
+2.2.2, follows:</p>
+<blockquote>
+<p>Redistribution and use in any form are permitted provided that the
+following restrictions are met:</p>
+<ol type="1">
+<li>Source distributions must retain this entire copyright notice and
+comment.</li>
+<li>Binary distributions must include the acknowledgement ``This product
+includes software developed by Rich Salz'' in the documentation or other
+materials provided with the distribution. This must not be represented
+as an endorsement or promotion without specific prior written
+permission.</li>
+<li>The origin of this software must not be misrepresented, either by
+explicit claim or by omission. Credits must appear in the source and
+documentation.</li>
+<li>Altered versions must be plainly marked as such in the source and
+documentation and must not be misrepresented as being the original
+software.</li>
+</ol>
+<p>THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p>
+</blockquote>
+<p>The replacement vsnprintf() function was written by Theo de Raadt and
+is Copyright (c) 1997 under the following restrictions:</p>
+<blockquote>
+<p>Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:</p>
+<ol type="1">
+<li>Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.</li>
+<li>Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the
+distribution.</li>
+</ol>
+<p>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.</p>
+</blockquote>
+</body>
</html>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9d17a83
--- /dev/null
+++ b/README.md
@@ -0,0 +1,816 @@
+% Leafnode manual
+% Matthias Andree
+% 2021-07-09T17:28:07
+
+------------------------------------------------------------------------
+
+### 1. OVERVIEW
+
+Leafnode is a USENET software package designed for small sites, with a
+few tens of readers and only a slow link to the net. It is developed on
+Linux, but has been reported to compile and run also under any BSD
+flavour, Solaris and Irix.
+
+The Leafnode package consists of several programs, three essential ones
+and several add-ons.
+
+- **Leafnode** is the NNTP server. It talks to the normal
+ news clients, and stores readership data.
+- **Fetchnews** is the NNTP news-gatherer. It looks at the
+ readership data Leafnode stores, and selects what groups to pull
+ news from. It also transfers your contributions to one or more
+ upstream servers.
+- **Texpire** is responsible for deleting old and
+ uninteresting news. It deletes all discussion threads that are old
+ and not recently read.
+
+These are the additional tools:
+
+- **Applyfilter** lets you delete articles from your local
+ news spool which fit a certain pattern.
+- **Checkgroups** inserts the titles of newsgroups into the
+ newsgroup database.
+- **Newsq** shows which news are waiting to be transferred
+ to your upstream server(s).
+- **Rnews** sorts an UUCP batch or articles downloaded by
+ other means into the news spool.
+
+Only groups that someone has been reading in the past week are fetched
+from the upstream NNTP server. When someone stops reading a group,
+fetchnews will stop reading that group a week later (this is the default
+which can be configured), and when someone starts reading a group,
+fetchnews will grab all the articles it can in that group the next time
+it runs.
+
+Leafnode\'s distinguishing features are:
+
+- Leafnode is written with the novice user in mind. It is very easy to
+ install and configure and requires no manual intervention once
+ installed. Leafnode tries very hard to recover automatically from
+ error situations.
+- Compared to other servers, leafnode uses very little disk space and
+ bandwidth. Of course this also depends on how many users are
+ accessing your server and is probably not true for 300-user sites.
+- The newsspool can be easily manipulated by small scripts because it
+ is maintained in plain file format. Some tiny examples are in the
+ subdirectory tools/ .
+
+The current version of leafnode is available from
+<http://www.dt.e-technik.tu-dortmund.de/~ma/leafnode/beta/>
+
+There is also a leafnode mailing list. Send mail to
+
+leafnode-list-subscribe at dt.e-technik.tu-dortmund.de
+
+to subscribe, or visit
+[http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/.](http://www.dt.e-technik.tu-dortmund.de/mailman/listinfo/leafnode-list/)
+
+------------------------------------------------------------------------
+
+### 2. INSTALLATION
+
+1. Leafnode does not currently work on SunOS 4.
+
+2. Leafnode depends on the PCRE regular-expression matching library. It
+ ships as binary package with many current Linux/BSD distributions,
+ and is also available as port for \*BSD (Debian users: try \"apt-get
+ install libpcre3 libpcre3-dev\"). Just install the binary package
+ for your operating system if it ships with one. If it comes without
+ PCRE, don\'t worry, the installation from source is simple. To
+ install PCRE, do (AS NORMAL USER, NOT AS root!)
+ 1. Download the current PCRE version from <http://www.pcre.org/>.
+ 2. Unpack PCRE: gunzip -c \| tar xvf -
+ 3. cd pcre-3.9\
+ *(This is for PCRE-3.9, for other versions, replace that by the
+ path that tar wrote when unpacking.)*
+ 4. type `./configure && make`\
+ *there should be no errors*
+ 5. become root
+ 6. as root, do `make install`
+ 7. as root, do `ldconfig`\
+ *this may not be needed on all systems, but better safe than
+ sorry*
+ 8. exit your root shell
+ 9. DONE!
+
+3. Leafnode uses GNU autoconf to determine the configuration of the
+ machine it will be compiled on. It also uses GNU automake for all
+ the standard features that GNU automake offers. Type (AS NORMAL
+ USER, NOT AS root!)
+
+ /bin/sh ./configure
+
+ to create an appropriate Makefile and config.h. If leafnode cannot
+ find your PCRE, it is probably an old version without pcre-config,
+ or pcre-config is not in your path. Either add the directory
+ containing pcre-config to your \$PATH, or call configure like this
+ (we assume PCRE is in /opt/pcre-3.9):
+
+ env CPPFLAGS="-I/opt/pcre-3.9" LDFLAGS="-L/opt/pcre-3.9" /bin/sh ./configure
+
+ NOTE: on some machines, when PCRE is linked against a shared
+ library, you will need to add /opt/pcre-3.9 to LD_LIBRARY_PATH or to
+ /etc/ld.so.conf.
+
+ The configure script can take some flags (replace DIR by a directory
+ name, FILE by a file name):
+
+ --enable-spooldir=DIR To override the default /var/spool/news,
+ where leafnode puts its news spool unless
+ --localstatedir is given or --prefix is given and
+ different from /usr, in the latter case, the
+ default is $localstatedir/spool/news
+
+ --prefix=DIR Leafnode installs itself normally in the /usr/local/sbin
+ directory. If you want to use another directory, use this
+ flag. For example, if you want to install leafnode in
+ /usr/sbin, use --prefix=/usr
+
+ --sysconfdir=DIR Default path for configuration is /etc/leafnode when
+ --prefix is not used or set to /usr, and PREFIX/etc
+ otherwise. You can use this to change the config file
+ location from its default.
+
+ --with-dmalloc Lets leafnode include dmalloc header files and link
+ against libdmalloc. Only useful for debugging, not
+ needed for normal operation. This option requires
+ dmalloc, available from http://dmalloc.com/.
+
+ --with-runas-user=USER Lets leafnode run as user USER, defaults to "news".
+
+ --with-pam Enable PAM (pluggable authentication modules)
+ support.
+
+ **BEWARE:** Former versions always defaulted their sysconfdir to
+ /etc/leafnode. Current versions only override sysconfdir to
+ /etc/leafnode if configured without \--prefix or with
+ \--prefix=/usr. That way, if \--prefix=/opt/leafnode, the sysconfdir
+ goes to /opt/leafnode/etc, which is more appropriate.
+
+4. Type
+
+ make
+
+ There should be no errors.
+
+5. Become root.
+
+6. As root, create user and group \"news\" (or the configured user and
+ group) if you don\'t have those already.
+
+7. Type
+
+ make install
+
+ If you prefer an installation with the binaries stripped free of
+ symbols, use
+
+ make install-strip
+
+ instead.\
+ *For packagers: if you want to prefix all installation paths with a
+ common prefix, e. g. to support RPM\'s BuildRoot feature: You can
+ use `make install-strip DESTDIR=/var/tmp/leafnode-root`.*
+
+8. Configure syslog so it captures news logging, most systems do NOT
+ log news stuff by default.
+ 1. Edit /etc/syslog.conf. Unless you already have news.info
+ logging, add a line like this:
+
+ news.info /var/log/news
+
+ Note that if you want to send in a bug report and need debug
+ logging, you\'ll have to replace news.info by news.debug (and
+ send a SIGHUP, as shown below).
+
+ Your syslog.conf may already suggest a different file. If your
+ syslog.conf suggests news.info logging, use that, but be sure to
+ activate it in case it\'s commented out: remove leading hash
+ marks and white space.
+
+ Also make sure you use TABs between news.info and the path.
+
+ 2. Create the /var/log/news file, type: `touch /var/log/news`.
+
+ 3. Send syslogd a HUP signal. `kill -1 \`cat
+ /var/run/syslogd.pid\`` usually does the job, if it doesn\'t,
+ retry with \"syslogd\" replaced by \"syslog\".
+
+9. If you are updating leafnode from a previous version, see the
+ section \"Updating\" below.
+
+10. Edit \$(LIBDIR)/config. \$(LIBDIR) defaults to /etc/leafnode, but
+ can be adjusted at build time. For documentation, see below or
+ config.example and leafnode(8). **Mandatory edits to the config file
+ are:**
+
+ - server \-- this must point to your upstream news server.
+ - expire \-- how many days will downloaded articles remain in the
+ spool.
+
+ Make sure the environment variable \$NNTPSERVER or /etc/nntpserver
+ points to your own host so clients will talk to leafnode rather than
+ try to go to the upstream server.
+
+ If you want to use filtering of the incoming spool, see the section
+ on the filter file below.
+
+11. the systemd/ directory of the tarball contains example service and
+ timer files that can be used on systemd-based systems **instead of**
+ the inetd/xinetd and cron\[tab\] settings shown below.
+
+12. Set up a cron job (as user \"root\" or \"news\") to run texpire
+ every night or maybe every week. Here is my crontab line, which runs
+ nightly:
+
+ 0 4 * * * /usr/local/sbin/texpire
+
+ I did \"crontab -u news -e\" as root to edit the crontab file, and
+ added this line. Substituting \"1\" for the third \"\*\", thus:
+
+ 0 4 * * 1 /usr/local/sbin/texpire
+
+ tells cron to run texpire at 4am every Monday morning.
+
+13. Make sure fetchnews is run at the appropriate time. If you have a
+ full-time link, run it out of cron (as \"news\" again); if not, run
+ it when your connection to the net is established. If it is run as
+ root it will change to user \"news\". If you use PPP, you can run
+ fetchnews from /etc/ppp/ip-up (or /etc/ppp/ip-up.local, depending on
+ your OS).
+
+14. We assume that you have tcpd installed, it ships with most
+ distributions. If you don\'t have it, fetch it from
+ ftp://ftp.porcupine.org/pub/security/, it\'s in tcp_wrappers, and
+ install it. It\'s preferable if you compile it with -DHOSTS_OPTIONS,
+ and the examples below assume you did.
+
+15. Choose either of these alternatives:
+ - Alternative #1: If your system uses inetd (most commercial
+ unices, \*BSD). Edit /etc/inetd.conf so that \$(BINDIR)/leafnode
+ is executed for incoming NNTP connections. Here is my inetd.conf
+ line:
+
+ nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
+
+ *Note: some systems install tcpd to a different path, but it\'s
+ uncommon. Change the first path accordingly if your tcpd resides
+ in /usr/etc or /usr/lbin.* After these changes, force inetd to
+ read the changed configuration file by sending it the HANGUP
+ signal. To achieve this, issue the following command (as root):
+
+ kill -HUP `cat /var/run/inetd.pid`
+
+ - Alternative #2: If your system has xinetd instead. Add this to
+ your xinetd.conf (this example assumes xinetd 2.3.3 or newer):
+
+ service nntp
+ {
+ flags = NAMEINARGS NOLIBWRAP
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = news
+ server = /usr/sbin/tcpd
+ server_args = /usr/local/sbin/leafnode
+ instances = 7
+ per_source = 3
+ }
+
+ Then send xinetd an USR2 signal to make it reread its
+ configuration. See the **xinetd.conf**(5) manual page for
+ details. *Note: some systems install tcpd to a different path,
+ but it\'s uncommon. Change the first path accordingly if your
+ tcpd resides in /usr/etc or /usr/lbin.*
+
+16. Write the following into /etc/hosts.deny:
+
+ leafnode: ALL
+
+ and into /etc/hosts.allow:
+
+ leafnode: 127.0.0.1
+
+ to protect your news server from abuse. If you want to make leafnode
+ accessible to additional IP numbers/domains, add them in
+ /etc/hosts.allow in the format described above. See hosts_access(5)
+ and hosts_options(5) (if applicable) for more information about tcp
+ wrappers.
+
+17. *(optional)* If you want to allow read-only access, you can set the
+ NOPOSTING environment variable, for example, put this into
+ /etc/hosts.allow:
+
+ leafnode: 192.168.0.4: setenv NOPOSTING "You may only read."
+
+ The contents of this variable are printed at the end of the banner,
+ with control characters (as per iscntrl(3)) replaced by an
+ underscore.
+
+18. *(optional)* If you want to allow clients read access to local or
+ global subscribed groups, but do not want to allow them to subscribe
+ to new groups, you can set the NOSUBSCRIBE environment variable.
+ When this variable is set, a client will never see a pseudo article.
+ For example, if clients from 127.0.0.1 and 192.168.0.42 may
+ subscribe new groups, and all other 192.168.0.\* hosts may read the
+ existing groups but not subscribe to new groups, put this into
+ /etc/hosts.allow (this assumes libwrap/tcpd have been compiled with
+ -DPROCESS_OPTIONS):
+
+ leafnode: 127.0.0.1 192.168.0.42: ALLOW
+ leafnode: 192.168.0.0/255.255.255.0: setenv NOSUBSCRIBE 1
+ leafnode: ALL: DENY
+
+19. Run fetchnews. The first run will take some time since fetchnews
+ reads a list of all newsgroups from your upstream server. In the
+ worst case, this can take up to 60 minutes, depending on how many
+ newsgroups your provider offers and how reliable your modem
+ connection is. To see fetchnews working, run it with -vvv.
+
+20. Run texpire. It will create directories missing after the first
+ install.
+
+21. Exit your root shell.
+
+22. Read news using an NNTP client (with \$NNTPSERVER or /etc/nntpserver
+ pointing to your own host). Select the groups you want to read in
+ the future. You will find them empty except a default article.
+ Reading this article is necessary with some newsreaders to select
+ the groups for further fetching.
+
+ After this, you should have empty files in
+ /var/spool/news/interesting.groups/ for every group you want to
+ read.
+
+23. Become root and run fetchnews again, then exit your root shell. This
+ run should pick up all the groups you want to read.
+
+------------------------------------------------------------------------
+
+### 3. UPDATE FROM PREVIOUS VERSIONS
+
+### 3.1 Update from versions \< 2.0b8_ma8
+
+The local.groups and groupinfo files and the hash function for
+message.id have changed from any former version to 2.0b8_ma8.
+
+**IMPORTANT:** To fix the \"remote\" groups, run `fetchnews -f`
+\-- it will take some time, because it refetches the whole active file,
+but that\'s needed anyhow to figure the group status (posting
+allowed/not allowed/moderated group).
+
+To fix **local.groups**, if you have perl installed:
+
+ perl -ple 's /\s+/\ty\t/' -i.bak /etc/leafnode/local.groups
+
+This will make a backup of your original /etc/leafnode/local.groups in
+/etc/leafnode/local.groups.bak.
+
+If you don\'t have Perl, use a text editor that preserves HTAB
+characters, change all while space to TAB and insert an additional field
+reading just y:
+
+> Before: local.test some test group\
+> After: local.testTAByTABsome test group
+
+\
+Use the real TAB character rather than TAB.\
+To fix the spool for message.ids, run `texpire -r`\
+The changes written in section 3.2 below also apply.
+
+### 3.2 Update from versions \< 2.0
+
+From 1.9.x to 2.0 there were some changes to options in the main
+configuration file. The options \"maxage\", \"maxlines\", \"minlines\",
+\"maxbytes\" and \"maxcrosspost\" have become obsolete in the main
+configuration file and have to be specified in the filter file instead.
+The advantage of this is that you can do much finer selection on these
+criteria now.
+
+To replace, for example, a \"maxage = 5\" specification in the main
+configuration file, you should add the following to your filter file:
+
+ newsgroups = .*
+ maxage = 5
+ action = kill
+
+The leafnode programs will issue warnings if they encounter obsolete
+specifications in the main config file.
+
+### 3.3 Update from versions \< 1.9.3
+
+From version 1.9.3 on, the groupinfo file is sorted in a
+case-insensitive manner. To update correctly, do a \"make update\" as
+root after you have successfully completed \"make install\". This will
+re-sort the groupinfo file. The old groupinfo file will be stored as
+groupinfo.old just in case something goes wrong. You also have to change
+your main config file manually as described in the previous section.
+
+### 3.4 Update from versions \< 1.6
+
+Between leafnode-1.6alpha and leafnode-1.6, the format of the groupinfo
+file changed and some files moved to other places. To update correctly,
+do a \"make update\" as root after you have successfully completed
+\"make install\". This will reformat the groupinfo file and move the
+other files into the correct places. The old groupinfo file will be
+stored as groupinfo.old just in case something goes wrong. You also have
+to change your main config file manually as described in the section
+\"Update from versions \< 2.0\".
+
+------------------------------------------------------------------------
+
+### 4. FILES AND DIRECTORIES
+
+Leafnode puts its files in three separate directories: The spool
+directory, the library directory, and the binaries directory. All
+directories can be changed at compile time.
+
+In the spool directory you find the stored news, the active file and
+some other short-lived configuration file. It defaults to
+/var/spool/news and can be changed at compilation time. There are some
+special directories here; see the leafnode(8) man page.
+
+The library directory contains long-lived configuration files. It
+defaults to /etc/leafnode.
+
+The binaries directory, /usr/local/sbin by default, contains the
+executable programs applyfilter, texpire, fetchnews and leafnode.
+
+The user directory, /usr/local/bin by default, contains the newsq
+program.
+
+### 4.1. The main configuration file
+
+The main configuration file contains settings important for all programs
+of the leafnode suite. It defaults to /etc/leafnode/config, but several
+configuration files can be used at once by employing the -F switch of
+the programs.
+
+The file contains two mandatory and a number of optional parameters.
+
+NOTE: Global options must come first, server-specific options below the
+server = lines.
+
+Mandatory parameters
+
+> server = news02.bigprovider.com
+
+You have to specify at least one server (except if you want leafnode to
+serve as a local server only). Usually, this will be the news server of
+your provider. You can specify more than one server, and fetchnews will
+retrieve news from all of them, taking care not to transfer articles
+multiple times to your machine. Servers will be queried in the order
+specified in the config file.
+
+> expire = 5
+
+This parameter determines how many days threads are kept on your hard
+disk. texpire will delete whole threads, not just single articles.
+
+Server-specific optional parameters
+
+To configure interaction with the server somewhat, you can change the
+behaviour of fetchnews by setting several server-specific optional
+parameters. They have to be specified directly after the corresponding
+\"server\" statement. A new server statement in the config file will
+also allow new optional parameters.
+
+> username = myname\
+> password = mypasswd
+
+If your upstream server requires a form of authentication, you can set
+your username and password here.
+
+> timeout = 30
+
+It may happen that, due to a bad connection or other reasons, the server
+stops talking to you while you fetch news. The \"timeout\" parameter
+determines the number of seconds fetchnews is supposed to wait for a
+response from the server before giving up.
+
+> nodesc = 1
+
+Some servers are unable to deliver descriptions of new newsgroups
+correctly. When fetchnews encounters such a server, it will print the
+warning
+
+> server.name does not process LIST NEWSGROUPS news.group.name
+> correctly: use nodesc
+
+To allow for shorter download times, you should in this case set
+\"nodesc = 1\" for that particular server in the configuration file.
+
+> port = 8000
+
+Normally, fetchnews will try to retrieve news from port 119 (the
+standard nntp port) of your upstream server. If the upstream server runs
+on a different port, you can specify it with this option.
+
+General optional parameters
+
+> authenticate = *METHOD*
+
+Require that NNTP clients connecting to your leafnode authenticate
+themselves. The only method currently supported is `internal`. In this
+mode, leafnode expects a file *users* in its sysconfdir,
+/etc/leafnode/users by default, which has a simple format, one line per
+user, with the user name (which cannot contain spaces), then a colon,
+then the crypt(3) encrypted password. To generate these lines, you can
+use the Perl program *tools/make_pass.pl*, for example, if you want to
+add a user \"enigma\" with a password of \"break!me\", type:
+
+> perl -wT tools/make_pass.pl \'enigma\' \'break!me\'
+
+and copy the resulting line to the *users* file.\
+htpasswd as shipped for Apache servers should also work if in crypt(3)
+mode.
+
+> hostname = host.domain.country
+
+If the postings that you write do not have message IDs (generated by the
+newsreader), leafnode will generate a message ID for you. (It will never
+overwrite an already existing message ID.) Message IDs generated by
+leafnode feature \".ln\" before the @ sign. The message ID contains the
+fully qualified hostname of your machine which may not always be what
+you want. In that case, you can override the use of the hostname by
+using the \"hostname\" option.
+
+> create_all_links = 1
+
+Usually fetchnews will store articles only in the newsgroups which you
+consider interesting. Unfortunately, this makes it difficult to score
+for the number of newsgroups a message is posted to because the
+Newsgroups: header is not featured in the overview information;
+therefore you can determine the number of newsgroups an article is
+crossposted to only from the Xref: header. If \"create_all_links\" is
+set to 1, fetchnews will store articles in all newsgroups which they are
+posted to, making all these newsgroups turn up in the Xref: header.
+
+> groupexpire = a.news.group 7
+
+As outlined above, texpire will expire threads after \"expire\" days. If
+you want to adjust expiry times for certain groups, you may use the
+\"groupexpire\" parameter to do just that. You can specify groups or use
+wildcards; for example
+
+> groupexpire = \*.announce 30
+
+will affect expiry times of all groups ending with \".announce\".
+
+> filterfile = /etc/leafnode/filters
+
+If you want to employ filtering on incoming messages, you have to
+specify the path where the filterfile can be found. The format of the
+filterfile is described in the next chapter.
+
+> timeout_short = 2\
+> timeout_long = 5
+
+These two parameters determine how quickly a group is unsubscribed by
+leafnode after you have stopped reading it. If you have looked into the
+group only once, subscription is stopped after \"timeout_short\" days;
+if you have read it more regularly, subscription is stopped after
+\"timeout_long\" days. (You can stop subscription immediately by
+removing the corresponding file in /var/spool/news/interesting.groups/).
+
+> timeout_active = 90
+
+By default, fetchnews will re-read active files from the upstream server
+every 90 days. This interval can be changed by setting
+\"timeout_active\" to a different value. Re-reading the active file
+frequently will keep it a little bit smaller but will increase the
+on-line time.
+
+> delaybody = 1
+
+This option switches fetchnews into a mode where only the headers of
+articles are fetched for visual inspection. Only the articles read in
+the newsreader will be retrieved the next time fetchnews is called. This
+can save a huge amount of disk space and download time but requires more
+manual intervention on the user side.
+
+> groupdelaybody = some.news.group
+
+If you want delaybody mode only for selected groups, you can enable this
+download mode for one specific group. The global delaybody switch above
+causes all groups to be treated that way. Use one line per group
+pattern.
+
+> debugmode = 260
+
+This option forces the leafnode programs into logging lots of
+information via the syslog daemon. It is only useful if you want to hunt
+down bugs. See config.example for an explanation of the number here.
+
+### 4.2. The filter file
+
+The filter file format is currently described in fetchnews(5). Type man
+5 filterfile or man -s 5 filterfile to see the description.
+
+------------------------------------------------------------------------
+
+### 5. LOCAL NEWSGROUPS
+
+From version 2.0 on, Leafnode is able to handle local newsgroups. Local
+newsgroups are groups that exist only on your local server but not on
+upstream servers.
+
+To create a local newsgroup, you have to think of a newsgroup name which
+should not exist on any of your upstream servers. It is therefore a good
+idea to start a new top-level hierarchy. You should also make up a
+description for your newsgroup.
+
+If you choose a newsgroup name which exists already on an upstream
+server, the newsgroup is not treated as a local one.
+
+Next, you write the name, status and description into the file
+/etc/leafnode/local.groups using your preferred text editor, which must
+not mangle TABs to SPACEs. The file should consist of lines in the
+format
+
+ # Comment lines are allowed, with a hash at the beginning of a line.
+ #
+ # However, no white space may precede the hash mark, and empty lines
+ # are not valid.
+ news.group.name<TAB>status<TAB>description
+
+(replace \<TAB\> with a TAB character!)
+
+The first column of each line is taken as the newsgroup name; the second
+as the status (y for \"may be posted to\", m for \"moderated\" \-- see
+below for moderator configuration), the third column of the line is
+interpreted as description. For example, to set up a newsgroup
+\"local.leafnode\" which deals with Leafnode\'s internals, you would put
+a line
+
+> local.leafnode\<TAB\>y\<TAB\>Local leafnode user group
+
+into /etc/leafnode/local.groups. (If your configuration does not reside
+in /etc/leafnode, replace this part of the pathname with the appropriate
+directory.)
+
+#### 5.1 MODERATED NEWSGROUPS
+
+From version 2.0 on, Leafnode also handles **moderated** newsgroups.
+These are newsgroups which only certain people may post into, and
+articles which a regular (non-moderator) user posts, are mailed to the
+moderator.
+
+External moderated newsgroups are handled by the upstream servers.
+
+To configure the moderators for **local** moderated groups, an
+INN-compatible \"moderators\" file is used. It is named
+/etc/leafnode/moderators and has the following format:
+
+ pattern:moderator
+
+Empty lines and lines that start with a hash character (#) are
+considered comment lines and are ignored.
+
+The **pattern** is a normal wildmat pattern, which means that it\'s a
+SHELL pattern, the most useful character is the asterisk (\*) which
+matches any sequence of characters. The moderator given on that line
+applies to all groups that the pattern matches. Should multiple lines
+match a group, the first match in the file \"wins\", the second and
+subsequent patterns are not taken into account. So put the more specific
+patterns first.
+
+The **moderator** is a regular internet mail address, with the exception
+that the first occurrence of \"%s\" is replaced with the newsgroup name,
+with dots (.) converted to dashes (-) for INN compatibility.
+
+Example:
+
+ # This is a comment line
+ #
+ # special moderator, hans at example.com is mailed all articles for
+ # local.special
+ local.special:hans at example.com
+ # moderator for all other local groups:
+ local.*:egon+%s at example.net
+ # that means:
+ # mail postings for local.test to egon+local-test at example.net
+ # mail postings for local.video to egon+local-video at example.net
+ #
+ # Note: if you put local.special below local.*, local.special will be
+ # ignored.
+
+------------------------------------------------------------------------
+
+### 6. DEINSTALLATION
+
+If you want to uninstall leafnode (e.g. because you want to replace it
+with another newsserver) and have a Makefile available, you can achieve
+this by doing \"make uninstall\".
+
+Do **not** uninstall an old version of leafnode before updating.
+
+------------------------------------------------------------------------
+
+### 7. FREQUENTLY ASKED QUESTIONS
+
+See the file FAQ.
+
+------------------------------------------------------------------------
+
+### 8. COPYRIGHT
+
+Leafnode versions through 1.4 were written by Arnt Gulbrandsen
+\<agulbra at troll.no\> and are copyright 1995 Troll Tech AS, Postboks 6133
+Etterstad, 0602 Oslo, Norway, fax +47 22646949.
+
+Leafnode versions 1.5 up to 1.9.19 and 2.0b1 to 2.0b8 were written by
+Cornelius Krasel \<krasel at wpxx02.toxi.uni-wuerzburg.de\> and are
+copyright 1997-2001.
+
+Leafnode versions 1.9.20 and up were written by Matthias Andree
+\<matthias.andree at gmx.de\> and Ralf Wildenhues
+\<ralf.wildenhues at gmx.de\> and are © copyright 2002 - 2003.
+
+Leafnode versions 2.0b8_ma and 2.0.0.\* were written by Matthias Andree
+\<matthias.andree at gmx.de\>, Ralf Wildenhues \<ralf.wildenhues at gmx.de\>
+and Jörg Dietrich \<joerg at dietrich.net\> and are © copyright 2001 -
+2003.
+
+Major modifications were made by\
+Randolf Skerka \<Randolf.Skerka at gmx.de\>\
+Kent Robotti \<robotti at erols.com\>\
+Markus Enzenberger \<enz at cip.physik.uni-muenchen.de\>\
+Matthias Andree \<matthias.andree at gmx.de\>\
+Jörg Dietrich \<joerg at dietrich.net\>\
+Stefan Wiens \<s.wi at gmx.net\>\
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+\"Software\"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+The getaline() and getline() routines are Copyright (c) 2000-2002
+Matthias Andree \<matthias.andree at gmx.de\>. They are licensed under the
+GNU Lesser General Public License (GNU LGPL) 2.1. A copy of the LGPL is
+provided in the file COPYING.
+
+The wildmat() routine is Copyright (c) 1986-1991 Rich \$alz
+\<rsalz at osf.org\>. The original copyright notice, taken from INN 2.2.2,
+follows:
+
+> Redistribution and use in any form are permitted provided that the
+> following restrictions are met:
+>
+> 1. Source distributions must retain this entire copyright notice and
+> comment.
+> 2. Binary distributions must include the acknowledgement \`\`This
+> product includes software developed by Rich Salz\'\' in the
+> documentation or other materials provided with the distribution.
+> This must not be represented as an endorsement or promotion
+> without specific prior written permission.
+> 3. The origin of this software must not be misrepresented, either by
+> explicit claim or by omission. Credits must appear in the source
+> and documentation.
+> 4. Altered versions must be plainly marked as such in the source and
+> documentation and must not be misrepresented as being the original
+> software.
+>
+> THIS SOFTWARE IS PROVIDED \`\`AS IS\'\' AND WITHOUT ANY EXPRESS OR
+> IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The replacement vsnprintf() function was written by Theo de Raadt and is
+Copyright (c) 1997 under the following restrictions:
+
+> Redistribution and use in source and binary forms, with or without
+> modification, are permitted provided that the following conditions are
+> met:
+>
+> 1. Redistributions of source code must retain the above copyright
+> notice, this list of conditions and the following disclaimer.
+> 2. Redistributions in binary form must reproduce the above copyright
+> notice, this list of conditions and the following disclaimer in
+> the documentation and/or other materials provided with the
+> distribution.
+>
+> THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\'\' AND ANY EXPRESS
+> OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+> DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+> INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+> (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+> STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+> IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+> POSSIBILITY OF SUCH DAMAGE.
diff --git a/configure.ac b/configure.ac
index c999e49..15cf70b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,7 +25,7 @@ AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_CHECK_TOOL(AR,ar,ar)
-AC_PATH_PROG(LYNX,lynx,no)
+AC_PATH_PROG(PANDOC,pandoc,no)
AC_PATH_PROG(RPM,rpm)
AC_PATH_PROG(GZIP,gzip,false)
AC_PATH_PROG(BZIP2,bzip2,false)
--
2.49.0
More information about the leafnode-list
mailing list