1.10.8 (released 2005-01-21)
- Keep interesting groups interesting on LIST ACTIVE and GROUP even if
they have no articles. Reported by Brian Sammon.
1.10.7 (released 2004-11-22)
- The shipped snprintf function didn't report the proper size for
literals. It now does. Report by Michael Bäuerle.
- Pull snprintf/vsnprintf replacements from the libc's name space,
prefixing them with ln_ on linker level. This avoids our overriding
libc's snprintf/vsnprintf which may cause bogus aborts when other
parts of the libc (syslog for instance) use formatting characters that
our minimal vsnprintf implementation does not support.
Fixes an abort reported by Michael Bäuerle on a system that had
a non-working snprintf function.
- The "GROUP.NAME not found in groupinfo file" message will now only
appear at verbose levels 2 and higher, to avoid uninteresting output
when a group has just been deleted but is still in interesting.groups.
Reported by Berthold Höllmann.
- The use of the shipped snprintf function for testing purposes can now
be forced by running: env FORCE_SHIPPED_SNPRINTF=yes ./configure --opts
1.10.6 (released 2004-09-22)
- If a server that was configured with "noactive" was unavailable,
fetchnews would still mark the active file for download. Patch by
- History up to and including 1.9.54 has been split off into an OLDNEWS file.
1.10.5 (released 2004-08-26)
- classic delaybodymode (delaybody set, delaybody_in_situ unset) stored
articles with inaccessible Message-ID file and caused duplicates.
Reported by Til Schubbe.
1.10.4 (released 2004-08-15)
- Only texpire will now delete the message.id/XXX/mids files and only after it
has the lock, to prevent premature (but reversible) expiry of message.id
files followed by gazillions of relinks at the next texpire run.
Bug located and fix tested by Rein Klazes, thanks a lot.
- Make debug mode logging of texpire a bit more verbose, log the reason why a
message.id file was unlinked.
- Minor internal cleanups to make the code a bit more efficient, reduced
memory use in texpire a bit.
1.10.3 (released 2004-07-28)
- LIST and LIST ACTIVE reported "empty group" for pseudo groups, rather than
a group with one article. Reported by Brian Sammon.
- Also refresh newsgroup subscription if the newsreader uses LIST ACTIVE
news.group (when news.group is not a pattern). Suggested by Brian Sammon.
1.10.2 (released 2004-07-20)
- Remove old .overview.?????? files from the spool, in
order to avoid
"cannot rmdir(/var/spool/news/group/name): Directory not
Reported by Johannes Berg, Debian Bug #257281.
1.10.1 (released 2004-06-23)
- Make sure that the overview (NOV, XOVER) does not cut off the Xref
information. Regression in leafnode 1.9.50, older versions were
Reported by Jörg Lüders after a thread in news.software.readers started by
the pseudonymous SINNER.
- the .spec file now lists BuildPrereq: libpcre.so.0 rather than pcre, to
become independent of the actual package name, for Mandrake 10.0
compatibility. Reported and fix tested by Kevin Bulgrien.
1.10.0 (released 2004-06-10)
- PCRE was dropped from the distribution. If it does not come with your
operating system, you can get it separately from http://www.pcre.org/
- Bugfix: texpire could crash when expiring groups that are on disk but not
longer in the active file. Reported by Johannes Berg, Debian bug #248824.
- Bugfix: texpire could crash when all-numeric name components were in the
newsgroup name or in the path. Reported by José María Mateos.
- Bugfix: texpire memory leaks in error handling paths.
- Bugfix: print expiry time for groups that are no longer in the active file.
- Portability: fetchnews aborted on systems with a broken [v]snprintf
function (such as FreeBSD 4.8 or 5.1) because it used the %p formatting that
isn't supported by the replacement snprintf that leafnode uses on these
systems. Fixes FreeBSD PR #67111, reported first by Jeff King.
1.9.54 (released 2004-05-20)
- Consistency: The lockfile timeout for checkgroups has changed to five
seconds, checkgroups used to wait indefinitely.
- Bugfix: fetchnews and texpire would delete a lockfile held by another
process when there were problems reading the configuration file.
- Bugfix: when groupexpire settings were used, their memory was leaked at
- Robustness: texpire is a lot more careful about mids files. Johannes Berg
reported aborts related to corrupt mids files. mids files are removed at
start of any leafnode program.
- Documentation: Some minor formatting problems in the manual pages were
corrected. Reported by Laurent Fousse.
- Logging: the number of duplicates that texpire has deleted is now printed.
- Feature: The maximum time that programs wait for a lock file can now be
configured through "timeout_lock" in the configuration file and overridden
by the LN_LOCK_TIMEOUT environment variable, to simplify running fetchnews
and texpire from a cron job. A workaround was suggested by Dirk-Lüder Kreie.
- Feature: texpire has a new "-r" (repair) option that checks harder whether
the hard links are correct.
- Documentation: INSTALL reminds the user to erase the distributor package
first before doing a source install.
1.9.53 (released 2004-05-05)
- Bugfix: do not re-authenticate if server requires
authentication for the same command twice - to avoid an
unterminated re-authentication loop.
- Bugfix: Various error conditions now cause the problem
to be logged.
- Bugfix: Newly-added groups that are not in a server no
longer cause fetchnews to proceed to the next server.
- Bugfix: texpire did not repair the spool in archived
groups (groupexpire some.news.group = -1) which caused
duplicates and articles inaccessible by Message-ID after
corruption. Reported by Dirk-Lüder Kreie.
- Portability: One string was split for C89 conformance
(string constants cannot exceed 509 characters).
- Feature: fetchnews supports an environment variable,
LN_SKIP_GROUPS, that is treated as a comma-separated list
of wildmats, any match sufficient. All matching groups are
skipped, so you can skip your binary groups during daytime,
for instance. Don Geddis had complained a configuration
cheat he'd been using had stopped working with one of the
recent fixes. Let there be an official way to do things
- Feature: The time zone is back in leafnode-generated
Date: headers, provided that the operating system provides
a tm_gmtoff member in struct tm (BSD, GNU). Systems that
don't offer this use GMT and report the time zone as
- Feature: The environment variable LN_DEBUG is now read
as an integer. The debug level is the greater of debugmode
in the config file and the contents of LN_DEBUG.
- Compatibility: support forgetful servers that require
re-authentication often. Reported by Andrew Cranson.
- Consistency: the try_lock() debug message now goes to
stdout, and only in verbose mode. It used to be printed on
stderr, unlike most of the other debug messages. Reported
by Kieron Dunbar.
- Consistency: "skipped group.name, not in
only_groups_pcre" message is now prefixed with the server
- Documentation: If the volunteered authentication early
in a connection fails, add a log that this condition may
have been caused by premature authentication. NOTE:
authentication implementations differ a lot.
- Documentation: The server= examples in config.example
were revised and are now G-rated and end in domains that
are guaranteed to not exist.
1.9.52 (released 2004-04-03)
Note: this file contains names that have been
transliterated to ISO-8859-1. To see the names in their
original spelling, view the CREDITS file.
If your name is shown in CREDITS only in the
transliterated spelling, feel free to send a correction in
UTF-8 character set.
SUMMARY OF IMPORTANT CHANGES
(these are detailed below)
- Texpire is now robust against hard link attacks that
try to prevent expiry.
- Fetchnews has more complete timeout handling and a new
timeout_fetchnews global configuration option.
- Low-traffic, subscribed groups will not expire any
- Time zone handling was rewritten from scratch once
again and dropped in all places where it isn't essential,
to fix complaints and bogus data.
- A bug that cause excessive article considerations after
a fetch had to be aborted fixed was fixed.
- only_groups_pcre fixes for crosspostings, adds a new
- A bug that caused active persistent re-downloads for
upstreams running on a non-standard server was fixed. The
NEWGROUPS range now only spans the time since the last
- Bugfixes were made to connecting to upstream servers
with multiple IPs.
- Quickmkdir is no longer part of the installation
procedure. Leafnode programs will create missing
directories on their own.
- The user account leafnode processes run under is now
configurable at compile time, to aid OpenBSD
INCOMPATIBLE BUGFIXES AND CHANGES
- Bugfix: "GROUP s" will now mark the group interesting
iff it is interesting. This avoids premature unsubscription
from low-traffic groups. Backported from leafnode-2.
Reported by Oliver Brakmann.
- Cleanup: Logging has been overhauled. It is now more
consistent, prefixes are the server or group name where
applicable, prefixes error: for errors and warning: for
warnings. Timeout and other line reading problems now
appear in the debug log with "ERROR:" on the line for easy
retrieval with grep, the end of file is also logged as
"< (EOF)". The "skipping (filename), not complete"
message was demoted from LOG_NOTICE to LOG_INFO severity
- Change: fetchnews now uses timeout_fetchnews rather
than timeout_client when waiting for a server's NNTP status
response. (this includes a documentation fix provided by
- Cleanup: Time zone information for generated headers
was unreliable and has been dropped. We'll create the Date:
header in GMT.
- Bugfix: checkgroups can now read the checkgroups file
from a path relative to the current working directory.
- Bugfix: fetchnews will wait no more than five minutes
(configurable through the new timeout_fetchnews parameter)
for a server response that is not a NNTP status.
- Bugfix: fetchnews will not kill the group's high
watermarks when it has to abort the fetch. It will leave a
snapshot file behind that is merged on the next run for the
server that failed. The bug was introduced into 1.9.50 and
discovered by Bastian Blank.
- Bugfix: "server does not carry Newsgroups:" log message
only printed the first group name rather than all.
- Bugfix: when posting, the first newsgroup in a
Newsgroups:-header of a cross-posted article that was NOT
matched by only_groups_pcre stopped the search for further
articles that might still be on the server. Reported by
- Bugfix: log exact reason why a fetchnews connection has
- Bugfix: try all IPs of a host even when the connection
one of them failed.
- Bugfix: send MODE READER first, then try to
- Bugfix: add missing error messages for NNTP connection
and DATE reply handling.
- Bugfix: Proceed to next IP when a server name has
multiple IPs attached when the greeting doesn't arrive or
the upstream runs NNTPcache V2.3.
- Bugfix: Do not fetch the full newsgroup list on every
fetchnews run when the upstream runs on a non-standard
port. Reported by Cory C. Albrecht and confirmed by Joshua
Crawford. This is a fix-up for a half-baked bugfix that
went into leafnode 1.9.29 that was supposed to support
multiple servers with the same name but different port
(necessary for ssh tunnels for instance).
- Bugfix: Plugged a memory leak, the memory allocated for
a only_group_pcre compiled PCRE was never freed.
- Bugfix: "illegal" articles are truncated to zero size
and no longer given out, to avoid sending dangerous content
- Bugfix: Zero-size check was not applied when an article
was opened by Message-ID.
- Bugfix: texpire relied on the hard link count to expire
articles. Any user could defeat expiry by creating a hard
link to an article file, preventing expiry of certain
articles, so that the spool partition could fill up in the
long run. However, the user who can perform this attack can
usually fill up the disk directly (without instrumenting
leafnode), so no security announcement shall be issued.
Code has been added to force expiry via the Message-ID,
rather than by hard link count.
- Bugfix: the date check stopped working when DST was in
effect. Replaced by timegm() function from Heimdal/Kerberos
IV, calculations are now done in GMT rather than fiddling
with the GMT offset. Caused lots of bogus "check your
system clock" warnings.
- Bugfix: Do not fetch newgroups since last full active
fetch, but rather since last NEWGROUPS.
- Bugfix: leafnode: do not send warnings (for instance
about misconfiguration, when maxage is too large) to
stderr, some super servers send them to the client.
Reported by Martin Klaiber.
- Cleanup: Some internal variables have been renamed to
avoid name clashes with library functions (Ralf
- Cleanup: getline.c now includes string.h to avoid
compiler warnings (Ralf Wildenhues).
- Cleanup: After connection failure, the connection is
properly shutdown with nntpdisconnect() or nntpquit()
rather than a half-baked shutdown(2).
- Portability: quickmkdir will not start the file name
with a double slash. Patch sent by A. Alper Atici.
- Feature: The fetchnews server respone timeout is now
independent of nntpd's client timeout.
- Feature: New server option only_groups_match_all to
make only_groups_pcre more restrictive with respect to
posting, with this option on, ALL groups of a crossposting
must match the PCRE rather than ANY before a post goes to
the server that defines this option.
- Feature: fetchnews supports a new -w option to force
the XOVER updater process to run in the foreground rather
- Portability: The user and group name that used to be
hardcoded to "news" are now configurable, to support the
OpenBSD policy of prefixing daemon and system users with an
underscore character, "_". Use --with-user and --with-group
options to ./configure. Based on patches by Cory C.
- Documentation: README now explains the difference
between news.debug and news.=debug in syslog.conf and
recommends the former.
- Safety: multiple configurations for the same server and
port now cause an abort. Leafnode cannot handle fetching
for multiple users per single server.
- Consistency: debugmode >= 1 now logs sent NNTP
commands. (debugmode = 2 was needed before for sent
commands and = 1 for received replies)
- Consistency: all leafnode processes will now generate
needed directories on start-up. This effectively eliminates
the need for quickmkdir, which will continue to be built in
order not to break existing packaging scripts. Also helps
Cygwin portability (which requires further patches that do
not ship with leafnode and are currently maintained by A.
- Feature: debugmode >= 2 now logs - at LOG_DEBUG
priority - decisions why an article is posted or skipped
for a particular server in the light of only_groups*
- Efficiency: the migrate() function caused a lot of
unnecessary chdir() calls.
- Cleanup: The signal causing fetchnews to abort will now
- Cleanup: suppress 'found no server with posting
permission' in fetchnews when one or more servers have not
been queried, suggested by Al Bogner.
- Cleanup: when any server has not been queried by
fetchnews, print a warning (unless -q is given) and log
- Cleanup: suppress 'backing up from 1 to 12345' style
messages in fetchnews.
- Cleanup: texpire will now fix the group low water marks
for pseudo groups, so that LIST ACTIVE output matches GROUP
- Cleanup: config.example: The expire line is first,
before the server line.
1.9.51 (released 2004-02-20)
- fetchnews did not properly detect an existing groupinfo
file in all circumstances. This bug was introduced as a
side effect of a fix that went into release candidate #3 on
February 10th but wasn't found during release candidate
testing -- it didn't show on the author's computers.
Fixes SourceForge bug #900583.
This bug was first reported by Thomas Zajic, then with a
full analysis and patch by Adam Sampson. Thanks to both of
1.9.50 (released 2004-02-19)
- Major texpire bugfixes, it repairs a lot more spool
problems, including a move or copy that broke hard links;
texpire now updates overview data, to recover from a
- "noactive" option now works for the first time.
- Checkgroups now adds groups as it should have always
done. Useful in context with "noactive" to prime the news
INCOMPATIBLE BUGFIXES AND CHANGES
- Bugfix: most programs now generate an active from the
spool contents when they cannot read it, to avoid bogus
first/last counter resets.
- Bugfix: checknews adds groups listed in the checkgroups
file that aren't already in the groupinfo. Prints them on
stderr with " NEW" next to them.
- Cleanup: made fetchnews logging and console printing
more consistent to aid debugging. Careful changes to some
- Conformance: texpire -h now exits 0 (it used to exit
with code 1).
- Bugfix: "noactive" has never (since its introduction
into 1.9.25) worked as documented and still fetched the
active file when "forceactive" was set (through -f or
expiry of timeout_active). Align actual behaviour with the
documentation. Reported by Andrew Cranson.
- Bugfix: texpire can now relink (after file system
damage) crossposted articles properly.
- Bugfix: texpire can now move files into the right
message.id/XXX directory if they are in the wrong one, so
nntpd can find them.
- Bugfix: texpire now logs errors in addition to printing
- Bugfix: Some format strings for integers in fetchnews.
Harmless on 32-bit platforms but can cause crashes or bogus
output/logging on 64-bit machines.
- Bugfix: Plug a memory leak in checkgroups.
- Bugfix: The pseudo article for an empty group now has a
higher number than the last article of the group previously
had, so it is actually visible in news readers. Reported by
Andreas Muck. Cosmetic side effect: articles in new groups
now start at number 3 rather than 2 in many configurations.
This is harmless.
- Bugfix: when building an active file from the news
spool, use the directory's ctime as the creation date.
- Bugfix: whenever an active file is built from the news
spool, this will force fetchnews to download the active
files completely at the next run.
- Cleanup: Fetchnews quickly proceeds to the next server
when serious trouble is encountered during group fetch,
that is, premature server disconnect or missing credentials
or authentication failure.
- Cleanup: Print NNTP-connect related errors on console
as well (not only to syslog).
- Robustness: overview (NOV, XOVER) is now more tolerant
with respect to leading whitespace, including HTAB
- Robustness: texpire handles Ctrl-C and "kill -TERM"
- Portability: PATH_MAX is almost gone, a POSIX system
need not define it. If it is missing, we assume 4096.
PATH_MAX is not used to size static array, but only gives
the initial array size for dynamically sized strings that
extend automatically when the size is insufficient. This
should help the GNU Hurd vaporware should it ever
- Portability: Skip autoconf's SETVBUF_REVERSED check on
- If the compiler is an Intel one, ./configure refrains
from adding GCC options.
- Documentation: README-FQDN* was updated now that
news.cis.dfn.de and news.individual.net have been
- Documentation: Updates to texpire, leafnode, fetchnews
- Cleanup: update.sh (run by make update, to update
spools written by leafnode 1.6 and older) will now remind
the user he has to delete groupinfo.old.
- Texpire: now updates .overview information should a
previous fetchnews run have been interrupted hard.
- Texpire: support -q to suppress all non-error
- Cosmetic: texpire no longer counts unlink failures as
1.9.49 (released 2004-01-09)
- Fetchnews: the 1.9.48 security bugfix broke delaybody
mode, it is now fixed. Bug reported by Berthold
1.9.48 (released 2004-01-09)
- Fetchnews: when a. minlines=0 (default) and b.
delaybody=0 (default) and either c. no filterfile is
configured (default) or a. and b. and d.
article_despite_filter=1 are configured, an article with
missing mandatory headers and without body can hang
fetchnews and/or prevent the fetch of further articles from
the current group or server. Reported by Toni Viemerö,
SourceForge bug 873149. This was a denial-of-service bug,
not one that could lead to local or remote privilege
- Fetchnews: log group name when articles are skipped
that match the minlines, maxlines, maxbytes or age filters,
for more consistent logging.
- Rebuilt with autoconf 2.59.
1.9.47 (released 2004-01-07)
Note: many of these bugs have been long-standing.
- Fetchnews: Protocol conformance: no longer ignores
lines when the XOVER data obtained from the upstream server
lacks the 8th field, Xref:. RFC-2980 suggests, but does not
mandate this field. Reported by Brian Sammon.
- Fetchnews: XOVER mode did not take maxlines, minlines
and maxbytes into account.
- Fetchnews: XHDR mode did not take minlines and maxlines
- Fetchnews: XHDR mode tried to fetch bogus articles when
articles had been dropped from the fetchlist because of age
- Fetchnews: XHDR required that Bytes, Date and Lines had
been returned in exactly the same order as the Message-ID
headers and would go out of synch if it didn't - but in
doubt, would fetch the article. Fixed.
- Leafnode: will detect "list active.times" when trailing
garbage (a group name) is present. It used to read it as
"list active" instead.
- Leafnode: XOVER now works without article number and
returns data for current article.
- Do not pass uninitialized data to setrlimit() when
setting the core file size in debugmode.
- Plugged a minor memory leak.
- Avoid crashes in XOVER related functions when the OS
cannot determine the current working directory.
- Avoid crashes or data corruption in out-of-memory
conditions, replacing strdup by critstrdup.
- Use $(SHELL) to run ./update.sh when "make update" is
- fetchnews now supports a new -q option that suppresses
the "found no server with posting permission" warning, to
avoid the "cron sends lots of mail" bug. Reported by Joey
Hess of Debian.
- fetchnews now supports a server-specific "noxover"
option to force the use of XHDR when a server does not work
- fetchnews will now try to match the "maxcrosspost"
parameter against the Xref: overview information that,
albeit optional, is returned by most servers in response to
the XOVER command. This can avoid the download of some, but
not all, excessively crossposted articles.
- The news administrator address, as shown in the
placeholder article, is now configurable via the new
"newsadmin" option. It used to be hardcoded to
"news@HOSTNAME", where HOSTNAME was replaced by leafnode's
- Rebuilt with automake 1.8.
- The "port" option description in config.example and
leafnode.8 has been revised to make clear that it only
applies to fetchnews, not the listening port.
1.9.46 (released 2003-11-06)
- fix fetchnews -n regression, broken since 1.9.44.rc1.
(-n was ignored)
- match (and properly translate) section headers in
German manual pages.
- report when active must be refetched and why.
- ntl changed the banner of their still-broken NNTP
software. Apply STAT workaround also to the new banner.
Reported by Grahame Cooper.
1.9.45 (released 2003-10-30)
Fixes a bug present in all prior versions that
would make fetchnews go out of synch with the server if a
group name started with a dot (fetchnews then thought it had
seen the end of the group list). Group names with
empty components (leading or trailing or two adjacent dots)
are now ignored.
1.9.44 (released 2003-10-22)
Bug fixes, among them bugfixes for posting
articles to the upstream, a texpire SIGSEGV bugfix, more
transparent interesting.group expiry, better debugmode
documentation and a fix to the overview handling (no longer
aborts with numeric components in group names).
- A texpire SIGSEGV was fixed, it struck when expiring
articles from groups that were no longer in
interesting.groups. (Reported by Iain D. Broadfoot.)
- Interesting.groups expiry was bugfixed and streamlined,
it now happens before contacting the first server.
(Reported by Nikita V. Youshchenko).
- Debugmode is now documented in config.example.
- Debugmode has been cleaned up in fetchnews. It is now
possible to log XOVER replies with debugmode=3.
- One meaningless system error that was included on
"illegal article:" log lines was removed from the line.
(Reported by Nikita V. Youshchenko.)
- Fetchnews no longer moves articles into failed.posting
if the upstream server refuses the POST command (before
seeing the article).
- The XOVER updater no longer aborts when encountering a
group when there is a sub-group with an all-numeric name.
(This only happens in badly administered newsgroup
hierarchies.) Reported by Dâniel Fraga.
- The RPM is now more careful when handling
/etc/xinetd.d/leafnode and /etc/cron.daily.leafnode, both
are marked %config(noreplace) now. Reported by William
- __attribute__ is only used with __GNUC__ (gcc), to
avoid compiler trouble.
- Fetchnews now accepts any 2XX reply to NEWGROUPS, to
work around a problem with an MC-link news server.
(Reported by Paolo Amoroso.)
- Texpire, when in verbose mode, will now print "Expiring
message.id..." before doing just that.
- The RPM installation was revised (the German manual
pages are now in %_mandir/de/, cruft from doc_german was
dropped, xinetd example is installed).
- Leafnode excludes glibc-2.3 special ctype.h stuff to
let binary compiles work on glibc-2.2.
- Fetchnews has MUCH improved posting behaviour and is
more verbose in case of trouble.
- Fetchnews speed-up in XOVER mode: avoid stat() if the
article is ignored for size or age. Reduces local I/O,
particularly with -x, when recovering from crashes or after
adding new servers.
- function inlining is now checked for in ./configure,
attributes.h is gone.
- There is now a new documentation file, ADD-ONS, that
currently lists leafwa and Nikita V. Youshchenko's
- A German manual page for leafnode-version(1) has been
1.9.43 (released 2003-09-04)
Assorted bug fixes, including a fix for texpire to
correct groupinfo lines of "archive mode" (groupexpire -1)
groups and a fix for all-numeric components in newsgroup
names when the parent of such a group also contains articles.
The fetchnews background process that updates the XOVER data
is now much faster again, it was slow and wasteful over the
- In the traditional spool, newsgroups with all-numeric
components show up with a - (minus, hyphen) prefixed to the
number, the newsgroup example.1234 will be stored as
- Fix leafnode.8 manual pages (EN and DE languages) to
explain 0 and negative values for expire/groupexpire.
- Avoid premature abort (that causes .overview and
groupinfo files to become stale) when the stdout becomes
disconnected. Reported by Sytse van Slooten.
- Make sure that texpire fixes the groupinfo lines of
groups in "archive mode" (groupexpire -1). Reported by
Sytse van Slooten.
- Repair groupexpire 0 (= use global default, rather than
expire immediately). Broken since 1.9.23.
- Make sure that fetchnews complains when a timeout
happens while reading newsgroups lists ("active file") or
newsgroup descriptions. Found after a related report from
- Use different fix for newsgroup names with all-numeric
components that does not require two stat() calls in XOVER
handling. Tracked down and reported by Rein Klazes.
- Remove bogus error messages "article * is below/above
the *-water mark" that occur when reading a group that
fetchnews is fetching into. Reported by Rein Klazes.
- Make sure XOVER related error messages don't show up in
the NNTP client.
- fetchnews puts stdout into line buffered, or -- failing
that -- unbuffered mode (Patch by Mark Brown, Debian
- leafnode processes warn (syslog and stderr) when a
groupexpire is set to 0 (which means "use the default",
which some users may not be aware of).
- Added FAQ item on running leafnode as nntps
- Mention SuSEconfig difficulties with /etc/hosts in
- Clarify item #13 in INSTALL.
1.9.42 (released 2003-06-27)
Fixes two other important bugs and one cosmetic
- Check lastreply() against NULL, in an effort to fix
obscure sporadic and non-reproducable crashes on OpenBSD
sparc64. (Reported by Bruno Rohee)
- Fix bogus "Cannot open .../interesting.group/group.name
for reading" when a group subscription has expired.
(Reported by Andreas Muck)
- Fix hang when trying to download an article that lacked
mandatory headers. (Very old bug, recently found by Joshua
1.9.41 (released 2003-05-22)
Fixes a very old "leafnode keeps downloading
unsubscribed groups" bug.
- Fix the "leafnode keeps fetching a group I've
unsubscribed from long ago" bug that haunted leafnode since
1.9.18 at the latest and that was more prominent with the
delaybody migration fixes of 1.9.33.
- "make clean" no longer erases t.pcre_extract
- Add an EXPERIMENTAL feature, delaybody_in_situ. This
may work around problems with particular newsreaders in
delaybody mode. Do not rely on this feature for now, and do
send feedback if you use it, regardless of whether it works
or not. Defaults to off (compatible with previous
versions). If you don't know what it is about, leave it
- Some messages in fetchnews have been reworded to make
them clearer and more helpful.
- Find tcpd on OpenBSD at build time. Patch by Bruno
1.9.40 (released 2003-05-08)
This update fixes yet another bug in the snprintf
replacement: leafnode 1.9.39 aborted just before printing a
pseudo article (but it _did_ record that you were interested
in the group, so it was a rather cosmetic bug) -- earlier
versions didn't create proper time zone information for
- Implement '+' format option in snprintf replacement
function, needed when leafnode must create a Date: header
1.9.39 (released 2003-05-04)
This is a CRITICAL upgrade for
leafnode servers that have downstream clients such as another
leafnode that try STAT before POST. The upgrade fixes a data
- Fix bogus success of STAT command in pseudo group.
Caused downstream loss of to-be-posted article when one
leafnode fetchnews was posting into a pseudo group of
1.9.38 (released 2003-04-23)
This is a recommended update for systems that have
a broken snprintf() implementation in their libc. It corrects
implementation defects in the shipped replacement
- Fix snprintf implementation defect that let some
response codes of the NNTP protocol appear as ### rather
than the real code (such as 220). (Reported by Kevin
- Whitelist some more NewsCache versions for the DATE
command. (Reported by Herbert Straub).
- Require that pcre.h be installed in /usr/include or
/usr/include/pcre for building the RPM. This should prevent
bogus rpmbuild failures on Red Hat Linux 9. (Reported by
1.9.37 (released 2003-04-20)
This is a recommended bugfix update.
- fix: Fetchnews properly tracks when reading the active
file from a server fails and retries and the next run.
- fix: The replacement snprintf has received numerous
- fix: Leafnode now checks if the system's snprintf
function really works at build time and substitutes its own
snprintf.c if the system's snprintf function is broken (or
- fix: Build fixes on platforms that need special LDFLAGS
(sparc64 for example), particularly when no system PCRE
library is available.
- portability: was enhanced.
- Workaround: Fetchnews no longer checks the DATE at
upstream "NewsCache" servers other than version 0.99.22p1,
they return local time rather than GMT.
- Change: The default lockfile location has
changed to $spooldir/leaf.node/lock.file.
- Change: There is now a "post_anygroup" option
to skip the "is the group I post into on this server"
check. Useful on servers that let you post but not
- Change: Fetchnews now prints an error message when
saving the current working directory fails when it tries to
- Change: Fetchnews now prints the reply from the
upstream server when reading the newsgroup list (all or
For a full round-up, see the NEWS or ChangeLog files.
1.9.36 (released 2003-02-25)
This bugfix update is recommended for users of
leafnode-1.9.33 and newer.
- Bugfix: Fetchnews no longer gets out of sync if an
article is filtered out. Regression introduced into
1.9.35 (released 2003-02-21)
This bugfix update replaces leafnode-1.9.34 that
aborts when a newsreader posts an article with Message-ID
header. If you decided 1.9.33 is good enough for you, you
don't need this update. If you run leafnode-1.9.34 though,
you must update.
- Bugfix: Leafnode no longer aborts if an article with
Message-ID header is posted. This fixes a regression
introduced in leafnode-1.9.34.
1.9.34 (released 2003-02-19)
This is a bugfix update, recommended for machines
where time_t != long (usually 64-bit machines).
- Bugfix: Don't pass time_t to %ld formatting. (reported
by Christian Weisgerber)
- Bugfix: Check time difference for overflow when using
- Bugfix: Change to spooldir at start-up, to avoid
barfing when leafnode is started from a working directory
that the "news" user has no access to, to address fetchnews
-P issues when started from cron.
1.9.33 (released 2003-02-03)
This is a recommended bugfix/compatibility
The features that were added have been considered carefully
and are deemed safe even for a "stable" release.
- Bugfix: Clients won't hang when a local article lacks
the Message-ID (disk corruption).
- Compatibility: Postings spooled by versions before
1.9.22 will no longer lie around unposted, the spool/post
code is now compatible with versions up to 1.9.22, but
without the bug of posting incomplete articles.
- Bugfix: Header-only articles that were fetched with
delaybody are now accessible even after switching delaybody
- Bugfix: Pseudo article display was fixed.
- Bugfix: Local article number extraction was fixed for
Message-ID based access. Credits to Fumiaki Miura.
- Bugfix: Signal handling was fixed again. Credits to
- Bugfix: The nodesc flag was ineffective when the full
active file needed to be downloaded.
- Bugfix: Downloaded articles (fetchnews) could show up
in out.going in multi-server setups.
- Cleanup: Fetchnews will use the "ARTICLE" command
rather than "BODY" and "HEAD" separately iff 1. delaybody
is off, 2. no filter is defined or the new
article_despite_filter is set (default: off for
- Feature: New option "noread", to complement "nopost".
Defaults to off for compatiblity. Courtesy of Dmitry
- Feature: The "DATE" command is now supported.
- Robustness: Fetchnews compares the local clock to the
server's clock and complains (but continues for
compatiblity) when the clocks are more than 10 minutes
1.9.32 (released 2003-01-08)
This is a recommended bugfix update.
Portability: Solaris portability fixes.
Robustness: If maxage is configured too high (limit is
24855 on ix86 and many other 32-bit machines), clamp it and
log a warning.
Packaging: leafnode.cron.daily wasn't regenerated properly
because it was shipped. Only leafnode.cron.daily.in should be
Robustness: Detect and log errors when removing empty
directories in texpire or when reading overview data.
Enhancement: fetchnews logs the child process ID after it
1.9.31 (released 2002-12-29)
This is a recommended bugfix update.
Critical: Build: The build was fixed for cases when no
system PCRE library is available, and the build now
accomodates for -lpcre outside the system default library
Serious: On some systems, only the first timeout was ever
detected, the other were ignored. Fixed by Richard van der
Hoff. The signal handling was changed to use the sigaction
function, and the exception handling now uses the
sigsetjmp/siglongjmp function set of the standard
Portability: fetchnews: only fork() if fork() really
works. Some systems (AmigaOS) lack proper fork() support and
only offer vfork(), which is not sufficient, as a vfork()ed
program effectively must not do anything except exit or start
Cosmetic: When fetchnews is restarted after a crash that
prevented updating the active file, only print one "..as
12345 in de.test" line per group when storing the article in
verbose mode to reduce screen clutter.
1.9.30 (released 2002-12-04)
This is a recommended bugfix upgrade.
A rare and subtle leafnode hang (at 100% CPU) was fixed,
affecting retrieval of articles via their Message-ID and
crossposted to groups when the previous GROUP command
switched to a group the name of which being a prefix of
another group that that article was crossposted to. Sounds
complicated? Usually strikes only in badly-maintained
hierarchies because well-maintained hierarchies will not let
one newsgroup name be a prefix of another name.
only_groups_pcre are now also applied to LIST results, to
avoid offering newsgroups that cannot be fetched.
Better error detection for the groupinfo file.
Updates to the STAT workaround, whitelisting newer
NewsCache versions and blacklisting "NNTP news cache".
Leafnote will detect and delete duplicate newsgroups from
its active files. An upstream server might send the same
group with two names, only differing in capitalization.
The maxage = 0 configuration was broken since
1.9.21 and has now been repaired.
There have been documentation updates and some example
files were added.
Fixes to the RPM build were made, for better compatibility
when replacing SuSE's RPMs.
1.9.29 (released 2002-10-23)
update 2002-10-27: there is now a patch to not
take "unaccepted" groups from servers when only_groups_pcre
This is a recommended bugfix update.
This fixes crashes in fetchnews, particularly with
multi-upstream configurations when new groups arrive.
This also fixes multiple upstream servers with the same
name, but different port.
1.9.28 (released 2002-10-21)
2002-10-22: there is now a patch to fix occasional
crashes in fetchnews (when new upstream groups have arrived).
Thanks to Ken Shan for tracking this down and to Ken Shan and
Mark Brown for sending this patch.
This update is required for MacOS X 10.1 and
newer and optional for other operating
Leafnode 1.9.28 fixes the build of the embedded PCRE code
on MacOS X 10.1.
Leafnode 1.9.28 adds a new server-specific option
"only_groups_pcre" to restrict the set of groups downloaded
or posted to that specific server.
Leafnode 1.9.28 adds a new "leafnode-version" program.
1.9.27 (released 2002-09-24)
This update is strongly recommended!
Leafnode 1.9.27 fixes a major bug on systems that have
many interfaces: 1.9.23 to 1.9.26 would go into an infinite
loop when the interface list exceeded 2 kByte. This is less
common on home computers, so it went away unnoticed for so
The TROUBLESHOOTING document has been merged into the
refurbished FAQ, which is now a DocBook XML document and also
ships in PDF format.
The build on non-IPv6 aware operating systems was fixed
and minor 64bit fixes were made.
1.9.26 (released 2002-09-20)
Leafnode 1.9.26 fixes minor bugs in fetchnews that lead to
bogus error messages when everything is fine, and fixes
texpire aborting if the directory /var/spool/news/lost+found
exists but is not executable for the "news" user, and it adds
missing documentation. Updating from versions 1.9.24 or older
is strongly recommended to fix real bugs, updating from
version 1.9.25 is recommended to avoid confusion.
1.9.25 (released 2002-08-30)
Leafnode 1.9.25 fixes some old and new bugs. Particularly
BSD-based systems will need the fixes to local interface
Two tiny glitches happened, I hosed the path in
UNINSTALL-daemontools, and I forgot to ship doc_german/LIESMICH-daemontools.
Here is a patch that
remedies this (leafnode-1.9.25.patch01).
INCOMPATIBLE CHANGES (towards standards
conformance): The output format of LIST EXTENSIONS
no longer has a leading whitespace, in anticipation of
upcoming NNTP standards. HDR/XHDR when used with a Message-ID
now return that Message-ID in front of the header as per
RFC-2980 (this fixes RFC-2980 conformance).
Important changes of this release
- The hostname will now be accepted from the
configuration file again.
- Documentation updates (a lot). The German documentation
is back in and up to date.
- Make the build process more robust and easier to
Leafnode (the NNTP server part):
- Local interface detection on BSD systems has been
- New option "allow_8bit_headers" to allow 8bit data in
headers, defaults to off. Requested by the nice Norwegian
and Danish folks.
- Tons of minor fixes, some fixes to XHDR, LIST
ACTIVE.TIMES, HELP, LIST EXTENSIONS.
- Fixes to active file handling. Will not lose old
low/high marks on fetchnews -f, and will track if updating
the active file failed the last time.
- New server-specific option "noactive" to defeat
downloading the active file from that particular server.
Donated by Mark Brown of Debian.
1.9.24 (released 2002-07-10)
Leafnode 1.9.24 fixes some long-standing and critical bugs
and offers some minor new features. As it was released
shortly after 1.9.23, the 1.9.23 changes are documented here
The changes over 1.9.23 are few yet important:
- showstopper: fix for a crash with slrn; when XOVER was
sent before GROUP in
- critical: fix for not respecting the hostname in the
- minor: fix for not resolving addresses when IPv6
support was compiled
These changes were in 1.9.23 already:
INCOMPATIBLE CHANGE: Leafnode will only
look at articles in out.going when they have the "u+x" (0100)
permission flag set. If you have articles in out.going when
you update to 1.9.23, do
/var/spool/news/out.going/*, otherwise, they will lie
around forever and never be posted.
For a more complete round-up, please see NEWS. The bloody details are in ChangeLog.txt.
Many bugs that could lead to crashes have been fixed.
Among them are string boundary trespassing bugs, which are
believed to be non-exploitable, but can lead to denial of
- README now has a new "DEBUGGING" section.
- Fix: now passes the real headers to the filter, not
- Fix: It will exit with exit code 2 when it could not
read at least one news server.
- Fix: no longer posts incomplete articles that leafnode
is receiving at the same time.
- Feature: There is a new server-specific "nopost = 1"
option, when set, articles will never be posted to the
server that has this flag set.
- Fix: Message-ID generation for articles that did not
have a Message-ID was hosed in 1.9.22, it used the DNS name
corresponding to the interface address that the client
connected to. Fixed. (critical)
- Fix: Group article pointer treatment has been cleaned
up, so that troubles with "cannot subscribe to group after
it expired" should be fixed for good now.
- Fix: the XOVER and XHDR commands as well as the pseudo
article treatment have received fixes.
- Fix: the NEWGROUP command finally works.
- Fix: Posts from broken clients (Control characters or
8-bit characters) in headers are now refused.
- Compatibility: On timeout, leafnode does not write a
"400 " error message any more, that confused so many
- Feature: Leafnode now rejects connects from remote
hosts by default. A remote host a host that is not within
the subnets that your local interfaces are in. This
does NOT replace proper access-control, it's only a last
line of defense. Do not rely on this alone.
- Feature: Leafnode now recommends a Message-ID to the
client that is about to POST an article.
- Feature: The client timeout is configurable.
- Fix: can now finally(!) expire groups that are no
longer in the active file or interesting.groups.
- Feature: Set groupexpire to -1 for a particular group
to never expire its contents.
1.9.23 (released 2002-07-08)
Two serious bugs gave the reason to release 1.9.24 shortly
after 1.9.23. The information that would belong here is above
in the 1.9.24 section.
1.9.22 (released 2002-04-19)
1.9.22 fixes the broken NewsCache workaround and the
hostname qualification logic. It also fixes a portability
issue: it gets along without fnmatch() which broke on too
many systems (Solaris 2.4, SuSE Linux 6.3, to name just two),
and uses wildmat() instead.
1.9.21 (released 2002-04-08)
1.9.21 has been released on 2002-04-08 and is a stable and
recommended update for all prior leafnode 1.9.x versions. [gzipped patch against
Applyfilter should work again. Fetchnews recovers better
from previous crashes. A time zone bug newly introduced in
1.9.20 was fixed. Some possible SIGSEGV were fixed.
Make sure you check the included NEWS
and "README" files for incompatible changes against previous
versions. These changes have been unavoidable for proper
1.9.20 (released 2002-03-25)
After several months of bit rot due to the infamous "lack
of time" problem, Cornelius has for now handed over leafnode
maintainership to me, Matthias Andree. Leafnode 1.9 has
undergone substantial maintenance in February and March 2002,
which led to a new stable release 1.9.20. This release is a
recommended upgrade from all prior 1.9.x versions.
To fix some bugs, behaviourial changes were unavoidable,
do make sure you read the
INCOMPATIBLE CHANGES section of the NEWS file as well as the
UPGRADING section of the
README file that ships with the leafnode
tarball -- some additional requirements to your system
configuration are present, if you don't mind these (and, as
needed, change your system configuration), leafnode may no
Ralf Wildenhues has contributed countless bug reports and
high-quality bug fixes, and he deserves as much merits as I
do. Many users have contributed their feedback, made
suggestions, reported bugs, and I'm grateful for their
leafnode 1.9.20 fixes several bugs that older versions
suffered from, among them was at least one major bug that
could cause corruption of the groupinfo file under high load
(it has been observed when newsreaders with off-line support
start posting many articles at once). The only real new
feature is that fetchnews now has XOVER support which speeds
up complex filtering and can also be faster than XHDR when
your upstream is an INN server.