History of 1.9.17 -- changes since 1.9.16:

activutil.c:
- fixed a few printf statements which caused warnings on FreeBSD 4.1-STABLE.
  Reported by Ron Rosson <insane@lunatic.oneinsane.net>.

fetchnews.c:
- some time_t variables in getgroup() now casted to int to avoid warnings
  on FreeBSD 4.1-STABLE. Reported by Ron Rosson <insane@lunatic.oneinsane.net>.

Makefile:
- "make dist" now generates one tarball without and one with pcre library.

miscutil.c:
- another patch to getaline() because the previous one did not work
  satisfactorily. NUL bytes are now changed to spaces.

nntpd.c:
- "xhdr [header] <message-id>" did not work correctly (always returned
  the first header with the string length of [header] which became
  obvious when Xref: was asked and Path: returned). Bug reported by
  Andrzej Radecki <radecki@wpk.p.lodz.pl>.
- added the code for correct determination of timezone differences from
  2.x by Joerg Dietrich.

texpire.c:
- crashed with segmentation fault if groupinfo file did not exist. Bug
  described by Shaul Karl <shaulk@israsrv.net.il>; patch by Mark Brown
  <broonie@tardis.ed.ac.uk>.

=============================================================================

History of 1.9.16 -- changes since 1.9.15:

fetchnews.c:
- getgroup(): applied a patch by <o.rousseaux@libertysurf.fr> which
  makes fetchnews fetch news in ascending order.

nntpd.c:
- doxhdr(): now also returns "Newsgroups" header when only pseudo
  article is available. Feature requested by Karen Nakamura <mail@gpsy.com>
  because MT Newswatcher needs it.

=============================================================================

History of 1.9.15 -- changes since 1.9.14:

fetchnews.c:
- nntpactive() now uses LIST instead of LIST ACTIVE.

miscutil.c:
- getaline() now can also handle NUL bytes. Patch by Matthias Andree
  <ma@dt.e-technik.uni-dortmund.de>.

=============================================================================

History of 1.9.14 -- changes since 1.9.13:

fetchnews.c:
- if the second server had no new articles compared to the first one,
  fetchnews would not adjust the counter properly. Bug fixed by
  Peter Katzmann <peter.katzmann@knuut.de>.

makerpm.sh:
- "make rpm" now also works on SuSE. Patch by Juergen Salk
  <juergen.salk@gmx.net>.
- FAQ is now included in RPM. Bug reported by Bjoern Voigt <bjoern@web.de>.

miscutil.c:
- snprintf() was buggy (did not recognize %lu and %ld). Reported by Joerg
  Dietrich <joerg@dietrich.net>.

nntpd.c:
- dopost(): if owndn is set, it is now also included in the Path: (not
  only used for the message ID). Suggested by Mark Brown
  <broonie@tardis.ed.ac.uk>

texpire.c:
- expiregroup(): checks now also if the pointer g exists. Bug reported
  by Peter Katzmann <peter.katzmann@knuut.de>.

xoverutil.c:
- removed stripspace() completely from the code that creates the
  overview lines. This means that leading and trailing blanks are not
  removed any more in any header line, nor are consecutive blanks
  compressed.
- getxoverline(): in the Subject: line, consecutive blanks are now left
  untouched. Requested by Thomas Zajic <zlatko@gmx.at>.

=============================================================================

History of 1.9.13 -- changes since 1.9.12:

configure.in:
- tests now also for snprintf() because it is used in activutil.c.

configutil.c:
- fixed possible overflow bug when providing very large expiry times. Bug
  described by Andreas Ferber <aferber@techfak.uni-bielefeld.de>.

miscutil.c:
- added a homegrown version of snprintf() for systems which don't supply it.

nntpd.c:
- did not compile under *BSD because it defines the timezone in a different
  way. Bug first reported by Ron Rosson <insane@lunatic.oneinsane.net> and
  fixed by Shigeru Ikeda <js3guj@gold.ocn.ne.jp> and Joerg Dietrich
  <joerg@dietrich.net>.

=============================================================================


History of 1.9.12 -- changes since 1.9.11:

activutil.c:
- mergegroup() now sets the name of the newsgroup after the last
  as NULL. Suggested by Claude Michel <cpjm@free.fr>.
- insertgroup() does not change any information of groups which are
  already present. Bug discovered and fixed independently by Johannes
  Stezenbach and Joerg Dietrich <joerg@dietrich.net>.

artutil.c:
- fgetheader(): header doesn't have to include terminal : anymore.

fetchnews.c:
- delposted(): if an article could not be deleted, there was no error
  message. Noted by Matthias Leisi <usenet-03-2000@astrum.ch>.
- nntpactive(): if the whole newsgroups file is fetched from upstream
  servers, the timestamps are set to 0. Bug discovered and fixed by
  Joerg Dietrich <joerg@dietrich.net>.

Makefile.in:
- to install man pages, "install" is now used instead of "cp". Suggested
  by Mike Castle <dalgoda@ix.netcom.com>.

nntpd.c:
- in donewgroups(), the timezone was not considered. Bug described and
  fixed by Joerg Dietrich <joerg@dietrich.net>.
- in doxhdr(), arg was overwritten sometimes for some reasons. Therefore
  it is now copied into a separate buffer which is then used. Bug
  discovered by Johannes Stezenbach.
- dummy article now points to http://www.leafnode.org/ and mentions
  fetchnews instead of fetch. Noted by Hauke Heidtmann
  <haukeheidtmann@gmx.net>. (This was already corrected in the 2.0alpha
  versions.)

texpire.c:
- texpire could crash when directories contained subdirectories whose
  names consisted of digits only. Bug discovered and fixed by
  Georg Borgstroem <geobo@lysator.liu.se>.
- in dogroup(), replaced a rewinddir() call by a closedir() ; opendir().
  Suggested by Stephen Marley <stephen@home.uklinux.net> because of some
  strange infinite loop he ran into.

xoverutil.c:
- "updated x lines in y/.overview" now only logged if debugmode is
  switched on. Suggested by Juergen Salk <juergen.salk@gmx.de>.

=============================================================================

History of 1.9.11 -- changes since 1.9.10:

activutil.c:
- helpfindgroup() modified which speeds up the time to find a group.
  Prompted by benchmarking the code to some code written by Tony de
  Haan <tony@iae.nl>.
- readactive() caused huge memory leaks if called repeatedly because the
  old active was not freed properly. Bug found and fixed by Lloyd Zusman
  <ljz@asfast.com>.

fetchnews.c:
- nntpactive() did not insert new newsgroups correctly. Bug discovered
  and fixed by Joerg Dietrich <joerg@dietrich.net>. This bug was partially
  introduced in 1.9.10 but was partially present already in previous
  versions.

Miscellaneous:
- configure.in now detects old-style BSD syslog. This also involves
  changes in leafnode.h and applyfilter.c, fetchnews.c, nntpd.c and
  texpire.c.
- configure.in readjusted (HAVE_OFFT_8 was not needed)
- configure.in now checks whether kernel includes are installed properly.
  Suggested by Matthias Andree <ma@dt.e-technik.uni-dortmund.de>.
- added a new point to the FAQ. Suggested by Matthias Andree
  <ma@dt.e-technik.uni-dortmund.de>.

=============================================================================

History of 1.9.10 -- changes since 1.9.9:

activutil.c:
- changegroupdesc() crashed when getting a NULL pointer as parameter.
  Bug discovered and fixed by Joerg Dietrich <joerg@dietrich.net>.
- writeactive() stopped writing active file if an empty record was
  encountered. Fixed. (I have no idea where these empty records come
  from in the first place...)
- readactive() now sets first and last article in each group to 1 if they
  are 0.
- writeactive() now should not write empty records to the groupinfo file
  any more
- replaced the old version with the version from leafnode-2.0a9 featuring
  arrays instead of trees. There is one difference: since lsort is already
  called in the makefile, the active file is not re-sorted when reading
  it.

applyfilter.c:
- fixed for new activutil.

checkgroups.c:
- fixed for new activutil.

config.example:
- replaced all "supplement" with "server"

configutil.c:
- corelimit.rlim_cur is now cast to int.

fetchnews.c:
- diverse time_t things casted to int.
- nntpactive() logged too much after last "fix". Fixed.
- fixed nntpactive() for new activutil.
- if "LIST NEWSGROUPS" returned just "215" without any text, fetchnews
  became confused. Reported by Pasqualino Casciano
  <pasqualino.casciano@stud.lrz-muenchen.de>.

miscutil.c:
- somehow, Bruno Rohee's patch escaped the final distribution of 1.9.8
  and 1.9.9. Fixed.

nntpd.c:
- if there is a timeout when calling mgetaline(), leafnode now returns
  400 instead of 421. Suggested by Michael Schlennstedt <schlenn@schlenn.de>.
- doxhdr() now returns (none) if asked for XHDR REFERENCES of an
  article. Suggested by Ted Marston <ted@nowtsfree.freeserve.co.uk>;
  increases compatibility with xrn.
- fixed for new activutil.

texpire.c:
- fixed for new activutil.

xoverutil.c:
- illegal articles are now simply removed.

Miscellaneous:
- added a section about connection loss to the FAQ
- TROUBLESHOOTING section in README moved into separate FAQ document
- changes in config.example and leafnode.8 suggested by Mark Brown
  <broonie@tardis.ed.ac.uk>.

=============================================================================

History of 1.9.9 -- changes since 1.9.8:

Miscellaneous:
- the previous correction in the Makefile actually was not a correction
  but the introduction of a bug because it prevents proper compilation
  if libpcre is not installed already. Fixed back. Reported first by
  Matthias Flohr <mflohr@gmx.de>.

=============================================================================

History of 1.9.8 -- changes since 1.9.7:

fetchnews.c:
- getgroup(): there was still a realloc() too many left which led to
  occasional crashes. Fixed.
- getgroup(): if realloc( x, 0 ) is called twice, the program will crash.
  Fixed.
- getgroup(): if there are no articles to get, we don't go through the
  "XHDR Date" stuff (which seems to be very slow with DNews anyway).
- getgroup(): if a group is unsubscribed, "first" and "last" are set to 1
- fixed a bug in getgroup() which might have lead to premature expiring
  of groups

miscutil.c:
- fixed a bug in ngmatch() (#ifdef was for HAVE_FNMATCH_H instead of
  HAVE_FNMATCH) discovered by Daniel Barron <daniel@jadeb.com>.
