2012-06-15  iulius

	* typos

2012-06-14  iulius

	* prepare the 2.5.3 release
	  
	  * Typo fixed in NEWS.
	  
	  * Add the 2012 year to LICENSE.
	  
	  * Add a contributor of a recent bug fix in CONTRIBUTORS. (Sorry
	  for having forgotten to commit the file!)
	  
	  * Bump the version of the latest release in FAQ.

	* inncheck: skip warning when expected .OLD backup files are found
	  
	  Improve commit 9419 by allowing only expected .OLD backup files
	  (and not all files whose name ends with ".OLD").

	* update to latest config.guess and config.sub files

2012-06-12  iulius

	* auth_init() should be optional in perl_auth
	  
	  The documentation (doc/hook-perl) for nnrpd auth hook says:
	  
	  If a Perl function auth_init() is defined by that file, it is
	  called immediately after the file is loaded.
	  
	  And later:
	  
	  Provided the file loads without errors, auth_init() (if present)
	  runs without fatal errors, and a Perl function authenticate() is
	  defined, authenticate() will then be called
	  
	  This suggests that auth_init() is optional, but it actually
	  isn't. When it's not defined, the auth hook will fail:
	  
	  200 isis.rt.uk.eu.org InterNetNews NNRP server INN 2.5.2 ready
	  (posting ok) authinfo user test 381 Enter password authinfo pass
	  test 400 Internal error (3). Goodbye!
	  
	  It seems more sensible to not require an auth_init() function, as
	  most hooks probably won't need it.
	  
	  Thanks to River Tarnell for the bug report.

	* inncheck: skip warning when .OLD backup files are found

	* ctlinnd: check the syntax of the newsfeeds file on reload
	  
	  Add a check of the syntax of the newsfeeds file when trying to
	  reload "all", "active" and "newsfeeds". Otherwise, innd may crash
	  on reload.
	  
	  Thanks to Tim Fardell for the bug report.

	* innreport: ignore invalid dates in daily HTML reports
	  
	  Lines containing invalid dates are now skipped by innreport. The
	  behaviour of innreport was changed by the previous commit because
	  the use of Time::Local::timelocal() validates the date and fails
	  when the date is invalid. We now properly skip it.
	  
	  Thanks to Petr Novopashenniy for the bug report.

2012-06-11  iulius

	* fix the generation of HTML pages by innreport during leap years
	  
	  An illegal division by zero occurred during the generation of
	  HTML pages by innreport.
	  
	  The problem comes from the parsing of innreport.db. If you have
	  in this file a change of year for which the hours are the same
	  between Dec 31th and Jan 1st, then this error is generated.
	  
	  For instance:
	  
	  news-notice.2010.12.31-04.15.02.html|Dec 31 04:15:02 -- Jan 1
	  04:15:02|28079|2791|7.9 MB|34320|1500|4.6 MB
	  
	  There is an issue in how innreport translates these dates. The
	  ConvDate() function assumes the dates are relative to the
	  *current* year. So it thinks it has been between Dec 31th 2012
	  and Jan 1st 2012 (whereas it was Dec 31th 2010 and Jan 1st 2011).
	  As 2012 is a leap year, and Dec 31th is after Feb 28th, the
	  translated date contains an unexpected "+1 day".
	  
	  Thus, the main page of innreport HTML generation has not been
	  updated since the beginning of the year. Note that no HTML report
	  is lost. They are properly generated.
	  
	  Now, innreport makes use of Time::Local to convert dates to
	  seconds since epoch, thus modifying the behaviour of ConvDate()
	  which was converting dates to seconds since January, 1st.
	  
	  I bet innreport now runs slower, but I think it is better to
	  achieve robustness (the code using Time::Local seems easier to
	  read and maintain).

2012-05-29  iulius

	* add a sample systemd-like init script
	  
	  Include in the contrib directory a systemd-like init script for
	  INN.
	  
	  Thanks to Jochen Schmitt (co-maintainer of the inn package of the
	  Fedora project) for the proposal.

2012-05-28  iulius

	* add a releaselocks() function to INN::Utils::Shlock
	  
	  Improve how to release existing locks. lock() now keeps a trace
	  of acquired locks; releaselocks() releases all these locks.
	  Previously, unlock() had to be called on all locks.

2012-05-03  iulius

	* improve documentation for innflags
	  
	  Thanks to John F. Morse for the report.

2012-03-04  iulius

	* fixed a trailing extra junk byte in innd answers
	  
	  When an error occurs when innd writes on a channel, a trailing
	  extra junk byte is added to the reply.
	  
	  If the write() function fails, "i" is negative and we substract
	  "i" to cp->Out->left anyway. So if for instance i=-1, we end up
	  in having cp->Out->left increased by one. Which would add an
	  extra character after a complete response.(So it appears in fact
	  before a new response.)
	  
	  Issue introduced in changeset [7418].
	  
	  Thanks to River Tarnell for the bug report.

2012-01-14  iulius

	* fix gcc warning with new Cyrus SASL version
	  
	  Cyrus SASL 2.1.25 modified the prototype of SASL callback
	  functions to fix the "function declaration isn't a prototype"
	  warning.
	  
	  <sasl/saslplug.h>: @@ -33,9 +33,10 @@ * SASL_FAIL -- unable to
	  find a callback of the requested type * SASL_INTERACT -- caller
	  must use interaction to get data */ +typedef int
	  (*sasl_callback_ft)(void); typedef int
	  sasl_getcallback_t(sasl_conn_t *conn, unsigned long callbackid, -
	  int (**pproc)(), + sasl_callback_ft * pproc, void **pcontext);
	  
	  When using callbacks, we now cast the argument:
	  (sasl_callback_ft) &getsimple to silent "initialization from
	  incompatible pointer type" warnings, and define sasl_callback_ft
	  for older Cyrus SASL versions.

	* fix a segfault when a message does not contain a Newsgroups:
	  header field
	  
	  A bug was introduced by [9121] (also in STABLE, but not in a
	  release). The Newsgroups: header field was strdup'ed before
	  having checked the validity of all the header fields. It could
	  therefore be unset, leading to a segfault.
	  
	  The check is now done. If the Newsgroups: header field is
	  missing, this error will still be reported afterwards. And in
	  case it is set, the presence of a moderated newsgroup is properly
	  checked, and nnrpd acts accordingly (it does not add or update
	  Injection-Date:, Injection-Info: and Path: header fields in this
	  case).

2012-01-01  iulius

	* fix invalid 431 response when server is paused
	  
	  When innd is paused, its 431 response code does not comply with
	  RFC 4644. The Message-ID is missing. It is now properly present
	  as first argument to the response code.
	  
	  Thanks to River Tarnell for the bug report.

2011-12-26  iulius

	* build INN before running the test suit

	* test suite: allow the biff service to be named comsat
	  
	  On some systems, the comsat alias for biff is first, so a lookup
	  of UDP port 512 returns it instead. Thanks to Jeffrey Vinocur for
	  the report.

2011-12-26  eagle

	* Remove the Linux PAM link from the ckpasswd man page
	  
	  Remove link to the Linux PAM System Administrator's Guide from
	  the ckpasswd man page, since unfortunately it appears to not be
	  available on-line any more (except from various hosts that just
	  re-export the Debian /usr/share/doc tree, but those aren't likely
	  to be stable).

2011-12-25  iulius

	* update sendinpaths to use the current top1000 addresses
	  
	  As the top1000.org domain name has been discontinued for the TOP
	  1000 Usenet stats, update our documentation and sendinpaths to
	  use top1000.anthologeek.net.

