=head1 Changes in 2.4.5 =over 2 =item * Fixed the "alarm signal" around C in B: it allows a proper disconnection of news clients which were previously hanging when posting an article through a SSL connection. Moreover, the I parameter now works on SSL connections. Thanks to Matija Nalis for the patch. =item * SO_KEEPALIVE is now implemented for SSL TCP connections on systems which support it, allowing system detection and closing the dead TCP SSL connections automatically after system-specified time. Thanks to Matija Nalis for the patch. =item * Fixed a segmentation fault when an article of a size greater than remaining stack is retrieved via SSL. Thanks to Chris Caputo for this patch. =item * Fixed a few segfaults and bugs which affected both Python B and B hooks. They no longer check the existence of methods not used by the hooked script. An issue with Python exception handling was also fixed, as well as a segfault fixed by Russ Allbery which happened whenever one closes and then reopens Python in the same process. Julien Elie also fixed a bug when reloading Python filters (they were not always correctly reloaded) and a segfault when generating access groups with embedded Python filters for B. Many thanks to David Hlacik for its bug reports. =item * The F stub file in order to test Python B hooks, as mentioned in their documentation, is now installed; only F was previously installed in I. Also fixed a bug in F and add missing methods to it. =item * Fixed a long-standing bug in B which prevented it from correctly reporting B and B log messages. =item * Fixed a hang in Perl hooks on (at least) HP/PA since S. =item * Fixed a compilation problem on some platforms because of AF_INET6 which was not inside a HAVE_INET6 block in B. =item * Fixed a bug in B which contained thrice the same IPs for each peer; it unnecessarily slowed the peer IP rotation for B. Thanks, S, for having seen that. Miquel van Smoorenburg provided the patch. =item * A new I improved version of B is shipped with this INN release. This new version is provided by Geraint Edwards. He added no more than S<16 flags>, fixed some bugs and integrated the B contrib script by Kai Henningsen, adding again S<6 other> flags. A long-standing but very minor bug in the B<-g> option was especially fixed and items from the to-do list implemented. Many thanks again to Geraint Edwards. =item * New headers are accessible through Perl and Python B filtering hooks. You will find the exact list in the INN Python Filtering and Authentication Hooks documentation (F) and in Python samples. Thanks to Matija Nalis for this addition of new useful headers. =item * New samples for Python B hooks are shipped with INN: F for access control and F for dynamic access control. The F script is now only used for authorization control. See the F man page for more information (especially the I, I and I parameters). The documention about INN Python Filtering and Authentication Hooks has also been improved by Julien Elie. =back =head1 Changes in 2.4.4 =over 2 =item * Fixed incomplete checking of packet sizes in the B interface in the no-Unix-domain-sockets case. This is a potential buffer overflow in dead code since basically all systems INN builds on support Unix domain sockets these days. Also track the buffer size more correctly in the client side of this interface for the Unix domain socket case. =item * Group blocks in F are now correctly parsed and no longer cause segfaults when loading this file. =item * Fixed a problem with B continuously segfaulting on amd64 hardware (and possibly on lots of 64-bit platforms). Many thanks to Ollivier Robert for his patch and also to Kai Gallasch for having reported the problem and provided the FreeBSD server to debug it. =item * B now rotates B's log file, which prevents B from silently dying when its log file reaches S<2 GB>. =item * S support has been added to INN thanks to Jakub Bogusz. =item * Some news clients hang when posting an article through a SSL connection: it seems that B's SSL routines make it wrongly wait for data completion. In order to fix the problem, the select() wait is now just bypassed. However, the IDLE timer stat is currently not collected for such connections. Thanks to Kachun Lee for this workaround. =item * Fixed a bug in the display of the used compressor (C was used if arguments were passed to B or B). =item * Fixed a bug in B and B which prevented useful error messages to be seen. Also add the B<-x> flag to B in order to insert Xref: headers in articles which lack one. =item * If compiling with S, use its ndbm compatibility layer for B in preference to searching for a traditional dbm library. INN also supports S, 4.5 and 4.6 thanks to Marco d'Itri. =item * B now properly closes stdin/out/err when it becomes a daemon. The issue was reported by Viktor Pilpenok and fixed by Marco d'Itri. =item * Added support for Diablo quickhash and hashfeed algorithms. It allows to distribute the messages among several peers (new B flag for F). Thanks to Miquel van Smoorenburg for this implementation in INN. =item * B now listen on separate sockets for IPv4 and IPv6 connections if the IPV6_V6ONLY socket option is available. There might also be operating systems that still have separate IPv4 and IPv6 TCP implementations, and advanced features like TCP SACK might not be available on v6 sockets. Thanks to Miquel van Smoorenburg for this patch. =item * The two configuration options I and I can now be set on a per-peer basis for B. Setting I to C tells B to never attempt an IPv6 connection to that host. Thanks to Miquel van Smoorenburg for this patch. =item * Added a I parameter to F (modeled on the concept of I) to permit passing of command line arguments to instances of B spawned from B. =item * A new F parameter called I has been added: it allows to append a common name to the Path: header on all incoming articles. I and I (if set) are still appended to the path as usual, but I is always appended as the last element (e.g. on the leftmost side of the Path: header). Thanks to Miquel van Smoorenburg for this feature. =item * B has been rewritten to use C. Indeed, F is no longer shipped with S and the script did not work. =item * B will now check for a timeout and re-open the socket if required. Additionally, B will switch to cancel_ctlinnd in case cancel_nntp fails after sending the Message-ID. Thanks to Christoph Biedl for the patch. A more detailed documentation has also been written for perl-nocem(8). =item * The RADIUS configuration is now wrapped in a C block in F. =item * Checkgroups when there is nothing to change no longer result in sending a blank mail to administrators. Besides, no mail is sent by B for the creation of a newsgroup when the action is C. =item * Checkgroups are now properly propagated even though the news server does not carry the groups they are posted to. =item * B and B now handle wire format messages so that articles from the spool can be directly fed to them. =item * Newgroup control messages for existing groups now change their description. If a mail is sent to administrators, it reminds them to update their F file. It also warns when there are missing or obsolete descriptions. Furthermore, the F file is now written prettier (from one to three tabulations between the name of the group and its short description) and to.* groups cannot be created. =item * The sample F file has been extensively updated. =item * Fixed empty LISTGROUP replies which were not terminated. Thanks to David Canzi for the patch. =item * In response to a LIST [file] command, if the file does not exist, we assume it is not maintained and return C<503> instead of C<215> and an empty file. Moreover, capability to LIST ACTIVE.TIMES for a wildmat pattern as its third argument has been added in order to select wanted newsgroups. =item * B now tries to authenticate if it does not receive a C<200> return code after MODE READER. Indeed, it might be able to post even with a C<201> return code and also with another codes like C<440> or C<480>. =item * If creating a new F file, set the ownership and mode appropriately. B also expects fewer things to be private to the news user. Most of the configuration files will never contain private information like passwords. =item * Other minor bug fixes and documentation improvements. =back =head1 Changes in 2.4.3 =over 2 =item * Previous versions of INN had an optimization for handling XHDR Newsgroups that used the Xref: header from overview. While this does make the command much faster, it doesn't produce accurate results and breaks the NNTP protocol, so this optimization has been removed. =item * Fixed a bug in B that allowed it to accept articles with duplicated headers if the header occurred an odd number of times. Modified the programs for rebuilding overview to use the last Xref: header if there are multiple ones to avoid problems with spools that contain such invalid articles. =item * Fixed yet another problem with verifying that a user has permissions to approve posts to a moderated group. Thanks, Jens Schlegel. =item * Increase the send and receive buffer on the Unix domain socket used by B. This should allow longer replies (particularly for B) on platforms with very low default Unix domain socket buffer sizes. =item * B's handling of articles with nul characters, NNTP errors, header problems, and deferrals has been significantly improved. =item * Thomas Parmelan added support to B for specifying the funnel or exploder site to flush for feeds managed through one and fixed a problem with picking up old stranded work files. =item * Many other more minor bug fixes, optimization improvements, and documentation fixes. =back =head1 Changes in 2.4.2 =over 2 =item * INN is now licensed under a less restrictive license (about as minimally restrictive as possible shy of public domain), and the clause similar to the old BSD advertising clause has been dropped. =item * C and C now always install the newly built binaries, rather than only installing them if the modification times are newer. This is the behavior that people expect. C now also automatically builds a new (empty) history database if one doesn't already exist. =item * The embedded Tcl filter code has been disabled (and will be removed entirely in the next major release of INN). It hasn't worked for some time and causes B crashes if compiled in (even if not used). If someone wants to step forward and maintain it, I recommend starting from scratch and emulating the Perl and Python filters. =item * B should now successfully handle messages from INN up to the maximum allowable packet size in the protocol, fixing problems sites with many active peers were having with B output. =item * Overview generation has been fixed in both B and B to follow the rules in the latest NNTP draft rather than just replacing special characters with spaces. This means that the unfolding of folded header lines will not introduce additional, incorrect whitespace in the overview data. =item * B now uniformly responds with a C<480> or C<502> status code to attempts to read a newsgroup to which the user does not have access, depending on whether the user has authenticated. Previously, it returned a C<411> status code, claiming the group didn't exist, which confuses the reactive authentication capability of news readers. =item * If a user is not authorized to approve articles (using the C I control in F), articles that include Approved: headers will be rejected even if posted to unmoderated groups. Some other site may consider that group to be moderated. =item * The configuration parser used for F and others now correctly handles C<#> inside quoted strings and is more robust against unmatched double quotes. =item * Messages mailed to moderators had two spaces after the colons in the headers, rather than one. This bug has been fixed. =item * A bug that could cause heap corruption and random crashes in B if INN were compiled with Python support has been fixed. =item * Some problems with B's tracking of article size and enforcement of the configured maximum article size have been fixed. =item * B will now correctly verify signatures generated by GnuPG and better supports GnuPG as the PGP implementation. =item * INN's code should now be more 64-bit clean in its handling of size_t, pointer differences, and casting of pointers, correcting problems that showed up on 64-bit platforms like AMD64. =item * Improved the error reporting in the history database code, in B, in B, and in B. =item * Many other, more minor bugs have also been fixed. =back =head1 Changes in 2.4.1 =over 2 =item * SECURITY: Handle the special filing of control messages into per-type newsgroups more robustly. This closes a potentially exploitable buffer overflow. Thanks to Dan Riley for his excellent bug report. =item * Fixed article handling in B so that articles without a Path: header (arising from peers sending malformatted articles or injecting malformatted articles through rnews) would not cause B to crash. (This was not exploitable.) =item * Fixed a serious bug in XPAT handling, thanks to Tommy van Leeuwen. =item * C now looks for B only in F and F, not on the user's path. This should reduce the need for B<--with-sendmail> if your preferred sendmail is in a standard location. =item * The robustness of the tradindexed overview method has been further increased, handling more edge cases arising from corrupted databases and oddly-named newsgroups. =item * B now never decreases the high water mark of a newsgroup when renumbering, which should help ameliorate overview and F file synchronization problems. =item * Do not close and reopen the F file on B reload when the server is paused or throttled. This was breaking B reload all during a server pause. =item * Various minor portability and compilation issues fixed. Substantial numbers of compiler warnings have been cleaned up, thanks largely to work by Ilya Kovalenko. =item * Multiple other more minor bugs have been fixed. =item * Documentation and man pages have been clarified and updated. =back =head1 Upgrading from 2.3 to 2.4 The F parser has changed between S and 2.4. Due to that change, options in F that contain whitespace or a few other special characters must be quoted with double quotes, and empty parameters (parameters with no value) are not allowed. S comes with a script, B, run automatically during C, that will attempt to fix any problems that it finds with your F file, saving the original as F. This change is the beginning of standardization of parsing and syntax across all of INN's configuration files. The history subsystem now has a standard API that allows other backends to be used. Because of this, you now need to specify the history method in F. Adding: hismethod: hisv6 will tell INN to use the same history backend as was used in previous versions. B should take care of this for you. ovdb is known to have some locking and timing issues related to how B shuts down (or fails to shut down) the overview databases. If you have stability problems with ovdb, try setting I to C in F. This will funnel all ovdb reads through a single process with a cleaner interface to the underlying S database. If you use Perl authentication for B (if I in F is C), there have been major changes. See "Changes to Perl Authentication Support for nnrpd" in F for details. Similarly, if you use Python authentication for B (if I in F is C), there have been major changes. See "Changes to Python Authentication and Access Control Support for nnrpd" in F for details. If you use B, it has been completely rewritten and now takes a configuration file to specify its behavior. See its man page for more information. If you use B, it is no longer included in INN since the new B can handle all of the same functionality. The wildmat API has been renamed (to uwildmat and friends; see uwildmat(3) for the interfaces) to distinguish it from Rich $alz's original version, since it now supports UTF-8. This may require changes in other software packages that link against INN's libraries. If you are upgrading from a version prior to S, see L. =head1 Changes in 2.4.0 =over 2 =item * IPv6 support has been added, disabled by default. If you have IPv6 connectivity, build with B<--enable-ipv6> to try it. There are no known bugs, but please report any problems you find (or even successes, if you use an unusual platform). There are a few changes of interest; further information is available in F. =item * The tradindexed overview method has been completely rewritten and should be considerably more robust in the face of system crashes. A new utility, B, is provided to examine the contents of the overview database, repair inconsistencies, and rebuild the overview for particular groups from a tradspool news spool. See tdx-util(8) for more details. =item * The Perl and Python authentication hooks for readers have been extensively overhauled and integrated better with F. See the Changes sections in F and F for more details. =item * B now optionally supports article injection via IHAVE, see readers.conf(5). Any articles injected this way must have Date, From, Message-ID, Newsgroups, Path, and Subject headers. X-Trace and X-Complaints-To headers will be added if the appropriate options are set in F, but other headers will not be modified/inserted (e.g. NNTP-Posting-Host, NNTP-Posting-Date, Organization, Lines, Cc, Bcc, and To headers). =item * B now handles arbitrarily long lines in POST and IHAVE; administrators who want to limit the length of lines in locally posted articles will need to add this to their local filters instead. =item * B no longer handles the poorly-specified S optional fourth argument to the NEWGROUPS command specifying the "distributions" that the command was supposed to apply to. Clients that use that argument will break. There are not believed to be any such clients, and it's easy enough to just filter the returned list of newsgroups (which is generally fairly short) to achieve the same results. =item * B no longer accepts UTC as a synonym for GMT for NEWGROUPS or NEWNEWS. This usage was never portable, and was rejected by the NNTP working group. It is being removed now in the hope that it will be caught before anyone starts to rely on it. =item * B supports a new peer parameter, I, that if set to C feeds any backlog to a peer before new articles, see innfeed.conf(5). When used in combination with I set to C<1>, this can be used to enforce in-order delivery of messages to a peer that is doing Xref slaving, avoiding cases where a higher-numbered message is received before a lower-numbered message in the same group. =item * Several other, more minor protocol issues have been fixed: connections rejected due to the connection rate limiting in B receive C<400> replies instead of C<504> or C<505>, and ARTICLE without an argument will always either retrieve the current article or return a C<423> error, never advance the current article number to the next valid article. See F for all of the known issues with INN's compliance with the current NNTP draft. =item * All accesses to the F file for all parts of INN now go through a generic API like the storage and overview subsystems do. This will eventually allow new history implementations to be dropped in without affecting the rest of INN, and will significantly improve the encapsulation of the history subsystem. See the libinnhist(3) man page for the details of the interface. =item * INN now uses a new parser for the F file. This means that parameters containing whitespace or other special characters must now be quoted; see inn.conf(5). It fixes the long-standing bug that certain values must be included in F even if using the defaults for the use of shell or Perl scripts, and it will serve as the basis for standardizing and cleaning up the configuration file parsing in other parts of INN. B is run during C and should convert an existing F file for you. =item * B has been replaced by a completely rewritten version from Marco d'Itri, Edvard Tuinder, and Miquel van Smoorenburg, which uses a configuration file that specifies batch sizes, compression methods, and hours during which batches should be generated. The old B script has been retired, since B can now handle everything that it did. =item * Two C options have changed names: B<--with-tmp-path> is now B<--with-tmp-dir>, and B<--with-largefiles> is now B<--enable-largefiles>, to improve consistency and better match the C option guidelines. =item * Variables can now be used in the F file to make it easier to specify many similar feeds or feed patterns. See the newsfeeds(5) man page for details. =item * Local connections to INN support a new special mode, MODE CANCEL, that allows efficient batch cancellation of messages. This is intended to be the preferred interface for external spam and abuse filters like NoCeM. See "CANCEL FEEDS" in innd(8) for details. =item * Two new options, I and I, have been added to F to aid in building NFS based shared reader/writer platforms. On the writer server configure I to C and on all of the readers configure I to C; these options add calls to force data out to the NFS server and force it to be read directly from the NFS server at the appropriate moments. Note that it has only been tested on S, using CNFS as the storage mechanism and tradindexed as the overview method. =item * A new option, I, has been added to F. If set to C (the default), then the tradindexed overview method will use mmap() to access its overview data (in 2.3 you couldn't control this; it always used mmap). =item * Thanks to code contributed by CMU, B can now feed an IMAP server as well as other NNTP servers. See the man page for innfeed(8) for more information. =item * An authenticator, B, that checks a username and password against a remote Samba server is now included. See auth_smb(8) for details. =item * The wildmat functions in INN now support UTF-8, in a way that should allow them to still work with most simple 8-bit character sets in widespread use. As part of this change, some additional wildmat interfaces are now available and the names have changed (to uwildmat, where C is for Unicode). See uwildmat(3) for the details. =item * The interface between external authenticators and B is now properly documented, in F. A library implementing this interface in C is provided, which should make it easier to write additional authenticators resolvers. See libauth(3) for details, and any of the existing programs in F for examples. =item * Most (if not all) of the temporary file creation in INN now uses functions that create temporary files properly and safely. =back =head1 Changes in 2.3.5 =over 2 =item * Clients using POST are no longer permitted to provide an Injector-Info: header. =item * Fixed a bug causing posts with Followup-To: set to a moderated group to be rejected if the posting user didn't have permission to approve postings. =item * Fixed bugs in B with setuid rnews or setgid inews, in I with F parameters containing shell metacharacters but no spaces, and in F with some versions of B. Fixed a variety of size-related printf format warnings (e.g., C<%d> vs. C<%ld>) thanks to the work of Winfried Szukalski. =back =head1 Changes in 2.3.4 =over 2 =item * LIST ACTIVE no longer returns data when given a single group argument if the client is not authorized to read that group. =item * XHDR and XPAT weren't correctly parsing article headers, resulting in searches for the header "newsgroup" matching the header "newsgroups". =item * Made CNFS more robust against crashes by actually syncing the cycbuff headers to disk as was originally intended. Fixed a memory leak in the tradspool code. =item * Two bugs in B when using GnuPG were fixed: it now correctly checks for B (rather than B) when told to use GnuPG and expects the keyring to be F (not F). =item * Substantial updates to the sample provided F file. =item * Compilation fixes with S, S, current versions of Linux (including with large file support), and Tru64. B fixes for ReiserFS. =item * Various bugs in the header handling in B have been fixed, including hangs when using virtual domains and improper processing of folded headers under certain circumstances. =item * Other minor bug fixes and documentation improvements. =back =head1 Changes in 2.3.3 =over 2 =item * B now supports using GnuPG to check signatures (rather than PGP) without the B wrapper. GnuPG can check both old-style RSA signatures and new OpenPGP signatures and is recommended over S. If you have GnuPG installed, B will use it rather than PGP, which means that you may have to create a new key ring for GnuPG to use to verify signatures if you were previously using PGP. =item * Users can no longer post articles containing Approved: headers to moderated groups by default; they must be specifically given that permission with the I parameter in F. See the man page for more details. =item * Two bugs in repacking overview index files and a reliability bug with writing overview data were all fixed in the tradindexed overview method, hopefully making it somewhat more reliable, particularly for B. =item * If F exists in the INN binary directory, it will be run with the start or stop argument whenever B is run. This is available as a hook for local startup and shutdown code. =item * The default history table hash sizes were increased because a too-small value can cause serious performance problems (whereas a too-large hash just wastes a bit of disk space). =item * The sample F file has been extensively updated. =item * Wildmat exclusions (C<@> and C) should now work properly in F newsgroup patterns. =item * The implementation of the B<-w> flag for B was fixed; previously, the value given to B<-w> to change B's notion of the current time was scaled by too much. =item * Various other more minor bug fixes, standards compliance fixes, and documentation improvements. =back =head1 Changes in 2.3.2 =over 2 =item * B can again handle regular filenames as input as well as storage API tokens (allowing it to be used to import an old traditional spool). =item * Several problems with tagged-hash history files have been fixed thanks to the debugging efforts of Andrew Gierth and Sang-yong Suh. =item * A very long-standing (since S!) NNTP protocol bug in B was fixed. The response to an ARTICLE command retrieving a message by Message-ID should have the Message-ID as the third word of the response, not the fourth. Fixing this is reported to I cause problems with some Netscape browsers, but other news servers correctly follow the protocol. =item * Some serious performance problems with expiration of tradspool should now be at least somewhat alleviated. tradspool and timehash now know how to output file names for removal rather than tokens, and B's ability to remove regular files has been restored. This should bring expiration times for tradspool back to within a factor of two of pre-storage-API expiration times. =item * Added a sample F file and documentation for it and B. =back =head1 Changes in 2.3.1 =over 2 =item * B no longer downloads the F file, no longer tries to send postings to moderated groups to the moderator directly, and in general duplicates less of the functionality of B, instead letting B handle it. This fixes the problem of B not working properly for users other than news without being setgid. =item * Added a man page for B. =item * A serious bug in the embedded Perl authentication hooks was fixed, thanks to Jan Rychter. =item * The annoying compilation problem with embedded Perl filtering on Linux systems without libgdbm installed should be fixed. =item * INN now complains loudly at C time if the configured path for temporary files is world-writeable, since this configuration can be a security hole. =item * Many other varied bug fixes and documentation fixes of all sorts. =back =head1 Upgrading from 2.2 to 2.3 There may be additional things to watch out for not listed here; if you run across any, please let know about them. Simply doing a C is not sufficient to upgrade; the history and overview information will also have to be regenerated, since the formats of both files have changed between 2.2 and 2.3. Regardless of whether you were using the storage API or traditional spool under 2.2, you'll need to rebuild your overview and history files. You will also need to add a F file, if you weren't using the storage API under S. A good default F file for 2.2 users would be: method tradspool { newsgroups: * class: 0 } Create this F file before rebuilding history or overview. If you want to allow readers, or if you want to expire based on newsgroup name, you need to tell INN to generate overview data and pick an overview method by setting I in F. See F and inn.conf(5) for more details. The code that generates the dbz index files has been split into a separate program, B. B still generates the base F file and the overview information, but some of its options have been changed. To rebuild the history and overview files, use something like: makehistory -b -f history.n -O -T /usr/local/news/tmp -l 600000 (change the F path to some directory that has plenty of temporary space, and leave off B<-O> if you're running a transit-only server and don't intend to expire based on group name, and therefore don't need overview.) Or if your overview is buffindexed, use: makehistory -b -f history.n -O -F Both will generate a new history file as F and rebuild overview at the same time. If you want to preseve a record of expired Message-IDs in the history file, run: awk 'NF==2 { print; }' < history >> history.n to append them to the new history file you created above. Look over the new history file and make sure it looks right, then generate the new index files and move them into place: makedbz -s `wc -l < history.n` -f history.n mv history.n history mv history.n.dir history.dir mv history.n.hash history.hash mv history.n.index history.index (Rather than F<.hash> and F<.index> files, you may have a F<.pag> file if you're using tagged hash.) For reader machines, F has been replaced by F. There currently isn't a program to convert between the old format and the new format (if you'd like to contribute one, it would be welcomed gratefully). The new file is unfortunately considerably more complex as a result of its new capabilities; please carefully read the example F provided and the man page when setting up your initial configuration. The provided commented-out examples cover the most common installation (IP-based authentication for all machines on the local network). INN makes extensive use of mmap(2) for the new overview mechanisms, so at the present time NFS-mounting the spool and overview on multiple reader machines from one central server probably isn't feasible in this version. mmap tends to interact poorly with NFS (at the least, NFS clients won't see updates to the mapped files in situations where they should). (The preferred way to fix this would, rather than backing out the use of mmap or making it optional, to add support for Diablo-style header feeds and pull-on-demand of articles from a master server.) The flags for B have changed, plus you probably don't want to run B at all any more. Letting B write overview data itself results in somewhat slower performance, but is more reliable and has a better failure mode under high loads. Writing overview data directly is the default, so in a normal upgrade from 2.2 to 2.3 you'll want to comment out or remove your B entry in F and set I to C in F. B is no longer installed, and no longer works (even with traditional spool). If you have an entry for B in F, remove it. If you're importing a traditional spool from a pre-storage API INN server, it's strongly recommended that you use NNTP to feed the articles to your new server rather than trying to build overview and history directly from the old spool. It's more reliable and ensures that everything gets put into the right place. The easiest way to do this is to generate, on your old server, a list of all of your existing article files and then feed that list to B. Further details can be found in the FAQ at L. If you are using a version of Cleanfeed that still has a line in it like: $lines = $hdr{'__BODY__'} =~ tr/\n/\n/; you will need to change this line to: $lines = $hdr{'__LINES__'}; to work with S or later. This is due to an internal optimization of the interface to embedded filters that's new in S. =head1 Changes in 2.3.0 =over 2 =item * New F file (replaces F) which allows more flexible specification of access restrictions. Included in the sample implementations is a RADIUS-based authenticator. =item * Unified overview has been replaced with an overview API, and there are now three separate overview implementations to choose from. One (tradindexed) is very like traditional overview but uses an additional index file. The second (buffindexed) uses large buffers rather than separate files for each group and can handle a higher incoming article rate while still being fast for readers. The third (ovdb) uses S to store overview information (so you need to have S installed to use it). The I key in F chooses the overview method to use. Note that ovdb has not been as widely tested as the other overview mechanisms and should be considered experimental. =item * All article storage and retrieval is now done via the storage API. Traditional spool is now available as a storage type under the storage API. (Note that the current traditional spool implementation causes nightly expire to be extremely slow for a large number of articles, so it's not recommended that you use the tradspool storage method for the majority of a large spool.) =item * The timecaf storage method has been added, similar to timehash but storing multiple articles in a single file. See F for details on it. =item * INN now supports embedded Python filters as well as Perl and Tcl filters, and supports Python authentication hooks. =item * There is preliminary support for news reading over SSL, using OpenSSL. =item * To simplify anti-abuse filtering, and to be more compliant with news standards and proposed standards, INN now treats as control messages only articles containing a Control: header. A Subject: line beginning with C is no longer sufficient for a message to be considered a control message, and the Also-Control: header is no longer supported. =item * The INN build system no longer uses subst. (This will be transparent to most users; it's an improvement and modernization of how INN is configured.) =item * The build and installation system has been substantially overhauled. C now updates scripts as well as binaries and documentation, there is better support for parallel builds (C), there is less C recursion, and far more of the system-dependent configuration is handled directly by C. libtool build support (including shared library support) should be better than previous releases. =back =head1 Changes in 2.2.3 =over 2 =item * B is not installed setgid news and B is not installed setuid root by default any more. If you need the old permissions, you have to give a flag to configure. See F for more details. =item * Fixed a security hole when I was enabled in F (not the default). =item * Message-IDs are now limited to 250 octets to prevent interoperability problems with other servers. =item * Embedded Perl filters now work with S. =item * Lots of bug fixes and changes for security paranoia. =back =head1 Changes in 2.2.2 =over 2 =item * Various minor bug fixes and a Y2K bug fix. The Y2K bug is in version version 2.2.1 only and will show up after S, 2000 when a news reader issues a NEWNEWS command for a date prior to the year 2000. =back =head1 Changes in 2.2.1 =over 2 =item * Various bug fixes, mostly notably fixes for potential buffer overflow security vulnerabilities. =back =head1 Changes in 2.2.0 =over 2 =item * New F file (replaces F). =item * New (optional) way of handling non-cancel control messages (B) that serializes them and prevents server overload from control message storms. =item * Support for B to fetch F file with B; configured by default to use L if you run B. Be sure to read the manual page for B to configure an F file for your site, and test B if you do not C with B or B. Also see L. =item * Some options to C are now moved to F (I and I, without the hyphen). =item * B, a portable version of df(1), is supplied. =item * New B program to show stats of CNFS buffers. =item * B and B programs for gatewaying news to mail and mail to news are supplied. =item * B program for doing a sucking feed is provided (not meant for large feeds). =item * The B script is obsolete (and lives in the F directory, for now). =back =cut