- applied a patch by Bruno Rohee <rohee@OpenBSD.ORG> replacing setreuid()
  and setregid() with setuid() and setgid() when possible

nntpd.c:
- donewgroups(): changed code to make it more clear
- donewgroups(): some newsreaders exhibited a Y2K problem and sent 7-digit
  dates. Leafnode can now parse these dates as well.
- markinterest() changed both mtime and atime if file was already
  present. Fixed. (A problem with the expiry mechanism had been reported
  by several people but it was quite difficult to track it down.)

texpire.c:
- article numbers are not reset when a group is empty because this
  results in new articles not being displayed in low-traffic groups.

xoverutil.c:
- applied a patch by Bruno Rohee <rohee@OpenBSD.ORG> replacing mktemp()
  with mkstemp() if possible
- removed the error message that occurred if a directory contained
  newsgroups starting with a digit

Miscellaneous:
- /var/spool/news/failed.postings was not installed during "make install"
- added "fetchnews -n" to the troubleshooting section of the README.
- small bug in Makefile.in corrected (-lpcre was linked twice with
  applyfilter)
- small bug in makerpm.sh fixed (version number was hard-coded).

=============================================================================

History of 1.9.7 -- changes since 1.9.6:

fetchnews.c:
- new function tabtospace() to handle tab-ified article headers. Written
  by Radoslaw Gancarz <r_g@priv2.onet.pl>. (This problem is treated
  differently in leafnode-2.0a7.)
- getgroup(): somehow a bug which I thought had been fixed crept in again.
  If a newsgroup line starts with more than one space, fetchnews would
  not delete the last characters when deleting spaces. Bug found by
  Manfred Weihs <e9525662@student.tuwien.ac.at> and Thomas Themel
  <tthemel@gmx.net>. (Actually, I have no idea what will happen with
  leafnode-2.0a7 in this case.)

Miscellaneous:
- "make rpm" now works; thanks to Karsten Merker <merker@guug.de> for
  the patch (major modifications in makerpm.sh and Makefile.in)

=============================================================================

History of 1.9.6 -- changes since 1.9.5:

fetchnews.c:
- getgroup: if any article was killed by min/maxlines or maxage, not all
  remaining articles in that group were fetched. Reported by
  Jeff East <an972@freenet.carleton.ca>.

=============================================================================

History of 1.9.5 -- changes since 1.9.4:

activutil.c:
- When groupinfo was not a file, leafnode would crash. Fixed.
- Misc. castings done.
- isinteresting() now works case-insensitive.
- A closedir was missing in fakeactive(). Fixed.

config.example:
- added lines for "hostname" and "filterfile" parameter.

config.h.in:
- Support for libshadow and libcrypt added (not needed yet).
- Misc. changes.

configure.in:
- Cleaned up.
- Timezone problems fixed.
- IPv6 support improved.
- Checking for shadow library (not needed yet).

configutil.c:
- Server now logged with LOG_DEBUG instead of LOG_INFO (like the rest of
  the configuration).

fetchnews.c:
- No more lowercase conversion of newsgroups names.
- If some essential header was not found, fetchnews segfaulted. Fixed.
- Calls to tgetaline() removed.
- If upstream server understood XGTITLE, new groups and their descriptions
  were not entered in active file. Fixed (hopefully).

filterutil.c:
- If no filterfile is present, return FALSE.

miscutil.c:
- getpid() is now casted to int.
- tolower() now casts its argument.
- lowercase() removed.
- Year 2000 problem fixed.
- Timezone problems fixed.

newsq.c:
- st.st_size is now copied in a variable first and printed later (otherwise
  we had troubles with warnings etc. on various operating systems, including
  HP/UX, Digital Unix and *BSD).
- #include <sys/types.h> for HP/UX and certain variants of BSD.

nntpd.c:
- Y2K fix in donewgroups().
- No more conversion to lowercase of newsgroups names.
- Complains now if configuration file cannot be read.
- Empty lines on input are ignored.

nntputil.c:
- tgetaline() removed.

texpire.c:
- dogroup(): when determining the first and last articles in the
  group, we now stat() every article and check whether it is a
  regular file. This saves troubles with groups like alt.2600
  where a directory alt/2600 exists and the 2600 was mistaken as
  an article number.

xoverutil.c:
- Information about updating .overview files is not displayed on stdout
  anymore.

Miscellaneous:
- New file lsort.c, to properly resort groupinfo file.

Changes of 1.9.4-ma1-bn1 included:
---------------------------------

- Fixed a few non-portable constructs in the update.sh script

Changes of 1.9.4-ma1 included:
-----------------------------

INSTALL:7: added information about SuSE --prefix=/usr
INSTALL:78: added pointers to hosts_access(5) and hosts_options(5)

