2002-12-29 Matthias Andree === RELEASE 1.9.31.rel === 2002-12-23 Matthias Andree --- 1.9.31.rc1 --- * configure.ac, fetchnews.c: Portability: Only fork() if fork() really works (AmigaOS.) 2002-12-18 Matthias Andree * README-daemontools: Make a little more verbose, work out the svc -t difference for LISTENIP vs. nntp.cdb. 2002-12-16 Matthias Andree * ChangeLog, NEWS: update --- 1.9.31.devel2 --- * fetchnews.c: Rename misnomed lockfile_exists to try_lock. Switch from signal to sigaction. * mgetaline.c, nntputil.c: Switch from signal to sigaction. * configure.ac: bump version * artutil.c: Only print one '..as 12345 in de.test' line per REAL post, not when catching up because the previous run crashed before the active file was written. * applyfilter.c, leafnode.h, lockfile.c, texpire.c: Rename misnomed lockfile_exists to try_lock. * mysigact.c, Makefile.am, mysigact.h: Add mysigact library. 2002-12-15 Matthias Andree * ChangeLog, NEWS: update --- 1.9.31.devel1 --- * Makefile.am, configure.ac: Fix --with-included-pcre build. Note all files now link against PCRE. * pcre/: Makefile.in, configure.gnu: Fix VPATH build for dftables. * configure.ac, malloc.c, realloc.c: Portability improvements; use malloc.c and realloc.c to work around NULL==malloc(0) that may emit bogus out of memory errors, needed among others for some AIX versions. Finish time.h vs sys/time.h cleanup (AC_HEADER_TIME). * CREDITS: Credit Richard van der Hoff. * nntpd.c: Move time.h vs. sys/time.h madness into system.h (included via leafnode.h). Resolve name clash error() vs. myerror(). * Makefile.am, checkgroups.c, configutil.c, system.h, fetchnews.c, gmtoff.c, leafnode.h, lockfile.c, miscutil.c, mkstemp.c, nntputil.c, texpire.c, xoverutil.c: Move time.h vs. sys/time.h madness into system.h (included via leafnode.h). * mgetaline.c, nntputil.c: Merge patch to switch from setjmp to sigsetjmp, sent by Richard van der Hoff . * .cvsignore: Add compile and install-sh 2002-12-04 Matthias Andree === RELEASE 1.9.30.rel === * Makefile.am: Do not distribute autom4te.cache (from pcre/ subdir). 2002-12-02 Matthias Andree * Makefile.am, TODO, autobootstrap.sh, configure.ac, README-MAINTAINER: Kill autobootstrap. Use autoreconf -is (or -isf) instead. 2002-11-26 Matthias Andree * ChangeLog: Release 1.9.30.devel4 --- 1.9.30.devel4 --- * configure.ac: Bump version. * Makefile.am: Print sbindir/bindir to a config.c comment. * fetchnews.c: In verbose mode, print if we're using the STAT command or the HEAD workaround. * nntpd.c: Point to syslog when reading the configuration fails. * INSTALL, README: Rework documentation. 2002-11-25 Matthias Andree * NEWS, nntputil.c: Blacklist STAT for "NNTP news cache.", by Robert Marshall. * fetchnews.c: Avoid duplicate articles that raced from another server against our fetchnews from ending up in failed.postings. We assume that a server that refuses a posting with 441 435 Duplicate can at the same time deliver it to STAT (or HEAD if the workaround is in effect). 2002-11-21 Matthias Andree * TODO: Note race in postarticles. * ChangeLog, NEWS: Release 1.9.30.devel3. --- 1.9.30.devel3 --- * nntputil.c: Whitelist NewsCache 1.1.* * configutil.c, fetchnews.c: Fix maxage = 0, reported and patch suggested by Jonathan Larmour, * configure.ac: Bump version. * COPYING, CREDITS, ChangeLog, fetchnews.c, leafnode.8.in, nntpd.c: Change Jonathan Larmour's mail address. * activutil.c: Fix SIGSEGV. Found by William Hooper. 2002-11-20 Matthias Andree * ChangeLog, NEWS, configure.ac: Release 1.9.30.devel2. --- 1.9.30.devel2 --- * activutil.c: Check for duplicate newsgroups after reading, before writing and after merging the active file. In doubt, leafnode goes for the newsgroup name that has fewer upper case letters in it. * grouplist.c: Fix spurious LF. * fetchnews.c: nntpactive: cache current time, saves time() calls and gives a consistent 'age' for the newsgroups. * miscutil.c, nntpd.c: 0 -> NULL 2002-11-14 Matthias Andree * .cvsignore, Makefile.am, leafnode.cron.daily.in, leafnode.spec.in: Add leafnode.cron.daily, built from leafnode.cron.daily.in, and include it in the RPM. * Makefile.am: Add filters.example, filters and config to dist. config and filters are marked with noreplace and are the copies of filters.example and config.example by default. This should prevent RPM from removing the old /etc/leafnode/config when this RPM is "-Uhv"ed over a SuSE RPM. * leafnode.spec.in: Add filters.example, filters and config to dist. config and filters are marked with noreplace and are the copies of filters.example and config.example by default. This should prevent RPM from removing the old /etc/leafnode/config when this RPM is -Uhved over a SuSE RPM. Reported by V. Regina Kappes * Makefile.am, filters.example: Add filters.example. Taken from SuSE 7.3 Source RPM. * config.example: Change example filter file path to /etc/leafnode/filters. 2002-11-13 Matthias Andree * README-FQDN.pod: Fix bug spotted by Mark Trettin: The news.cis.dfn.de host name is ID-00000.user.dfncis.de. 2002-11-10 Matthias Andree * .cvsignore: update ignore list. * FAQ.xml: Add section on Red Hat inetd vs xinetd issue, written by William Hooper. 2002-11-09 Matthias Andree * NEWS, nntputil.c: Whitelist NewsCache 0.99.18, 0.99.19, 0.99.2?. 2002-11-08 Matthias Andree * ChangeLog: Release 1.9.30.devel1. * Makefile.am: Fix recently introduced 'make distcheck' failures. * NEWS, fetchnews.c: Only touch active.read if the active has been successfully written. * activutil.c, applyfilter.c, checkgroups.c, fetchnews.c, texpire.c: detect groupinfo write errors. * activutil.c, leafnode.h: Detect write errors for writeactive and report them back. * activutil.c, leafnode.h: Debugging help: define CHECKGROUPORDER at compile time to check that the in-memory copy of the active file is sorted properly and does not contain duplicates. * nntpd.c: Fix last commit -- the p = q belongs into the while loop, of course. This time, the commit has been tested and found working by Jan Knutar. 2002-11-06 Matthias Andree * CREDITS: Add Jan Knutar. * nntpd.c: Fix very subtle and intricate infinite loop bug -- it will only trigger when the first strstr call is not successful (i. e. the current group->name is part of another group's name that is PRIOR on the current article's XRef: header -- neat, ain't it?). Found and reported with full stack back trace by Jan Knutar 2002-11-05 Matthias Andree * newsq.1.in: Rework newsq man page. * newsq.1.in: Document that the output is unsorted. Requested by Dan Jacobson . Fixes Debian Bug#167837 (wishlist). 2002-10-30 Matthias Andree * FAQ.xml, Makefile.am: Improve the FAQ, replace most by , and run xmllint before xmlto. 2002-10-27 Matthias Andree * NEWS: Update. 2002-10-26 Matthias Andree * fetchnews.c: Fix pcre_group to group_pcre. * configure.ac: bump version. * fetchnews.c: Also apply only_groups_pcre when updating the active, to avoid presenting groups that are not really fetched. If you have multiple upstream servers and you are using only_groups_pcre, run fetchnews -f. 2002-10-23 Matthias Andree * ChangeLog, NEWS, configure.ac: Release 1.9.29. === RELEASE 1.9.29.rel === * README: Minor updates. * FAQ.xml: Add section on nntps. * Makefile.am: Add --extensions to PDF generation, for bookmarks. * fetchnews.c: Bugfix: cope with multiple upstreams that have the same server name but different ports. 2002-10-22 Matthias Andree * artutil.c: Merge patch by Ken Shan to fix SIGSEGV that happens when the active is realloc()d. Long-standing bug. This commit fixes Debian Bug#165835. 2002-10-21 Matthias Andree * ChangeLog, NEWS, configure.ac: Release 1.9.28. === RELEASE 1.9.28.rel === 2002-10-19 Matthias Andree * FAQ.xml: Make document valid. Add IDs for sect1 to allow linking. * FAQ.xml: Add documentation about obtaining a stack backtrace. * configutil.c: New option only_groups_pcre. Complain about malformatted or broken config file lines. * Makefile.am, NEWS, TODO, config.example, fetchnews.c, groupselect.c, groupselect.h, leafnode.8.in, leafnode.h, doc_german/leafnode.8.in: New option only_groups_pcre. * FAQ.xml: Use sect2 rather than qandadiv. 2002-10-12 Matthias Andree * configure.ac: mark devel release version * FAQ.xml, NEWS, PCRE_README: Update documentation. * configure.ac: Add a new --with-included-pcre option. Useful for testing and if the system-installed PCRE version is too old but the user does not want to replace it. * pcre/configure.gnu: When leafnode automatically configures pcre/, pass it --disable-shared to speed up the build and get a smaller library, and to avoid issues with shared libraries that we don't use anyhow. * configure.ac: Back out ineffective MacOS build "fix" of 1.9.25, now that the pcre/configure fix is known to work. * Makefile.am: Do not distribute *~ files from pcre directory. * FAQ.xml: Add two questions about fetchnews not posting. Reindent w/ vim. * pcre/configure: Try to patch libtool output along the lines of http://subversions.gnu.org/cgi-bin/cvsweb/libtool/libtool.m4.diff?r1=1.220&r2=1.221&f=h -- in the hope to really fix the MacOS 10.1.5 build woes. 2002-10-08 Matthias Andree * leafnode-version: undo accidental checkin * leafnode-version.c: Align output format to that of leafnode-2. * Makefile.am, NEWS, leafnode-version, leafnode-version.1.in, leafnode-version.c, leafnode.spec.in: Add leafnode-version program. * TODO: Kill remaining old TODO, they don't really matter any more. * configure.ac: Bump version 2002-09-25 Matthias Andree * .cvsignore, Makefile.am: Now that my PassiveTeX/XMLTeX installation works, use Tim Waugh's xmlto wrapper. * Makefile.am: Switch from jade and dsssl to xsltproc and xsl, it's more portable for maintainers. Use htmldoc to convert HTML -> PDF, much nicer output, and also more portable. http://www.easysw.com/htmldoc/ * FAQ.xml: "& -> & fix !DOCTYPE * Makefile.am: Do not remove subst.in in distclean-local. (Reported by Mark Brown) 2002-09-24 Matthias Andree === RELEASE 1.9.27.rel === * Makefile.am: FAQ swallows TROUBLESHOOTING. Fix RPM build. * FAQ.xml, TROUBLESHOOTING.pod, leafnode.spec.in: FAQ swallows TROUBLESHOOTING. * leafnode.spec.in: Revamp .spec file, integrating a patch from Andreas Muck. * CREDITS: Add Christian Weisgerber, who sent the three time_t alpha portability fixes. * activutil.c, nntpd.c, texpire.c: Merge OpenBSD time_t == int portability fixes for 64bit platforms. * .cvsignore: Add checkpeerlocal. * FAQ, FAQ.html, Makefile.am: drop generated files from CVS. * FAQ.xml: Finish XML FAQ. * FAQ.xml: The start of a FAQ rewrite in DocBook XML V4.1. * CREDITS: Update * checkpeerlocal.c: Merge patch by Rados-law Gancarz to fix Non-IPV6 compile (Solaris 2.6) 2002-09-23 Matthias Andree * configure.ac: bump version * Makefile.am: Clean some more files. * FAQ.html: Add FAQ.html (from website) for now. * Makefile.am: distribute FAQ.html * checkpeerlocal.c: Fix compiler warning. Reduce default interface configuration buffer to 2k. * Makefile.am: Automake 1.5 should be sufficient. * Makefile.am: Add CFLAGS to checkpeerlocal_CFLAGS. * Makefile.am: Add checkpeerlocal to check_PROGRAMS. 2002-09-22 Matthias Andree * checkpeerlocal.c: Fix infinite loop problem when interface list is longer than 2 kB. Reported by Brian Somers. CVSTrac: #4 * NEWS, leafnode.8.in: Documentation changes. * nntpd.c: Robustness: if allowstrangers is set, don't call checkpeerlocal at all. 2002-09-20 Matthias Andree * ChangeLog, NEWS, configure.ac: 1.9.26 release information added. === RELEASE 1.9.26.rel === 2002-09-11 Matthias Andree * configure.ac: Bump version. * grouplist.c: * Skip over lost+found in the top directory. Bug reported by William Grinolds . * Log chdir and opendir(".") errors. 2002-08-31 Matthias Andree * configure.ac: bump version * fetchnews.c: Synchronize child and parent when handing over the lock file. CVSTrac: #3. * fetchnews.c: Fix reversed logic of postonly/handover_lockfile fix (last commit). * fetchnews.c: Do not try to fork and hand over the lockfile to child in postonly mode. Reported by Jan Knutar . * newsq.c: Print start banner and also print a note if the directory is empty. * UNINSTALL-daemontools: Fix paths. * genlsm.sh.in: Update. * doc_german/Makefile.am: Add LIESMICH-daemontools to tarball. 2002-08-30 Matthias Andree * leafnode.spec.in: Update Source URL and format to .bz2. Reported by William Hooper . === RELEASE 1.9.25.rel === * run.tcpd.dist.in, run.tcpserver.dist.in: Add comments about use. * configure.ac: bump version * applyfilter.8.in, doc_german/leafnode.8.in: Minor corrections. * INSTALL, Makefile.am, README-daemontools, doc_german/INSTALL_de, doc_german/LIESMICH-daemontools: Complete daemontools-related documentation. CVSTrac ticket: #2 * artutil.c: Fix memory leak: empty lines were not freed. 2002-08-28 Matthias Andree * Makefile.am, setup-daemontools.sh.in, setup.sh.in: Replace setup.sh by setup-daemontools.sh that only installs daemontools + tcpserver w/ tcprules access control * NEWS, setup.sh.in: Withdraw [x]inetd part of setup.sh for portability reasons. * .cvsignore, Makefile.am, Makefile.dist, NEWS, TODO, UNINSTALL-daemontools, configure.ac, nntp.rules.dist, run.tcpd.dist.in, run.tcpserver.dist.in, setup.sh.in: Tweaks for addition of new setup.sh tool, which is to automatically set up the leafnode daemon in inetd/xinetd or tcpserver. * makesubst: Also add AWK to subst list. 2002-08-27 Matthias Andree * makesubst: Figure AUTOSUBSTNAMES from AC_PATH_PROG as well. Strip surrounding brackets. Trim surrounding whitespace. * makesubst: Minor @configure_input@ tweak. Cosmetic. --- release snapshot 20020827a --- * Makefile.am, configure.ac: devel20020827a checkin, fixes for Darwin 5.5 build (-flat_namespace issue, see http://developer.apple.com/techpubs/macosx/ReleaseNotes/TwoLevelNamespaces.html 2002-08-27 Ralf Wildenhues * TROUBLESHOOTING.pod, doc_german/leafnode.8.in: minor wording tweaks. * doc_german/INSTALL_de: Typos. * doc_german/INSTALL_de: Translate ucspi-tcp/daemontools docs. First version ;-) 2002-08-26 Matthias Andree * configure.ac: bump version * INSTALL: refine the ucspi-tcp/daemontools docs more bits :-) * INSTALL: refine the ucspi-tcp/daemontools docs a bit * INSTALL: Add daemontools/ucspi-tcp install instructions. 2002-08-23 Ralf Wildenhues * nntpd.c: Fix XOVER reply for pseudo article: inconsistent MID given. 2002-08-22 Ralf Wildenhues * doc_german/: INSTALL_de, README, README_de, fetchnews.8.in, leafnode.8.in: Fix typos and umlaut handling in German documentation, keep old spelling. * FAQ, README, texpire.8.in: Fix typos in English documentation. 2002-08-22 Matthias Andree * leafnode.8.in: Update 2002-08-21 Matthias Andree * checkpeerlocal.c: Prefix address type in -DTEST mode. change #ifdef TEST to TEST_LOCAL to still allow testing from tcpserver or somesuch. 2002-08-20 Matthias Andree * Makefile.am: Manually do 'make distclean' when including PCRE. * config.example: Fix 'expire' documentation. * applyfilter.8.in, checkgroups.8.in, fetchnews.8.in, newsq.1.in, texpire.8.in, doc_german/applyfilter.8.in, doc_german/checkgroups.8.in, doc_german/fetchnews.8.in, doc_german/leafnode.8.in, doc_german/newsq.1.in, doc_german/texpire.8.in: Update documentation, adjust to Linux' typographic man(1) conventions: Literal text is bold, parameters are in italics. * checkgroups.c: Fix usage information. 2002-08-19 Matthias Andree * Makefile.am, autobootstrap.sh, makesubst: Patch by Ralf Wildenhues: enhance makesubst. 2002-08-17 Matthias Andree * NEWS: Dedicate to the flood victims in Europe. * configure.ac: Bump version, add Dresden tag, allow RPMSRC=mumble ./configure and automatically check for /usr/src/rpm. 2002-08-16 Matthias Andree * configure.ac: fix sed -f argument to include ${srcdir}, for build outside source directory * configure.ac: Fix finding RPMSRC and msysconf expansion for good. * sanitize.sed, Makefile.am: New file for sed use in configure.ac, you would not get this properly quoted with backslashes. I tried. 2002-08-16 Ralf Wildenhues * configure.ac: revert msysconfdir handling to old form. Fix brown paper bag from last checkin: Unconditionally AC_SUBST(RPMSRC), but set to "" if NONE. TODO: maybe allow environment variable check? * Makefile.am: $(srcdir)/./makesubst -> $(srcdir)/makesubst * configure.ac: Newer autoconf versions(?) do not cause AC_SUBST(foo) to be translated to a shell commend. work around this. Fixes the long-standing msysconfdir non-bug. 2002-08-16 Matthias Andree * makesubst: Revert last checkin, it prevented the expansion of things. * makesubst: Change quote character for sed from double to single quote. * configure.ac: Bump version. Fix msysconf expansion. * NEWS: Get the POST + EOF fix attribution right. * NEWS: Mention the POST + EOF fix (leafnode crashed otherwise) 2002-08-14 Matthias Andree * doc_german/leafnode.8.in: document allow_8bit_headers * leafnode.8.in: Document allow_8bit_headers option. * configure.ac: bump version * .cvsignore: add tarballs and release.sh - release snapshot - * pcre/.cvsignore: Get rid of screen clutter :-) * fetchnews.c, texpire.c: Dependent change: Track API change necessary to bring reading the configuration file and validating the hostname into correct order. Move creation of lockfile past reading the configuration file as well. * applyfilter.c, checkgroups.c, nntpd.c: Dependent change: Track API change necessary to bring reading the configuration file and validating the hostname into correct order. * configutil.c, miscutil.c, leafnode.h: Fix bug reported by Shaul Karl , that leafnode would complain about a non-FQHN even though one was configured in the configuration file. Mark Brown tracked this down to improper order of reading the config file versus validating the "fqdn" variable. Now readconfig() validates the fqdn, rather than initvars(). 2002-08-13 Matthias Andree * validatefqdn.c: Can no longer be cheated by "name.", when the dot is the last character. Added test mode. Try make validatefqdn CFLAGS="-DTEST", then ./validatefqdn blubb test.hick 2002-08-13 Ralf Wildenhues * getline.c, mastring.c: Speed improvements for mastr_getln and _getline, by Fabrizio Tironi. * nntpd.c: dopost: fix possible SEGV on client EOF after POST, by Fabrizio Tironi. Along, a couple of minor fixes (const typing, global variable shadowing). * xoverutil.c: Fix possible buffer overrun with long $SPOOLDIR, by Fabrizio Tironi. * mastring.c: Fix possible null pointer derefs in mastr_cpy, mastr_cat. Patch by Fabrizio Tironi. * artutil.c: fgetheader: check for bad input. As an aside, don't calculate strlen(header) twice. Different fix suggested by Fabrizio Tironi. 2002-08-13 Matthias Andree * NEWS, config.example, configutil.c, leafnode.h, nntpd.c: Add an option to allow clients to post unencoded 8-bit data in headers. Requested by Peter N. M. Hansteen . * configure.ac: bump version 2002-08-13 Ralf Wildenhues * README-MAINTAINER: Update. * autobootstrap.sh: autobootstrap taken from leafnode-2 CVS and adapted, needs makesubst call. Use to build from CVS. * .cvsignore: ignore subst{,.in}. * Makefile.am: Add FAQ to EXTRA_DIST. Reported by William Hopper. 2002-07-19 Matthias Andree * configure.ac: Add missing include. Bump version. * Makefile.am, doc_german/Makefile.am: Fix build outside source directory * configure.ac: bump version * checkpeerlocal.c, configure.ac: Fix checkpeerlocal() for systems that define a sa_len for struct sockaddr and list addresses longer than 16 bytes (IPv6) in their response to SIOCGIFCONF. (Such as FreeBSD.) Reported by Martin Klaffenböck. 2002-07-17 Ralf Wildenhues * doc_german/: applyfilter.8.in, checkgroups.8.in, fetchnews.8.in, leafnode.8.in, newsq.1.in, texpire.8.in: Update german documentation to reflect current english docs. * checkgroups.8.in, leafnode.8.in, texpire.8.in: More typo fixes. * leafnode.8.in: (minor) separate underlined words. * leafnode.8.in: Typo. * makesubst: simplify somewhat. * Makefile.am, doc_german/Makefile.am: Portability: no $< in Makefiles. 2002-07-16 Matthias Andree * fetchnews.8.in, TODO: updates * leafnode.8.in, doc_german/Makefile.am: updates * doc_german/Makefile.am, TODO: doc_german: regenerate subst * configure.ac: bump version * Makefile.am: Fix traversal order in SUBDIRS. 2002-07-16 Ralf Wildenhues * Makefile.am, TODO, configure.ac, doc_german/Makefile.am: Experimental implementation of manpage building with make. Applies for doc_german man pages as well. * makesubst: adjust path, add msysconfdir, spooldir. * makesubst: makesubst: build a script that performs (nearly) the same @variable@ substitutions as usually done by configure. makesubst is copyright Andreas Barth, this version is taken from unix-connect-0.94 and hacked up for leafnode. Differences from configure-substitutions: recent autoconf version postpone substitution of some variables (e.g. prefix) until build time to facilitate different root package building. This script does not take into account make Options. 2002-07-16 Matthias Andree * Makefile.am: List stamp-h to clear in distclean-local, to fix make distcheck regression after update to automake 1.6.2. * NEWS, nntpd.c: Fix: In [X]HDR
, print Message-ID in front of the header, required by RFC-2980 (but contradictory to draft-ietf-nntpext-base-15). Fix: OVER and XOVER syntax in HELP output. Change: When printing XOVER/XHDR syntax after a syntax error, print HDR or OVER. Change: List XHDR and XOVER in LIST EXTENSIONS. * configure.ac: Quote pcre-config warning. Add note to let user install PCRE system-wide when the included PCRE is to be used. * configure.ac: Pull -I/usr/local/include/pcre/ into CPPFLAGS as well. Reported by William Hooper 2002-07-16 Ralf Wildenhues * doc_german/fetchnews.8.in: missed one substitution. * doc_german/README: Add update note. * doc_german/: INSTALL_de, README_de, applyfilter.8.in, checkgroups.8.in, fetchnews.8.in, leafnode.8.in, newsq.1.in, texpire.8.in: Update german docs to mostly match current english docs. INSTALL_de: add pointer to german Message-ID online FAQs. Fix a few typos, replace hard-coded paths with configure @substitutes@. * leafnode.8.in: correctly describe texpire's non-threaded behaviour, update somewhat. * applyfilter.8.in, fetchnews.8.in, texpire.8.in: Fix typos. * README: Fix typo. Replace posting.queue with out.going, fix syslogd '-file' entry. * INSTALL: Reformat only. * doc_german/: INSTALL_de, README_de, applyfilter.8.in, checkgroups.8.in, fetchnews.8.in, leafnode.8.in, newsq.1.in, texpire.8.in: Reorganize german documentation. Rename man/man$i/foo.$i to foo.$i.in. 2002-07-16 Matthias Andree * INSTALL: drop MacOS X PCRE warning * .cvsignore: add FAQ.html * configure.ac: Fix spurious "test: too many arguments" warning early in ./configure. Streamline the pcre-config tests. Save original arguments and restore them if pcre-config is present, but not pcre.h, to not shoot the pcre subdirectory configure. Revert from <<- HERE left-justified files to << HERE files. Uwe Ohse said that <<- was not too portable. Bump version. * leafnode.8.in: update 2002-07-15 Matthias Andree * nntpd.c: Implement LIST ACTIVE.TIMES -- trivial (minor change to list()). Implement HDR (XHDR was already there). Revamp HELP format. List HDR in and remove leading space from LIST EXTENSIONS reply. (draft 15) * COPYING, CREDITS: update * nntpd.c: in dopost(), when debugmode is set, log objectionable Message-ID header. Pro-Forma merge. * nntpd.c: Log objectionable Message-ID: header in dopost(). 2002-07-14 Matthias Andree * README-FQDN.pod, TROUBLESHOOTING.pod: documentation refinements. 2002-07-13 Ralf Wildenhues * .cvsignore: README.FQDN* -> README-FQDN*, add TROUBLESHOOTING{,.pod}. * TROUBLESHOOTING.pod, leafnode.spec.in, validatefqdn.c: Change README.FQDN to README-FQDN. * cindent: Make weird-filenames proof. Fix test -eq buglet. 2002-07-12 Mark Brown * configutil.c, leafnode.h, fetchnews.c, config.example: Add new option noactive inhibiting updates of the active file unless -f is supplied to fetchnews. 2002-07-12 Matthias Andree * Makefile.am, NEWS: No longer install lsort * Makefile.am, README-FQDN.pod, README.FQDN.pod: rename README.FQDN to README-FQDN. * README.FQDN.pod: documentation updates. * Makefile.am, README.FQDN.pod, TROUBLESHOOTING.pod, nntpd.c, validatefqdn.c: documentation updates. 2002-07-11 Matthias Andree * configure.ac: bump version * nntpd.c: Quiet splint warning. * fetchnews.c: When updating the active file fails, restore the old active file contents in order not to loose low/high marks. * nntpd.c: Do not return 430 for 'header not found' in xhdr. Merge some xhdr/xover code. Fix range checking in xhdr and properly write 420 message when the range is invalid. * leafnode.h: Add some splint annotations. * nntpd.c: Fix some bugs that splint showed. Includes possible zero dereference crashes. * fetchnews.c: Try XGTITLE only once per server, not once per new group. Better forceactive treatment. When leafnode cannot obtain the active from all servers in one go after -f or timeout_active expired, it will remove the active.read file. This file will only be created if ALL servers have been queried successfully. * strlcpy.3: Add documentation, stolen from FreeBSD. * nntpd.c: Change one 1024 -> PATH_MAX. Change strncpy->strlcpy. Add two FIXME: comment tags. * configutil.c: Replace strncpy by strlcpy. Increase core size in debug mode to 16 MB. Increase token size to 1 kB. * mastring.h: Drop prototypes for unimplemented mastrcpy and mastrncpy. 2002-07-11 Ralf Wildenhues * configutil.c: Fix overrun in parse_line. 2002-07-11 Matthias Andree * configure.ac: Kill cruft. * filterutil.c: Always include , not pcre/pcre.h. * TODO: Note make distcheck not working. Other updates. * Makefile.am, configure.ac: Revamp PCRE inclusion autoconf/automake stuff, drop checks that leafnode does not look at the results of. * pcre/dftables: Drop generated file. * nntputil.c: Use RETSIGTYPE for timer(). 2002-07-10 Matthias Andree * pcre/: .cvsignore, ChangeLog, Makefile.in, Tech.Notes, chartables.c, config.guess, config.sub, configure, configure.in, mkinstalldirs, myinput, pcre.7, pcre.c, pcre.h, pcre.mms, pcreposix.3, pcretest.c, pgrep.1, pgrep.c, testinput, testinput2, testinput3, testinput4, testoutput, testoutput2, testoutput3, testoutput4, testdata/testinput1, testdata/testinput6, testdata/testoutput1, testdata/testoutput2, testdata/testoutput3, testdata/testoutput4, testdata/testoutput5, testdata/testoutput6: Update to PCRE 3.9. * pcre/: RunTest, chartables.c, dftables, pcre.h: (accidental checkin) 2002-07-10 Mark Brown * fetchnews.c: Set handler for SIGTERM. 2002-07-10 Matthias Andree * README: Fix outdated leafnode home page, some typos, remove old compile test section. * INSTALL: Fix typo. * TODO: Add PCRE notes. * configure.ac: Move the --with options up the configure.ac file to quit early in case of trouble. Bump version. 2002-07-10 Matthias Andree === RELEASE 1.9.24.rel === * nntpd.c: Fix compiler warning when compiled without IPv6 support. * nntpd.c: Respect hostname in config file again. Fix IPv6 name resolution for IPv4 addresses (using masock_sa2name). * Makefile.am, masock.h, masock_sa2name.c: import masock_sa2name.c from leafnode-2 2002-07-09 Matthias Andree * nntpd.c, miscutil.c: make s variable local. chdirgroup: use mastr instead of global s. * configutil.c: validate hostname to avoid havoc. 2002-07-09 Ralf Wildenhues * nntpd.c: Fix possible overflow in doarticle. Not exploitable because overflowing part of the string cannot be chosen. 2002-07-09 Matthias Andree * configure.ac: bump version * newsq.c: Drop global s, use local mastr instead. * xoverutil.c: Make s a local variable. Don't hard-code s length for getcwd() * activutil.c, configutil.c, fetchnews.c, leafnode.h, nntpd.c, texpire.c: Make s a local variable. 2002-07-09 Ralf Wildenhues * nntpd.c: fopenart: do not use static buffer s for implicit artno, gets smashed by is_pseudogroup. Broke 'ARTICLE' without number. 2002-07-09 Matthias Andree === release 1.9.24.rc1 === * nntpd.c: remove all ihave traces. * nntpd.c: more nogroup() merge. * configure.ac: bump version 2002-07-09 Ralf Wildenhues * applyfilter.c: Typo in log comment. 2002-07-09 Matthias Andree * nntpd.c: use nogroup() in doxhdr(). 2002-07-09 Ralf Wildenhues * nntpd.c: Fix XOVER segfault before GROUP. 2002-07-08 Matthias Andree * configure.ac: Bump version to 1.9.24.pre1 for formal reasons. * Makefile.am: Let the lsm targets depend on genlsm.sh to ensure that a current version of genlsm.sh is used to build the .lsm file. * genlsm.sh.in: Revamp .lsm * NEWS: Add release date. === RELEASE 1.9.23.rel === * configure.ac: Bump version to 1.9.23.rel. * miscutil.c: Silence RATS. 2002-07-05 Matthias Andree === release 1.9.23.rc3 === * NEWS: NEWS * nntpd.c: Recommend message-ID (ln-2 and some INN also do it). * nntpd.c: Drop justaftergroup madness (includes dropping the variable). Drop pseudogroup global. Make group/xovergroup globals static. Split functionality into new parserange and is_pseudogroup functions, fixing parsing the range in the same go (used by doxover and doxhdr). Fix more article number madness with pseudo articles. Fix article for pseudo articles. When marking a group interesting, create the corresponding directory. Fix some XHDR handling bugs -- leafnode would list at least one article even though the given range was outside the group article number range. * texpire.c: Do not try to delete empty directory of interesting group. * fetchnews.c: Cosmetic logging changes. Fix bogus 'XOVER failed, trying XHDR' (happens with cascaded leafnodes). * nntpd.c: Fix typo: xstrncpy->xstrlcpy. * Makefile.am: Add strlcpy.h to EXTRA_DIST. * miscutil.c: Silence RATS. Replace strncat by strlcpy. Add new xstrlcpy() function that exits in case the buffer is too small. (Ugly!) * nntpd.c: Drop owndn. fopenpseudoart(): drop static buffer, use mastr. Change first MID separator to - to allow tracking leafnode "before 1.9.23" or "1.9.23 and newer". Silence RATS. Drop static buffer to print Message-ID, use three fputs instead. Replace strncat by strlcpy. * fetchnews.c: Silence RATS. getmarked(): get rid of static buffer, use mastr. * leafnode.h: Add xstrlcpy prototype. Drop owndn declaration. Move SKIPLWS #define within #ifdef LEAFNODE_H bounds. * configutil.c: Drop owndn. * checkpeerlocal.c, pcre_extract.c: Use strlcpy. Silence RATS. * activutil.c: Change stat -> fstat. * applyfilter.c, critmem.c, getfoldedline.c, lockfile.c, lsort.c, mastring.c, nntputil.c, quickmkdir.c, strdup.c, texpire.c, validatefqdn.c, wildmat.c, xoverutil.c: Silence RATS. * strlcpy.c, strlcpy.h, Makefile.am, configure.ac: Import strlcpy.[ch] from OpenSSH's openbsd-compat. * leafnode.h: Add SKIPLWS from leafnode-2 * fetchnews.c: More !isspace-read-past-buffer fixes. * applyfilter.c: Use fstat() rather than stat(). (stat() did not check for errors in this place!). Enhance error output and log to syslog. * artutil.c: getheader(): use fstat after open. Paranoia mode. * checkpeerlocal.c: Limit strcpy. * critmem.c: Silence Flawfinder. 2002-07-04 Ralf Wildenhues * checkpeerlocal.c: Include missing string.h for memcpy. 2002-07-04 Matthias Andree * fetchnews.c: After all relevant servers have been queried, reset SIGPIPE handling to the default. No network writes are beyond that point, so SIGPIPE should never happen there. 2002-07-04 Ralf Wildenhues * checkgroups.c, configutil.c, fetchnews.c, nntpd.c: Fix several potential array bounds reads in rare error cases. 2002-07-04 Matthias Andree * checkpeerlocal.c: Fix IPv6 portability issue (FreeBSD). * getline.h: Add _getline prototype. * validatefqdn.c: Reformat FQDN error message. 2002-07-03 Matthias Andree * NEWS: Fix typo: NEWNEWS -> NEWGROUPS === release 1.9.23.rc2 === * ChangeLog, NEWS, fetchnews.8.in, leafnode.8.in, texpire.8.in: update documentation 2002-07-03 Ralf Wildenhues * texpire.c: Remove lockfile in rare error case. 2002-07-03 Matthias Andree * getline.c: Synchronize leafnode-1 and leafnode-2 getline.c * Makefile.am: add missing version.h 2002-07-03 Ralf Wildenhues * fetchnews.c: Fix last checkin: unconditionally ignore SIG{INT,PIPE} after server query. 2002-07-03 Matthias Andree * getline.c, mastring.c, mastring.h, version.h: Synchronize leafnode-1 and leafnode-2 mastring.* 2002-07-03 Ralf Wildenhues * fetchnews.c: After longjmp ignore SIGINT and SIGPIPE. Prevents race which can lead to double free. 2002-07-02 Ralf Wildenhues * nntpd.c: Simplify list(). * newsq.c: closedir() after reading. * applyfilter.c: Remove leftover globals. 2002-07-02 Matthias Andree * nntpd.c: Fix broken Message-ID when posting to localhost. Reported by Andreas Muck . * NEWS, activutil.c, fetchnews.c, leafnode.h, nntpd.c: Fix losing NEWGROUPS information across fetchnews -f or after timeout_active. * configure.ac: bump version to 1.9.23.rc2 * nntpd.c: Fix order of low/high marks in NEWGROUPS reply. 2002-07-01 Matthias Andree === release 1.9.23.rc1 === * leafnode.spec.in: Major overhaul. * leafnode.spec.in: Let 'news' read the configuration * configure.ac: The socklen_t test was hosed, Solaris and FreeBSD complained. Fixed. * grouplist.c: groupinfo is now valgrind-proof. 2002-07-01 Ralf Wildenhues * grouplist.c: Fix memleaks. 2002-07-01 Matthias Andree * INSTALL: write up on Solaris warnings * nntpd.c: Pseudo articles are now from news@ rather than nobody@ so people can reply. Pseudo article does not necessarily have article number 1 (various places). Kill space after number in dolistgroup(). Fix XOVER for pseudoarticle. * artutil.c: Bump article pointer to store first article with a number higher than the pseudo article. * applyfilter.c, texpire.c: Do not reset group low/high marks when a group runs empty. * INSTALL: Mention news: mail alias. 2002-07-01 Ralf Wildenhues * fetchnews.c, leafnode.h, mgetaline.c: Use RETSIGTYPE. 2002-07-01 Matthias Andree * checkpeerlocal.c: Word syslog message for 4.4BSD-IP aliases on broken Linux kernels better. * grouplist.c: Fix possible crash, goto crossed mastr *p initialization. Found by g++. * fetchnews.c: Make code C++ compiler proof. Fix SUN Workshop Pro compiler warnings. * configure.ac: Streamline -lnsl and -lsocket checks, add check for socklen_t. * activutil.c, checkpeerlocal.c, critmem.c, mastring.c, nntpd.c, lockfile.c: Make code C++ compiler proof. 2002-07-01 Ralf Wildenhues * artutil.c: __LINE__ is integer, not char. * fetchnews.c: Throroughly check changes from crashed previous fetchnews. 2002-07-01 Matthias Andree * Makefile.am: Work around broken Solaris tar that does not archive directories. * checkpeerlocal.c, configure.ac: Portability: SIOCGIF* need #include on SysV systems (Solaris, IRIX, Unixware, ...) * checkpeerlocal.c: Add license. Do not abort(), but skip the interface when SIOCGIFADDR yields a different address than was passed in. This can happen with 4.4BSD-style aliases on Linux that are configured with ip addr add, with older Linux kernels. Tell the user to configure Solaris-style alias interfaces instead. * pcre_extract.c: Add email address to copyright. 2002-07-01 Ralf Wildenhues * nntpd.c: Fix relaxed parsing of XHDR argument: add colon if not present. * checkpeerlocal.c, pcre_extract.c: splint guard arpa/inet.h, indent. * NEWS, README.FQDN.pod: Fix typos. * applyfilter.c, configutil.c, fetchnews.c, texpire.c: Remove name clashes for readability. * fetchnews.c: Fix parsing of bogus server mark in leaf.node/server. Can happen with previous interrupted fetchnews. 2002-07-01 Matthias Andree * Makefile.am: Fix 'files left after distclean' warning (on FreeBSD at least). * getline.c: Fix missing prototype warning on systems without getline. 2002-06-30 Matthias Andree * .cvsignore: add README.FQDN{,.html} * newsq.c: Also print Message-ID and the complete/incomplete state. * fetchnews.c: Only try to post articles that have the u+x flag set. As fetchnews does not lock in "postonly" mode, this mode might post incomplete articles that the client is posting at the same time. * nntpd.c: dopost(): Validate Message-ID if present, it must not have a local or unqualified domain name part. Retry to open another out.going spool file if one with the same name already exists. fsync() the out.going file before acknowledging acceptance (240 Ok). chmod a complete out.going file to mode 755 so that fetchnews can see it is complete. The idea was taken from Postfix. * NEWS: update. * Makefile.am, README.FQDN.pod: New README.FQDN. * Makefile.am, leafnode.h, pcre_extract.c: New function pcre_extract(). * config.example: Fix typo, make allowstrangers warnings more verbose. * checkpeerlocal.c: Fix 'no previous prototype' and 'defined but not used' compiler warnings. * nntpd.c, TODO: Nuke tmpfile(). * leafnode.h: Add missing checkpeerlocal() prototype. * Makefile.am, README, checkpeerlocal.c, config.example, configutil.c, leafnode.h, nntpd.c: By default, deny connection from hosts outside the local networks. * INSTALL: Document xinetd, add note about true remote access. * README, validatefqdn.c: Clarify on the new hostname issue. * mastring.c, mastring.h: Add mastr_size, to obtain the buffer size. (Actually, the buffer is one character bigger, to hold a trailing NUL byte.) 2002-06-28 Ralf Wildenhues * texpire.c: Fix minor memleak. 2002-06-28 Matthias Andree * nntpd.c: add debug info to markinterest() * fetchnews.c, xoverutil.c: tabs2spaces is now in xoverutil.c * fetchnews.c: avoid double free when downloading HEAD. * TODO: folding stuff is debugged * configure.ac: bump version to 1.9.23.rc1 * newsq.c: Don't crash when headers are not found and a careless libc is in place. Do not leak memory. Unfold headers. * artutil.c: fix memory leak * nntpd.c: More dopost() article syntax checks: control data, whitespace in header tag (before colon), missing colon; better diagnosis, report missing body. Remove dead CR/LF removal code (getline does this already). Fix a typo in error message for missing Subject: header. * artutil.c: fgetheader: Complain if header to find does not end in a colon. Cleanup, using getfoldedheader. Add simple test function. * texpire.c: remove empty group directory * texpire.8.in: Add a new BUGS item * getfoldedline.c: Change: folded lines keep their LF. * xoverutil.c: When removing .overview, log this in debugmode. Also try to remove the current directory, which will be empty at that time. * fetchnews.c: Renamed serverlist to server, add freeservers(). Change SIGINT handling again, and suppress warning that no server that allowed posting could be found after SIGINT. * nntputil.c, texpire.c, configutil.c, leafnode.h: Renamed serverlist to server, add freeservers(). * nntpd.c: Renamed serverlist to server, add freeservers(). No longer open pseudoarticle for /any/ article that is not found, but only in pseudogroups. * filterutil.c: only log pcre_exec when debugmode is 2 or higher. * artutil.c: When storing an article, bump the low group mark (cg->first) to 2 if it's 1, to prevent some newsreaders from offering the pseudoarticle again. * TODO: Applyfilter: fixed low/high marks to 1/1 for empty groups, reported by Ralf Wildenhues. * applyfilter.c: Fix low/high marks to 1/1 for empty groups. Free server list after readconfig. 2002-06-27 Matthias Andree * checkgroups.c, nntpd.c: drop #include * .indent.pro: drop implicit options mentioned explicitly 2002-06-27 Ralf Wildenhues * fetchnews.c: Fix SIGINT setjmp behaviour: don't try to fetch again. 2002-06-24 Matthias Andree * CREDITS: update * COPYING, COPYING.GPL, Makefile.am, cindent: Add cindent script. * fetchnews.c: New nopost option. Fix exit status. Always log how many articles have been posted. main(): keep servers variable intact. Use volatile to protect variables from setjmp clobbering. Re-indent. * NEWS, config.example, configutil.c, leafnode.h: New nopost option. 2002-06-23 Matthias Andree * nntpd.c: beautify code 2002-06-23 Ralf Wildenhues * leafnode.h: Remove unneeded member alive from struct newsgroup. 2002-06-22 Ralf Wildenhues * texpire.c: Fix possible NULL deref in dogroup. 2002-06-22 Matthias Andree === release 1.9.23.pre3 === * miscutil.c: fix typo * grouplist.c: Also list "groups" that have no subdirectories. * activutil.c, fetchnews.c, nntpd.c, texpire.c: Further fixes to article number treatment. * fetchnews.c: The check to suppress the upstream server's xref: header is now case insensitive. Only store articles if all six mandatory headers are present. * nntpd.c: robustness: when a group is empty and not interesting, also mark it as pseudogroup if the group directory still exists. Reported against leafnode-2 by Ralf Wildenhues. * leafnode.h: new fixxover() prototype. new #define PORTFILENAMECSET, a string that contains all characters of the SUS v2 portable file name character set * TODO: Mirko Liss' suggestion to not read empty lines is implemented. * Makefile.am: make temp.files directory * lockfile.c: if timeout is 0, do not try any timeout handling. * xoverutil.c: Fix memory leaks in obscure cases. Also, xoverutil would not recover properly from multiple lines for the same article in .overview (which should not happen and is now logged with LOG_ERR). Reported by Ralf Wildenhues. * miscutil.c: when recreating missing directories, fix owner to news before setting the uid. Create new temp.files directory. * fetchnews.c, xoverutil.c: Move fixxover from fetchnews.c into xoverutil.c. 2002-06-21 Matthias Andree * miscutil.c: Call endhostent(). 2002-06-20 Matthias Andree * README: fix broken cut & paste 2002-06-19 Ralf Wildenhues * xoverutil.c: getxover: after releasing xoverinfo contents, set xoverinfo = NULL, so subsequent access will scream. Duplicate strings from overview, don't point into it. Small memleak in getxoverline. * texpire.c: Fix memleak. 2002-06-19 Matthias Andree === release 1.9.23.pre2 === * t/: cmp.gal1w, cmp.gal5t: fix check references to satisfy make distcheck * ChangeLog, configure.ac, configure.in: release 1.9.23.pre2 * artutil.c, fetchnews.c: Debugging cleanups. * getaline.c: Ignore incomplete lines (without trailing LF). Suggested by Mirko Liss. * NEWS, README: New DEBUGGING section in README. * xoverutil.c: cleanup, add some debug log to getxoverline * filterutil.c: cleanup, add PROPER debug log (it would formerly log the wrong pattern on a match 2002-06-18 Matthias Andree * leafnode.h: Drop mallocd from struct xoverinfo. * xoverutil.c: Further cleanup: getxoverline(): drop mallocd member of xoverinfo, cope with folded Lines: headers. * xoverutil.c: Cleanup: Drop iovec stuff, use regular write. Saves 16 LoC. * xoverutil.c: Kill non-article files in non-verbose mode, too. Check return value of fchmod, fsync (new) and close, and do not rename the temporary .overview file into place when an error occurs. * fetchnews.c, leafnode.h, miscutil.c: appendtolist is gone. use prependtolist instead. 2002-06-17 Ralf Wildenhues * fetchnews.c: Fix two small memleaks. 2002-06-17 Matthias Andree * leafnode.h, miscutil.c: New prependtolist() function. * grouplist.c: Fix: adding to list structure was broken. Fix memory and file descriptor leaks, found by Ralf Wildenhues. Fix indentation to make vi folding happy. * makerpm.sh: This file has been superseded by leafnode.spec.in. 2002-06-17 Matthias Andree === release 1.9.23.pre1 === * texpire.c: Fix long-standing bug: Also expire groups that are not in "group.info". * grouplist.c, leafnode.h: Rename getgrouplist -> get_grouplist. * miscutil.c: Make last argument of appendtolist a const. * Makefile.am, grouplist.c, leafnode.h: New function getgrouplist() to obtain a list of all news groups in the spool. 2002-06-15 Matthias Andree * fetchnews.c: Fix two filtering bugs. 1. Filter hits on mandatory headers did not prevent fetching the article. 2. For each filtered article, one regular article was NOT fetched. En passant, fix types to unsigned long. Hand over lock file to xover-fixing child. * TODO, configutil.c, leafnode.h: Fix two filtering bugs. 1. Filter hits on mandatory headers did not prevent fetching the article. 2. For each filtered article, one regular article was NOT fetched. En passant, fix types to unsigned long. 2002-06-11 17:16 Matthias Andree * fetchnews.c, lockfile.c: fetchnews now hands over the lockfile to its child; while it's not strictly necessary to hold the lock while updating the xover, it prevents several processes fighting for the same .overview file at the same time. * applyfilter.c, texpire.c: Track new lockfile_exists() prototype * leafnode.h: Update lockfile.c from leafnode-2 and add the handover_lock function. * Makefile.am: Track new files from leafnode-2 * ln_log.c, ln_log.h, writes.c: Merge from leafnode-2 2002-06-03 Matthias Andree * validatefqdn.h: Split from leafnode.h. * TODO, NEWS: update * config.example, configutil.c, fetchnews.c, texpire.8.in, texpire.c: New feature by Andreas Meininger : set groupexpire to -1 to tell texpire to leave a group alone. * fetchnews.8.in: Reword EXIT CODE section * fetchnews.8.in, fetchnews.c: fetchnews now exits with code 2 if there was a problem connecting to at least one upstream server. * nntpd.c: More verbose POST reject messages for missing mandatory headers. * nntpd.c: More verbose POST reject messages. Reject 8-bit data in headers. * getfoldedline.c: Never try to unfold after a . line * fetchnews.c: Unfold header lines after HEAD command. * validatefqdn.c: Fix #include directives. * install-sh: install-sh is a generated file and does not belong into CVS. * gmtoff.c: Add missing stdlib.h include for abort(3). * configure.in: Add pcre-config --libs output to LIBS rather than LDFLAGS. * Makefile.am: New header file validatefqdh.h. Adopt and merge getfoldedline.c from leafnode-2. * getfoldedline.c, leafnode.h: Adopt and merge getfoldedline.c from leafnode-2. * leafnode.h: Move validatefqdn prototypes to separate file 2002-06-02 Matthias Andree * miscutil.c: Apply fix sent by Raymond Scholz, to fix broken hostname resolver. 2002-04-28 Matthias Andree * nntputil.c: Drop connection when the upstream server runs NNTPcache 2.3.x. 2002-04-25 Matthias Andree * nntpd.c: Change 400 Service discontinued message to "Client timeout, disconnecting." * nntpd.c: No longer emit "400 Service discontinued" to the client, it breaks too many of them. * leafnode.h: List is_validfqdn(). * miscutil.c: Fix typo. * miscutil.c: Use new is_validfqdn(). * validatefqdn.c: Also catch linux.local (SuSE default on some systems) as invalid. Export is_validfqdn() to let whoami() use it to skip over invalid aliases. * miscutil.c: Use endpwent() in initvars(). * nntpd.c: Report I/O errors in markdownload() back to the client. * nntpd.c: Detect I/O errors. * nntpd.c: Ralf Wildenhues: fix file descriptor leak in markdownload(). 2002-04-23 Matthias Andree * COPYING: Add Jonathan Larmour. * mgetaline.c: Merge timeout_client patch by Jonathan Larmour . * leafnode.h: Merge timeout_client patch by Jonathan Larmour . * configutil.c: Merge timeout_client patch by Jonathan Larmour . * config.example: Merge timeout_client patch by Jonathan Larmour . * configure.in: Bump version to 1.9.23.pre1. * leafnode.h: Add wildmat and mysetvbuf prototypes. * mysetvbuf.c: Include leafnode.h to pull the prototype in. * wildmat.c: Change gets -> fgets in -DTEST main(). From leafnode 2. 2002-04-19 Matthias Andree === RELEASE 1.9.22 === * configure.in: Bump version to 1.9.22.rel. * CREDITS: Change to UTF-8. Update. 2002-04-17 Matthias Andree * nntpd.c: Took Ralf Wildenhues' patch to fix the types of the line length counter variable, to prevent buffer overrun on 64 bit machines. The bug was introduced in 1.9.22.rc1. Overrides Fabrizio Tironi's patch. === release 1.9.22.rc2 === * wildmat.c: Taken from leafnode-2. * miscutil.c: Drop fnmatch hassle, use wildmat instead. Problem reported by Arvid Warnecke. * configure.in: Drop AC_FUNC_FNMATCH. Bump version to 1.9.22.rc2. * Makefile.am: Add wildmat.c. 2002-04-15 Matthias Andree === release 1.9.22.rc1 === * NEWS: Update. * TODO: Update. * miscutil.c (whoami): Fix qualification logic, skip hosts that look like localhost or localhost.localdomain (Red Hat default installs suffered from the old whoami() logic). * nntpd.c (parser): Change n from long to int, the range is small enough (Patch by Fabrizio Tironi ) * INSTALL: Add documentation on fully qualified domain names. 2002-04-14 Matthias Andree * README: Update. * configure.in: Bump version to 1.9.22.rc1. * nntputil.c: The NewsCache workaround suffered from an inverted logic and did not work properly. Bug reported by Detlev Jäckel. 2002-04-08 Matthias Andree === RELEASE 1.9.21.rel (stable) === * NEWS: Update. * TODO: Update. * applyfilter.c: Ralf Wildenhues: keep last newline in header for dofilter. * configure.in: Bump version to 1.9.21.rel. 2002-04-05 Matthias Andree === release 1.9.21.rc2 === * miscutil.c: Drop HAVE_GMTOFF trash, use gmtoff() instead. Suggested by Ralf Wildenhues. * configure.in: Bump version to 1.9.21.rc2. Drop HAVE_GMTOFF check (obsolete). * xoverutil.c: Properly rewrite .overview when articles have been removed that are not the first or last articles in the group, reported by Volker Apelt (against leafnode-2) and Ralf Wildenhues. * applyfilter.c: Do not reset group high water mark. (Reported by Ralf Wildenhues.) === release 1.9.21.rc1 === * applyfilter.c: Work around bogus gcc warning "score might be unused". * TODO: Reorder and drop Cornelius' applyfilter wish (now implemented). * TODO: Mark "update overview (applyfilter)" as done. * applyfilter.c: Update .overview after filtering, reported by Ralf Wildenhues. * nntpd.c: Add Jonathan Larmour to copyright. * leafnode.h: Add clamp_maxage. * configutil.c: Parse clamp_maxage. * configure.in: Change version from 1.9.21.pre2 to 1.9.21.rc1, short cutting because of the gmtoff bug. * config.example: Addition by Jonathan Larmour : document that maxage=0 means "No checking". Matthias Andree: add clamp_maxage documentation. * TODO: update * NEWS: update * INSTALL: Add MacOS X PCRE build instructions. * fetchnews.c: Allow maxage manipulation -- newly introduced in 1.9.21.pre1 -- to be suppressed with "clamp_maxage=0" in the configuration file. 2002-04-04 Matthias Andree * nntpd.c: Robustness fix by Jonathan Larmour : save the group when rereading the active file. Fixes a SIGSEGV. * fetchnews.c: Robustness fix by Jonathan Larmour : don't dereference NULL fields when parsing incomplete XOVER lines. Fixes SIGSEGV. * gmtoff.c: Former gmtoff() versions forced the DST flag to 0, so the gmtoff() calculation had the wrong offset in locales that use daylight saving time. Reported by Ralf Wildenhues. 2002-04-03 Matthias Andree * configure.in: Bump version to 1.9.21.pre2. * applyfilter.c: Ralf Wildenhues: Remove artificial limit on header length -- new function readtodelim, terminate string correctly. Fix usage description and a SEGV in case of wrong cmdline input. Ralf Wildenhues: fix memory leak. 2002-03-29 Matthias Andree === release 1.9.21.pre1 === * NEWS: Update. * fetchnews.8.in: Update XOVER information. Document that expire overrides maxage if maxage is higher. * TODO: Update. * fetchnews.c: Abort when ENOSPC is detected on fclose in getbody() or getgroup(). Problem reported by Michael O'Quinn. * texpire.c: Drop lookup_expire, now in configutil.c. * fetchnews.c: Clamp maxage to groupexpire/expire to prevent fetching duplicates. Reported by Michael O'Quinn. * configutil.c: Add "days" for expire entries. Move lookup_expire() here (was in texpire.c). * config.h.in: Updated. * activutil.c: Fix uninitialized err use. * leafnode.h: Add "days" for expire entries. * activutil.c: Fix crash when no groupinfo data is present. Reported by Thorsten Gunkel. * mysetvbuf.c: New file. Wraps around setvbuf, taking care of SETVBUF_REVERSED. * leafnode.h: Add lfindinlist, replaceinlist, mysetvbuf prototypes. * configure.in: Bump version to 1.9.21.pre1. Add AC_FUNC_SETVBUF_REVERSED. * Makefile.am: Add mysetvbuf.c. * miscutil.c: Add replaceinlist and lfindinlist functions. * fetchnews.c: Change SERVERNAME~ files in processupstream to line buffered mode. Roll in SERVERNAME~ into SERVERNAME if the ~ file is newer. 2002-03-25 Matthias Andree === RELEASE 1.9.20 === * configure.in: Bump version to 1.9.20.rel, without actually releasing 1.9.20.rc10. * README: Drop reference to German documentation. * fetchnews.c: Make getbody unlink messages more verbose. 2002-03-24 Matthias Andree * configure.in: Bump version to .rc10. * config.example: Move initialfetch closer to the beginning of the file and recommend it. * TODO: Add two bug reports by Michael O'Quinn. * NEWS: new * INSTALL: Recommend initialfetch. * fetchnews.c: Keep old $spooldir/leaf.node/SERVERNAME file in place when the new file has write errors. Bug found by Michael O'Quinn. En passant, make two log messages more verbose and easier to read. 2002-03-23 Matthias Andree === release 1.9.20.rc9 === * mgetaline.c: New file. * README.FIRST: New file. * Makefile.am: Add README.FIRST, mgetaline.c. * README: Update. * validatefqdn.c: Add "logtostderr" option to write a short 503 notice to stdout (for newsreaders connecting to nntpd) to give users a hint why leafnode commits suicide. Idea arose after Heiko Nock had difficulties with 1.9.20.rc8. * texpire.c: Fix syslog/configuration initialization order. Expire articles with 0 bytes. * nntputil.c: Drop timeout handling, now in separate file. In fopenart(), consider articles of 0 size as nonexistent. In nntpreply(), use mgetaline() instead of getaline() to allow network reads to time out. * nntpd.c: Fix syslog/configuration initialization order. Drop timeout handling, now in separate file. In fopenart(), consider articles of 0 size as nonexistent. * miscutil.c: Add "logtostderr" tag to initvars, to let nntpd tell the connecting newsreader about its domain name troubles. * leafnode.h: Fix prototypes, exhibit timeout management API (timer, mgetaline & Co.). * fetchnews.c: Also send "considering articles..." message to syslog. Fix syslog/configuration initialization order. Fix file descriptor leak, leaking one fd on each NNTP errors while fetching articles; this fix introduces a new protocol element: articles are truncated to 0 size on write errors, and 0-sized articles are considered nonexistent by texpire and leafnode (the nntpd.) * configure.in: Bump version to 1.9.20.rc9. * checkgroups.c: Fix syslog/configuration initialization order. * applyfilter.c: Fix syslog/configuration initialization order. 2002-03-20 Matthias Andree * nntpd.c: Drop unneeded variable p from dolist (Ralf Wildenhues). * miscutil.c: Remove duplicate definition of global active (Ralf Wildenhues). * leafnode.h: Fix getline prototype (Ralf Wildenhues). === release 1.9.20.rc8 === * fetchnews.c: Add "HEAD" to logging of replies to "HEAD" commands. * TODO: Update. * README: Update. * INSTALL: Deprecate installation without tcpd. * fetchnews.c: Log replies to GROUP commands ourselves with debug == 1. To trace NewsPlex problems reported by Michael O'Quinn. * Makefile.am: Fix fetchnews_DEPENDENCIES, fetchnews was not linked anew after LIBOBJS or liblnutil.a updates. * nntputil.c (putaline): do not log trailing CR or LF with syslog. Use fputs instead of fprintf for efficiency. (nntpreply): log the replies with debug == 1 now that getaline only logs with debug > 1. * nntputil.c: Log port number in "connected to" syslog message, and mark the "200" with "reply:" so users know it's not the port number. Suggested by Michael O'Quinn. 2002-03-18 Matthias Andree * leafnode.h: Have findmsgid() return unsigned long (formerly int). * fetchnews.c: Have getmarked() consistently use unsigned long for article numbers (formerly int). * miscutil.c: Have findmsgid() return unsigned long (formerly int). 2002-03-16 Matthias Andree * nntpd.c: More doarticle() fixes by Ralf Wildenhues. I was too fast with my last patch. 2002-03-15 Matthias Andree * configure.in: Bump version to 1.9.20.rc8. * nntpd.c: Fix possible NULL pointer dereference in response to XHDR command, reported by Ralf Wildenhues. If INET_ADDRSTRLEN is not defined, use 16 instead, OSF/1 v4.0 does not define this macro; reported by Jörg Dietrich. === release 1.9.20.rc7 === * getaline.c: Drop trailing \n from syslog. * nntpd.c: Quick and UGLY hack to log own and peer address. * TODO: Update. * .cvsignore: Add some test files. * ALL: fix splint comments that indent broke again. Bug report against indent 2.2.6 was filed, because it still breaks comments with -nfca -nfc1. * xoverutil.c: Add missing closedir(), patch by Ralf Wildenhues. * nntpd.c: Make sure that ARTICLE marks the proper article for download. Bug report by Ralf Wildenhues. Fix error reply string (patch by Ralf Wildenhues). Replace xstrdup by critstrdup (suggested by Ralf Wildenhues). * fetchnews.c: Restore the splint comments that indent broke. * configure.in: Bump version to 1.9.20.rc7. 2002-03-11 Matthias Andree === release 1.9.20.rc6 === * snprintf.c: Include leafnode.h. * leafnode.h: Add vsnprintf prototype. * xsnprintf.c: Enhanced. * snprintf.c: Fix bogus "overrun" detections. * Makefile.am: Update for automake 1.6. * configure.in: Update for autoconf 2.53. * snprintf.c: Add vsnprintf. * ALL: ran through indent. * artutil.c: Use NULL instead of 0. * artutil.c: Add missing 0 terminator to mastr_vcat call. * Makefile.am: Add attributes.h and getline.h to liblnutil_a_SOURCES. * .cvsignore: Update. * tools/.cvsignore: Add Makefile. * t/.cvsignore: New. * xsnprintf.c: New snprintf checker. * xoverutil.c: Silence flawfinder. * validatefqdn.c: Silence flawfinder. * texpire.c: Tons of type, format string and buffer overrun fixes (not exploitable). * strdup.c: Silence flawfinder. * nntputil.c: Tons of type, format string and buffer overrun fixes (not exploitable). * nntpd.c: Fix buffer overruns (not exploitable). Fed through indent. * newsq.c: Fix buffer overrun (not exploitable). Fed through indent. * miscutil.c: Tons of type, format string and buffer overrun fixes (not exploitable). Add overrun() and xsnprintf(). * lsort.c: Fix buffer overrun (not exploitable). * lockfile.c: Silence flawfinder. * leafnode.h: Type fixes. * fetchnews.c: Fed through indent. * fetchnews.c: Tons of type, format string and buffer overrun fixes (not exploitable). * configutil.c: Tons of type, format string and buffer overrun fixes (not exploitable). * attributes.h: From 2.0b. * applyfilter.c: Properly initialize g->first to ULONG_MAX rather than INT_MAX. * activutil.c: Use xsnprintf to prevent buffer overruns from spooldir (not exploitable). * quickmkdir.c: Silence flawfinder. * mastring.h: From 2.0b. * mastring.c: From 2.0b. * Makefile.am: Add mastring.c/.h and xsnprintf check. * artutil.c: Fix possible buffer overrun with excessive crossposts in store(). * artutil.c: Drop broken and unused storearticle() function. * fetchnews.c: Fix compiler warnings around supersede(). * leafnode.h: Fix copyright statement. * getline.c: Fix copyright statement. * configutil.c: Fix copyright statement. Ralf Wildenhues: Add splint annotations. Fix rare memory leaks and OOM management. * artutil.c: Ralf Wildenhues: fix memory leak in storearticle(). Fix uninitialized variable in store(). * COPYING.LGPL: Added. * COPYING: Fix copyright statement. * texpire.c: Fix copyright statement. * testgen.c: Fix copyright statement. * test1.c: Fix copyright statement. * syslog.c: Fix copyright statement. * quickmkdir.c: Fix copyright statement. * mkstemp.c: Pull in mkstemp() from leafnode 2.0b. * gmtoff.c: Fix copyright statement. * getline.h: Fix copyright statement. * Makefile.am: Add note to config.c that the file is auto-generated. Drop env.c. * Makefile.am: Fix copyright statement. * applyfilter.c: Fix copyright statement. * amiroot.c: Add reference to COPYING.LGPL. * README: Add hacking and status notes. * xoverutil.c: Ralf Wildenhues: fix possible null pointer dereferences on badly formatted articles in getxoverline(). * nntpd.c: Ralf Wildenhues: fix *getheader memory leaks. * miscutil.c: Ralf Wildenhues: fix format string bug in lookup(). * nntputil.c: Add Ralf Wildenhues to Copyright. Ralf Wildenhues: add splint annotations. * critmem.h: Add copyright statement and license. Ralf Wildenhues: backport critstrdup from 2.0b8, add SPlint annotations. * leafnode.h: Ralf Wildenhues: SPlint annotations. * fetchnews.c: Ralf Wildenhues: SPlint annotations, strdup -> critstrdup, memleaks and possible NULL pointer dereference in postarticles fixed. * critmem.c: Add copyright and license statements. * critmem.c: Ralf Wildenhues: add critstrdup from leafnode 2.0b. * activutil.c: Ralf Wildenhues: fix memory leaks in mergegroups(), changegroupdesc(), writeactive(), readactive(). Turn unchecked strdup() into critstrdup(). 2002-03-10 Matthias Andree * quickmkdir.c: Ralf Wildenhues: add some const keywords to fix compiler warnings. * nntpd.c: Ralf Wildenhues: don't extract the article number for STAT/BODY/HEAD/ARTICLE form, return 22X 0 according to the current NNTP draft. We anticipate this change for compatibility with some clients. * miscutil.c: Ralf Wildenhues: introduce compile-time option -DTESTMODE which ignores UID switch failures. Don't use in production. * lsort.c: Ralf Wildenhues: add some const keywords. * fetchnews.c: Ralf Wildenhues' patch: fix compiler warnings, fix variable shadows and add some const keywords. * texpire.8.in: Document that texpire expires individual articles, not threads. * nntpd.c: Fix pseudo article handling broken by changes that went into .rc5. Reported by Ralf Wildenhues. * miscutil.c: Introduce SIZE_s as the size of the "s" variable. * getaline.c: getaline(): Only print lines read when debug is > 1. Bug found by Michael O'Quinn. License: remove infiltration clause for leafnode. * configure.in: Bump version to 1.9.20.rc6. 2002-03-08 Matthias Andree * fetchnews.c: Workaround for yet unknown bug: Also catch SIGPIPE to let us still update the XOVER. 2002-03-05 Matthias Andree === release 1.9.20.rc5 === * TODO: Update. * Makefile.am: Remove /dist from find in disk-hook to fix "make dist" troubles when WITH_PCRE=no (for RPM). * nntpd.c: fopenart(): Unify "STAT n" and "STAT" (with implicit current article pointer) handling (also for ARTICLE/BODY/HEAD) to fix inconsistencies reported by Ralf Wildenhues. Further tuning may be required should bogus pseudoarticles show up. doarticle(): drop printf(...) in header/body copy loops, use fputs(..., stdout) instead for efficiency. * nntpd.c: Fix two strdup that didn't check their return value; we have a new xstrdup function that does that. Found by Ralf Wildenhues. Fix delaybody. Since 1.9.19.ma4, this had been broken and would never deliver a body with BODY or ARTICLE. Found by Ralf Wildenhues. * nntpd.c: Fix NEWGROUPS "GMT" inverse logic bug which used local->GMT compensation when the keyword GMT was NOT in place. The bug has been introduced in 1.9.20.rc3 and was discovered by Ralf Wildenhues. 2002-03-01 Matthias Andree * TODO: Update. * fetchnews.c: Merge Ralf Wildenhues' patch to fix atoi to strtol. * configure.in: Bump version to 1.9.20.rc5. * Makefile.am: Prune CVS directories from tarball. Reported by Ralf Wildenhues. === release 1.9.20.rc4 === * xoverutil.c: Type and format string fixes. * xoverutil.c: Drop arpa/inet.h, not needed in this file. * nntpd.c: Feed through indent. * leafnode.h: Type and format string fixes. * fetchnews.c: Type and format string fixes. Drop delposted. Remove article as soon as successfully posted to any server, to prevent moderators from being mailed articles twice. NOTE: put your most reliable servers first in the config file! Fix SIGSEGV with fetchnews -P. * configutil.c: Type and format string fixes. * activutil.c: Type and format string fixes. 2002-02-28 Matthias Andree * nntpd.c: Return article number 1 instead of 0 for pseudo group STAT/HEAD/BODY/ARTICLE. * nntpd.c: Fix STAT/HEAD/BODY/ARTICLE with pseudo article with implicit article number. Bug reported, found and different fix suggested by Ralf Wildenhues. 2002-02-27 Matthias Andree === release 1.9.20.rc3 === * README: Add some documentation on troubleshooting. * env.c: Drop inline keywords, they break Sun's Workshop cc. * test1.c: Fix compiler warnings, dropping argc/argv. * env.c: Feed through protoize. Add some (int) typecasts. * nntpd.c: Fix "XOVER 1- yields 420 on pseudogroups" bug reported by Ralf Wildenhues. At the same time allow "XOVER -n" syntax. * newsq.c: Implement new "-f" option that shows the failed.postings queue instead. Change the column headers. * newsq.1.in: Document new "-f" option that shows the failed.postings queue instead. * TODO: Update. * README: Update. * genlsm.sh.in: Update Maintained-By:. * configure.in: Add AM_MAINTAINER_MODE to speed up end user builds. If you want to hack on leafnode, please use ./configure --enable-maintainer-mode. * fetchnews.c: Drop unused variables from delposted(). * syslog.c: Include leafnode.h, patch by Ralf Wildenhues. * nntpd.c: Various type and format string fixes. * quickmkdir.c: Include stdlib/string.h. Patch by Ralf Wildenhues. * fetchnews.c: Partially restore delposted() handling. * texpire.c: Drop whoami() call, now done in initvars(). * nntputil.c: Change lllen to size_t. * nntpd.c: Drop fqdn override to "localhost". Drop whoami(), now called from initvars(). Use gmtoff() handling from 2.0b8_ma10pre. Drop global variable gmt_off, inadequate. * miscutil.c: Call whoami() and validatefqdn() from initvars(). * lockfile.c: Register atexit() function to clean up left-behind temporary lock helper files. * leafnode.h: Add validatefqdn, gmtoff, drop whoami, change fqdn size to a #define. * configure.in: Bump version to 1.9.20.rc3. * checkgroups.c: Drop whoami() call, now done in initvars(). * applyfilter.c: Drop whoami() call, now done in initvars(). * Makefile.am: Add .indent.pro, validatefqdn.c, gmtoff.c. * gmtoff.c: new module. 2002-02-26 Matthias Andree === release 1.9.20.rc2 === * configure.in: Bump version to 1.9.20.rc2. * fetchnews.c: When fetchnews is run with servers down, articles may not make it to the upstream, but not to failed.postings either, and will be lost without traces at the time delposted() is run. We just drop delposted() and rely on postarticles() to remove the articles successfully posted, relying on the upstream server to reject postings older than its history data base. Bug reported against leafnode 2.0b8 by Ivo Schwalbe, , Message-ID: , 1.9.19 inquiry by jom1@voonoo.net. 2002-02-20 Matthias Andree === release 1.9.20.rc1 === * nntpd.c: Add Ralf Wildenhues to Copyright. * configure.in: Bump version to 1.9.20.rc1. * nntpd.c: Ralf Wildenhues found and fixed a buffer underrun in leafnode 2.0b8_ma9 and reported it was also present in 1.9.19. Merging the fix from 2.0b8_ma*. 2002-01-11 Matthias Andree === release 1.9.19.ma4 === * fetchnews.c: Take the workaround Mark Brown , Debian leafnode package maintainer, suggested to limit the impact of zero-sized groupinfo woes, Debian Bug#128524. Beware however, this is not a complete fix and does only work for setups with exactly one server/supplement line (either server or supplement) in /etc/leafndoe/config, on multi-server setups, after fixing your authentication information, you *MUST* rerun fetchnews -f. Still, it does not make things worse for the user, so I took it although I hesitated at first. (Matthias Andree) * nntputil.c: Add support for NewsCache workaround, keep a copy of the line last read by nntpreply(). * nntpd.c: Take gmtoff from leafnode-2.0b8_ma9rc2 to fix Solaris compilation troubles and wrong timezone in logs. * Makefile.am: Require automake >= 1.5. Add copyright. No longer distribute config.c. Properly set owner of directory holding the lockfile (reported by Doug Laidlaw). * leafnode.spec.in: Move lockfile to /var/spool/news/leaf.node/fetchnews.lck * fetchnews.c: Backport NewsCache workaround for upstream posting from leafnode 2.0b* * COPYING: Put 2002 in (C). * configure.in: Require automake >= 2.52, put 2002 in (C), bump version. 2001-09-02 Matthias Andree * release 1.9.19.ma2 * updated for autoconf 2.52 and automake 1.5 * updated PCRE to 3.5 * Makefile.am: tweaks for automake * env.c: shamelessly stolen from FreeBSD 4.4-RC (setenv): change bcopy to memcpy do __P right * nntpd.c: fix unsetenv issues. May memory leak a couple of bytes for the TZ environment variable, we cannot fix that portably without major effort. 2001-06-16 Matthias Andree f * lockfile.c (safe_mkstemp): umask safe mkstemp (lockfile_exists): reimplemented from scratch. * miscutil.c: remove lockfile_exists, now available as separate file. It was broken beyond repair. 2001-06-07 Matthias Andree * activutil.c: remove snprintf which did not check its error code and replace by a safe collection of fputs/fprintf. 2001-01-14 Matthias Andree * generic: have callers of lockfile_exists() report to stdout if locking fails. * release: 1.9.18ma4 * Makefile.am: fix fetchnews dependencies when included PCRE are to be used. fix make test when configured for build outside of source directory. * config.example: document linebuffer parameter * configure.in: fix dependencies for included PCRE * configutil.c: add "linebuffer" parameter, if set to != 0, it will change stdout and stderr to be line buffered. * fetchnews.c: tell port in "Trying to connect to..." verbose message (only in 1.9.18ma4) * filterutil.c: fix pcre.h include location and a minor typo. 2000-12-19 Matthias Andree * configure.in: remove bash-isms * Makefile.am: fix GNU make dependencies, BSD pmake is fine now * fetchnews.c: fix some syslog format strings (%d -> %ld) * nntpd.c: fix some syslog format strings (%d -> %ld) 2000-09-11 Matthias Andree * genlsm.sh.in: generates lsm file automatically * xoverutil.c: switch to mysyslog and remove mkstemp #ifdefs (now handled by autoconf) * testgen.c: testcase generator. * test1.c: getaline tester. * t/: new directory, has test cases for getaline. * syslog.c (myopenlog): new function to remove #ifdefs from program files. Encapsulate system differences in this file. * quickmkdir.c: installation helper tool. * nntpd.c: replace fgets by getaline, fix article number variables types to unsigned long, switch to myopenlog. * miscutil.c: remove snprintf, change xfirst/xlast to unsigned long, split critmalloc/critrealloc, strdup, snprintf off, add verbose>3-debug to makedir, delete getaline function (too complex, yet buggy), fix ngmatch not recognizing * and [ as wildcards. * makerpm.sh: removed file * leafnode.spec.in: have leafnode.spec built by autoconf * leafnode.h: cleanup, support for critmem.h and prototypes for new and replacement functions, change xfirst/xlast to unsigned long * getline.c: new implementation from scratch for systems without GNU libc 6. GPL. Uses getc currently. * getaline.c: new implementation from scratch, uses getline, GPL. Rock solid. Will not break on \0. Does not change \0 to space (waste of time, if an article has \0, it's broken, don't try to fix). * fetchnews.c: fix constants to PATH_MAX, support XOVER, work around %y strftime compiler warning, switch to myopenlog * doc_german: remove old documentation. outdated. * critmem.c: split functions off miscutil.c * critmem.h: new file * configutil.c: change libdir to sysconfdir * configure.in: adjust to automake, put -lpcre into PCRELIB rather than LIBS, use AC_REPLACE_FUNCS for snprintf strdup mkstemp and getline, support --with-spooldir, change --with-confdir to override sysconfdir, support --with-lockfile, check rpm build directory, add man pages to AC_OUTPUT, echo help message after configuration. * applyfilter.c: fix article counter type to unsigned long, switch to myopenlog * man pages: insert proper paths by autoconf * activutil.c (readactive): fix type of n to ssize_t * acconfig.h: new #defines: SPOOLDIR, LOCKFILE, HAVE_GETLINE * PCRE_README: new documentation * Makefile.am: switch to automake * INSTALL: Updated and revised. Removed section on %y yielding only last 2 digits of year. 2000-09-06 Matthias Andree * lockfile.c: when a stale lock file existed, it would be removed, but locking would still fail. Fixed. locking is now retried when stale file had been removed. * fetchnews.c: move whoami() in front of the lockfile_exists() call addendum: move updateactive/writeactive/unlink(lockfile) from child to parent process, since with the new lockfile.c, lockfiles are no longer shared between processes. * texpire.c (main): insert whoami(), needed for lockfile recovery * applyfilter.c (main): insert whoami(), needed for lockfile recovery History of 1.9.19 -- changes since 1.9.18: activutil.c: - applied a patch by Matthias Andree to _compactive() which removes some compiler warnings on FreeBSD. applyfilter.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. - store() now is declared without all the unused variables. artutil.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. configure.in: - "ar" was not found on Solaris 8. Reported by Robert Kuhn . fetchnews.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. - nntpactive(): To avoid a compiler warning, we let strftime() produce a four-digit year; in the next line, we skip the first two digits, though. Code written by Matthias Andree . - getgroup(): removed reset of group numbers when a group was unsubscribed. Suggested by o.rousseaux@libertysurf.fr. filterutil.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. leafnode.h: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. - store() now is declared without all the unused variables. - moved various #include statements to the top of the file to make leafnode also compile on IRIX 6.2. Reported by Gerhard Lenerz . miscutil.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. - removed old getaline(), included new getline() and getaline() from leafnode-2.0b8, both written by Matthias Andree . nntpd.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. - gmtoff() returned wrong values. Bug first fixed in Leafnode-2.0b6 by Stefan Wiens . - gmtoff(): if there is no TZ variable set in the environment before calling gmtoff(), it will now be unset again afterwards. Patch by by . Makefile.in: - removed message about disregarding warning when making fetchnews because the warning does not occur anymore. - getline.c, getaline.c and getline.h now included. xoverutil.c: - applied a patch by Matthias Andree which removes some compiler warnings on FreeBSD. * configure.in: link pcre library only to those executables that need it (confdir): make confdir override sysconfdir with appropriate warnings. ============================================================================= * miscutil.c (ngmatch): fix bad logic in finding wildcard characters (snprintf): change i to type size_t (was int) History of 1.9.18 -- changes since 1.9.17: fetchnews.c: - postarticles(): under certain circumstances, files were not closed. Bug found by Carl D. Cravens . - nntpactive(): if "LIST NEWSGROUPS news.group.name" does not work for the first group, it is not attempted for other groups. Suggested by Carlos Robinson . makerpm.sh: - patch by Karsten Merker to accommodate new names of tarballs changed in 1.9.17. Miscellaneous: - renamed CHANGES to ChangeLog. ============================================================================= 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 . fetchnews.c: - some time_t variables in getgroup() now casted to int to avoid warnings on FreeBSD 4.1-STABLE. Reported by Ron Rosson . 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] " 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 . - 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 ; patch by Mark Brown . ============================================================================= History of 1.9.16 -- changes since 1.9.15: fetchnews.c: - getgroup(): applied a patch by 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 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 . ============================================================================= 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 . makerpm.sh: - "make rpm" now also works on SuSE. Patch by Juergen Salk . - FAQ is now included in RPM. Bug reported by Bjoern Voigt . miscutil.c: - snprintf() was buggy (did not recognize %lu and %ld). Reported by Joerg Dietrich . 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 texpire.c: - expiregroup(): checks now also if the pointer g exists. Bug reported by Peter Katzmann . 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 . ============================================================================= 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 . 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 and fixed by Shigeru Ikeda and Joerg Dietrich . ============================================================================= 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 . - insertgroup() does not change any information of groups which are already present. Bug discovered and fixed independently by Johannes Stezenbach and Joerg Dietrich . 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 . - nntpactive(): if the whole newsgroups file is fetched from upstream servers, the timestamps are set to 0. Bug discovered and fixed by Joerg Dietrich . Makefile.in: - to install man pages, "install" is now used instead of "cp". Suggested by Mike Castle . nntpd.c: - in donewgroups(), the timezone was not considered. Bug described and fixed by Joerg Dietrich . - 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 . (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 . - in dogroup(), replaced a rewinddir() call by a closedir() ; opendir(). Suggested by Stephen Marley 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 . ============================================================================= 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 . - readactive() caused huge memory leaks if called repeatedly because the old active was not freed properly. Bug found and fixed by Lloyd Zusman . fetchnews.c: - nntpactive() did not insert new newsgroups correctly. Bug discovered and fixed by Joerg Dietrich . 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 . - added a new point to the FAQ. Suggested by Matthias Andree . ============================================================================= 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 . - 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 . 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 . - doxhdr() now returns (none) if asked for XHDR REFERENCES of an article. Suggested by Ted Marston ; 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 . ============================================================================= 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 . ============================================================================= 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 . - applied a patch by Bruno Rohee 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 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 . (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 and Thomas Themel . (Actually, I have no idea what will happen with leafnode-2.0a7 in this case.) Miscellaneous: - "make rpm" now works; thanks to Karsten Merker 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 . ============================================================================= 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 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 ). 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 . Miscellaneous: ============= 170799: changed several occurences of /usr/lib to /etc in the manpages. Problem first noted by Stefan Ladwig . 150799: pcre(7) now installs correctly. Bug found by Diedrich Ehlerding . ============================================================================= 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 . 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 . Miscellaneous: ============= 150799: updated German documentation by Alexander Reinwarth . 150799: created acconfig.h (courtesy Mark Brown ) 140799: replaced pcre.3 with pcre.7 (courtesy Mark Brown ) 100799: configure.in: fiddled, together with Mark Brown , 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 . 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 . 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 . 010799: If libpcre was already installed by something else, this would not be recognized properly. Bug reported by Mark Brown . ============================================================================= 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 . 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 . newsq: ===== 160699: output format changed (code written by Matthias Andree ) ============================================================================= 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 . 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 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 (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 . 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 . 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 . 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 . 190399: delposted() looks for stale articles in out.going. Patch by Joerg Dietrich . 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 and Jarle Rongved . 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 . 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 . 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 ) 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 . 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 Teveßen . 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 . 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 . 120499: dolist() now doesn't call chdir anymore which caused leafnode to forget the directory of the current group. Bug reported by Steven Flintham and Thomas J. Merritt . 160699: dopost(): if posting fails, error is now 441 instead of 440 (as it should be). Fixed by Matthias Andree . 090399: fleshed out dohelp(); patch by Ed Carp . 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 (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 . 040499: german manpages by Alexander Reinwarth . 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 180399: german README, courtesy of Alexander Reinwarth 170399: german INSTALL, courtesy of Alexander Stielau ============================================================================= History of 1.9.2 -- changes since 1.9.1: Miscellaneous: ============= 030399: leafnode.h: had forgotten to include before 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 . 170299: getgroup(): if /var/spool/news/message.id/ subdirectories are not present, they are now created as needed. Patch provided by Max Matveev 170299: processupstream(): error message was done with a zero pointer. Bug reported and fixed by Max Matveev and Stephan Block 140299: postarticles(): haveid was initialized at the wrong place. Bug reported by Jeff Grossman . 140299: getgroup(): "artlimit" is now tested after "initiallimit" (like in leafnode+-2.4). Bug reported by Rey IJben . 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 Miscellaneous: ============= 230299: new file makerpm.sh which constructs RPMs on the fly. Template was originally submitted by Karsten Merker 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 . 120299: postarticles() now logs the number of articles posted if fetch is called with -v to news.info . Suggested by Jeff Grossman . 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 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 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 . 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 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 and David Steuber . 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 . 210199: fetch_new.c contains a asynchronously working version of fetch which stores articles in /var/spool/news/in.coming/ 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 and Joerg Dietrich . 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 . 150199: now maxbytes really checks for bytes, not lines 130199: more error checking when storing articles (suggested by Maarten Geurts , who is currently trying to port leafnode to NT) 100199: fixed a bug when posting failed (reported by Michael Stroeder, ). 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 . 040199: new option -P : only post articles. First suggested (including code) by Michael Mauch . 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 ) 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 . 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 . 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 and . 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 . 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 (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 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 and possibly Evert Meulie . 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 . 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 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 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 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 does not work yet, however. Bug reported by Evert Meulie . 100199: markinterest(): if...else construction was ambiguous. Fixed. Reported by John R. Schrader . 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 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 . 100199: removed doubly defined variables expire_base (configutil and texpire). Reported by John R. Schrader . 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 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 . 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 ) 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 . 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 ) 050199: changed Makefile to work with plan /bin/sh instead of bash (by Andy Doran ) 050199: leafnode.h: added patch for FreeBSD, courtesy of Andy Doran 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 . 211298: filterutil: forgot to #include . Fixed. 191298: filterutil: glibc2-based distributions (RedHat 5.2, Debian 2.0) demand that be included before . Bug reported and fixed by Trever Adams . checkgroups: =========== 211298: removed an unnecessary #include 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 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 and Stefan Luetkebrune ) 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 ). Fixed. Miscellaneous: ============= 020199: added a patch for NetBSD to leafnode.h (provided by Anders Dinsen, ) ============================================================================= 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 . 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 ) 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, ) misc: ==== 171298: fixed a typo in INSTALL (discovered by Michael Dreher, ) 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 (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 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 " 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 ) 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 Bjørn Frantzen 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 ) 171198: some authentication code put into main(), courtesy of Jeff East 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 ). 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 and Juergen Richter . 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 . 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 . 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 . (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 . 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 ) 091198: fixed a typo in newsq.1 (reported by Lenz Grimmer ) 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 . 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 . 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 ) 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 ) 131098: changed version number to 1.6.2 131098: some changes in the Makefile (suggested by Michael Mayer ) ============================================================================= 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 ) 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 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 ) 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 ) 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, ) 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/. 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 ) 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 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 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 Date: March 1998 ------------------------------------------------------------------------------ Version 1.4 Written by Arnt Gulbrandsen and copy- right 1995 Troll Tech AS, Postboks 6133 Etterstad, 0602 Oslo, Norway, fax +47 22646949. ============================================================================= Version history: * Arnt Gulbrandsen wrote versions 0.9 to 1.4 (only 1.0 and 1.4 were publicly released). * Kent Robotti 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 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 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 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 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 published a patched leafnode version from August 16th, 1998 as leafnode-1.6b. * Cornelius Krasel published leafnode-1.6 on October 3rd, 1998. * Cornelius Krasel published leafnode-1.6.1 on October ??th, 1998. * Cornelius Krasel published leafnode-1.6.2 on October 22th, 1998.