2011-09-19  eagle

	* Stop using INADDR_LOOPBACK
	  
	  It looks like the byte order of INADDR_LOOPBACK is indeterminate
	  and may require htonl on some systems and not on others. Avoid
	  the issue by not using it and instead just using
	  htonl(0x7f000001UL).

2011-09-13  iulius

	* skip leading whitespace in Xref: header fields when running as a
	  slave
	  
	  Fix a regression that occurred in INN 2.5.0 when leading
	  whitespace have been made significant in header field bodies. It
	  could lead INN to drop articles and throttle itself when running
	  as a slave because Xref: header fields generated by other news
	  servers, or even INN 2.4.6, could contain (valid) leading
	  whitespace.
	  
	  Thanks to Matija Nalis for having caught this bug.

	* fix the end of the header in archive (it was 1 byte too long)

2011-09-04  iulius

	* add documentation for procbatch
	  
	  New documentation written by Florian Schlichting, with the help
	  of a memo by Russ Allbery.
	  
	  Add a link to this new documentation in innfeed and news.daily
	  documentation. Use "$INN::Config::pathtmp" instead of
	  "INN::Config::$spooltmp" in procbatch. (The two variables are the
	  same; the first one is more wide-spread.)
	  
	  Add a warning if -s is used without -c, and if -t is used without
	  -m.

2011-08-31  iulius

	* silent a log message about FD_SETSIZE
	  
	  As rlimitnofile is set to "-1" by default, innd should handle
	  silently a decrease of available file descriptors to FD_SETSIZE
	  minus 1.

2011-08-22  iulius

	* Update changelog

	* Cast the argument to toupper()
	  
	  Following the previous commit dealing with tolower(), cast the
	  argument to an unsigned char.

2011-08-21  eagle

	* Cast the argument to tolower()
	  
	  Like the other ctype.h functions, tolower takes an int, which on
	  systems with signed chars can result in unexpected type promotion
	  and broken behavior. Follow best practice of always casting the
	  argument to an unsigned char.
	  
	  Remove some dead code in the innfeed config parser.

2011-08-21  iulius

	* update copyright years

2011-08-21  eagle

	* Fix warning suppression in getnameinfo replacement
	  
	  When lengths that may be 0 are cast to unsigned before
	  subtracting one, we may get underflow. Move the subtraction to an
	  addition on the other side of the comparison. Use const void * as
	  the cast for calling gethostbyaddr, since it's more general than
	  char *.

2011-08-20  iulius

	* strictly check the syntax of a token
	  
	  * Check that the last argument to "ctlinnd addhist" is either ''
	  or a valid token;
	  
	  * Use @000000000000000000000000000000000000@ when the token is
	  empty ('') for "ctlinnd addhist", or badly formatted for any
	  other function calling TextToToken();
	  
	  * Fix the result of the hexadecimal conversion when a lowercase
	  character is used. Transform it to an uppercase character.
	  
	  * Reject invalid tokens containing '@' or lowercase characters.
	  (They were previously wrongly accepted.)
	  
	  Previously:
	  
	  % ctlinnd addhist '<pouet>' 1312575175 1312575175 1312575175 ''
	  Ok % grephistory -e '<pouet>'
	  @95A9ADC6403A29596359BECC38B651C17020@
	  
	  % ctlinnd addhist '<pouet2>' 1312575175 1312575175 1312575175
	  '@aaaaaaaaaaaaaaaaaaaaa@' Ok % grephistory -e '<pouet2>'
	  @CACACACACACACACACACAA9BA95191402003F@
	  
	  % ctlinnd addhist '<pouet3>' 1312575175 1312575175 1312575175
	  '@a' Ok % grephistory -e '<pouet3>'
	  @CAA95191C66E8A89FC1B8B495EFE9EE9301E@
	  
	  Memory was not properly initialized.
	  
	  Now, the first command uses
	  @000000000000000000000000000000000000@ and the others are
	  rejected, as invalid.

2011-08-19  iulius

	* backport changes from rra-c-util 3.7
	  
	  * tests/Makefile: add support for "make tests" in the tests
	  directory.
	  
	  * tests/Makefile: add support for $SOURCE and $BUILD in runtests.
	  
	  * lib/messages.c: add a flush at the end of message_log_stdout.
	  
	  * lib/mkstemp.c: add a check for (errno != EISDIR).
	  
	  * lib/network.c: typo.
	  
	  * lib/snprintf.c: remove the HAVE_LONG_DOUBLE check. All modern
	  compilers have "long double".

	* fix the libtest support files to make the new libtest format work
	  
	  In case the test suite is updated in the 2.5 branch, make sure
	  the new C TAP format work.

2011-08-16  iulius

	* docheckgroups: no longer use awk
	  
	  On a few systems, docheckgroups fails because of the use of an
	  old version of awk. A few awk implementations have a limit in the
	  size of the input they can process; it then cause issues with
	  large newsgroups files.
	  
	  Use Perl instead of awk for the time being. It solves these
	  issues. Successfully tested on a system where docheckgroups was
	  previously failing. Thanks to John F. Morse for the bug report.
	  
	  The next step will be a total rewrite of docheckgroups. It will
	  be much more maintainable as a Perl script.

	* cnfsstat: reload configuration files when modified
	  
	  cnfsstat now reloads storage.conf and cycbuff.conf if they have
	  been modified since the last iteration of the script (started
	  with the "-l" flag). Otherwise, the new configuration is not
	  taken into account by a "ctlinnd xexec" command; only rc.news
	  starts cnfsstat.
	  
	  Also change the "Cannot open CycBuff Conffile" message because it
	  is not always true. The message can be logged when an error
	  occurs during the parsing of the file. Sometimes, even when the
	  parsing was incorrect, the file was accepted. This behaviour is
	  also fixed, and the file is refused at cnfsstat startup.

	* fix an error in rc.news documentation about ovmethod and
	  docnfsstat