Makefile.in:53: moved @cp pcre/libpcre.a libpcre.a into libpcre.a: actions
Makefile.in:57: prepended $(MFLAGS) and $(MAKEFLAGS) with dash (`-')
Makefile.in:96: clean also removes *~ and \#*
Makefile.in:98: prepended $(MFLAGS) and $(MAKEFLAGS) with dash (`-')
	ll 57,98 fixes stop emacs barfing on make -k "unknown target k"
Makefile.in:101: realclean also removes *.rej and *.orig
Makefile.in:161ff: split uninstall into uninstall and uninstall-bins
	uninstall-bins will not touch $(SPOOLDIR) and $(LIBDIR)

configutil.c:106: initializers added: p = 0, q = 0

activutil.c:167: initializer added: desc = 0

miscutil.c:145: made namelen unsigned

nntputil.c:196: corrected parentheses in #define 
nntputil.c:206: made struct servent *sp static (was auto) 
nntputil.c:210: made int i static (was register, should not hurt, indexes
	only servers)

fetchnews.c:216: inserted comparison against date: string, fixed
	some strange SIGSEGV I experienced
fetchnews.c:731++: added fast XHDR header check for maxage speedup
	speeds up maxage purging if some other site dumped loads of
	old news into some high-traffic newsgroup. 
fetchnews.c:738: initializer added: aage = 0
fetchnews.c:1059: warning re. strftime %y yielding 2 digits is ok and 
	conforms to RFC-977 which respects Y2k issues. 
fetchnews.c:1209: stat() checks for errors and skips . and ..

xoverutil.c:301: skips . and .. directory entries

=============================================================================

History of 1.9.4 -- changes since 1.9.3:

libutil:
=======

180799: xoverutil: getxover() now logs corrected XOVER lines to syslog
	instead of printing them to stdout (this should have happened
	before).

nntpd:
=====

160799: added more verbose error message in dopost() if an article could
	not be posted (code written by Matthias Andree
	<mandree@sx1.HRZ.Uni-Dortmund.DE>).
160799: removed an unnecessary open() call in dopost() (probably a cut-
	and-paste error)
160799: in doarticle(), moved free(p) into previous if.. condition.
	Suggested by Matthias Andree <mandree@sx1.HRZ.Uni-Dortmund.DE>.

Miscellaneous:
=============

170799: changed several occurences of /usr/lib to /etc in the manpages.
	Problem first noted by Stefan Ladwig <stefan.ladwig@privat.kkf.net>.
150799: pcre(7) now installs correctly. Bug found by Diedrich Ehlerding
	<diedrich.ehlerding@t-online.de>.

=============================================================================

History of 1.9.3 -- changes since 1.9.3b6:

fetchnews:
=========

150799: age(): time_struct is now set to zero before filling it with
	variables. Fix by <wiml@netcom.com>.

libutil:
=======

100799: filterutil: autodetection of various pcre versions now allows
	compiling with pre-existing versions on a system.
090799: filterutil: now only the matched pattern is logged to LOG_DEBUG,
	and this happens only if the debugmode is switched on
070799: xoverutil: "illegal articles" (i.e. articles which don't have
	correct XOVER information) are now removed again (it is checked
	before whether these are really articles).
070799: configutil: "fqdn" is now the same as "hostname" in the
	configuration file. (Necessary because of a mistake in a
	FAQ by Jonas Luster which made it into LINUX magazine.)

nntpd:
=====

150799: NEWGROUPS would sometimes return all groups because struct
	timearray (in donewgroups()) was sometimes only partially
	initialized. Bug reported and fix provided by <wiml@netcom.com>.

Miscellaneous:
=============

150799: updated German documentation by Alexander Reinwarth
	<a.reinwarth@gmx.de>.
150799: created acconfig.h (courtesy Mark Brown <broonie@tardis.ed.ac.uk>)
140799: replaced pcre.3 with pcre.7 (courtesy Mark Brown
	<broonie@tardis.ed.ac.uk>)
100799: configure.in: fiddled, together with Mark Brown
	<broonie@tardis.ed.ac.uk>, a lot with the autodetection of various
	pcre versions.
090799: Makefile.in: install pcre.3 only if no libpcre is found on the
	system. Suggested by Mark Brown <broonie@tardis.ed.ac.uk>.
070799: Makefile.in: libpcre is now built before compiling of the main
	programs

=============================================================================

History of 1.9.3b6 -- changes since 1.9.3b5:

fetchnews:
=========

280699: getgroup(): case-insensitive recognition of newsgroups did not
	work yet. Now the Newsgroups: header is explicitely converted
	to lower case before storing the files.

libutil:
=======

010799: activutil: writeactive() now converts all existing groups to
	lowercase
300699: activutil: insertgroup() now converts groupname to lowercase
	before inserting it into tree
280699: filterutil: readfilter() would enter BS into the cleartext fields.
	Fixed.

nntpd:
=====

050799: included patch for IPv6 by Mark Brown <broonie@tardis.ed.ac.uk>.

Miscellaneous:
=============

050799: calling ./configure with --with-ipv6 will enable IPv6.
050799: fixed Mark's patch from yesterday.
040799: gcc-specific compiler flags are now only set if gcc was indeed
	detected. Patch by Mark Brown <broonie@tardis.ed.ac.uk>.
010799: If libpcre was already installed by something else, this would not
	be recognized properly. Bug reported by Mark Brown
	<broonie@tardis.ed.ac.uk>.

=============================================================================

History of 1.9.3b5 -- changes since 1.9.3b4:

applyfilter:
===========

270699: files are only stat()ed if they start with a digit
270699: applyfilter now checks at most the first 5000 bytes of an article
	(which should be more than enough to accommodate headers). This
	avoids lots of realloc()s.
270699: program crashed when encountering articles without bodies. Now
	these articles are deleted.

libutil:
=======

270699: activutil: isinteresting(), insertgroup() and findgroup() are now
	case-insensitive
270699: miscutil: new function lowercase() (from 1.10b2)
270699: filterutil: now logs matched expression to LOG_DEBUG
270699: filterutil: now works with pcre instead of the libc regexp. This
	leads to a further speed increase. Suggested by Sven Paulus
	<sven@karlsruhe.org>.

Miscellaneous:
=============

270699: update.sh: now re-sorts the groupinfo file in a case-insensitive
	manner. Must be called when updating from 1.9.2 or smaller.
270699: Makefile.in now created with autoconf-2.13 instead of 2.10.

=============================================================================

History of 1.9.3b4 -- changes since 1.9.3b3:

fetchnews:
=========

260699: getgroup(): doing things with an uninitialized variable (which
	was also unnecessary) could lead to segfaults. Bug discovered
	by Mark Brown <broonie@tardis.ed.ac.uk>.

newsq:
=====

160699: output format changed (code written by Matthias Andree
	<mandree@sx1.HRZ.Uni-Dortmund.DE>)

=============================================================================

History of 1.9.3b3 -- changes since 1.9.3b2:

applyfilter:
===========

240699: now also checks for kept files
230699: now delete message-id links immediately together with others. This
	saves a lot of time.
230699: added "if (debugmode)" in front of various "syslog(LOG_DEBUG,...)"
	statements

fetchnews:
=========

240699: replaced getaline() with tgetaline() where appropriate
220699: inserted an additional fflush(stdout) into main() to avoid
	double logging of messages. Fix provided by Stefan Troeger
	<stefan.troeger@wirtschaft.tu-chemnitz.de>.

libutil:
=======

240699: configutil: username and password are not logged any more in clear
	text to LOG_DEBUG
240699: nntputil: new function tgetaline() which is a wrapper for getaline()
	that honours timeouts. timeout considered is that of the current
	server. (Originally introduced 110499 in 1.10b1)

nntpd:
=====

240699: parser() rewritten. Now the connection is closed after 15 minutes
	of inactivity

Miscellaneous:
=============

230699: Makefile.in: patch by Philippe De Muyter <phdm@macqel.be> to
	compile leafnode in a separate directory
220699: removed all the rpm stuff from configure.in and put it into
	makerpm.sh. This also leads to changes in Makefile.in. However,
	"make rpm" does not work (breaks with "bad user/group").

=============================================================================

History of 1.9.3b2 -- changes since 1.9.3b1:

fetchnews:
=========

210699: openlog() now called with "fetchnews" instead of "fetch"

libutil:
=======

210699: miscutil: rfctime(): fiddled with the timezone. Bug reported by
	Sven Paulus <sven@karlsruhe.org> (rfctime did some odd rounding).

nntpd:
=====

210699: doxhdr(): handles now also "xhdr [header] a-" correctly
210699: removed a debug call from fopenart()

=============================================================================

History of 1.9.3b1 -- changes since 1.9.2:

applyfilter:
===========

150399: for some reason, the config file was read twice (which lead to
	crashes). Fixed.

fetch/fetchnews:
===============

210699: renamed fetch to fetchnews to avoid potential conflicts with
	other programs
100499: getgroup(): fetch would crash with a segmentation fault if all
	headers began with whitespace because of an uninitialized
	variable. Bug report and patch provided by Stephan Block
	<block@enst.fr>.
020499: new function _ignore_answer() (not used yet)
220399: added "if (debugmode)" in front of various "syslog(LOG_DEBUG,...)"
	statements
210399: postarticles(): we had forgotten to remove the putaline() which
	resulted in complete screw-up of articles posted. Fixed.
200399: main(): we always authenticate if we have a username entry for
	the current_server. The reason is that it is not always obvious
	whether you have to authenticate yourself at the remote server
	or not. Problem reported by Mark Lutz <Mark.Lutz@usa.net>.
200399: postarticles(): we don't use putaline any more to post bodies
	because the line length of bodies is not restricted and lines
	> 1023 chars crashed sprintf(). Bug reported by Sven Paulus
	<sven@karlsruhe.org>.
200399: getgroup(): replaced possible / in Message-IDs with @ (like in
	lookup()).
190399: problems with dots at the beginning of lines fixed. Insisted upon
	(rightly!) by Johnny Tevessen <j.tevessen@gmx.net>.
190399: delposted() looks for stale articles in out.going. Patch by
	Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>.
170399: getgroup(): reply to HEAD and BODY are now checked only for the
	first two digits to make fetch work with more broken upstream
	servers.
170399: getgroup() crashed when checking for a Lines: header which was
	not present. Fixed. Independently discovered by Juha Pohjalainen
	<jmp@iki.fi> and Jarle Rongved <rongved@online.no>.
160399: nntpactive(): LIST NEWSGROUPS should now work also with faulty replies
	(like the ones produced by INN 1.5.1).
160399: processupstream(): no more logging of getaline()s when reading
	from files in /var/spool/news/leaf.node/
140399: fetch -P would delete lockfiles not produced by it. Fixed.
120399: getgroup(): parsing for maxbytes didn't work. Reported by
	Friedhelm Hinrichs <F.Hinrichs@tu-bs.de>. My fix will still
	fail if XHDR get out of sync, but the other option (to compare
	the whole array every time) is not very elegant either.
120399: age(): included some fixes provided by Friedhelm Hinrichs
	<F.Hinrichs@tu-bs.de>.
090399: output of XHDR is now not logged to LOG_DEBUG anymore.
090399: added a warning message in nntpactive() to indicate to users
	whether they should use "nodesc = 1" in their config files
070399: fixed a bug (reported by Jeff Grossman <jeff@stikman.com>) in
	processupstream(). When "linux.announce" and "comp.os.linux.announce"
	were fetched from the same server, fetch had sometimes problems
	to store the correct last article number for "linux.announce".

libutil:
=======

130499: configutil: raised default timeout to 30 seconds (from 10, which
	would sometimes hit on my local server).
030499: artutil: fixed a bug in fgetheader(): to always get a header, it
	is necessary to rewind the file before doing the search
020499: included lots of tabs instead of spaces into the code of
	activutil.c
210399: xoverutil: no more logging of "wrote .../.overview" to stdout
	because this did confuse so many people (despite it being mentioned
	in the docs)
170399: xoverutil & nntputil: replaced all atoi() with strtol()
170399: configutil: readconfig() now parses the actual value of
	create_all_links. Suggested by Taisuke Yamada <tai@imasy.or.jp>.
170399: configutil: replaced all atoi() with strtol()
160399: xoverutil: moved legalxoverline() to texpire.c and changed a
	parameter. This reduces the size of fetch and nntpd by about 3 kBytes
	and the size of texpire by almost 20 kBytes.
150399: updateactive(): "if ( fopen(...) > 0 )" changed to "if
	( fopen(...) != NULL )". Bug reported and fix provided by
	Johnny Teveen <j.tevessen@gmx.de>.
140399: xoverutil: logging of faulty xoverlines now to LOG_DEBUG instead of
	LOG_INFO.
120399: configutil: maxbytes was ignored if maxlines was not set as well.
	Fixed. Reported by Friedhelm Hinrichs <F.Hinrichs@tu-bs.de>.
070399: miscutil: new functions findinlist() and freelist().
070399: miscutil: removed a potentially confusing error message from
	lockfile_exists() which was introduced for testing purposes in 1.9.1.

nntpd:
=====

120499: doxhdr() failed on XHDR [header] from-to. Reported and patched
        by Steven Flintham <steven@lemma.demon.co.uk>.
120499: dolist() now doesn't call chdir anymore which caused leafnode
	to forget the directory of the current group. Bug reported by
	Steven Flintham <steven@lemma.demon.co.uk> and Thomas J.
	Merritt <tjm@codegen.com>.
160699: dopost(): if posting fails, error is now 441 instead of 440 (as
	it should be). Fixed by Matthias Andree 
	<mandree@sx1.HRZ.Uni-Dortmund.DE>.
090399: fleshed out dohelp(); patch by Ed Carp <erc@pobox.com>.

texpire:
=======

230399: faulty syslog() statement fixed which lead to a segfault
160399: moved legalxoverline() here from xoverutil.c
140399: removed double logging of faulty xoverlines

Miscellaneous:
=============

210699: Makefile.in: changed "chown user.group" to "chown user:group".
	Suggested by many people (I forgot who).
210699: selected the interesting bits from 1.10b2 to put them into 1.9.3.
150699: README: added some more description to the troubleshooting entry
070699: configure.in: RPMSOURCEDIR and some other variables were created
	by grepping the output of "rpm --showrc". With new versions of
	rpm this grep would sometimes yield more than one hit, leading
	to garbled configure scripts. Bug described by Matt Armstrong
	<matt@lickey.com> (lots of other people stumbled upon this, but
	Matt was the only one who managed to investigate it in depth making
	it easy to fix it).
010699: Makefile.in: USRDIR was not created if not present. Bug discovered
	by Rene Wuttke <rene@wuttke.net>.
040499: german manpages by Alexander Reinwarth <a.reinwarth@gmx.de>.
020499: Makefile.in: changed the gids in "install -g gid" from "root" to "0"
	(there is no group called "root" on FreeBSD).
190399: lots of (int) castings changed to (unsigned char). Patch provided
	by Johnny Tevessen <j.tevessen@gmx.net>
180399: german README, courtesy of Alexander Reinwarth <a.reinwarth@gmx.de>
170399: german INSTALL, courtesy of Alexander Stielau <aleks@zedat.fu-berlin.de>

=============================================================================

History of 1.9.2 -- changes since 1.9.1:

Miscellaneous:
=============

030399: leafnode.h: had forgotten to include <sys/types.h> before <regex.h>
	which resulted in compilation errors

=============================================================================

History of 1.9.1 -- changes since 1.9:

fetch:
=====

220299: articles fetched are now also counted correctly if delaybody is
	set. Bug reported and fixed by Rey IJben <rey@linuxrules.xs4all.nl>.
170299: getgroup(): if /var/spool/news/message.id/ subdirectories are
	not present, they are now created as needed. Patch provided by
	Max Matveev <max@melbourne.sgi.com>
170299: processupstream(): error message was done with a zero pointer.
	Bug reported and fixed by Max Matveev <max@melbourne.sgi.com>
	and Stephan Block <block@enst.fr>
140299: postarticles(): haveid was initialized at the wrong place. Bug
	reported by Jeff Grossman <jeff@stikman.com>.
140299: getgroup(): "artlimit" is now tested after "initiallimit" (like
	in leafnode+-2.4). Bug reported by Rey IJben
	<rey@linuxrules.xs4all.nl>.
140299: getgroup(): "initiallimit" is now only applied if the last article
	number of a newsgroup on the local server is 1.
140299: moved the "struct stringlist" declaration to leafnode.h
140299: getgroup(): moved checking from lines back into the general
	checking of headers. XHDR was very slow, especially when logging
	LOG_DEBUG.
140299: main(): using current_server in main loop instead of servers
	(doesn't matter but is easier to understand)
140299: nntpactive() now uses the global variable current_server instead
	of a local variable

libutil:
=======

030399: activutil: fixed a mistake in insertgroup() which had removed all
	the group descriptions
150299: activutil: did some benchmarking
	1) getting 5000 lines from active file and building a new tree with
	   insertgroup() (current algorithm if you use fetch for the very
	   first time or with -f):
	   1 min 10 sec, of these were 61 secs user time; load 88.1%
	2) building tree by using readactive(), then getting 5000 lines from
	   active file on stdin and rebuilding tree with insertgroup():
	   3 sec, of these were 2 secs user time; load 84.7%
	3) getting 5000 lines from active file and concatenating them in
	   memory by using critrealloc() and strcat() (no sorting!):
	   2 min 45 sec, of these were 141 secs user time; load 86.0%
	4) getting 5000 lines from active file and putting them into a
	   stringlist (unsorted):
	   < 1 sec; load 92.0%
	=> insertgroup() must be improved
140299: miscutil: the lockfile mechanism does not always work. Now, if the
	lockfile can be opened but not parsed, 1 is returned. If the lockfile
	cannot be opened errors are written to LOG_ERR (experimental)

nntpd:
=====

160299: managed to build wildcard matching into dolist() and list()
160299: major overhaul of doarticle() because it could be forced to
	segfault reproducibly
160299: fopenpseudoart() partially taken from leafnode+-2.4
160299: error() taken from leafnode+-2.4

texpire:
=======

210299: groupexpire didn't work on globs. Bug reported and fixed by
	Walt Mankowski <waltman@netaxs.com>

Miscellaneous:
=============

230299: new file makerpm.sh which constructs RPMs on the fly. Template
	was originally submitted by Karsten Merker <merker@guug.de> and
	heavily modified.
170299: Makefile.in: $PREFIX_USR now also used for the $LIBDIR
160299: lots of castings in isspace(), isalpha(), isalnum() and isdigit()
	to avoid stupid warnings on Suns
160299: we don't need sys_nerr and sys_errlist anymore because of the
	change in nntpd.c error().
140299: added create_all_links to config.example

=============================================================================

History of 1.9 -- changes since 1.8.1:

applyfilter:
===========

030299: optimized the filtering algorithm; filtering is now at least twice
	as fast (I ran a benchmark with a 146 line filter file:
			query present	query not present
	  old version	  12.8 sec          17.1 sec
	  new version	   5.3 sec	     7.7 sec)
020299: first and last article of a filtered newsgroup should now be
	set correctly
210199: added locking mechanism to applyfilter
190199: added applyfilter(8) to the distribution

fetch:
=====

130299: postarticles(): in some cases, fetch would complain about directory
	names not being posted due to uninitialized variables. Fixed. Bug
	discovered by Jeff Grossman <jeff@stikman.com>.
120299: postarticles() now logs the number of articles posted if fetch
	is called with -v to news.info . Suggested by Jeff Grossman
	<jeff@stikman.com>.
120299: main(): changed the patch of Jeff East somewhat (reply was
	assumed to be filled correctly by nntpreply() which it was not).
110299: main(): authorizing for posting articles improved. Patch by
	Jeff East <an972@freenet.carleton.ca>
090299: postarticles(): for some unknown reason, fgetheader() was able to
	retrieve Message-IDs from . and .. therefore directories are now
	explicitely excluded from posting
090299: getgroup(): the Supersede:s code causes fetch to hang. Fixed this
	by commenting it out with #ifdef NOTYET
090299: main(): authorizing was not done for posting articles. Bug found
	and fixed by Jeff East <an972@freenet.carleton.ca>
080299: postarticles(): improved Supersedes: handling (still nonfunctional).
	For some odd reason, Supersedes: headers were actually looked for
	in the Lines: header.
080299: postarticles(): changed logging of mistakes a bit
070299: nntpactive(): fixed a problem that a LIST ACTIVE was always only
	done for the first server, not for the others. This includes
	writing two new functions, checkactive() and updateactive(),
	which also reduces the number of disk accesses somewhat. Bug
	discovered by Jens-Uwe Rumstich <rumstich@informatik.hu-berlin.de>.
070299: processupstream(): error message added if an "interesting" group
	was not found in the groupinfo file
070299: processupstream(): apparently, there were sometimes problems if
	the server files (/var/spool/news/leaf.node/my.server.name) did
	exist but were empty. Now, empty files are ignored and not read.
060299: age(): now I can also parse written-out weekday names
040299: getgroup(): applied a patch by Arne Wichmann <aw@anhrefn.saar.de>
	which will avoid unsubscribing groups that have little traffic
040299: postarticles(): some text changed
040299: supersede(): removed an unnecessary "syslog( LOG_DEBUG, ... )"
040299: getgroup(): evaluated a stat structure which was not filled
	beforehand. This obviously led to unwanted unsubscriptions.
	I have no idea when this error was introduced. Problem reported
	by Dirk Dettmering <dettmer@pc16154.pharmazie.uni-marburg.de>
	and David Steuber <david@david-steuber.com>.
040299: getgroup(): changed syslog message when skipping groups
030299: getgroup(): fixed a bug which truncated all headers by the
	last char and was introduced yesterday
020299: getgroup(): assembly of multiline headers was faulty. Headers
	were concatenated directly and a linefeed put afterwards. Now,
	linefeeds are put between the two parts (and only if the first
	part exists at all).
010299: if fetch is called with -P, it does not care for the presence
	of the lockfile any more (not necessary)
310199: postarticles(): if an article with the same message id was
	already upstream, error treatment was not always consistent.
	Code changed by Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>.
210199: fetch_new.c contains a asynchronously working version of fetch
	which stores articles in /var/spool/news/in.coming/<message-id>
	but does not sort them in yet. This will have to wait until
	the code for rnews is running. fetch_new.c is not part of the
	1.9 distribution.
210199: made TIMEOUT_LONG, TIMEOUT_SHORT and TIMEOUT_ACTIVE configurable
200199: declared current_server here (and not in leafnode.h anymore)
	This reduces the code size of nntpd and texpire by about 20 kBytes
	(including symbols).
200199: replaced a clumsy if... construction in main() with a more
	elegant switch ... case
190199: added code to handle Supersedes: headers
190199: if fork() fails, fetch now tells something about the reason
190199: included a setsid() call in the fork(). This fixes the problem
	that fetch is killed by the end of sudo or the ppd. Problem
	reported by Jo Moskalewski <JoMo@schwaben.de> and Joerg Dietrich
	<uzsv7x@ibm.rhrz.uni-bonn.de>.
180199: newsgroups with . at the beginning are not allowed (RFC1036,
	son-of-rfc1036). Reverted change from 150199.
180199: removed an error condition in getgroup() which resulted from an
	uninitialized variable
180199: removed a looping condition in getgroup() which I had introduced
	yesterday
170199: fetch now checks before posting whether a posting with the same
	message id is already upstream
170199: gave getgroup() a facelift which will make it (hopefully) a little
	faster. Basically, I replaced the clumsy error stuff with a lot of
	continue commands and removed some superfluous if... constructs.
170199: corrected a silly mistake in getgroup() (trying to log an int with
	syslog("%s") led to a segfault)
160199: aborting fetch with Ctrl-C will now skip fetching but xoverfiles
	will be generated
160199: minlines and maxlines are now also checked via XHDR
160199: removed an obsolete fflush() from main
150199: removed an obsolete nntpdisconnect() from main which did not
	exactly speed up fetch
150199: apparently there exist newsgroups which start with a . in the
	name. fetch ignored these so far. Bug reported and fixed by
	A. Olaru <aolaru@datacomm.ch>.
150199: now maxbytes really checks for bytes, not lines
130199: more error checking when storing articles (suggested by Maarten
	Geurts <mgeurts@tip.nl>, who is currently trying to port leafnode
	to NT)
100199: fixed a bug when posting failed (reported by Michael Stroeder,
	<s_stroed@ira.uka.de>).
100199: if -P is given, active file should not been written (but was).
	Fixed.
090199: modified -P option that filters are now not read in that case
	(this helps with some segfaults while posting)
060199: changed some code in nntpactive() to make fetch deal more
	robustly with failing hardware clocks. Problem reported by
	Peter Kronfuss <pkronfuss@ycom.or.at>.
040199: new option -P : only post articles. First suggested (including
	code) by Michael Mauch <elmicha@unidui.uni-duisburg.de>.
040199: age(): now also able to parse dates of the form
	    Date: Sun,  3 Jan 1999 14:35:24 +0100
	instead of
	    Date: Sun, 03 Jan 1999 14:35:24 +0100
030199: postarticles(): articles are now not logged anymore into LOG_DEBUG

libutil:
=======

120299: configutil: stabilized parse_line() against empty lines
120299: configutil & artutil: re-introduced create_all_links (requested by
	Alan Shutko <ats@acm.org>)
110299: xoverutil: if UIO_MAXIOV is not defined, set it to 16 (regardless
	of what it might be called)
110299: miscutil: initvar(), when getting a NULL argument, will now not
	perform setregid() etc. changes. Needed for some instances of
	nntpd, although I would have preferred to see the nntpd also run
	as user news.
110299: miscutil: patched getaline() to work with binary files. Patch by
	Matthias Andree <mandree@dosis.uni-dortmund.de>.
100299: configutil: yesterday's fix completely messed up parsing. Fixed.
090299: configutil: trailing non-alnums were removed (for example, passwords
	could only end with [a-zA-Z0-9]). Bug discovered by Erik Beckers
	<erik.beckers@planet-interkom.de>.
070299: miscutil: new function ngmatch() matches a pattern to a string.
	Was previously in texpire.
060299: xoverutil: Lines: header were mandatory in getxoverline(). Now
	they are not any more. While doing this, I played a bit more
	with the function. Independently found by Mark Hannon
	<mark.hannon@stockholm.mail.telia.com> and <henke@phoenix.net>.