2011-08-10  iulius

	* improve the sample init script
	  
	  Based on the Debian package. (Current maintainer: Marco d'Itri.)

	* inncheck: allow to skip the check for certain files
	  
	  Setting an empty value to a file to check permits to skip the
	  actual check. It is useful for people who are not running all the
	  programs shipped with INN (for instance innfeed, in which case
	  innfeed.conf is unnecessary).
	  
	  Thanks to Florian Schlichting for the patch.

	* inncheck: mention that the run-away quote warning may be a false
	  positive
	  
	  Note: In cases where an option value spans more than two lines,
	  i.e. there is at least one line that doesn't even contain a
	  single double-quote, there will also be an error messages about
	  an invalid option name as well as one about a missing colon...
	  
	  Thanks to Jeffrey M. Vinocur and Florian Schlichting for this
	  suggestion.

	* pullnews: no longer modify invalid empty header fields
	  
	  pullnews MUST NOT modify header lines by default. Remove the part
	  of the code that was removing empty header lines.
	  
	  According to RFC 5537:
	  
	  3.6. Duties of a Relaying Agent
	  
	  Relaying agents MUST NOT alter, delete, or rearrange any part of
	  an article except for the Path and Xref header fields. They MUST
	  NOT modify the body of articles in any way. If an article is not
	  acceptable as is, the article MUST be rejected rather than
	  modified.
	  
	  Also, fix the first lines of the script to no longer say that
	  pullnews can be used without INN. (We use shlock.)

2011-08-09  iulius

	* declare the use of INN::Config in pullnews
	  
	  Backport part of commit 9100 to commit 9304. Commit 9100 was
	  designed for INN 2.6.0 only but later commit 9304 added a shared
	  part of commit 9100 for INN 2.5.3 (still not released). Backport
	  that shared part.
	  
	  Many thanks to Florian Schlichting for the bug report.

2011-08-06  iulius

	* update to latest control.ctl file

	* confusion in the name of the "die" function

	* fix compilation of tagged-hash history format when warnings are
	  on
	  
	  Variables names have changed since the last time a build in debug
	  mode was done.

	* update our support files to the latest autoconf version (HEAD)

	* update our support files to the latest automake version (HEAD)

	* check for wrong leading characters in passwd (for instance a
	  commented line with //)
	  
	  Thanks to Florian Schlichting for the patch.

	* remove inncheck warning about an empty newsfeeds ME entry
	  
	  INN works without problems when the newsfeeds ME entry is empty.
	  inncheck no longer warns about an empty ME entry.
	  
	  Thanks to Florian Schlichting for the patch.

	* fix unsigned/signed conversions

	* fix Makefile inclusion variable for Berkeley DB
	  
	  Use the right DB_CPPFLAGS variable instead of BERKELEY_DB_CFLAGS.

	* fix gcc 4.6.1 warnings about unused variables

	* add missing types (used in innfeed/config_l.c)

	* fix an autoconf issue with missing brackets

	* fix issues with calls to getgroups()
	  
	  Properly check that the getgroups() functions exists and works
	  before trying to use it.
	  
	  Also use GETGROUPS_T set by configure to be whichever of gid_t or
	  int is the base type of the array argument to getgroups().

	* use new AC_CHECK_TYPE autoconf syntax
	  
	  Autoconf versions prior to 2.13 provide a now deprecated version
	  of the AC_CHECK_TYPE macro. It was doing more than a CHECK, and
	  was also defining missing types with #define instead of typedef.
	  
	  Swith to the preferred syntax with AC_CHECK_TYPES and typedef.

	* include <strings.h> if available
	  
	  Do not include only <string.h> when <strings.h> is available. It
	  is required by the XSI extensions to POSIX and may be the only
	  place that strncasecmp, for instance, is prototyped on some
	  platforms like FreeBSD.

	* better documentation of the available variables in INN::Config
	  
	  Document how to obtain the existing INN::Config variables;
	  provide a Perl script that gives the list.
	  
	  Add support for the "undef" value in "innconfval -p" (Perl
	  output) so that the list could be exhaustive.
	  
	  Add a way to retrieve the real short version ("x.y.z") instead of
	  a long string ("INN x.y.z (prerelease 20110622)").
	  $INN::Config::VERSION now contains the short version.

	* sendinpaths: complete rewrite in Perl
	  
	  Switch to a new sendinpaths program written in Perl. Based on
	  Mohan Kokal's work.
	  
	  New -c, -d and -h flags for a copy of the e-mail to the
	  newsmaster, a debug mode, and a usage information.

2011-08-04  iulius

	* add an INN::Utils::Shlock module to wrap shlock in Perl scripts
	  
	  Calling shlock (a program shipped with INN) is more portable than
	  using flock(2) and its corresponding Perl function because this
	  function does not work as expected on all existing systems (for
	  instance on Solaris).
	  
	  This patch:
	  
	  * contains POD documentation for INN::Utils::Shlock;
	  
	  * adds support for INN::Utils::Shlock instead of flock(2) in
	  pullnews and mailpost.
	  
	  * uses INN::Utils::Shlock instead of a subfunction calling
	  shlock(1) in controlchan, thdexpire and send-uucp.
	  
	  Thanks to Dennis Davis for the bug report.

	* add POD documentation for scanspool
	  
	  Many thanks to Florian Schlichting for the creation of the POD
	  documentation.

2011-07-21  eagle

	* Fix broken PGP link in install documentation
	  
	  Remove the paragraph about installing the commercial version of
	  PGP, since www.pgp.com now redirects to the Symantec product
	  page, which makes no mention of the PGP that would be of interest
	  to an INN installer.

2011-07-20  iulius

	* improve scripts to send Path: statistics
	  
	  Add two flags to sendinpaths: -k and -r permit to control the
	  interval of days for processing dump files. It will allow a
	  proper generation of daily statistics.
	  
	  Also fixed an issue with statistics that could be missing for a
	  couple of days when monthly sent.
	  
	  Improve our documentation.

2011-07-17  iulius

	* Update our changelog for INN 2.5.3.

	* fix a compilation warning
	  
	  Make sure FD_SETSIZE is strictly positive. Cast for an unsigned
	  comparison. Fix a potential bug of affecting -1 to i in case
	  FD_SETSIZE was 0.

	* Update our test suite to use the official C TAP Harness release
	  (version 1.7). Well, for the time being, use the legacy syntax
	  for the test suite. A variable named LIBTEST_NEW_FORMAT can be
	  set at the beginning of a test so as to use the new syntax.
	  
	  Use cat, grep -v and echo instead of sed. The sed syntax is too
	  different depending on the platform.
	  
	  Homogeneize the CleanupAndExit() function of fakeinnd with the
	  real one.

	* tradindexed remap of index files when writes out of order
	  
	  The overview IDX files aren't being re-read after an article is
	  written to them -- the failing tests (in xref.t, in the test
	  suite) are the places where a stored overview line is read back
	  to check that it was stored correctly, except for the first time
	  each group is read (tests 2-5, 11-18) and when the high water
	  mark is advanced (7-10), which work correctly.
	  
	  There isn't any mechanism in the source code for the files to be
	  refreshed except in the case that the high water mark has been
	  advanced. On systems which don't have MMAP_MISSES_WRITES, perhaps
	  the underlying write shows up automatically (?)
	  
	  Thanks to Wim Lewis for the bug report.

	* add a default timeout on outgoing sockets (NNTPconnect)
	  
	  For a long time, there have been occasional problems with actsync
	  syncing from certain servers: instead of erroring out and exiting
	  (with "cannot connect to server: Connection timed out" or
	  alternatively "cannot connect to server: Success"), actsync would
	  hang until manually killed, sometimes for days.
	  
	  gdb shows actsync is hanging in a call to fgets in NNTPconnect()
	  (from actsync.c:get_active()). innxmit and innxbatch can use
	  alarm() to set a timeout but other users of NNTPconnect, such as
	  nntpget, rnews, clientlib.c and nnrpd/post.c apparently don't.
	  
	  Implement SO_RCVTIMEO with the default timeout of 300 seconds
	  (set in include/inn/options.h).
	  
	  The raised error will be: "actsync: cannot connect to server:
	  Resource temporarily unavailable"
	  
	  Thanks to Florian Schlichting for the patch.

	* inncheck: properly find the boundaries of substituted variables
	  in newsfeeds
	  
	  Thanks to Alexander Bartolich for the bug report, and also the
	  patch.

	* check of global values vs per-peer values in innfeed.conf
	  
	  * As no keys are actually required in innfeed.conf, update
	  inncheck accordingly.
	  
	  * Update inncheck, the man page and the innfeed.conf sample file
	  to correctly mention that deliver-* keys for imapfeed must be
	  specified at global scope.
	  
	  * initial-sleep is a global value; close-period is a per-peer
	  value. Update inncheck accordingly.

	* check all the default values in innfeed.conf (documentation,
	  sample, source code)
	  
	  * Change the default dynamic method from 0 to 3. It already was
	  the recommended value in the documentation, and the default value
	  in the sample innfeed.conf file.
	  
	  * Change the default use-mmap setting from true to false. It
	  already was the recommended value in the documentation. The value
	  of this parameter is only used when innfeed is given file names
	  to send instead of storage API tokens, which is a fairly rare use
	  case.
	  
	  * No longer generate an error message (logged in news.err) when a
	  parameter is not defined in innfeed.conf. It has a default value,
	  so no need to warn the user. (Also updated in innreport.)
	  
	  * Add a "noreturn" hint to the compiler for the dump_core()
	  function.
	  
	  * Homogeneize tape.c with host.c for the default values of
	  backlog-limit, backlog-factor and backlog-limit-highwater.
	  
	  * Log a few more parameters in innfeed.status: "Stats period",
	  "Stats reset", "Debug shrinking", "Fast exit", "stdio-fdmax",
	  "reconnection time", "max reconnection time", "DNS retry period",
	  "DNS expire period", "port num", "force IPv4", "backlog
	  highwater", "highwater queue".
	  
	  * Documentation fixes: - "pid-file" is relative to "pathrun", and
	  not "backlog-directory"; - "log-file" is relative to "pathlog",
	  and not "backlog-directory"; - "initial-sleep" is a global value,
	  and not per-peer; - "close-period" is a per-peer value, and not a
	  global value; - "max-reconnect-time" is mispelled once in the
	  documentation; - specify that *no* keys are mandatory. They are
	  all optional, and have a default value (all of them are now
	  mentioned in the documentation).
	  
	  * Documentation additions: - If a file named "innfeed.debug"
	  exists in the "pathlog" directory, then "debug-level" is
	  automatically set to 1. This is a cheap way of avoiding continual
	  reloading of the "newsfeeds" file when debugging. Note that debug
	  messages still go to "log-file"; - "backlog-directory" is
	  relative to "pathspool"; - "status-file" can be set to an
	  absolute path.

	* inncheck: eliminate perl4-style subroutine calls with &function
	  
	  Patch from Florian Schlichting.

	* improve checks on passwd.nntp
	  
	  Improve the error message when the parsed lined is in wrong
	  format: "Argument list too long" (E2BIG) instead of "Numerical
	  argument out of domain" (EDOM).
	  
	  Also catch a new kind of error in passwd.nntp: any line prior to
	  a matching <hostname>, which is not empty or starts with a hash,
	  but contains a third colon somewhere that is not followed by
	  "authinfo".
	  
	  Thanks to Florian Schlichting for the patch.

	* inncheck: use Getopt::Long
	  
	  Improve the way inncheck parses the command line arguments. The
	  last matching argument is taken into account (consequently,
	  "--noperm --perm --noperm" is valid, as well as "-q -v").
	  
	  As -perm is not just the opposite of -noperm, $perms is handled
	  differently. So 1 is -perm, 0 is -noperm, and -1 is neither.
	  
	  Use --fix, --perms, etc. in our documentation. Keep -fix, -perms,
	  etc. for backward compatibility.
	  
	  Thanks to Florian Schlichting for this patch.

	* inncheck: improvements in checks
	  
	  * inncheck was looking for require-ssl instead of require_ssl;
	  and it wasn't accepting IPv6 addresses in CIDR notation at all.
	  
	  * Allow uppercase characters in IPv6 addresses. RFC 5952 section
	  4 / 4.3 says that all characters in an IPv6 address MUST be
	  textually represented in lowercase and advises that humans should
	  do so, too. At the same time, all implementations must be able to
	  accept both lowercase and uppercase.
	  
	  * Suppress (useless and misleading) error messages after an error
	  is detected, until the parser is back in sync. The drawback is
	  that it will hide two consecutive errors until the first one gets
	  fixed.
	  
	  * Allow not to specify the maximum size in storage.conf. "size:
	  16384," was treated as an error though it was totally valid and
	  meant "no upper limit".
	  
	  * Recognize inclusions in readers.conf and innfeed.conf. inncheck
	  will ignore the include statement. The drawback is that every
	  file must be self-contained on its own: a file must be a
	  "complete" set of blocks and options. In order to check the
	  included file, inncheck has to be run again on it (with for
	  instance the option "readers.conf=/path/to/included/file").
	  
	  Patch from Florian Schlichting.

	* inncheck: generate a proper exit value and allow quiet (-q)
	  operation
	  
	  Add support for a quiet mode (with the -q flag). This flag cannot
	  be used along with the exiting -v flag (verbose mode).
	  
	  Also add a non-zero exit value when errors are found.
	  
	  Thanks to Florian Schlichting for this patch.

	* innfeed.conf: fix documentation wrt. floating-point and optional
	  values
	  
	  Move bindaddress and bindaddress6 to the (newly created) optional
	  section.
	  
	  dynamic-backlog-low and dynamic-backlog-high expect
	  floating-point values, and not integer values.
	  
	  All of the special keys for imapfeed are not required.
	  
	  Thanks to Florian Schlichting for the main part of this patch.

	* inncheck: actually check incoming.conf/readers.conf, as well as
	  innfeed.conf and storage.conf (generic config-syntax parser)
	  
	  IDEA: Be more restrictive than current parsers and config-syntax
	  / lib/confparse.c combined, so that anything that passes inncheck
	  will be OK both now and in the future.
	  
	  A few notes: - cuddled braces: config-syntax says there doesn't
	  need to be white-space inside, but incoming.conf parser in
	  innd/rc.c requires it (at least after "{") => DO REQUIRE
	  WHITESPACE, as it will work everywhere - double quotes:
	  config-syntax says strings can be continued on multiple lines by
	  means of a backslash; incoming.conf parser in innd/rc.c does not
	  know about backslashes, but will continue over newlines until
	  matching " is found or 32K exceeded => DO REQUIRE strings to stay
	  on one line - comments: config-syntax says "comments at the end
	  of lines aren't permitted", but this seems to be standard
	  practice... Weird things can happen if a "#" is encountered
	  inside a string - multiple variables: config-syntax says multiple
	  variable settings can be on one line when separated by semicolon;
	  incoming.conf parser knows nothing about this - double
	  assignments: in practice, the latter takes precedence, says
	  config-syntax, though I wouldn't bet on it for current
	  incoming.conf...
	  
	  Many thanks to Florian Schlichting for this pretty useful patch.

	* let innd -S check incoming.conf
	  
	  The fully-useful check will have to wait for the new config
	  parser being used...
	  
	  Thanks to Florian Schlichting for this new -S flag.

	* inncheck: make perlcritic happy (a little bit at a time...)
	  
	  One of these is a bug: an error message was not shown (for
	  passwd.nntp).
	  
	  Thanks to Florian Schlichting for this patch.

	* inncheck: run under 'use strict'.
	  
	  Also don't use hashes with package names (e.g.,
	  %control'messages) as it's an ancient form and prevents syntax
	  checking.
	  
	  Thanks to Florian Schlichting for the improvement.

	* inncheck: delete long-unsused cruft.
	  
	  innlog.pl was the precursor to innreport...
	  
	  Thanks to Florian Schlichting for the clean up.

	* clean up innd code
	  
	  Add the "noreturn" attribute to two functions.
	  
	  Fix a typo, add a comment, add an explicit comparison to NULL.

	* implement an upper limit to the number of file descriptors
	  
	  select() only handles (FD_SETSIZE-1) file descriptors at most.
	  Otherwise, macros like FD_SET have an unexpected behaviour.
	  
	  Force this upper limit right now (usually 1023). In future
	  versions of INN, hopefully libevent will deal with a larger
	  number of file descriptors.
	  
	  Thanks to Steve Crook for the bug report.

	* better check of the rights on the private key for TLS connections
	  
	  Use stat() instead of lstat(). The permissions of the symlink are
	  irrelevant; we only care about the permissions of the underlying
	  file.
	  
	  Use getegid() instead of getgid().
	  
	  The news group is fairly trusted already by INN. Ensure that if
	  the mode is 440 or 640, the group owner is the news group (to
	  prevent the failure case of having news:users as the owner and
	  group).
	  
	  In the error message, a wrong path to the key was put (cert_file
	  instead of key_file).
	  
	  Thanks to Florian Schlichting for having reported the issue, and
	  to Russ Allbery for his help on the fix.

	* add 'use strict' mode to signcontrol
	  
	  Clean up these Perl scripts.
	  
	  Use LOCK_EX instead of the value 2.
	  
	  Thanks to Florian Schlichting for this patch.

	* STARTTLS / AUTHINFO SASL plaintext command injection
	  
	  Fixed a possible plaintext command injection during the
	  negotiation of a TLS layer. The vulnerability detailed in
	  CVE-2011-0411 affects the STARTTLS and AUTHINFO SASL commands.
	  nnrpd now resets its read buffer upon a successful negotiation of
	  a TLS layer. It prevents malicious commands, sent unencrypted,
	  from being executed in the new encrypted state of the session.
	  
	  The issue has been present since INN 2.3.0 (when STARTTLS was
	  implemented).
	  
	  Confirmed when sending "STARTTLS\r\nDATE\r\n" with openssl:
	  
	  17:04 news@trigo ~/work/openssl/openssl-1.0.0d% apps/openssl
	  s_client -quiet -starttls smtp -connect news.trigofacile.com:119
	  didn't found starttls in server response, try anyway... depth=0 C
	  = FR, ST = news.trigofacile.com, O = news.trigofacile.com, CN =
	  news.trigofacile.com verify error:num=18:self signed certificate
	  verify return:1 depth=0 C = FR, ST = news.trigofacile.com, O =
	  news.trigofacile.com, CN = news.trigofacile.com verify return:1
	  500 What? 111 20110403150413 QUIT 205 Bye!
	  
	  The 500 artefact is because of the EHLO sent by openssl before
	  STARTTLS. We see here that the DATE command is answered.
	  
	  With this patch, here is a new attempt with openssl:
	  
	  17:06 news@trigo ~/work/openssl/openssl-1.0.0d% apps/openssl
	  s_client -quiet -starttls smtp -connect news.trigofacile.com:119
	  didn't found starttls in server response, try anyway... depth=0 C
	  = FR, ST = news.trigofacile.com, O = news.trigofacile.com, CN =
	  news.trigofacile.com verify error:num=18:self signed certificate
	  verify return:1 depth=0 C = FR, ST = news.trigofacile.com, O =
	  news.trigofacile.com, CN = news.trigofacile.com verify return:1
	  500 What? DATE 111 20110403150638 QUIT 205 Bye!
	  
	  The answer to DATE is not given after "500 What?". We had to
	  explicitly ask for it. The issue is therefore solved.

	* add 'use strict' mode to cnfsheadconf, cnfsstat, innmail and
	  procbatch
	  
	  Clean up these Perl scripts.
	  
	  Thanks to Florian Schlichting for this patch.

	* add 'use strict' mode to mod-active
	  
	  Clean up the Perl script (especially a rewrite of the eval()
	  call).
	  
	  Restart INN automatically before (and if) dying, when the old
	  active file is still present.
	  
	  Thanks to Florian Schlichting for this patch.

	* add support for wire-formatted articles in scanspool
	  
	  Remove \r from the Newsgroups: header field when parsing it.
	  Otherwise, scanspool can not properly parse articles stored in
	  wire-format, and wrongly report that the article does not belong
	  in its newsgroup.
	  
	  Also initialize two variables, and make sure a hash value exists,
	  to silent three warnings during the execution of scanspool.

	* add 'use strict' mode to scanspool
	  
	  Clean up the Perl script.
	  
	  Thanks to Florian Schlichting for this patch.

	* fix compilation issues and useless prototypes
	  
	  * Remove the useless timerCallback() function.
	  
	  * Add a missing argument in a call to prepareWrite().
	  
	  * "len" should be a socklen_t and not an int.
	  
	  * "program" was not declared as a char*.
	  
	  * Better names for variables.
	  
	  * Remove useless prototypes, and make a few functions as static.
	  
	  * Typos in comments.
	  
	  Thanks for Florian Schlichting for the main part of the patch.

	* fix a bug in the frequency innfeed logs its status
	  
	  innfeed was printing lots of useless lines to news.notice.
	  
	  TMRnow() doesn't return the current time, as innfeed was assuming
	  in the code, but the readily usable number of milliseconds since
	  the last call to TMRsummary() or TMRinit().
	  
	  Thanks to Florian Schlichting for the patch.

	* Build INN with the new "-Wunused-but-set-variable" GCC 4.6.0
	  warning.
	  
	  Remove unused variables.
	  
	  At the same time, do a bit of cleaning! (Useless whitespaces,
	  useful (for reading) whitespaces, one-line if conditions,
	  "conn_ret" type instead of "int".)
	  
	  Also add checks to WriteToWire_lmtpstr() results, so as to really
	  return the result (and properly disconnect the session on error),
	  instead of returning RET_OK as though everything were OK.
	  
	  Same thing for WriteToWire_imapstr() at a few places.
	  
	  No need to be in any auth step when we are about to close the
	  IMAP session after a failure of WriteToWire_imapstr().

	* Build INN with the new "-Wunused-but-set-variable" GCC 4.6.0
	  warning.
	  
	  Remove unused variable "amt", and at the same time two useless
	  TRUST_FPRINTF and NO_TRUST_STRLEN branches.

	* Build INN with the new "-Wunused-but-set-variable" and
	  "-Wunused-but-set-parameter" GCC 4.6.0 warnings.
	  
	  Remove unused variables.
	  
	  Also fix a potential issue with the incorrect handling of structs
	  when passed by value instead of by reference. Maybe a
	  compiler-specific behaviour.

	* Build INN with the new "-Wunused-but-set-variable" GCC 4.6.0
	  warning.
	  
	  Remove unused "c" variable.
	  
	  Well, better rewrite the function at the same time. Thanks to
	  Russ Allbery for the new array parsing code.

	* Build INN with the new "-Wunused-but-set-variable" and
	  "-Wunused-but-set-parameter" GCC 4.6.0 warnings.
	  
	  Remove unused variables.
	  
	  In innd/python.c, also use "wasspace" as a boolean.
	  
	  In tests/overview/api-t.c, keep the "expires" variable because it
	  is set afterwards in the code to the right expected value. Though
	  unused after being set, it is worth keeping it for the day when
	  the overview API uses the value.

	* Build INN with the new "-Wunused-but-set-variable" GCC 4.6.0
	  warning. It was complaining about an unused "sv" variable.
	  
	  This commit fixes the following issues: * innd and nnrpd
	  segfaults because of a corrupted Perl stack. A copy of the Perl
	  stack pointer is saved at several places in the code but not
	  always restored the way it should be. For instance, PerlFilter()
	  calls could reallocate the Perl stack and subsequently cause
	  failures when the stack is used afterwards. Make sure that the
	  Perl stack could not be modified twice in the row without being
	  properly updated at global scope.
	  
	  * use ENTER-SAVETMPS-PUSHMARK-PUTBACK and
	  SPAGAIN-PUTBACK-FREETMPS-LEAVE macros whenever they are required.
	  Note that call_argv() does not need PUSHMARK-PUTBACK.
	  
	  * fixed two memory leaks because of a xasprintf() which was not
	  free'd.
	  
	  * documentation of the filter_end() Perl routine that is called,
	  if defined, prior to the deactivation of Perl filters. Both used
	  by innd and nnrpd when Perl filtering is turned off (either with
	  "ctlinnd perl n" or when a Perl function dies at run time).

2011-07-12  iulius

	* controlchan: impose a date cutoff, block the replay of old
	  control articles
	  
	  controlchan now uses convdate to parse dates. Otherwise, with the
	  new Injection-Date: header field, old control articles could be
	  maliciously reinjected into Usenet, and replayed.
	  
	  The Injection-Date: header of old control articles is not always
	  signed...
	  
	  controlchan now imposes a date cutoff.
	  
	  According to RFC 5537, a relaying agent processes an article as
	  follows:
	  
	  2. It MUST examine the Injection-Date header field or, if absent,
	  the Date header field, and reject the article if that date is
	  more than 24 hours into the future. It MAY reject articles with
	  dates in the future with a smaller margin than 24 hours.
	  
	  That is to say that the Date: header field can be set to anything
	  when an Injection-Date header field exists.
	  
	  Add a "-c" flag to controlchan to disable the cutoff check. On a
	  date parsing failure, controlchan rejects the message (which will
	  be actually process only with the "-c" flag disactivating the
	  cutoff check).
	  
	  Also add a "-h" flag to print basic usage information.
	  
	  Convert controlchan man page into POD: * mention
	  control.ctl.local; * document the "-c" and "-h" flags; * document
	  the need for the Perl modules Encode and MIME::Parser; * add an
	  example of how to manually invoke controlchan.

2011-06-11  iulius

	* Use "localhost" instead of "stdin" in injection fields when an
	  article is posted from the local system.
	  
	  Suggestion from Dieter Stussy and Paolo Amoroso.

	* Fix the build on MacOS because of common variables. We just
	  declare them as non-common by adding initialisations.
	  
	  Root cause seems to be that ranlib behaves different on MacOS X.
	  By default, ranlib (actual libtool, ranlib is a symbolic link to
	  libtool) doesn't put common symbols in the index. From ranlib(1):
	  
	  -c Include common symbols as definitions with respect to the
	  table of contents. This is seldom the intended behavior for
	  linking from a library, as it forces the linking of a library
	  member just because it uses an uninitialized global that is
	  undefined at that point in the linking. This option is included
	  only because this was the original behavior of ranlib. This
	  option is not the default.
	  
	  Thanks to Dennis Preiser and vi Bo Lindbergh for the patch.
	  
	  Also remove the three now unnecessary mentions to shmem.o,
	  expire.o and ov.o in ovmethod.mk.

2011-04-16  iulius

	* Document the format of ninpaths dump files.
	  
	  Add a symbolic link for inpaths(8) to ninpaths(8).
	  
	  Mention that INN 1.7 supports the WP newsfeeds flag.

	* The simpleftp script does not switch to binary mode before
	  transferring files.
	  
	  If it is used by actsyncd to get active.gz from ftp.isc.org, the
	  transferred archive is corrupted.
	  
	  Thanks to Matthias Meyser for the bug report.

	* OVrealnow is declared twice in storage/overinterface.h.
	  
	  Thanks to Dennis Preiser for the report.

	* On some OS (like FreeBSD), renice emits a status report to
	  STDERR.
	  
	  When using sendinpaths, which uses renice, in a cronjob, an email
	  is sent every time with that report. STDERR is now redirected to
	  /dev/null.
	  
	  Thanks to Matthias Meyser for having reported the issue.

	* Convert the innfeed.conf man page to POD.
	  
	  * Add backlog-highwater, news-spool and input-file in the
	  innfeed.conf sample file.
	  
	  * Add fast-exit, debug-shrinking and initial-sleep in both the
	  documentation and the sample file.
	  
	  * To match what innfeed does by default : - change
	  host-queue-highwater from 200 to 10 in the sample file - change
	  max-connections from 5 to 2 in the sample file - change
	  dynamic-backlog-low from 25.0 to 20.0 in the sample file
	  
	  * innfeed/host.c was expecting "backlog-limit-high" whereas
	  innfeed/tape.c was properly using "backlog-limit-highwater"
	  (which is the one mentioned in the innfeed.conf configuration
	  file and the documentation). It then appears that innfeed was not
	  taking the value into account and always using the default value
	  of 0.
	  
	  * Fix the documentation for the path to innfeed.status. It is
	  either pathlog or pathhttp, and not the backlog directory.
	  
	  * Fix the paragraph about imapfeed: "deliver" is not a parameter.
	  
	  * Remove the notion of version 0.9.3 and 1.0 for innfeed.
	  
	  * Remove the mention that "in previous versions of innfeed, a
	  value of 1 had a special meaning for <max-connections>. This is
	  no longer the case, 1 means a maximum of 1 connection."
	  
	  * Remove the mention that "in innfeed 0.9.3 and earlier,
	  <no-check-high> was in the range [0.0, 9.0]".
	  
	  * Remove the sample innfeed.conf file from the documentation (no
	  need to duplicate it).
	  
	  * Typos.

2011-02-12  iulius

	* Add a missing semi-colon.

	* Convert inncheck man page to POD.
	  
	  Update the help usage.
	  
	  Fix a few typos, and add the control.ctl.local file.

2011-02-12  eagle

	* Initialize socket structures and use SUN_LEN properly
	  
	  From Bo Lindbergh: innd failed to bind to an unprivileged socket.
	  I found the problem in lib/network.c (a sockaddr_in with
	  uninitialised spare bits in it). Then I grepped around and found
	  more instances of the same problem. I also found a sockaddr_un
	  problem (SUN_LEN not used).

2011-02-06  eagle

	* Add imapfeed to NAME section of innfeed man page

2011-02-01  eagle

	* Ensure flag is declared in innbind for IPV6_V6ONLY
	  
	  If SO_REUSEADDR were not defined but IPV6_V6ONLY were defined,
	  innbind would fail to compile because a flag variable would not
	  be declared. This is an unlikely set of supported options for a
	  network stack, but let's be fully correct. Thanks, Florian
	  Schlichting.

2011-01-24  iulius

	* Mention that SASL is also used by nnrpd. Typo, and improve the
	  changelog for INN 2.5.3.

	* Add parenthesis for Python print() calls. It otherwise does not
	  work with Python 3.

	* Convert innfeed man page to POD.
	  
	  Improve the help usage (notably, adding a mention of the -o
	  flag).
	  
	  Move innfeed(1) to innfeed(8).
	  
	  Add a symbolic link for imapfeed(8) to innfeed(8).
	  
	  Fixes during the process:
	  
	  * Document the new logging (notably, "accsize", "rejsize" and the
	  "%d/%.1f" syntax for "deferred" were missing).
	  
	  * Document the -s flag in the man page. Thanks to Florian
	  Schlichting for having found it was missing and provided a
	  wording for the documentation.
	  
	  * Typos.

2011-01-23  iulius

	* The -F flag was not working when the -P flag was not also set
	  with pullnews. The two flags can now be used separately.

	* The "-k n" flag was not working the way it should in pullnews.
	  The configuration file was not saved after every n articles
	  (right behaviour) but after every n articles in one newsgroup.
	  
	  Thanks to Edmund H. Ramm for the bug report.

	* pullnews was not properly counting the number of bytes
	  downloaded. It was not resetting the count between newsgroups;
	  consequently, the bytes count was only right for the first
	  newsgroup.
	  
	  Thanks to Edmund H. Ramm for the bug report.

	* Add the htmlstatus parameter to inn.conf to determine whether the
	  status file that innd can write out (depending on the value of
	  the status parameter) is plain text or wrapped in HTML. It
	  previously only was a compile-time option, set to true by
	  default. The behaviour was therefore impossible to modify without
	  compiling again INN.
	  
	  Thanks to Florian Schlichting for the patch.
	  
	  Also fix the syntax of the generated HTML file. The refresh time
	  should not end with a semi-colon. Add the English language, and
	  validate HTML 5.

	* Missing commit, related to revision 9136. I forgot to commit the
	  new documentation:
	  
	  * Add authentication to the downstream server.
	  
	  * Improve documentation (especially the example for the "-m" flag
	  that should be quoted for the shell).

	* Improve the logging of Perl and Python access hooks. The origin
	  wasn't previously mentioned:
	  
	  "syntax error in (null)(2), Expected value."
	  
	  Now, nnrpd will log:
	  
	  "syntax error in perl_access-block(2), Expected value."

2011-01-20  iulius

	* Improve the wording of the action taken after a newgroup/rmgroup
	  control article. Always use a verb.
	  
	  Thanks to Florian Schlichting for the patch.

2010-12-25  eagle

	* Document the post saving done by readertrack = true
	  
	  If readertrack is set to true, in addition to logging client
	  activity, every post made is also saved in a directory under the
	  log directory in a file named by message ID. Document this in
	  inn.conf.

2010-11-01  iulius

	* Fixed an issue in the Python access hook for nnrpd: it has not
	  been working since Python 2.5 on 64-bit platforms, owing to a
	  change to Python's C API, using a new Py_ssize_t type definition
	  instead of int.
	  
	  Thanks to Raphael Barrois for the patch.
	  
	  Define Py_ssize_t as an int for Python versions < 2.5.0.
	  
	  Also include Python.h before any standard headers are included,
	  because "Python may define some pre-processor definitions which
	  affect the standard headers on some systems".

2010-10-30  iulius

	* * Advertise the COUNTS, DISTRIBUTIONS, MODERATORS, MOTD and
	  SUBSCRIPTIONS keywords in the LIST capability for nnrpd.
	  Compliance to RFC 6048.
	  
	  * Implement the message of the day in innd, and advertise it in
	  its LIST capability.
	  
	  * The motd.news file (previously used only by nnrpd) is renamed
	  to motd.nnrpd during the run of innupgrade.
	  
	  * A new motd.innd file is created for innd.
	  
	  * In the 501 error code for an unexpected third argument to a
	  LIST command, mention it is not necessarily a wildmat.
	  
	  * Better wording for the 503 error code in response to LIST.
	  
	  * Documentation update.
	  
	  * Symbolic links are created for motd.innd.5 and motd.nnrpd.5
	  (pointing to the legacy motd.news.5 man page).

2010-10-29  iulius

	* Before passing the submission template to snprintf(), check that
	  it is a valid one with "%" followed by only another "%" or a "s"
	  (but once only).

	* When "cnfsstat -a" is used, a Perl warning occurs if the CNFS
	  buffer has not been initialized yet or received an article. The
	  time of the oldest article is unset. We now properly take it into
	  account.
	  
	  Thanks to Florian Schlichting for the bug report.

	* Check MAXARTLINELENGTH in nnrpd, not innd.
	  
	  This patch means reverting the previous "CRwithoutLF" patch
	  [9096] and also ripping out all length checking and both unsigned
	  long length as well as data->LastCRLF.
	  
	  Thanks to Florian Schlichting for the patch.

	* Update our documentation to mention the fact that RFC 6048 now
	  exists and is implemented in INN.

2010-10-24  iulius

	* * Add authentication to the downstream server. * Improve
	  documentation (especially the example for the "-m" flag that
	  should be quoted for the shell). * Do not connect to an upstream
	  server when no newsgroups should be fetched. * Do not stop
	  processing newsgroups when an error occur (for instance when a
	  newsgroup mentioned in the configuration file has been removed
	  from the upstream server).
	  
	  Thanks to Edmund H. Ramm for the bug reports.

2010-10-03  iulius

	* Mention in the logs of innfeed that a warning may be fine when a
	  new CNFS buffer has just been set up.
	  
	  Thanks to Michael Grimm for having reported the issue.

	* Ignore in innreport when innfeed rolls its funnel file.
	  Otherwise, it shows up as "unknown entry" in the report.
	  
	  Thanks to Florian Schlichting for the patch.

2010-09-26  iulius

	* Realign our inn.conf sample (because "extraoverviewadvertised" id
	  a bit too long for the current alignment).

	* Do not forget to free a pointer.

	* nnrpd no longer adds or updates the Path: header field when an
	  article is forwarded to a moderator. It could otherwise lead to
	  rejects at injection time when the article was approved by the
	  moderator because these fields show a previous injection (which
	  did not occur).
	  
	  Note that if strippath is true, we will still remove the Path:
	  header. No harm done with that removal.
	  
	  Excerpt from RFC 5537:
	  
	  3.5. Duties of an Injecting Agent
	  
	  7. If the Newsgroups header contains one or more moderated groups
	  and the proto-article does not contain an Approved header field,
	  the injecting agent MUST either forward it to a moderator as
	  specified in Section 3.5.1 or, if that is not possible, reject
	  it. This forwarding MUST be done after adding the Message-ID and
	  Date headers if required, and before adding the Injection- Info
	  and Injection-Date headers.
	  
	  8. Otherwise, a Path header field with a <tail-entry> MUST be
	  added if not already present.
	  
	  9. The injecting agent MUST then update the Path header field as
	  described in Section 3.2.1.

	* Go on checking the syntax of the Date: header field, even though
	  it is not used by innd when an Injection-Date: header field
	  exists.

2010-09-25  iulius

	* No impact because the NeedHeadername member is not used in this
	  case. Yet, better put it right.

	* innd, as a relaying agent, now examines the Injection-Date:
	  header, when present. It contains the posting date (used for
	  history). makehistory now also uses it, when present. Otherwise,
	  the Date: header is used.
	  
	  nnrpd, as an injecting agent, checks whether the Date: header
	  field is not too far in the past. It is a recommendation of RFC
	  5537 since not all news servers support the Injection-Date:
	  header. (The article would then suffer from poorer propagation.)

2010-09-24  iulius

	* Update the manifest and Subversion properties after commit 9112.

	* inncheck was not substituting variables in the newsfeeds
	  configuration file. It therefore wrongly reported errors.
	  
	  For instance: $limitHI=131072
	  example/example.com:*:Ajp,Tm,<$limitHI:innfeed!
	  
	  Now fixed. This example is properly parsed by inncheck.
	  
	  Thanks to Michael Grimm for the bug report.

	* Add the possibility to run local innshellvars scripts.
	  
	  innshellvars.local, innshellvars.pl.local and
	  innshellvars.tcl.local are now executed at the end of the run of
	  the corresponding innshellvars script. A typical use is to add or
	  override variables. For instance HOME or GNUPGHOME. These local
	  scripts have to be executable; otherwise, they are not taken into
	  account.
	  
	  Thanks to Matthew Vernon for the suggestion.

2010-09-14  eagle

	* Yet another update to the Berkeley DB URL

2010-09-10  iulius

	* INN thinks that OpenBSD (4.6) doesn't support Unix-domain
	  sockets. The problem is that <sys/socket.h> doesn't include
	  cleanly unless you include <sys/types.h>, and the AF_UNIX test in
	  m4/socket.m4 doesn't include <sys/types.h>.
	  
	  It is also added to the test program for AI_ADDRCONFIG, even
	  though (a) including stdio.h happens to pull in the necessary
	  headers and (b) OpenBSD doesn't have AI_ADDRCONFIG anyway.
	  
	  Note: m4/sendfd.m4 can be left without the patch. This will
	  always fail on OpenBSD anyway, so it shouldn't matter. This will
	  only successfully compile and run on a STREAMS-based system, so
	  only SysV. It is the same for include/portable/getnameinfo.h and
	  include/portable/getaddrinfo.h: none of those currently cause
	  problems because these headers are only included by files which
	  have already included sys/types.h, and OpenBSD doesn't support
	  STREAMS at all.
	  
	  Thanks to Wim Lewis for the patch.

2010-08-11  iulius

	* Fix the Tcl innshellvars script (which has not worked since INN
	  2.3).
	  
	  A variable was unset, and the evaluation of innconfval was not
	  working.
	  
	  Also add a catch block in case the Tcl interpreter does not
	  recognize the umask command.

2010-08-05  iulius

	* Use a constant (ARTNUMPRINTSIZE) for the length of a water mark.
	  It will be of help if we ever switch from 32-bit to 64-bit
	  article numbers.

	* Mention that Perl and Python filters for innd return the *first*
	  occurrence of header fields in the %hdr variable. Whereas it is
	  the *last* occurrence for the Perl filter for nnrpd.

	* When a header field appeared more than once in an article, it was
	  missing from the overview data. OVER/XOVER, as well as
	  HDR/XHDR/XPAT using the overview, were therefore returning an
	  empty field. The content of the first occurrence is now returned,
	  in accordance with RFC 3977.

	* This patch causes both CRwithoutLF (\r) and LFwithoutCR (\n) to
	  be considered the same as CRLF (\r\n) for purposes of checking
	  allowable header line length.
	  
	  It appears that some people like to grace their articles with
	  Face: or X-Face: headers of typically 4-6k binary data. While
	  usually put into nice continuation lines of around 80 characters,
	  a few clients fail to create proper line breaks for this header,
	  inserting only a single \r or \n instead. The nnrpd in INN 2.3
	  doesn't reject or correct these mistakes for non-system headers,
	  and offending articles are still "in the wild".
	  
	  innd currently counts, logs and ignores such imperfect line
	  breaks. Alas, when checking for the maximum allowable 'physical'
	  line length, single \r or \n are not recognized, thus making the
	  whole 'virtual' (continued) header appear as a single line,
	  easily exceeding MAXARTLINELENGTH and thus causing the article to
	  be rejected.
	  
	  Thanks to Florian Schlichting for the patch.

	* Confusion between CR and LF when innd parses a body and counts
	  missing LFs.
	  
	  Thanks to Florian Schlichting for having noticed it.

	* A single header field line is limited to 998 bytes, per RFC 5536.
	  innd was previously accepting, and also generating Xref: header
	  field lines, up to 1022 bytes.
	  
	  Use new MAXARTLINELENGTH and MED_BUFFER constants instead of
	  MAXHEADERSIZE in the code.
	  
	  Update the test suite.
	  
	  Meanwhile, fix two bugs in the generation of the Xref: header
	  field:
	  
	  * When resizing the buffer, extra place for a CRLF that may be
	  added by a continuation line is not taken into account.
	  Consequently, when p[0] = '\r' and p[1] = '\n' are used, a
	  segfault may occur.
	  
	  * When comparing to MAXARTLINELENGTH, the final CRLF is not taken
	  into account ("+2" is missing in the count), so the generated
	  Xref: header field might end up with 1002 bytes!

2010-08-01  iulius

	* Assignment to $[ is deprecated in Perl 5.12.1. Anyway, the
	  default is 0; so we can remove our assignments.
	  
	  Thanks to Dieter Stussy for having noticed.

2010-07-11  iulius

	* Remove the mention of an unnecessary (and weird) include file.
	  (See commit 8901.)

2010-06-28  iulius

	* Mention in the documentation that e-mail addresses can be used as
	  arguments to sendinpaths.
	  
	  Thanks to Ian Jackson for the bug report.

2010-06-05  iulius

	* Fix the use of uninitialized values: storage classes and ARGV.
	  oldart was not declared as a local variable and its value was
	  then wrongly reused.

	* Allow to *not* compress logs. --with-log-compress=cat will do
	  that at configure time.
	  
	  Idea from Florian Schlichting.

2010-05-31  iulius

	* Use pre-formatted text for a better HTML and *nroff output.

	* Fix a character badly encoded.

2010-05-30  iulius

	* Convert libstorage to POD.
	  
	  Fixes during the process:
	  
	  * ARTHANDLE contains two different ways of representing article
	  data: an iovec array, and a char*/length pair. One is used by
	  SMstore and the other by SMretrieve, but this is not documented.
	  Patch from Ian Jackson to fix that.
	  
	  * OVadd has a time_t expires parameter.
	  
	  * OVexpiregroup has a struct history *h parameter.
	  
	  * OVgetartinfo does not have char **data and int *len parameters.
	  
	  * SMexplaintoken(const TOKEN token) was not documented.
	  
	  * Dot-stuffing was not clearly documented.
	  
	  * Structs and enums were not all mentioned.
	  
	  * EXPENSIVESTAT was not documented.
	  
	  * OVCACHEKEEP and OVCACHEFREE were not documented.

	* Put variables in italics (POD documentation).

2010-05-20  iulius

	* Emitting an error if nntpsend is unable to get the lock is better
	  than silently failing.
	  
	  Thanks to Matthew Vernon for his suggestion.

	* Fix the documentation of the -n flag for nntpsend.

	* No upper case to innwatch, innxmit and innreport.

	* Convert nntpsend and nntpsend.ctl documentation to POD. Better
	  nntpsend.ctl sample configuration file.
	  
	  Fixes: * The -a flag is given only when there is no size limit. *
	  The -d and -D flags were incorrectly described (reported by
	  Matthew Vernon). * The -S flag does not exist for nntpsend. *
	  When the -n flag is used, nntpsend does not sleep before spawning
	  each innxmit child. * In nntpsend.ctl documentation, trunc(1)
	  does not exist; it is shrinkfile(1).

	* Remove trailing spaces.

2010-05-08  iulius

	* The order of CNFS buffers in a metacycbuff is now properly read
	  and written by cnfsheadconf. There previoulsy was a confusion
	  between hexadecimal and decimal values.
	  
	  Thanks to John F. Morse for the bug report.

	* When HDR/XHDR/XPAT was used on a new article coming into a
	  newsgroup, requesting a header not present in the overview
	  database, the first subsequent OVER/XOVER command did not show
	  that article. A remap of the overview data file was missing in
	  nnrpd.
	  
	  Thanks to Sam Varshavchik for the bug report.
	  
	  The cached index and the cached data files were not immediately
	  remapped to reflect the change. When doing an overview search
	  with (X)OVER, both the index and data files are remapped, if need
	  be. The same for (X)HDR or XPAT *when* using the overview. Here,
	  as "(from articles)" is replied by the server, the search is done
	  in the article itself and does not call an OVopensearch(). The
	  code uses OVgetartinfo() which calls tdx_article_entry() which
	  remaps the index file but *not* the data file. Therefore, the
	  high water mark in the cached data file is still mapped to high-1
	  after (X)HDR but tdx_article_entry() updates data->high to be the
	  new high water mark... Then (X)OVER is used. It believes the
	  cached data information is right. But obviously does not find the
	  last article and the cached data file then is marked as
	  to-be-remapped. Which is done when doing the subsequent overview
	  search with (X)OVER.
	  
	  See also [8451].

	* cnfsheadconf now properly recognizes continuation lines in
	  cycbuff.conf, that is to say lines ending with a backslash (\).
	  
	  Thanks to John F. Morse for the bug report.

2010-04-12  eagle

	* Update the URL to Berkeley DB

	* Update URL for svn2cl

	* Remove the README reference to inflow
	  
	  The URL appears to be dead.

	* Fix URL for the SCO UNIX tutorial to avoid a redirect

2010-04-07  iulius

	* Bump revision numbers for the STABLE version.

2010-03-24  eagle

	* Rewording and editing of changes for 2.5.2