040299: artutil: messed with storearticle() (still unused)
030299: filterutil: readfilter() now does not log filter contents to
	LOG_DEBUG anymore
290199: filterutil: readfilter() now immediately returns if "filterfile"
	is empty. Bug reported by Dirk Dettmering
	<dettmer@pc16154.pharmazie.uni-marburg.de>.
280199: configutil: added configurability for the right part of the
	message ID (hostname)
280199: moved buildpseudoart() from artutil.c to nntpd.c
250199: artutil: fgetheader() allocated not enough memory which could
	lead to segfaults. Bug reported and fixed in 1.8.1 (getheader())
	by Michael Schwendt <schwendt@my-dejanews.com> (was probably
	the reason for the segfaults in 1.8.1).
220199: artutil: added new procedure storearticle() (currently unused)
210199: configutil: added configurability of timeout (per server),
	TIMEOUT_SHORT, TIMEOUT_LONG and READ_INTERVALL (now timeout_short,
	timeout_long and timeout_active). Defaults are as in previous
	versions. The names of the new parameters (except "timeout")
	are compatible with leafnode+-2.4
210199: configutil: made existing features compatible with leafnode+-2.4
210199: moved lockfile_exists() from fetch.c to miscutil.c because it
	is also needed in texpire and applyfilter
200199: moved putaline() from miscutil.c back to nntputil.c
180199: activutil: readactive() now checks whether groupinfo is a file
170199: artutil: store() now always writes Xref: lines
170199: moved putaline() from nntputil.c to miscutil.c
170199: nntputil: improved DEBUG logging in authenticate()
160199: artutil: replaced getheaders() with getheader() and fgetheader()
150199: miscutil: new function initvar() which initializes some global
	variables
150199: miscutil: minor fix in getaline() with respect to debugging
150199: nntputil: minor fix in putaline() with respect to debugging
150199: filterutil(): readfilter() now ignores empty lines and lines starting
	with # (to allow for comments). Suggested by A. Olaru
	<aolaru@datacomm.ch>
150199: filterutil: filter was not initialized properly. Fixed.
150199: xoverutil: getxover() would produce strange xfirst and xlast
	numbers if a directory was empty. Now, xfirst and xlast are
	set to 1.
150199: xoverutil: getxover(), when called from nntpd, would delete
	"illegal articles" (whatever that was) which sometimes lead to the
	destruction of whole directories in the spool. Now "illegal articles"
	are just ignored. Reported by Joerg Dietrich
	<uzsv7x@ibm.rhrz.uni-bonn.de> and possibly Evert Meulie
	<evert@royal.net>.
150199: artutil: getheaders() would always insert an additional linebreak
	before "other headers". Fixed.
100199: activutil: if newsgroup description is updated and new description
	is '-x-' or 'local grp', it is ignored.
100199: removed doubly defined variables s (was in miscutil and configutil),
	headers (in miscutil and artutil) and expire_base (configutil and
	texpire). Reported by John R. Schrader <jrschrader@mainz-online.de>.
090199: filterutil: fiddled with readfilter() because the filterlist
	could be the cause for certain segfaults
050199: artutil: getheaders() would segfault at times. Fixed (hopefully).
	Bug reported by Vladimir Litovka <doka@root.webest.com> and others.
030199: artutil: getheaders() always assumed that the file in question
	indeed contained headers. Now it tests whether this assumption
	is correct. Reported and fixed by Matthias Andree
	<mandree@dosis.uni-dortmund.de>

nntpd:
=====

110299: main() now calls initvar() with a NULL argument
050299: parser(): miscellaneous changes to speed it up a bit. Command line
	length is now generally restricted to 1000 chars. Commands are
	not converted to lowercase anymore since comparison is done
	with strcasecmp() anyway. If buffer overflow is tried, leafnode
	now responds with 500 instead of 400 and continues to work (of
	course this opens the door to DoS attacks)
020299: parser(): quit does not call rereadactive()
020299: parser(): some logging added
280199: generateMessageID(): made right part of message ID configurable
280199: moved buildpseudoart() from artutil.c to nntpd.c
280199: rewrote fopenart() because it did not always open pseudo articles
	when it was supposed to
280199: removed printf to nntpout (actually removed earlier, but not
	logged in here)
210199: rereadactive() is now called for every command. This might slow
	down the performance a tiny bit but ensures that active is always
	kept recent.
180199: tried to minimize the calls to getxover()
170199: LIST EXTENSIONS now lists OVER and LISTGROUP.
170199: OVER command supported (supposed to replace XOVER).
170199: dolistgroup() now returns 411 if group is unknown.
170199: if a LIST command cannot be parsed properly, dolist() now returns
	503 instead of 501.
170199: removed "if ( g->last > g->first )" condition in list() which
	cannot occur anymore
170199: STAT <message-id> now returns article numbers where appropriate
	(same goes for HEAD, BODY and ARTICLE)
170199: implemented LAST and NEXT more correctly
150199: removed dostat() again and fiddled a lot with doarticle() instead.
	doarticle() now also returns Message-IDs, as requested by RFC977
	(apparently needed for using GNUs).
150199: in doxhdr() and doxover(), made sure that there was a change
	to a group directory before getxover() was called. This involved
	some more drastical changes in doxover().
130199: made NEWNEWS compliant with the new standard (can now parse both
	two- and four-digit years)
120199: XOVER may now also return 420 if article range is out of real
	range
120199: fiddled a bit with doarticle()
120199: introduced dostat() to correctly answer STAT requests (needed for
	pine). STAT <message-id> does not work yet, however. Bug reported
	by Evert Meulie <evert@royal.net>.
100199: markinterest(): if...else construction was ambiguous. Fixed.
	Reported by John R. Schrader <jrschrader@mainz-online.de>.
040199: fopenart(): opening an article with a non-existant message id
	would lead to a crash because it was tried to open a pseudo
	article when no group was selected. Fixed.
040199: doarticle(): it was not possible to get articles by Message-ID.
	Fixed. Bug reported by Matthias Andree <mandree@dosis.uni-dortmund.de>

texpire:
=======

070299: some more changes by Kazushi (changed ints into unsigned longs, and
	other stuff)
070299: wildcard matching moved to miscutil.c
220199: groupexpire now understands glob(1) wildcard patterns
210199: added locking mechanism to texpire
190199: merged code with leafnode+-2.4
190199: texpire now also checks /var/spool/news/message.id/000/
100199: expiremsgid(): if...else construction was ambiguous. Fixed.
	Reported by John R. Schrader <jrschrader@mainz-online.de>.
100199: removed doubly defined variables expire_base (configutil and
	texpire). Reported by John R. Schrader <jrschrader@mainz-online.de>.

Miscellaneous:
=============

130299: README: troubleshooting section expanded
110299: Makefile.in: install-sh must be mode 755 in the tar.gz file. Fixed.
110299: Makefile.in: install flag -s now coded as $(STRIP). Suggested by
	Matthias Andree <mandree@dosis.uni-dortmund.de>
100299: messed around with configure.in because it sometimes would not
	define the HAVE_SYS_NERR even if it was present. Now we define
	it explicitely.
070299: configure.in & Makefile.in: some adjustments to create rpm's.
	(Variables are written into the Makefile, but are not usable yet.)
070299: configure.in: with some installations, sys_nerr is defined in
	stdio.h. Therefore, we now also check stdio.h for sys_nerr.
	Reported by Jeff Grossman <jeff@stikman.com>.
070299: Makefile.in: set $USR_PREFIX to @prefix@ instead of /usr/local .
	This makes it possible to call "configure" with "--prefix=/usr"
	to relocate the leafnode binaries to /usr/sbin and /usr/bin.
070299: added ngmatch() to leafnode.h
030299: fixed an error in texpire.8
020299: Makefile.in: "make clean" now keeps config.h and Makefile; to remove
	them as well, do "make realclean".
020299: Makefile.in: had forgotten newsq in "make all"
310199: removed a "#define HAVE_SYS_NERR" from leafnode.h which previously
	seemed necessary to correctly build leafnode on my system but
	generated lots of warnings on other systems
280199: rewrote newsq in C
270199: made some corrections to Makefile.in so that "make install" will
	compile cleanly (reported by Juergen Vollmer <vollmer@cocolab.de>)
210199: removed scarce_links from leafnode.h
210199: configure.in: added a test for the existence of sys_nerr and removed
	"#ifdef __hpux__" and "#ifdef sun"
200199: added "#ifdef __hpux__" to leafnode.h
190199: moved to compiling with autoconf, changed INSTALL accordingly
150199: fiddled a bit with the documentation
150199: removed blocked() declaration functions from leafnode.h
140199: nice copyright remark in checkgroups.c (was missing)
130199: changed the maxage in the config.example file to 10 (the default).
	Suggested by Maarten Geurts <mgeurts@tip.nl>.
090199: install now called with -c for better BSD compatibility (without
	-c, BSD install removes the original files)
090199: newsq now installed with mode 755 instead of 750 (suggested by
	Joerg Dietrich <uzsv7x@ibm.rhrz.uni-bonn.de>)
050199: changed Makefile to work with plan /bin/sh instead of bash (by
	Andy Doran <andy@psn.ie>)
050199: leafnode.h: added patch for FreeBSD, courtesy of Andy Doran
	<andy@psn.ie>
050199: fiddled a bit with the Makefile to avoid putting test code in the
	final archive when doing a "make dist"
040199: removed two files with test source which inadvertantly popped up
	in 1.8.1
040199: changed some more things in README.
040199: removed the warning about changing upstream servers from leafnode.8
	and added a paragraph on it in the README.
040199: reintroduced the creation of libutil.a from the Makefile. This
	makes the resulting executables much smaller (except fetch) and
	less memory-hungry. "ar" is called as $(AR) and "ranlib" is called
	explicitely since $(RANLIB) does not work on my system and
	$(AR) -s does not work on NetBSD. In the future, it might be
	necessary to switch to automake/autoconf.

=============================================================================

History of 1.8.1 -- changes since 1.8:

libutil:
=======

211298: activutil: if the first article of a newsgroup is 0, it is set to 1.
	The last article is set to 1 if it is smaller than the first one.
	This will fix problems with Netscape which barfs if encountering
	zero article numbers. Reported by Peter Katzmann
	<peter@katzmann.fd.shuttle.de>.
211298: filterutil: forgot to #include <syslog.h>. Fixed.
191298: filterutil: glibc2-based distributions (RedHat 5.2, Debian 2.0)
	demand that <sys/types.h> be included before <regex.h>. Bug reported
	and fixed by Trever Adams <highlander@teleteam.net>.

checkgroups:
===========

211298: removed an unnecessary #include <syslog.h>

fetch:
=====

020199: fetch could crash if an "article x already stored" message was logged.
	The reason was that an old or uninitialized filehandle was being
	checked. Bug reported and fixed by Joe Hutchinson
	<joeh@netspace.net.au>
020199: age() did not calculate proper ages when the year was changing.
	Fixed. (Bug was already present in 1.4 and had been reported for
	1.8 by Jose Rosales <jrosales@tdv.net> and Stefan Luetkebrune
	<s.luetkebrune@ndh.net>)
211298: fixed a typo in main()

nntpd:
=====

231298: some changes in doxhdr()
231298: some changes in dolistgroup() to deal properly with empty
	newsgroups
211298: changed doxover() and doxhdr() to account for empty directories
211298: removed lots of unnecessary "\r\n" from syslogs
191298: if access time change of files in interesting.groups failed,
	error message was garbled (reported by Harald Kretzschmar
	<hk@thuer.slf.uunet.de>). Fixed.

Miscellaneous:
=============

020199: added a patch for NetBSD to leafnode.h (provided by Anders Dinsen,
	<dinsen@danbbs.dk>)

=============================================================================
 
History of 1.8 -- changes since 1.7.1:

libutil:
=======

131298: filterutil: filtering seems to work now, but it is fairly slow. I
	wrote a little program to remove all the spam from alt.religion.
	scientology.
131298: activutil: in readactive(), the last article is now set to at least
	1 (was 0). Age is set to 0 (was 1).
131298: activutil: added isinteresting() from fetch.c
131298: artutil: new file. Received buildpseudoart() from miscutil,
	store() from fetch.c and new function getheaders().
131298: "create_all_links = no" is now the default and cannot be switched
	off. As mentioned by Arnt Gulbrandsen, this invites problems if new
	newsgroups are subscribed to because the Xref: lines are not
	properly modified. We'll look into this later :-)
131298: activutil: messed around with insertgroup() to remove segfaults
	(apparently successfully).
121298: removed declaration of errno and h_errno from various files
121298: filterutil: new (at the moment empty)
101298: miscutil: chdirgroup() now returns 1 if successful, 0 if not.

fetch:
=====

171298: crosspostlimit was not honoured anymore (in getgroup()). Fixed.
141298: removed some logging from getgroup()
141298: intelligently enough, I made a bug when building in filtering
	support which would result in only the last header being filtered
	on. Fixed.
131298: replaced all occurences of snprintf() with sprintf() to make
	leafnode compile on OSF1
131298: managed to build filtering support into fetch
131298: postarticles() does not close connections any more.
131298: fetch now only posts an article to a server if the server has this
	group. Many servers kill a connection if they get a posting which
	they cannot process.
131298: moved store() to artutil.c and isinteresting() to activutil.c
121298: fetch would run into problems when a newsgroup name was completely
	contained in another newsgroup name *and* the order in the
	/var/spool/news/leaf.node/server.name file was such that the
	longer name came first. Bug reported and tracked down by
	Kent B. Hansen <kent.hansen@bigfoot.com>. Fixed (hopefully).

nntpd:
=====

141298: dopost() would delete empty lines from postings (apparently
	introduced yesterday). Fixed.
131298: replaced all occurences of snprintf() with sprintf() to make
	leafnode compile on OSF1
131298: first attempt to implement local groups failed because getxover()
	would remove the articles which were constructed
121298: markinterest(): open() with APPEND flag would not change the mtime,
	therefore we now change the mtime by calling utime() and only
	call fopen() when utime fails with ENOENT (problems were reported
	by various people, among them Trever Adams <highlander@teleteam.net>)
121298: rewrote doxhdr(); deals now properly with new newsgroups
121298: rewrote dolistgroup()
101298: introduced a new global variable "pseudogroup" which is TRUE if
	the current newsgroup is a newly created one (i.e. without
	spool directory and .overview file), FALSE otherwise. This variable
	is set by dogroup() and dolistgroup().
101298: in dogroup() and dolistgroup(), whether a group is "pseudo" is now
	determined by checking whether its directory exists or not.

texpire:
=======

121298: added a "\n" to one log message (reported and fixed by Michael
	Schwendt, <sidplay@geocities.com>)

misc:
====

171298: fixed a typo in INSTALL (discovered by Michael Dreher,
	<micha@planet-interkom.de>)
141298: added some rudimentary documentation about the filtering to
	INSTALL
131298: Makefile: added libs for Suns
131298: leafnode.h: messed around to compile leafnode on Suns and HP-UX
121298: leafnode.h: #include <time.h> (for time_t)
121298: removed the creation of libutil.a from the Makefile. The various
	object files are now individually linked together. This avoids
	calling "ar" and possibly "ranlib" which may be not installed on
	other systems. Suggested by Anders Dinsen <dinsen@danbbs.dk>
	who compiled leafnode-1.7.1 on NetBSD 1.3.2

=============================================================================

History of 1.7.1 -- changes since 1.7:

libutil:
=======

091298: configutil: fixed a bug in readconfig() which crippled the "nodesc"
	option. The format of "nodesc" is now different: it is put on a
	separate line.
081298: activutil: replaced the for{} loop for removal of spurious '\0'
	bytes with calls to memchr(). This makes the operation at least
	twice as fast if the groupinfo file is not corrupted. If the
	groupinfo file is corrupted, the operation becomes rather slow,
	however (which is maybe not too bad since it makes users notice :-).

misc:
====

091298: fixed "nodesc" description in leafnode.8 and config.example
081298: some changes to the README file

=============================================================================

History of 1.7 -- changes since 1.6.2:

libutil:
=======

031298: configutil: included some code for parsing "nodesc" parameters with
	servers
031298: configutil: removed code for postserver; we don't need it anymore
221198: configutil: posting would not work anymore. Fixed.
211198: configutil: messed up and repaired parse_line()
211198: xoverutil: removed a superfluous "#include <setjmp.h>"
211198: deleted sfgets() from nntputil
211198: moved getaline() from nntputil to miscutil
211198: configutil: now every server can have its own port, username and
	password (suggested by Joey Hess <joey@kitenet.net>)
211198: miscutil: chdirgroup() did always create new directories (annoying
	when using Netscape). Fixed.
201198: configutil: some changes with regard to starting of debugging
201198: configutil: new parameter maxbytes. Instead of actually determining
	how many bytes a message has, maxbytes calculates the maximal number
	of lines such a message might have and works then with maxlines.
	This reduces NNTP traffic but might be deleterious for program listings
	and similar stuff.
191198: configutil: new parameter minlines
181198: activutil: readactive(): stuff is now not free()d anymore at the
	beginning of the procedure (caused segfaults)
131198: configutil: debugmode > 1 now makes all programs produce corefiles
131198: activutil: blocked stuff from leafnode-1.5 removed
131198: activutil: readactive(): stuff no more static
131198: activutil: readactive(): active is now always cleared
091198: activutil: complete rewrite of readactive() since it would still
	segfault at times.
061198: nntputil: new function nntpdisconnect() which makes all the proper
	tests and then disconnects an NNTP connection.
311098: xoverutil: getxover() returns now 0 when directory is empty
301098: configutil: new parameter "debugmode". If set, the programs will
	continue to generate lots of output to the news.debug syslog
	facility. Otherwise, they won't.

fetch:
=====

051298: if a new server is added in the config file, fetch now gets the
	full list of newsgroups the first time.
041298: articles are now posted to all upstream servers that allow posting.
	To achieve this, the filenames of successfully posted articles are
	put into a list and all entries in this list are deleted later with
	the new function delposted(). This is probably not bug-free at all
	yet.
031298: code for postservers removed: fetch now realizes whether a server
	allows posting or not and only in the former case will try to post
	articles
031298: code for servers which don't support XGTITLE or LIST NEWSGROUPS
	is now partially configurable: option should be
	server = your.server.host nodesc
221198: lockfile_exists() introduced: makes all proper tests and removes
	stuff from the main file. Suggested by Bjrn Frantzen <bjoff@bgnett.no>
211198: getgroup(): fixed an instance of sloppy programming (introduced by
	myself in 1.6.2) that lead to a bug when I rewrote the code for parsing
	the config file
211198: getgroup(): fixed a bug when article was already present (error
	message "unable to store article: "). It is unclear at the moment
	what causes articles to be fetched twice. It is also unclear what
	"Invalid argument" means when returned by stat().
201198: getgroup(): fixed a bug in the code which would result in odd
	behaviour of fetch if verbosity was off and a group contained
	no new articles
201198: getgroup(): for some odd reason fetch forgot to automatically
	unsubscribe newsgroups (this bug was introduced in 1.6). Fixed.
191198: added parameter "minlines" because of spamming with empty articles
	of alt.religion.scientology
181198: corrected a small error when calculating initial limits (reported
	by Diana Schirmer <diana.schirmer@t-online.de>)
171198: some authentication code put into main(), courtesy of Jeff East
	<an972@freenet.carleton.ca>
101198: new code for upstream servers which neither support XGTITLE nor
	LIST NEWSGROUPS properly (see detailed explanation under misc).
091198: fixed problems with delayed body fetching and multiple servers
	(reported by Holger Graf <Holger.Graf@gmx.net>).
061198: removed double call of usage() from main()
061198: included -f option in usage()
061198: fetch would sometimes not disconnect properly. Bug and fix reported
	by Peter Hirdina <Peter.Hirdina@gmx.net> and Juergen Richter
	<richter@wohnheim.uni-ulm.de>.
061198: fixed a typo in age()
061198: fetch now logs its version number to news.debug
301098: added debugmode thingy
281098: removed a possible cause of segfaults if /var/spool/news/active.read
	did not exist (in nntpactive()).
251098: fetch would ignore lines beginning with a dot. Fixed. Reported
	by Michael Guertler <guertler@cs.bonn.edu>.
221098: fetch crashed if the permissions of /var/lock/news were messed up
	(which they should never have been, but apparently some people
	messed around with permissions). Now fetch terminates with proper
	error message. Reported by Peter Hirdina <Peter.Hirdina@gmx.net>.

nntpd:
=====

211198: pseudo articles now do not refer to http://www.troll.no/ anymore.
211198: removed superfluous declaration of fqdn[64]
101198: removed creation of dotfiles in dolistgroup()
091198: when a client would use LIST OVERVIEW.FMT after GROUP, XOVER would
	not work properly anymore. Reported and fixed by Michael Schwendt
	<sidplay@geocities.com>. (This bugfix makes the news client of
	StarOffice work properly.)
061198: markinterest(): interesting.groups/news.groups.name is now opened
	with O_APPEND instead of O_TRUNC. (Opening the file with O_TRUNC
	would delete previously marked articles when using the "delaybody"
	option.) Bug report and fix provided by Holger Graf
	<grafh@t-online.de>.
311098: for some reason nntpd would not log incoming commands anymore
	if debugmode was on. Fixed.
301098: added debugmode thingy

texpire:
=======

211198: total deletes are now also logged to news.info
201198: messed around with the expiry algorithm
061198: added logging of version number to news.debug
061198: added a usage message
061198: added -f option (don't check atimes of files, important when
	you grep through a spool directory or otherwise read files in
	the spool directory manually)
301098: added debugmode thingy

checkgroups:
===========

301098: more informative error message if checkgroups file could not
	be opened

misc:
====

031298: documentation for "nodesc" added
031298: Makefile: #define HAVE_XGTITLE removed (now configurable)
211198: gave up the project to give each function its own file since size
	reduction is at most 10 kBytes after stripping (before stripping
	there is even size increase):
		"old"			"new"
		20464  checkgroups*	14640
		51824  fetch*		46976
		48560  nntpd*		44088
		33800  texpire*		23368
211198: updated leafnode.8 and config.example (which did not include
	an example of a supplementary server either)
201198: updated leafnode.8 to include "minlines" and "maxbytes"
101198: updated README
101198: Makefile: new #define HAVE_XGTITLE (by default switched on) must
	be switched off if upstream newsserver supports neither "XGTITLE
	news.group.name" nor "LIST NEWSGROUPS news.group.name" (reported
	by Richard Poole <rp202@rp202.demon.co.uk>)
091198: fixed a typo in newsq.1 (reported by Lenz Grimmer <grimmer@suse.de>)
091198: changed Makefile: newsq is now also installed (in /usr/local/bin)
091198: updated TODO file
091198: added CREDITS file
061198: added documentation for -f to texpire.8
061198: added documentation for debugmode to leafnode.8

=============================================================================

History of 1.6.2 -- changes since 1.6.1:

libutil:
=======

181098: activutil.c:fakeactive(): when the directory could not be opened,
	the name should appear in the logfile which it did not. Bug report
	and fix provided by Peter Mutsaers (plm@xs4all.nl).

fetch.c:
=======

201098: fetch now writes its PID into the lockfile. Suggestion by
	Joey Hess <joey@kitenet.net>.
181098: fetch would not delete its lockfile when unable to read its config
	file or unable to find an upstream server therein. Bug reported by
	PhiR  <Gerlach@mygale.org>.
181098: processupstream(): fetch segfaulted when trying to read from a new
	server. Bug reports and fixes provided by Edgar Toernig (froese@gmx.de)
	and kise@imicom.or.jp.

nntpd.c:
=======

131098: apparently I missed a slash when inserting Joerg Dietrich's
	patch in rereadactive() -- fixed

texpire.c:
=========

201098: when expiring a group, texpire now also resets the numbers of the
	first and last articles; not doing this would lead to problems
	with initialfetch which was ignored in these cases (reported by
	Benjamin Schweizer <SternSZ@gmx.de>)

Miscellaneous:
=============

181098: "make dist" does not fail anymore if the directory already exists in
	which the distribution is built
181098: corrected a bug in the Makefile which would try to link leafnode
	with libutil.a's installed elsewhere in a libdir (reported by
	Daniel Fraga <chapolin@inc101.internetcom.com.br>)
131098: changed version number to 1.6.2
131098: some changes in the Makefile (suggested by Michael Mayer
	<mmayer@muenster.de>)

=============================================================================

History of 1.6.1 -- changes since 1.6:

fetch.c:
=======

091098: fixed a bug in getgroup(): in concert with "maxlines" being set
	to a value, fetch would report every article being too long (but
	properly reject only those which really were). Now fetch only
	complains about articles which are indeed too long. (Bug reported
	by Hannes Birnbacher <ad-soft@t-online.de>)

nntpd.c:
=======

091098: removed creation of dotfiles in dogroup()
091098: fixed a bug in doarticle() which made it impossible to display
	a pseudo-article of a new newsgroup.
091098: fixed a bug in dolistgroup() which made it impossible to display
	a pseudo-article of a new newsgroup.
091098: fixed a bug in dogroup() which made it impossible to select a
	new newsgroup or to display its pseudo-article (I have no idea
	when I introduced this...).
091098: fixed a bug in rereadactive() (leafnode tried to open 
	/usr/lib/leafnode/groupinfo instead of
	/var/spool/news/leaf.node/groupinfo) (bug report and fix by Joerg
	Dietrich, uzsv7x@ibm.rhrz.uni-bonn.de).

Miscellaneous:
=============

101098: changed version number to 1.6.1
091098: added "maxlines" to config.example
091098: changed the Makefile somewhat to allow for various CHANGES files

=============================================================================

History of 1.6 -- changes since 1.4:

util.c:
======

230998: activutil: new procedure fakeactive() produces essential active
	information from scratch (does not rely on either groupinfo or
	.overview files). fakeactive() is called from fetch when used
	with the -f parameter.
210998: activutil: readactive() hopefully now will detect a defective
	(i.e. truncated) groupinfo file, abort cleanly and give an error
	message. Previously readactive() just crashed, leading to
	segmentation faults in fetch and nntpd.
210998: activutil: helpwriteactive() hopefully now recognizes if writing
	fails (for example because of a full disk)
230898: configutil: initialized expire_base (if not, texpire crashes with
	segfault). Bug detected & fixed by Timo Giesselmann <gmann@on-line.de>
200898: xoverutil: removed an unnecessary call to legalxoverline()
	from getxover() (which was not used anyway)
200898: xoverutil: getxoverline() accepts messages without bodies
	(important for "delaybody" option). However, in this case
	bogus Byte: entries will be created in the .overview file
200898: xoverutil: getxoverline() now believes in upstream Lines: headers
	(but still computes its own if not provided)
200898: xoverutil: fixed legalxoverline() which by default returned 1
190898: activutil: made code of writeactive() more foolproof (hopefully)
190898: xoverutil: empty articles are not deleted anymore if delaybody != 0
190898: configutil: delaybody generated an incorrected logfile entry
160898: xoverutil: switched off debugging in getxoverline()
030898: activutil: readactive() rewritten to make modified format possible
	without re-reading active file from upstream servers
030898: activutil: writeactive() rewritten to accomodate the date
030898: activutil: insertgroup() does not take information from upstream
	servers anymore
030898: configutil: first server to suck news from is also used as post server
030898: configutil: added some support for multiple post servers
030898: configutil: primary server and supplementary servers are now
	equivalent.
030898: configutil: servers are now queried front-to-back
030898: split up util.c into several files, to achieve smaller executables.
	Changes in these executables will still be subsumed under util.c
	for the time being
020898: fixed a bug when writing the groupinfo file
200798: "crosspostlimit" now "int" instead of "unsigned int"
200798: fixed a bug when writing the groupinfo file
170798: some changes to create proper XOVER information when reading new
	groups. tin pre-1.4 release 980514 used to hang when starting to
	read new groups. This is now fixed; however, tin now doesn't see
	the "default" article... :-(
170798: introduced new global variable "debug" to keep the logfile somewhat
	smaller
070798: added parameter create_all_links
200698: fixed a bug introduced on 180698 which corrupted the groupinfo file
180698: if groupinfo file cannot be written, old groupinfo file is not
	deleted any more
270598: implemented the changes of leafnode-1.5(enz)
120598: enhanced debugging capabilities drastically (you can now listen
	to leafnode talking :-)
060598: added "maxage" parameter to /usr/lib/leafnode/config
020598: added "post" parameter to /usr/lib/leafnode/config which allows
	posting through an additional server (or maybe I should go through
	replay.com?)
020598: changed readconfig() to accommodate groupexpire options (Arnt
	will kill me for this :-)
010598: even more massive changes in readconfig which works now even better
	(I discovered strtok() and strsep())
300498: more changes in readconfig which does now not work any more :-(
270498: more massive changes in readconfig which now works :-)
190298: changes in readconfig

fetch.c:
=======

230998: "fetch -f" now calls fakeactive() and does not attempt to read
	the active file any more
230998: replaced two occurances of isalpha() with isalnum() to allow
	for top-level hierarchies which start with digits
230998: nntpactive(): when getting new groups, now first LIST ACTIVE
	and then LIST NEWSGROUPS is issued (LIST NEWSGROUPS alone does
	only return groups which have a description which results in an
	incomplete groupinfo file)
210998: lockfile mechanism didn't work anymore because I took Stevens too
	literally. Now the lockfile is only deleted when fetch ends.
	Disadvantage: if fetch crashes, the lockfile is not removed at all.
070998: nntpactive(): LIST NEWSGROUPS [news.group] was not properly
	terminated which apparently caused errors in entering new
	files (reported by Tobias Burnus <tobias.burnus@uumail.de>)
310898: getgroup(): .overview files are not removed by fetch anymore
310898: nntpactive(): active.read was not created if not already there
	(reported by Tobias Burnus <tobias.burnus@uumail.de>)
210898: getbody(): new bodies now get new article numbers, old ones are
	removed, xover line is changed appropriately
210898: getgroup(): omitted an error condition in yesterday's fixing attempt
200898: getgroup(): article files were not closed when "delaybody" was
	set which resulted in the duplication of headers
160898: fetch now logs Subject:s of discarded articles
140898: fixxover() reintroduced because the call of texpire did not work
	correctly (note that the removal of fixxover() is not indicated
	below but probably occured on 050898)
050898: added parameter "maxlines" to avoid very large articles
050898: nntpactive() is now called for every server on the list which makes
	it possible to read groups which are only held by certain servers
050898: nntpactive() now reads newsgroups descriptions with NEWGROUPS
	except for very large intervals. LIST ACTIVE is completely omitted
	and newsgroups counted from 1 instead.
050898: readactive() and writeactive() were not called anymore; re-inserted
030898: supplementary servers and primary server are now handled by the
	same procedure (which makes sense and saves space)
220798: fixed a bug which would corrupt multiple-line headers
220798: no more IHAVE since it doesn't work on most servers anyway
220798: modified getgroup() to accommodate multiline headers
210798: fixed a bug in getgroup(): fetch would try to get nonexistent
	articles because optimization was not correctly accounted for
210798: fixed a bug when processing supplements: fetch would write the
	groupinfo file (although unnecessary), thus causing a lot of
	unnecessary traffic
200798: lockfile is now actually created (this got lost somehow during
	messing with the code)
200798: turned off logging for forked process
200798: fixed a bug in handling of "crosspostlimits" (groups were not
	counted correctly)
200798: fixed a bug: news articles were retrieved even when the group
	was being skipped in the future
180798: added support for maximal number of crosspostings
170798: error messages mentioned in 070798 removed by rewrite of
	getgroup()
170798: major rewrite of getgroup(): fetch now fetches HEAD and BODY of
	each article separately and performs some kind of checks
170798: implemented some of the changes of leafnode 1.5(enz) (untested)
070798: added parameter create_all_links (if set to "no" only hardlinks
	into "interesting" groups are created). This works apparently,
	although /var/log/news.messages contains a lot of error messages:
	fetch[31989]: Error No such file or directory when opening (null)
	These occur between fetching the header and the rest of the
	article. They also occur when an article is not crossposted.
250698: added a possibly important error message when an article cannot be
	written into the news spool
150698: now using READ_INTERVALL for rereading of active file instead
	of TIMEOUT_LONG (makes more sense)
120598: added some system to the number of "v"s:
	"fetch": barfs if critical errors occur
	"fetch -v": barfs if non-critical errors occur
	"fetch -vv": puts out additional information about groups
	"fetch -vvv": puts out additional information about articles
	"fetch -vvvv": for debugging purposes
120598: first semi-successful query of supplementary servers
060598: added "maxage" parameter (aging function already provided by
	leafnode 1.4 but not used)
020598: some support for posting to one additional server
020598: some more ints changed to longs
010598: some changes in handling of supplementary servers (still broken).
010598: usesupplement is now a global variable.
270498: "47 bug" removed (fetch did never report more than 47 outstanding
	articles, even when there were hundreds)
270498: changed some definitions of article numbers from int to long (there
	may well be more than 32767 articles in a group)
190298: lockfile is created later now (I don't know if this is really
	a clever idea)
310198: some changes in fetching group descriptions
310198: some things logged to syslog instead of writing them to the screen
220198: some more error messages logged instead of printed to console
220198: option -n implemented (no automatical expiry of groups: very
	sensible for holidays or one-person servers :-)
220198: improved (?) some "verbose" messages
220198: "usesupplement" set to 1 in main()

nntpd.c:
=======

210898: messed with fopenpseudoart() (twice)
200898: pseudo articles now properly displayed in tin
200898: dolistgroup() now returns proper output for pseudo articles
200898: doxover() now returns proper overview line for pseudo articles
200898: changed some logging in nntpd
060898: changed some logging in nntpd
050898: implemented NEWGROUPS (time zone information is ignored)
180798: implemented some of the changes of leafnode 1.5(enz) (untested)
170798: improved logging in general :-)
170798: improved logging in doarticle()
170798: improved logging in dogroup()
170798: improved logging in dolistgroup()
170798: LISTGROUP without group now returns 412 instead of 481.
170798: LISTGROUP of an empty group now returns an empty list instead of
	"481 Overview information not available". This fixes the problem
	that tin hangs with empty newsgroups.
170798: NEXT/LAST now return correct return codes if the latest/oldest
	article has been reached
170798: XOVER now also works properly with new newsgroups
010598: LIST OVERVIEW.FMT implemented
220198: useless "dostat" declaration removed

texpire.c:
=========

310898: dogroup(): remove .overview if group becomes emptied
200898: removed legal() (replaced by legalxoverline() from xoverutil.c)
020598: fixed a small bug in expiremsgid()
020598: groupexpire implemented
020598: -v option implemented
020598: verbose logging

Miscellaneous:
=============

280998: Arnt Gulbrandsen will not maintain leafnode anymore.
280998: update of README
230998: update of README
210998: more changes in the manpages for checkgroups
200998: update of README
060998: slight updates in checkgroups and its manpage
010998: "make update" correctly documented (in INSTALL and README)
010998: "make update" now works correctly (calls update.sh with parameters)
310898: fixed a small error in the Makefile (reported by Tom Schlangen,
	<t.schlangen@ndh.net>)
230898: "update" included into Makefile (doesn't work correctly yet)
230898: "uninstall" included into Makefile
230898: Makefile modified
160898: Makefile modified
160898: improved update script: groupinfo now converted and new file for
	main server generated
060898: added update script
060898: slight bug in Makefile fixed
050898: added documentation for "maxlines"
050898: improved (?) the documentation a little
050898: removed the HOWTO from the Makefile since it is outdated with
	respect to 1.6
050898: removed the server field from the struct newsgroup
050898: fixed a small bug in the Makefile: the lockfile directory that was
	created was wrong
030898: groupinfo and the various server files are now kept in
	/var/spool/news/leaf.node/<filename>. Makefile and INSTALL have been
	changed appropriately
030898: added support for split of util.c in Makefile
220798: added documentation for "maxcrosspost"
200798: lockfile now in /var/lock/news to be compatible to old versions
170798: "delaybody" documented
170798: Makefile now zips the patch up
270598: changed config.example to incorporate the new options of
	leafnode-1.5(enz)
270598: changed Makefile according to leafnode-1.5(enz); omitted
	rules for install-bin and update, however.
270598: added patches from leafnode-1.5(enz) to leafnode.h
270598: added newsq.1 from leafnode-1.5(enz)
270598: fixed a bug in the Makefile
020598: changed config.example
020598: lots of ints changed to unsigned longs
020598: leafnode.8 updated
020598: texpire.8 updated
010598: fixed bug in config.example (maxfetch was designated "maxcount")
300498: removed rfc977 and rfc1036 from the package
300498: added leafnode mini-HOWTO
300498: global rewrite of leafnode.8 (also posted to
	de.comp.os.linux.networking)
250498: Makefile: replaced "cp" and "chmod" calls with "install"
	(suggested by Axel Eble <aeble@controlware.de>)
140298: added rfc977 and rfc1036 to the package
220198: Makefile: added "patch" ("make patch" will generate a patch)
220198: Makefile: permission for $SPOOLDIR now 2755 (was 2750)
220198: leafnode.8: maxfetch was designated "maxcount"; fixed
220198: fetch.8: added documentation for -n
Changes 1.5(enz) --> 1.6:

Leafnode 1.6 was built on the sources of 1.4 because the sources of 1.5(enz)
became only available later. Here are the changes introduced by 1.6 with
respect to 1.5(enz):
* It is possible to use multiple upstream servers
* Blocking of newsgroups has been disabled again.
* Added new option "create_all_links" which is set by default. If unset,
  fetch only stores links of crosspostings posted to "interesting" groups.
* Several new options to filter downloads:
  "maxlines" to set a maximal size of postings to download
  "crosspostlimit" to filter out spam
  "maxage" to cope with burps of upstream servers
* New option "groupexpire" to selectively modulate expiry time for certain
  newsgroups.
* Bug fixes (as usual)
See also the more detailed ChangeLog below which lists the changes with
respect to 1.4.

Author: Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de>
Date: October 1998

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

Changes 1.4-7 --> 1.5(enz):

* Headers and bodies of articles can be downloaded separately if the
  "delaybody" option is set. In this case, if someone attempts to read a
  message body he gets a text telling him that the message has been marked
  for download by fetch. The files in $SPOOL_DIR/interesting.groups are
  used for storing the numbers of marked messages.
* The complete rereading of the newsgroup list from the remote server is
  done less frequently now (READ_INTERVALL in leafnode.h set to 90 days).
  Instead, fetch uses the NEWGROUPS command every time it is run.
* Some changes were made concerning the pseudo mail that is shown when a
  group is opened for the first time (telling some infos about leafnode).
  It did not work satisfyingly before.
* Blocking of certain newsgroups is possible.

Author: Markus Enzenberger <enz@cip.physik.uni-muenchen.de>
Date: April 1998

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

Changes 1.4 --> 1.4-7:

* This version is identical to leafnode-1.4, except for some little fixes
  mostly provided by redhat and debian.
* The empty files put in /var/spool/news/interesting.groups were preceded
  by a period, for example: .alt.os.linux instead of the proper
  alt.os.linux etc.
* The config file now reads 'maxfetch' instead of the incorrect 'maxcount'.
* Makefile changed to allow it to create the subdirectories in
  /var/spool/news/message.id without a problem when you do make install.

Author: Kent Robotti <robotti@erols.com>
Date: March 1998

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

Version 1.4

Written  by  Arnt Gulbrandsen <agulbra@troll.no> and copy-
right 1995 Troll Tech AS, Postboks  6133  Etterstad,  0602
Oslo, Norway, fax +47 22646949.

=============================================================================

Version history:
* Arnt Gulbrandsen <agulbra@troll.no> wrote versions 0.9 to 1.4 (only
  1.0 and 1.4 were publicly released).
* Kent Robotti <robotti@erols.com> published a slightly changed
  version of leafnode as leafnode-1.4.7 in March 1998.
* leafnode-1.5(enz) is leafnode-1.5 by Markus Enzenberger
  <enz@cip.physik.uni-muenchen.de> which was released in April 1998.
  It incorporated all (?) changes made in leafnode-1.4.7.
* Various versions of leafnode-1.4jp were published by Kazushi (Jam)
  Marukawa <jam@pobox.com> in Spring 1998. (Patches are available from
  http://www.io.com/~kazushi/freeware/#leafnode). Further development
  commenced, the software is now being called leafnode+ and is
  actively being developed (http://www.io.com/~kazushi/leafnode+/).
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
  patched leafnode version from May 12th, 1998 as leafnode-1.4.1.
  This version did not have any code of leafnode-1.5(enz) in it.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
  patched leafnode version from July 20th, 1998 as leafnode-1.6alpha.
  This version incorporated most of the leafnode-1.5(enz) patches.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published a
  patched leafnode version from August 16th, 1998 as leafnode-1.6b.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
  leafnode-1.6 on October 3rd, 1998.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
  leafnode-1.6.1 on October ??th, 1998.
* Cornelius Krasel <krasel@wpxx02.toxi.uni-wuerzburg.de> published
  leafnode-1.6.2 on October 22th, 1998.
