diff -ruN inn-2.4.1/CONTRIBUTORS inn-2.4.2/CONTRIBUTORS --- inn-2.4.1/CONTRIBUTORS Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/CONTRIBUTORS Wed Dec 22 04:21:19 2004 @@ -256,4 +256,5 @@ Andreas Lamrecht, Duane Currie, Ian Dickinson, Bettina Fink, Jochen Erwied, Rebecca Ore, Felicia Neff, Antonio Querubin, Bear Giles, Christopher P. Lindsey, Winfried Szukalski, Edvard Tuinder, -Frank McConnell, Ilya Kovalenko +Frank McConnell, Ilya Kovalenko, Steve Youngs, Jacek Konieczny, +Ilya Voronin, Sergey Babitch, WATANABE Katsuhiro diff -ruN inn-2.4.1/ChangeLog inn-2.4.2/ChangeLog --- inn-2.4.1/ChangeLog Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/ChangeLog Wed Dec 22 04:21:19 2004 @@ -1,547 +1,1004 @@ -2004-01-07 22:25 rra +2004-12-22 04:20 rra - * innd/art.c: Don't use a static buffer for creating the control - message group to check whether we can store a control message in a - per-type newsgroup. + * samples/actsync.cfg: The active file is now gzipped, not + compressed. -2004-01-07 03:52 rra +2004-12-22 04:20 rra - * samples/control.ctl: Add it-alt.*. + * samples/actsync.ign: Fix the Big Eight listing (humanities.*, not + gnu.*). -2004-01-05 21:40 rra +2004-12-20 03:33 rra - * storage/tradindexed/tdx-group.c: msync_page is called mapcntl in - STABLE. + * storage/cnfs/cnfs.c: Reorder code a little so that the message + about a cycbuff rolling over contains the right new cycbuff. + Reported by Christoph Biedl. -2004-01-02 00:43 rra +2004-12-20 03:26 rra - * storage/tradindexed/tdx-group.c: Make robust against references - to index entries outside of the current length of the group index - when auditing and when doing normal operations. + * MANIFEST, doc/man/inews.1, doc/pod/Makefile, doc/pod/inews.pod: + Convert the inews documentation to POD and significantly update + it, taking out more documentation of things that it no longer + does and including more complete documentation of the checks that + it performs. -2004-01-02 00:24 rra +2004-12-20 03:19 rra - * storage/tradindexed/tdx-group.c: Improve the auditing a little. - Don't get caught in infinite loops when not fixing when circular - structure is encountered. Update group flags based on the active - file as well, treating the active file as canonical. Create index - entries for any groups listed in the active file that aren't found - in the overview database, even though innd does this on startup - anyway. + * doc/pod/inews.pod: Convert the inews documentation to POD and + significantly update it, taking out more documentation of things + that it no longer does and including more complete documentation + of the checks that it performs. -2004-01-01 22:54 rra +2004-12-20 01:43 hkehoe - * control/controlchan.in: Force the Unix syslog socket for Mac OS - X, since otherwise the lack of an IP address in /etc/hosts was - causing difficulties. + * configure, configure.in, frontends/ovdb_stat.c, + storage/ovdb/ovdb.c: Add support for BerkeleyDB 4.3 -2003-12-30 19:55 rra +2004-12-19 22:15 rra - * frontends/rnews.c: Provide better error messages after an - unexpected EOF from innd. + * frontends/inews.c: Use die, not sysdie, if the response from the + server isn't what we expect, since errno isn't going to contain + anything useful. -2003-12-29 05:02 rra +2004-12-19 21:49 rra - * innd/cc.c: Don't close and reopen the history database during - reload if the server isn't running, since the history database is - closed with pause or throttle and reopened with go. + * innfeed/startinnfeed.c: Don't unlimit the stack size. This + really shouldn't be needed, and it causes bizarre things to + happen on some versions of Linux. -2003-12-27 06:25 rra +2004-12-19 21:47 rra - * MANIFEST, doc/man/motd.news.5, doc/pod/Makefile, - doc/pod/motd.news.pod: Rewrite motd.news.5 in POD. + * backends/news2mail.in: Use news as the sender, not , as the + latter is a sendmailism that sendmail doesn't even need. -2003-12-27 06:20 rra +2004-12-19 21:40 rra - * doc/pod/motd.news.pod: Rewrite motd.news.5 in POD. + * doc/man/ctlinnd.8: Document the restriction on the use of + changegroup. -2003-12-27 06:15 rra +2004-12-19 21:36 rra - * doc/man/send-nntp.8: Don't try to document both send-nntp and - send-ihave on the same line; instead, break them into two different - lines in the SYNOPSIS. Requested by Eric Raymond. + * frontends/cnfsstat.in, scripts/innreport_inn.pm: Report CNFS + buffer length as a floating point number instead of an integer + number of megabytes, and adjust innreport to cope. -2003-12-27 04:18 rra +2004-12-19 21:27 rra - * samples/storage.conf: Replace with a sample file that does - something sensible by default (stores all articles in tradspool). + * scripts/rc.news.in: Close stdout when scheduling innwatch and + cnfsstat to run in the future, since otherwise some shells will + sit around and wait for sleep to finish. Reported by Felix Klee. -2003-12-27 04:17 rra +2004-12-19 20:55 rra - * scripts/rc.news.in: Make sure there's always a newline after the - shutdown message for INN, even if it exits quickly. + * doc/man/dbz.3: man pages should have only one NAME line. + Reported by Eric Raymond. + +2004-12-19 20:49 rra + + * doc/: pod/nnrpd.pod, man/nnrpd.8: Add documentation of how to run + nnrpd with SSL support. + +2004-12-19 19:54 rra + + * doc/: man/nnrpd.8, pod/nnrpd.pod: Add some missing =back + commands. + +2004-12-19 19:50 rra + + * Makefile: Put the key into a different file than the certificate + in make cert. + +2004-12-19 19:49 rra + + * samples/sasl.conf.in: Put the key into a separate file from the + certificate. + +2004-12-19 19:48 rra + + * doc/: man/sasl.conf.5, pod/sasl.conf.pod: Improve the + installation instructions to put the key into a separate file and + to set the permissions on it correctly. + +2004-12-19 19:41 rra + + * doc/: man/tdx-util.8, pod/tdx-util.pod: The documentation for -i + and -g was reversed relative to what the program actually did. + Reported by WATANABE Katsuhiro. + +2004-12-19 19:37 rra + + * MANIFEST, doc/man/grephistory.1, doc/pod/Makefile, + doc/pod/grephistory.pod: Convert the grephistory man page to POD + and clean up some historic references to article file names. + Update the exact string that grephistory prints when it can't + find an article. + +2004-12-19 08:57 rra + + * doc/pod/grephistory.pod: Convert the grephistory man page to POD + and clean up some historic references to article file names. + Update the exact string that grephistory prints when it can't + find an article. + +2004-12-19 08:33 rra + + * expire/grephistory.c: Exit with an error status if the message ID + wasn't found, for consistency with the man page and previous + versions. + +2004-12-19 08:24 rra + + * CONTRIBUTORS: Add WATANABE Katsuhiro. + +2004-12-19 08:21 rra + + * expire/makehistory.c: Don't add an extra Xref: to the overview + information when cobbling together an Xref header for an article + that doesn't already have one, based on a bug report by WATANABE + Katsuhiro. Also fix a bug that caused makehistory to skip + processing any articles without Xref headers for which SMprobe to + determine the newsgroup name and article number succeeded. + +2004-12-19 08:19 rra + + * storage/tradspool/tradspool.c: When returning the newsgroup name + in response to SMprobe, replace slashes with periods. + +2004-12-19 04:39 rra + + * storage/tradspool/tradspool.c: In tradspool_cancel, free xrefs if + the Xref header were present but contained no groups to plug a + minor memory leak. Reported by WATANABE Katsuhiro. + +2004-11-29 00:31 rra + + * samples/control.ctl: Add pgsql.*. + +2004-11-16 02:12 rra + + * samples/control.ctl: Add a URL for dfw.*. + +2004-11-10 04:45 rra + + * README, doc/pod/readme.pod: More minor wording changes requested + by ISC folks. + +2004-11-10 03:33 rra + + * doc/pod/readme.pod, README: Update the ISC's activities. + +2004-10-14 01:51 rra + + * NEWS, doc/pod/news.pod: Add documentation of the change to the + status codes for the GROUP command. + +2004-10-14 01:49 rra + + * nnrpd/group.c: We had previously returned 411 (group doesn't + exist) if the user didn't have permission to read the group for + all cases other than Python dynamic authentication (where we + returned 502 for permission denied). I can sort of understand + the dubious security mindset behind this choice, but at least + when the user isn't already authenticated, this breaks reactive + authentication. + + Instead, if the user is not authenticated, return 480, and if the + user is authenticated, return 502. This means that a user can + determine that a group exists by probing for it and seeing if + they get 411 or 502, but the protocol is cleaner. + +2004-10-12 21:27 rra + + * samples/control.ctl: Update admin group for x-privat.*. + +2004-10-01 06:42 rra + + * support/: config.guess, config.sub: Update to upstream versions + from 2004-06-24. + +2004-10-01 06:41 rra + + * HACKING, doc/pod/hacking.pod: Note that new versions of + config.guess, config.sub, and the libtool files can now just be + checked in without any special CVS commands, since we no longer + have local modifications that we need to preserve. + +2004-10-01 06:19 rra + + * doc/: man/nnrpd.8, pod/nnrpd.pod: Document that nnrpd creates a + PID file when run in daemon mode (-D). + +2004-10-01 06:08 rra + + * innfeed/connection.c: Be consistent and allow for all responses + to IHAVE or TAKETHIS to be sent before we're done sending the + article except for successful responses. + +2004-10-01 05:52 rra + + * contrib/respool.c, expire/makehistory.c: The argument to SMsetup + for SM_RDWR and SM_PREOPEN must be a bool *, not an int *. This + makes a difference with some versions of GCC on some platforms. + +2004-10-01 05:32 rra + + * scripts/innstat.in: Use sed 1d instead of tail +2 since the + latter isn't POSIX. Reported by Chris Caputo. + +2004-10-01 05:30 rra + + * doc/man/incoming.conf.5: Warn that identd callbacks currently + don't implement any timeout. + +2004-10-01 05:10 rra + + * innd/innd.c: Only open the history file during initial startup if + the server wasn't throttled on the command line. Reported by + John Wehle. + +2004-10-01 04:59 rra + + * scripts/innreport_inn.pm: Match either nnrpd or nnrpd-ssl when + finding nnrpd log lines. Patch from Marco d'Itri. + +2004-10-01 04:57 rra + + * nnrpd/list.c: Advertise AUTHINFO USER if the user hasn't already + authenticated. + +2004-09-27 01:59 rra + + * nnrpd/tls.c: Include sasl_config.h to get a prototype for the + config function, fixing a bug on 64-bit platforms. + +2004-08-25 02:54 rra + + * samples/innreport.conf.in: Fix an inconsistency between the + commented-out html_dir and the commented-out title line. (Debian + bug #255324.) + +2004-07-20 18:56 hkehoe + + * site/Makefile: Added missing PATH_NNRPACCESS definition + +2004-07-19 15:38 hkehoe + + * frontends/ovdb_server.c: Need to ignore SIGPIPE to prevent + possible process death + +2004-07-16 00:43 rra + + * innd/art.c: The overview copying loop has two indexes; make sure + to advance both of them when unfolding. + +2004-07-15 18:56 rra + + * README, doc/pod/readme.pod: Change more occurrences of Internet + Software Consortium to Internet Systems Consortium. + +2004-07-15 02:26 rra + + * configure, configure.in: Only check for a PAM library if one of + pam/pam_appl.h or security/pam_appl.h is found. IRIX has a PAM + library but no header libraries, meaning that we don't want to + try to link ckpasswd against it. + +2004-07-15 02:16 rra + + * innd/Makefile, nnrpd/Makefile: Shuffle the order of libraries to + put Perl and Python first, then SSL, and then the additional + libraries. Not only does this fix a few problems on platforms + where linking order matters, but it's much less likely that the + path to the Perl library will have some other bum version of + another library than vice versa. -2003-12-11 07:03 rra +2004-07-10 22:53 rra - * samples/control.ctl: Update to current upstream. Picks up new - entries for x-privat.*, syd.*, bne.*, and canb.*. Update melb.*. - Fix the key signature for mensa.*. Include the new microsoft.* - rule that supports signed control messages. + * support/: config.guess, config.sub: Merge with mainline to get + the latest imported versions. -2003-12-10 09:02 rra +2004-06-29 22:43 rra - * nnrpd/misc.c: Glom was using strlcat into newly allocated memory - without making sure that it's a valid empty string to start with. - Problem reported by Tommy van Leeuwen (this broke XPAT). + * CONTRIBUTORS, innfeed/host.c: Fix an error reporting bug when + checking the bounds of real values. Reported by Sergey Babitch. -2003-10-20 01:15 rra +2004-06-29 22:41 rra - * doc/man/ctlinnd.8: Document that renumber does not decrease the - hi-water mark. + * innfeed/main.c: Log the correct new logging level when it is + being increased or decreased. Patch from Sergey Babitch. -2003-10-20 01:12 rra +2004-06-14 14:49 hkehoe - * innd/ng.c: Refuse to ever lower the high-water mark when - renumbering. This should help further with problems caused by - synchronization issues between overview and the active file. + * configure, configure.in: Add BerkeleyDB 4.2 to configure search -2003-10-18 05:56 rra +2004-06-10 22:20 hkehoe - * doc/man/batcher.8: Note that the first argument can also be a - storage API token. Patch from Christian Garbs. + * lib/qio.c: Avoid infinite loop if st_blksize == 0 -2003-10-18 05:49 rra +2004-06-10 22:07 hkehoe - * backends/actsyncd.in: Support the host:port syntax that the - actsync man page says that we support. Patch based on a patch from - Marco d'Itri. + * expire/makehistory.c: Don't exit if a bad overview line is found, + skip over it instead. -2003-10-18 05:28 rra +2004-06-10 22:04 hkehoe - * expire/makehistory.c: Fix makehistory -a by only passing - HIS_CREAT when -a is not given. + * tests/lib/qio-t.c: Make sure that buffer_size is always at least + as large as QIO_BUFFERSIZE but still a multiple of st_blksize. -2003-10-18 04:53 rra +2004-06-10 22:04 hkehoe - * README, doc/pod/readme.pod: Update the suck URL. + * lib/qio.c: Make sure that buffer_size is always at least as large + as QIO_BUFFERSIZE but still a multiple of st_blksize. -2003-10-16 03:22 rra + Change QIO to do something more sane with lines that are too + long. Rather than returning too long of a line once and then + returning a partial line on the next try, consume all of the + too-long line before returning the first error. This way, the + next call will still return the next line of the file. - * frontends/mailpost.in: Don't loop forever on articles with a - header and no body or blank line after the headers. Reported by - Andrea Marrosu. +2004-06-08 21:11 hkehoe -2003-10-16 01:51 rra + * samples/ovdb.conf, doc/man/ovdb.5, doc/pod/ovdb.pod: Update docs + for nocompact option - * Makefile: Install the news certificate mode 600, which is what - nnrpd actually requires. Reported by Sergio Rodriguez de Guzman - Martinez. +2004-06-08 18:54 hkehoe -2003-10-15 00:09 rra + * storage/ovdb/ovdb.c: If a group with a large number of overview + records was deleted or compacted, the database could run out of + locks, causing the deletion to fail. This is because + delete_all_records() was deleting all of the keys in a single + transaction. Additionally, in the event of a failure of this + type, the records that were to be deleted remain in the database + with no way to remove them (short of rebuilding overview). - * authprogs/auth_krb5.c: Don't put a space before the name of the - authenticated user. + This fix restructures the code so that delete_all_records() works + in batches of smaller transactions, so it now works with groups + that have arbitrarily large numbers of records to delete. + Further, code was added to insure that records don't get orphaned + in the event that delete_all_records does fail. -2003-09-15 07:32 rra +2004-06-03 23:58 rra - * nnrpd/post.h: Fix the numbering of HDR__CC and down, which were - off by one. Reported by Ka'roly Lo~rentey. + * innfeed/main.c: Exit 0 when checking the configuration if the + configuration is fine. Patch from Sergey Babitch. -2003-09-15 07:23 rra +2004-06-03 23:52 rra - * README, doc/pod/readme.pod: Remove the note about this version - being the current development version and potentially unstable. + * frontends/rnews.c: Fix the comments from the last patch. It's + not that rnews is setuid root, it's that we want to make sure we + don't write out spool files as root. The normal case is that + either rnews has no special privileges at all (and can only be + executed by people already in the news group), or is setuid news + (in which case we do nothing, since there's no need to change the + real UID to the news user). -2003-09-15 06:57 rra +2004-06-03 23:47 rra - * doc/: man/ovdb.5, pod/ovdb.pod: Insert the information about - putting the database on multiple disks from the FAQ into here - instead, since it's not actually a FAQ and it should be in the - regular documentation. + * frontends/rnews.c: The code for changing users was intended to + handle the case where rnews was setuid news, but we don't ever + install it that way (for reasons that I can't remember at the + moment). Instead, we sometimes install it setuid root. -2003-09-08 04:37 rra + This should be looked at closer in the future, since I think that + setuid news should be sufficient. But in any event, + setuid(geteuid()) is going to do nothing useful at all in a + setuid root program. Instead, if either the real or effective + UIDs are 0, figure out the UID of the news user and setuid to it. + If we're setuid news, don't do anything at all. I believe this + will work in both configurations. - * INSTALL, doc/pod/install.pod: Remove the mention of domain in - inn.conf, since this almost never needs to be set and is confusing. + Based on a problem reported by Matthias Scheler. -2003-09-08 04:36 rra +2004-06-02 20:35 hkehoe - * doc/: man/inn.conf.5, pod/inn.conf.pod: Clarify that - NNTP-Posting-Host can't be obfuscated internally by INN, and - improve the reference to readers.conf for changing the domain in - message IDs. + * storage/ovdb/ovdb.c: Bugfix: delete_old_stuff needs to deal with + groupinfo keys that could contain nulls. This is because of the + way that ovdb_groupadd deals with a deleted (but not yet purged) + group that is re-added (it renames the original groupinfo key to + include a null followed by an integer, in order to hide it). -2003-09-08 04:35 rra +2004-06-02 20:11 hkehoe - * doc/: pod/nnrpd.pod, man/nnrpd.8: Improve the documentation of - when readers.conf and other configuration files are read and update - the reference for AUTHINFO (the protocol section still needs work). + * history/hisv6/hisv6.c: In hisv6_reopen(), if MMAP_NEEDS_MSYNC and + INND_DBZINCORE are set and nfsreader is false, override INCORE_NO + to INCORE_MMAP -2003-09-08 04:31 rra +2004-06-02 20:02 hkehoe - * doc/: man/readers.conf.5, pod/readers.conf.pod: Mention more - information about when readers.conf is re-read, improve the - documentation of virtualhost, and add an example of a public - server. + * lib/dbz.c: Put msync call in putcore for INCORE_MMAP Move + writethrough test from dbzsync to putcore because it only applies + to INCORE_MEM -2003-09-08 02:53 rra +2004-05-27 18:55 rra - * nnrpd/tls.c: Produce better error messages for bad ownership or - permissions on SSL key files. Patch suggested by cira. + * innd/: art.c, innd.h: Track down more unsigned variables. Just + make everything signed for this version of INN. (Wow, I need to + do a better job of backing out of changes.) -2003-09-08 02:41 rra +2004-05-27 18:52 rra - * INSTALL, doc/pod/install.pod: Mention cycbuffupdate in the - section on cycbuff.conf. + * innd/art.c: Switch more variables to a long from a size_t. -2003-09-03 02:58 rra +2004-05-26 22:27 rra - * scripts/innupgrade.in: Allow innupgrade to take a full path to a - file. (Just don't put a period before the temporary file name for - the fixed version; we don't really need to make the temporary file - hide from regular ls, and it's less confusing this way.) Reported - by Marco d'Itri. + * innd/innd.h: The current article parsing code uses Start - 1 as a + marker for various things, and using an unsigned index just isn't + going to work easily. After reviewing the original patch that + made this change, long should work as well as size_t, so use that + for right now. This is fixed properly in CURRENT. -2003-09-03 02:53 rra +2004-05-26 04:34 rra - * backends/news2mail.in: This script uses the three-argument form - of open and therefore requires at least Perl 5.6.0. + * NEWS, doc/pod/news.pod: Flesh out NEWS for the upcoming 2.4.2 + release (which will be as soon as STABLE seems, well, stable). -2003-09-02 06:53 rra +2004-05-26 02:02 rra - * NEWS, doc/pod/news.pod: Add a note to the 2.3 upgrade - instructions talking about creating a storage.conf file for INN 2.2 - users. + * Makefile, site/Makefile: Automatically create an empty history + database on a first-time install. -2003-09-02 05:12 rra +2004-05-26 01:47 rra - * INSTALL, doc/pod/install.pod: Add a mention of - --enable-largefiles in the section on cycbuff.conf. + * nnrpd/post.c: If the user is not allowed to approve messages, + reject postings containing an Approved header even to unmoderated + groups (some other site may consider the group to be moderated). -2003-09-02 05:08 rra +2004-05-24 23:14 rra - * INSTALL, doc/pod/install.pod: Add documentation for - --enable-largefiles. + * frontends/cnfsstat.in: More fixes for arithmetic on numbers that + are larger than the integer size. Patch from Christoph Biedl. -2003-09-02 04:39 rra +2004-05-24 22:41 rra - * configure, configure.in: Simplify the check for sendmail - considerably. Just look for it on PATH or in /usr/sbin or /usr/lib - if not found there, without requiring people to use --with-sendmail - if it's in a standard location. That's the way that pretty much - every other package does it. + * support/install-sh: Don't chown directories that already exist. -2003-08-12 14:59 rra +2004-05-24 00:12 vinocur - * configure.in: Search for the BSD ports location of BerkeleyDB - 4.1. + * innd/art.c: Bugfix from previous changes, supplied by Russ. -2003-08-08 22:08 vinocur +2004-05-23 23:56 vinocur - * doc/pod/Makefile: Add a target for `make clean` + * frontends/cnfsstat.in: Backport from CURRENT to fix integer + division use that caused incorrect output. -2003-08-08 22:02 vinocur +2004-05-20 22:25 rra - * doc/: man/ckpasswd.8, man/readers.conf.5, pod/ckpasswd.pod, - pod/readers.conf.pod: Typo fixes (from Debian bug reports). + * innd/Makefile, innfeed/Makefile: Fix the output when inndstart + and startinnfeed aren't installed setuid root. -2003-07-12 21:50 vinocur +2004-05-20 22:23 rra - * storage/cnfs/cnfs.c: On platforms that lack EOVERFLOW, we can't - special-case for failing due to lack of largefile support. The - fallback of using the system's error string is fine, but the code - needs to compile even if EOVERFLOW is missing. + * storage/: Make.methods, buffindexed/buffindexed.c, + buffindexed/ovmethod.mk: Use BUFF_DEBUG rather than DEBUG for + compiling the standalone buffindexed program, since DEBUG is used + by make warnings. -2003-07-12 21:42 vinocur +2004-05-20 20:55 rra - * backends/news2mail.in: Fix a bug that would send mail to all - addresses not just good ones, courtesy of Geoff Gibbs. + * expire/makehistory.c: Add missing variable declaration. -2003-07-12 19:42 rra +2004-05-18 12:34 rra - * storage/cnfs/cnfs.c: Make MS_ASYNC disappear on platforms that - don't have it. + * innd/art.c: Fix the check for CR without LF, also broken with the + size_t change. -2003-07-12 19:40 rra +2004-05-18 12:06 rra - * innd/art.c: Handle messages with a missing Path header correctly. + * innd/art.c: Fix another signed vs. unsigned problem in the check + for too large of articles and restructure the code this time to + make it readable. -2003-07-12 19:27 rra +2004-05-18 09:25 rra - * MANIFEST: Add bogus newsgroup test data for overview tests. + * doc/compliance-nntp: Fixed overview generation. -2003-07-12 19:27 rra +2004-05-18 09:22 rra - * doc/: man/newsfeeds.5, pod/newsfeeds.pod: Recommend always using - full paths in newsfeeds. + * innd/art.c: Fix the overview generation to correctly unfold + headers and handle special characters per the latest NNTP draft. -2003-07-12 19:26 rra +2004-05-18 09:18 rra - * doc/: man/makehistory.8, pod/makehistory.pod: Make it clearer - that the ovdb processes must be running when rebuilding overview - for ovdb. + * expire/makehistory.c: Don't include the name of an additional + header if it's not found in the article; just leave that field + blank (per the latest NNTP draft). -2003-07-12 19:16 rra +2004-05-18 09:12 rra - * doc/: man/ckpasswd.8, pod/ckpasswd.pod: Add instructions for how - to test. + * expire/makehistory.c: Fix the overview generation to correctly + unfold headers and handle special characters per the latest NNTP + draft. -2003-07-12 19:15 rra +2004-05-18 01:21 rra - * doc/man/: news.daily.8, newslog.5: newslog(8) does not exist. + * HACKING, doc/pod/hacking.pod: Remove the note about the INSTALLED + variable in Makefiles, since we don't use that any more. -2003-07-12 19:14 rra +2004-05-18 01:18 rra - * support/mksystem: Expose the results of the msync probe so that - inn/mmap.h can use them. + * authprogs/Makefile, backends/Makefile, control/Makefile, + expire/Makefile, frontends/Makefile, history/Make.methods, + history/Makefile, history/buildconfig.in, innd/Makefile, + innfeed/Makefile, lib/Makefile, nnrpd/Makefile, scripts/Makefile, + storage/Make.methods, storage/Makefile, storage/buildconfig.in, + storage/tradindexed/ovmethod.mk: Drop the idiosyncratic + installation method that would fail to install programs if the + installed version was newer than the built version in favor of a + make install that works the way that people generally expect and + always installs the new binaries. -2003-07-12 19:14 rra +2004-05-18 01:17 rra - * include/inn/mmap.h: Make the third argument of mapcntl go away if - we're on a platform that doesn't take three arguments to msync. + * Makefile.global.in: Remove the TCL variables, which are no longer + being substituted in by configure. -2003-07-12 19:13 rra +2004-05-17 12:18 rra - * lib/daemonize.c: Don't use TIOCNOTTY if we have setsid(). It was - causing errors on *BSD. + * doc/: external-auth, pod/external-auth.pod: An external + authenticator must, not may, return a username. -2003-07-12 19:12 rra +2004-05-17 12:14 rra - * lib/: qio.c, readin.c: Allow for EINTR when reading. + * storage/ovdb/ovdb.c: Change csend to use xwrite and to print a + warning and return an error on failure rather than calling exit + (calling exit was starting a loop, since csend is called by + ovdb_close, which is called out of an atexit handler). Modify + the other functions to check the return value of csend. This + needs some more attention later, since we're currently returning + errors that may be indistinguishable from missing articles. -2003-07-12 19:12 rra +2004-05-17 09:25 rra - * scripts/rc.news.in: Remove the various PID files for INN - supporting programs on an rc.news stop. + * frontends/mailpost.in: Don't ever take the Date from the "From " + line, since that date will be in ctime format. Don't require + that a Date header be present; nnrpd can provide one. -2003-07-12 19:11 rra +2004-05-17 08:52 rra - * scripts/innupgrade.in: Typo fix in status message. + * lib/inndcomm.c: Always use the maximum buffer size (64KB - 1). + The previous code generally only used a 4KB buffer to receive + replies from the server, which was too small for the output of + ctlinnd name at busy sites. Also fix a lot of coding style + issues and formatting. -2003-07-12 19:11 rra +2004-05-17 08:33 rra - * scripts/innreport.in: Generate valid HTML. Patch from Marco - d'Itri. + * include/inndcomm.h: Make the type of the message length unsigned + short; may as well use every bit that we have. -2003-07-12 19:11 rra +2004-05-17 07:46 rra - * Makefile.global.in, site/Makefile: Add a new installation command - for files that should use the same umask and mode as files written - by the server, and use that for installing the sample active and - newsgroups files and the empty active.times file. + * frontends/pullnews.in: Authenticate after MODE READER, not + before. Reported by Tim Skirvin. -2003-07-12 19:08 rra +2004-05-17 07:25 rra - * HACKING, doc/pod/hacking.pod: Note that only the default CVSup - mode is supported. + * lib/uwildmat.c: Matching the UTF-8 character \303\206 against + *[^\303\206] wasn't working properly. Reported by Andrew Gierth. -2003-07-12 19:07 rra +2004-05-17 06:23 rra - * tests/overview/: tradindexed-t.c, data/bogus: Add additional - tests with newsgroup names that are malformed in various - problematic ways. + * storage/expire.c: Print out the error string from the storage + manager if removing a token during expiration fails. -2003-07-12 19:07 rra +2004-05-17 05:48 rra - * tests/overview/data/bogus: file bogus was initially added on - branch STABLE-2_4. + * doc/: man/active.5, pod/active.pod: Fix an implication that + articles filed in junk are only propagated to sites that receive + junk; they're propagated according to their newsgroups header. -2003-07-12 19:07 rra +2004-05-17 05:26 rra - * storage/tradindexed/tdx-data.c: When building paths, handle - groups that contain multiple consecutive periods or embedded - slashes, just for robustness and to prevent any odd things from - happening. + * control/controlchan.in: Always include the system error message + when opening something fails. -2003-06-21 22:52 rra +2004-05-17 05:11 rra - * samples/control.ctl: Add france.* and update Marco d'Itri's - address. + * doc/man/dbz.3, include/dbz.h, lib/dbz.c: Use warn, syswarn, and + debug in the dbz code instead of its previous idiosyncratic error + reporting with EDOM errno and its internal DEBUG macro. -2003-06-19 22:03 vinocur +2004-05-17 05:09 rra - * storage/cnfs/cnfs.c: Special-case for EOVERFLOW and give an error - message indicating that the problem is probably CNFS buffer > 2 GB - without having compiled in largefile support. + * Makefile.global.in: Enable debugging when building with make + warnings. -2003-06-04 02:59 rra +2004-05-17 04:31 rra - * nnrpd/nnrpd.c: buff is needed for OpenSSL builds. + * control/gpgverify.in: Use the same code for finding the keyring + that pgpverify uses, so that the news administrator can use + ~news/.gnupg if they want. Reported by Toon van der Pas. -2003-05-31 23:28 rra +2004-05-17 04:24 rra - * samples/control.ctl: Update the relcom.* sender to reflect what's - currently used and limit Big Eight checkgroups to just the Big - Eight hierarchies. + * backends/batcher.c: Use fwrite rather than fprintf to output the + article since it handles embedded nuls correctly. -2003-05-31 19:48 rra +2004-05-17 04:06 rra - * backends/actsync.c, expire/convdate.c, expire/makehistory.c, - innd/cc.c, innd/chan.c, innd/site.c, innd/status.c, - innfeed/configfile.y, innfeed/main.c, lib/parsedate.y, - nnrpd/misc.c, nnrpd/newnews.c, nnrpd/nnrpd.c, nnrpd/perm.c, - storage/overdata.c, storage/buffindexed/buffindexed.c, - storage/cnfs/cnfs.c, storage/timehash/timehash.c, - storage/tradindexed/tdx-group.c: Warning patch from Ilya Kovalenko. - Gets rid of all the remaining warnings under -Wall on Solaris (and - hopefully also OpenBSD). Mostly unused variables and format - mismatches. + * INSTALL, configure, configure.in, doc/hook-tcl, + doc/pod/install.pod, include/config.h.in: Remove --with-tcl from + configure, remove the documentation from INSTALL, and comment in + hook-tcl that it has been disabled and will be removed in the + next version of INN. Compiling with Tcl support was causing + random segfaults even if no Tcl filter was defined. -2003-05-31 19:48 rra +2004-05-17 00:41 rra - * authprogs/smbval/rfcnb-util.c: portable/socket.h doesn't include - netdb.h on the 2.4 branch. + * INSTALL, doc/pod/install.pod: Add a note about having to restore + the setuid bit on ckpasswd after a make update if you want that + configuration. -2003-05-31 19:41 rra +2004-05-16 23:41 rra - * storage/ovdb/ovdb.c: Fix compiler warnings, some of which only - show up with BerkeleyDB 2.x. + * nnrpd/post.c: Use the same code for printing header values as is + used everywhere else in nnrpd when mailing articles so as to + correctly handle the spaces after the colons. Patch from Andreas + M. Kirchwitz. -2003-05-31 19:24 rra +2004-05-16 23:05 rra - * authprogs/smbval/: rfcnb-priv.h, rfcnb-util.c, rfcnb.h, - session.c, smbencrypt.c, smblib-priv.h, smblib-util.c, smblib.c, - smblib.h, valid.c: This code is still a mess, but at least it now - compiles under -Wall without warnings. + * doc/: man/radius.conf.5, pod/radius.conf.pod: The parser has been + fixed so that # can now be included in a radius secret. -2003-05-31 19:22 rra +2004-05-16 23:01 rra - * authprogs/auth_krb5.c: Remove unused variable. + * lib/conffile.c: Correctly support # inside quoted strings (not + considering it to be a comment). Fix a bounds checking error + when parsing a configuration file that contains an unmatched + double quote. Be a bit more careful about boundary checking. + Based on analysis by Piotr Klaban. -2003-05-31 18:35 rra +2004-05-16 22:00 rra - * backends/ninpaths.c: Fix various format warnings and use the - CTYPE macro. + * doc/man/actsync.8: Document the rules for valid newsgroup names. -2003-05-31 18:21 rra +2004-05-16 21:22 rra - * frontends/ovdb_stat.c: Use the right type for string values - returned to getval. + * CONTRIBUTORS: Add Ilya Voronin. -2003-05-31 18:19 rra +2004-05-16 21:21 rra - * frontends/ovdb_init.c: Fix upgrade_environment to always return a - value. + * frontends/cnfsheadconf.in: Zero-pad length and free values to + exactly seventeen characters. Based on a patch from Ilya + Voronin. -2003-05-31 14:32 rra +2004-05-16 21:13 rra - * doc/: man/inn.conf.5, pod/inn.conf.pod: For bindaddress6, warn - that the value will generally have to be quoted. + * CONTRIBUTORS: Add Jacek Konieczny. -2003-05-19 02:01 rra +2004-05-16 21:12 rra - * .cvsignore: Ignore CHANGES and ChangeLog, which are handled - specially by the release process. + * storage/timecaf/caf.c: When retrieving an article, make sure that + it is fully contained in the CAF file (for additional robustness + in the presence of a broken spool). Patch from Jacek Konieczny. -2003-05-19 02:00 rra +2004-05-16 20:55 rra - * CONTRIBUTORS, backends/batcher.c, backends/innxbatch.c, - history/his.c, history/hisv6/hisv6.c, innd/art.c, - storage/cnfs/cnfs.c: Unused variable and missing include warning - fixes, from Ilya Kovalenko. + * innd/art.c: Change some variable types in ARTparse to avoid + signed/unsigned comparison warnings. -2003-05-19 01:59 rra +2004-05-16 20:54 rra - * storage/Make.methods: Update the default file with the - tradindexed/tdx-util.o rule. + * innd/: chan.c, innd.h, nc.c: Use ptrdiff_t for pointer + differences and size_t for all offsets into buffers that are + initialized with pointer differences. Based on a patch from + Jacek Konieczny and necessary for AMD64 support. -2003-05-11 19:40 rra +2004-05-16 20:48 rra - * innd/: rc.c, status.c: Include portable/socket.h instead of - arpa/inet.h directly, to handle the order requirements on some - platforms. + * configure, configure.in, include/acconfig.h, include/config.h.in: + Check for and provide ptrdiff_t if needed. -2003-05-11 19:33 rra +2004-05-16 20:26 rra - * storage/tradindexed/ovmethod.mk: tdx-util.o should not be built - by libtool, since otherwise --disable-static confuses the heck out - of things. + * backends/innxmit.c, expire/makehistory.c, innd/chan.c, innd/nc.c, + innd/site.c, innfeed/article.c, innfeed/imap_connection.c, + innfeed/innlistener.c, innfeed/tape.c, storage/overdata.c, + storage/cnfs/cnfs.c, storage/timecaf/caf.c: Cast all size_t + values to unsigned long and use %lu when printing them with + printf and friends. Based on a patch from Jacek Konieczny, + needed for proper functionality on AMD64. Also fixes one place + where pointers were cast to an int. -2003-05-11 19:23 rra +2004-05-16 20:19 rra - * authprogs/smbval/session.c: Include netinet/in.h before - netinet/tcp.h, required by UnixWare. + * nnrpd/tls.h: Add missing openssl/rand.h include. -2003-05-11 19:20 rra +2004-05-16 20:18 rra - * storage/ovdb/ovdb.c: Berkeley DB 2.x doesn't have DB_PRIVATE. + * lib/innconf.c: Use an unsigned format to print unsigned values in + the invalid type error message. -2003-05-10 20:59 rra +2004-05-16 20:04 rra - * Makefile.global.in: Bump revision to 2.4.1. + * frontends/ovdb_stat.c: Add missing include of time.h. Cast + size_t to unsigned long for printing. -2003-05-06 06:12 rra +2004-05-16 19:59 rra - * samples/moderators: fj.* is another exception. + * expire/expireover.c: Missing include of time.h. -2003-05-05 21:47 rra +2004-05-16 19:57 rra - * include/Makefile: Install inn/*.h include files in - PATHINCLUDE/inn/*.h, not inn/inn/*.h. + * Makefile.global.in: Update warnings to use the same flags that + CURRENT uses. No point in fighting noise that we decided to + never do anything about. -2003-05-05 04:13 rra +2004-05-16 19:53 rra - * doc/compliance-nntp: Remove the point about articles without - message IDs as the current draft now outlaws them entirely. Update - the one about OVER with bad ranges to reflect the current draft, - and change the point about HDR with message IDs to instead note - that the first word of the return should be 0 instead of the - message ID. + * authprogs/smbval/: rfcnb-common.h, rfcnb.h: Move declaration of + RFCNB_Free_Pkt to avoid a warning. -2003-05-05 04:00 rra +2004-05-16 19:46 rra - * NEWS, doc/pod/news.pod: Add a reference to the tdx-util man page - and capitalize the changes section for the Perl and Python hooks. + * include/clibrary.h: Fix __format__ attribute for snprintf. -2003-05-05 02:50 rra +2004-05-16 02:51 rra - * INSTALL, doc/pod/install.pod: Update to reflect that INN 2.3 can - also be upgraded using make update, and note that if using make - update to upgrade from INN 2.3, the administrator should also look - at the new files in samples. + * samples/control.ctl: Update to latest upstream version. -2003-05-05 02:37 rra +2004-05-04 20:14 rra - * Makefile: Also create PATHINCLUDE on make install. + * samples/control.ctl: Add a stub for a.bsu.*. -2003-05-04 21:41 rra +2004-04-07 06:46 rra - * backends/Makefile, lib/Makefile, nnrpd/Makefile, - storage/Makefile: Update dependencies. + * lib/vector.c: Fix a memory leak in vector_resize. Patch from Ray + Miller. -2003-05-04 21:40 rra +2004-04-07 04:00 rra - * MANIFEST: Add nnrpd/list.c. + * doc/: man/radius.conf.5, pod/radius.conf.pod: Adjust for the + parser change that requires radius.conf files to consist of + blocks wrapped in server { }. -2003-05-04 20:52 rra +2004-03-06 18:29 rra - * backends/send-uucp.in: Add the ctlinnd and shlock subs from - controlchan. + * doc/: pod/sm.pod, man/sm.1: Document the exit status. -2003-05-04 20:52 rra +2004-03-06 18:29 rra - * doc/man/send-uucp.8: Add documentation for the site:host - parameter. + * frontends/sm.c: Return a non-zero exit status if any operation on + one of the provided tokens fails. Fixes Debian bug #141750. -2003-05-04 20:48 rra +2004-03-06 05:33 rra - * CONTRIBUTORS: Add Frank McConnell. + * nnrpd/perm.c: Distinguish between failures to read data from an + authenticator and reading data from an authenticator that isn't a + complete line, and don't prematurely kill the authenticator in + the latter case. -2003-05-04 20:47 rra +2004-03-03 18:36 hkehoe - * backends/send-uucp.in: Add support for site:host specifications - giving a different UUCP host than the name of the feed in - newsfeeds. Patch from Frank McConnell. + * backends/inndf.c: inndf -n would get stuck in an infinite loop if + OVgroupstats failed -2003-05-04 20:39 rra +2004-03-03 01:20 kondou - * INSTALL, doc/pod/install.pod: Note that tradindexed is the most - tested overview method. + * backends/innxmit.c: diablo expects empty line at the end for + header feed -2003-05-04 20:39 rra +2004-02-25 11:31 kondou - * NEWS, doc/pod/news.pod: Add a mention of ovdb instability and - setting readserver to true in ovdb.conf. + * innd/: art.c, nc.c: maxartsize did not work correctly. -2003-05-04 20:36 rra + This should have been fixed when CURRENT was fixed, but my + repository for STABLE-2_4 were not updated at that time. - * doc/: pod/ovdb.pod, man/ovdb.5: Update somewhat, noting that ovdb - works with version 3 and 4 now and removing the link to Heath's web - page for current information since it's no longer current. Mention - under readserver that setting it may increase stability. +2004-02-25 11:16 kondou -2003-05-03 03:31 rra + * nnrpd/post.c: correct Message-ID should be shown in post response + even if spooled - * Makefile.global.in: Add an additional comment noting that DESTDIR - should have a trailing slash. +2004-02-24 21:42 hkehoe + + * storage/ovdb/ovdb.c: * Fix to prevent recursion on exit while in + readserver mode. * Update to track searches, because it's + possible that closesearch does not get called to match an + opensearch. + +2004-02-24 21:41 hkehoe + + * frontends/ovdb_server.c: * If readertab grows, need to initialize + the new elements. * Update to track searches, because it's + possible that closesearch does not get called before the client + disconnects. + +2004-02-20 21:41 rra + + * samples/control.ctl: Don't pick a particular it-alt.* signer. + +2004-01-28 21:07 rra + + * storage/ovdb/ovdb-private.h: Port to the supported transaction + method in BerkeleyDB 4.0 and later. Earlier versions aren't + affected. + +2004-01-26 02:39 rra + + * backends/inndf.c: Work around how ReiserFS reports 0 free inodes + with Linux 2.6. Patch from Marco d'Itri. + +2004-01-26 02:03 rra + + * lib/innconf.c: Ensure hismethod is set in inn.conf. + +2004-01-25 23:42 rra + + * frontends/mailpost.in, doc/man/mailpost.8, doc/pod/mailpost.pod: + Add a -p option to specify the port to which to post. + +2004-01-25 23:42 rra + + * CONTRIBUTORS: Add Steve Youngs for debugging help. + +2004-01-25 23:35 rra + + * frontends/inews.c: Don't use innconf->port to find the port of + the server, since that's actually the port on which innd is + running and nnrpd may be running separately. + +2004-01-25 22:33 rra + + * frontends/rnews.c: Add a missing free when unspooling failed + messages. + +2004-01-25 22:21 rra + + * innd/python.c: Insufficient memory was being allocated for + PYheaditem, since it also holds the body of the message and the + line count. + +2004-01-25 20:06 rra + + * innfeed/: article.c, article.h, buffer.c, buffer.h, connection.c, + connection.h, endpoint.c, endpoint.h, host.c, host.h, innfeed.h, + innlistener.c, innlistener.h, main.c, misc.c, misc.h, + procbatch.in, tape.c, tape.h: Remove the separate license + statements, since the license of all of INN now matches the + license of innfeed. + +2004-01-25 20:00 rra + + * README, doc/pod/readme.pod: Insert the acknowledgement of UUNET + and Berkeley (the latter isn't required any more, I know). + +2004-01-25 19:59 rra + + * LICENSE: Per Paul Vixie and Rich Salz, change the general INN + license to the current ISC license text, dropping the advertising + clause in the process. + +2004-01-15 20:03 rra + + * NEWS, doc/pod/news.pod: Grammar fix. + +2004-01-14 19:44 rra + + * LICENSE: Add 2004 to the copyright statement. + +2004-01-12 06:42 rra + + * control/pgpverify.in, control/signcontrol.in, + doc/man/pgpverify.1: Update to the latest upstream versions of + pgpverify and signcontrol. They add support for GnuPG and will + correctly verify signatures generated by GnuPG. All signature + algorithms are changed to work on detached signatures for + consistency. These versions pass the upstream test suite. + +2004-01-12 06:23 rra + + * .cvsignore: Ignore distribution staging directories and tarballs. + +2004-01-12 06:21 rra + + * control/controlchan.in: Always use a local log socket on FreeBSD + to match cnfsstat. + +2004-01-12 06:20 rra + + * frontends/cnfsstat.in: Always use a local log socket on Darwin. + +2004-01-12 05:18 rra + + * nnrpd/: commands.c, nnrpd.c, nnrpd.h, perm.c, post.c: Move + LLOGenable into nnrpd.h so that it's defined the same everywhere. + +2004-01-11 23:21 rra + + * innd/inndstart.c: If bindaddress or bindaddress6 is set in + inn.conf, note this, since it should affect the IPv6 address + binding strategy. + +2004-01-10 05:53 rra + + * authprogs/Makefile: Fix the library dependencies for the various + authentication programs. + +2004-01-08 02:18 rra + + * Makefile.global.in: Bump revision to INN 2.4.2. + +2004-01-07 22:44 rra + + * NEWS, doc/pod/news.pod: Update for the 2.4.1 release. + +2004-01-07 22:38 rra + + * configure, configure.in: Only look for sendmail in /usr/sbin and + /usr/lib, not on the user's path. + +2004-01-07 22:24 rra + + * innd/art.c: Don't use a static buffer for creating the control + message group to check whether we can store a control message in + a per-type newsgroup. + +2004-01-07 03:51 rra + + * samples/control.ctl: Add it-alt.*. + +2004-01-05 21:40 rra + + * storage/tradindexed/tdx-group.c: msync_page is called mapcntl in + STABLE. + +2004-01-02 00:42 rra + + * storage/tradindexed/tdx-group.c: Make robust against references + to index entries outside of the current length of the group index + when auditing and when doing normal operations. + +2004-01-02 00:24 rra + + * storage/tradindexed/tdx-group.c: Improve the auditing a little. + Don't get caught in infinite loops when not fixing when circular + structure is encountered. Update group flags based on the active + file as well, treating the active file as canonical. Create + index entries for any groups listed in the active file that + aren't found in the overview database, even though innd does this + on startup anyway. + +2004-01-01 22:54 rra + + * control/controlchan.in: Force the Unix syslog socket for Mac OS + X, since otherwise the lack of an IP address in /etc/hosts was + causing difficulties. + +2003-12-30 19:55 rra + + * frontends/rnews.c: Provide better error messages after an + unexpected EOF from innd. + +2003-12-29 05:02 rra + + * innd/cc.c: Don't close and reopen the history database during + reload if the server isn't running, since the history database is + closed with pause or throttle and reopened with go. + +2003-12-27 06:25 rra + + * MANIFEST, doc/man/motd.news.5, doc/pod/Makefile, + doc/pod/motd.news.pod: Rewrite motd.news.5 in POD. + +2003-12-27 06:20 rra + + * doc/pod/motd.news.pod: Rewrite motd.news.5 in POD. + +2003-12-27 06:15 rra + + * doc/man/send-nntp.8: Don't try to document both send-nntp and + send-ihave on the same line; instead, break them into two + different lines in the SYNOPSIS. Requested by Eric Raymond. + +2003-12-27 04:18 rra + + * samples/storage.conf: Replace with a sample file that does + something sensible by default (stores all articles in tradspool). + +2003-12-27 04:17 rra + + * scripts/rc.news.in: Make sure there's always a newline after the + shutdown message for INN, even if it exits quickly. diff -ruN inn-2.4.1/HACKING inn-2.4.2/HACKING --- inn-2.4.1/HACKING Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/HACKING Wed Dec 22 04:21:19 2004 @@ -6,7 +6,7 @@ contributors, and secondarily as documentation of some of INN's internals. - This is $Revision: 1.26.2.1 $ dated $Date: 2003/07/12 19:08:59 $. + This is $Revision: 1.26.2.3 $ dated $Date: 2004/10/01 06:41:16 $. First of all, if you plan on working on INN source, please start from the current development tree. There may be significant changes from the @@ -68,28 +68,13 @@ including the files config.guess and config.sub to determine the system name and and ltmain.sh for libtool support. The latter file comes from the libtool distribution; the canonical version of the former two are - available from ftp.gnu.org in /gnu/config. In addition, aclocal.m4 at - the top level of the source tree is just a copy of libtool.m4 from the - libtool distribution. (Using libtool without using automake requires a - few odd hacks.) - - For maintainers with CVS access, these four files are on a separate - vendor branch (the 1.1.2 branch in the repository). When a new version - of libtool is released, put aclocal.m4 in a directory and ltmain.sh in a - subdirectory of that directory named support and then import that - directory onto that branch with something like - - cvs import -m "Import of libtool 1.4 support files" -b 1.1.2 \ - inn FSF LIBTOOL-1_4 - - (all on one line) and then merge that vendor branch into the mainline. - Do something similar for new versions of config.guess and config.sub - (but only import the support directory). See the cvs manual under - Tracking Sources and specifically Multiple Vendor Branches for more - details. - - This process can also be done with just config.guess and config.sub when - new versions of those are released. + available from ftp.gnu.org in /gnu/config. In addition, m4/libtool.m4 + is just a copy of libtool.m4 from the libtool distribution. (Using + libtool without using automake requires a few odd hacks.) These files + used to be on a separate vendor branch so that we could make local + modifications, but local modifications have not been necessary for some + time. Now, new versions can just be checked in like any other file + modifications. INN should not compile with libtool by default, only when requested, since otherwise normal compilations are quite slow. (Using libtool is @@ -271,8 +256,8 @@ of the format are probably frontends/Makefile and backends/Makefile, at least for directories with lots of separate programs. The ALL variable holds all the files that should be generated, EXTRA those additional - files that were generated by configure, SOURCES the C source files for - generating tag information, and INSTALLED the final installed paths. + files that were generated by configure, and SOURCES the C source files + for generating tag information. There are a set of standard installation commands defined in make variables by Makefile.global, and these should be used for all file diff -ruN inn-2.4.1/INSTALL inn-2.4.2/INSTALL --- inn-2.4.1/INSTALL Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/INSTALL Wed Dec 22 04:21:19 2004 @@ -27,6 +27,10 @@ you have your old build tree, look at the comments at the beginning of config.status. + If you made ckpasswd setuid root so that you could use system passwords, + you'll have to do that again after make update. (It's much better to + use PAM instead if you can.) + If you use "make update" to upgrade from INN 2.3, also look at the new sample configuration files in samples to see if there are new options of interest to you. In particular, control.ctl has been updated and @@ -120,9 +124,9 @@ an educational or non-profit organization, this shouldn't be a problem. - Also, if you want to use either the Tcl or Python embedded hooks, you'll - need to have suitable versions of Tcl and/or Python installed. See - doc/hook-tcl and doc/hook-python for more information. + Also, if you want to use the Python embedded hooks, you'll need to have + a suitable version of Python installed. See doc/hook-python for more + information. Unpacking the Distribution @@ -284,13 +288,6 @@ incompatibility between INN and Python 2.0 when Python is compiled with cycle garbage collection; this problem was reported fixed in Python 2.1a1. - - --with-tcl - Enables support for Tcl, allowing you to install filter scripts - written in Tcl. Most available filterse seem to be written in Perl - these days, so you can safely leave out Tcl support. If you choose - to enable this, you will need to have a suitable Tcl distribution - installed. See doc/hook-tcl for all the details. --with-innd-port=PORT By default, inndstart(8) refuses to bind to any port under 1024 diff -ruN inn-2.4.1/LICENSE inn-2.4.2/LICENSE --- inn-2.4.1/LICENSE Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/LICENSE Wed Dec 22 04:21:19 2004 @@ -2,44 +2,28 @@ different licenses and/or copyrights is covered by the following copyright and license: + Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") Copyright (c) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003 The Internet Software Consortium and Rich Salz + 2002, 2003 by The Internet Software Consortium and Rich Salz This code is derived from software contributed to the Internet Software - Consortium by Rich Salz + Consortium by Rich Salz. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - This product includes software developed by the Internet Software - Consortium and its contributors. - 4. Neither the name of the Internet Software Consortium nor the names - of its contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND - CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, - BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTERNET - SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Some specific portions of INN are covered by different licenses, usually -more permissive ones. Those licenses, if present, will be noted -prominantly at the top of those source files. Specifically (but possibly -not comprehensively): + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY + SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Some specific portions of INN are covered by different licenses. Those +licenses, if present, will be noted prominantly at the top of those source +files. Specifically (but possibly not comprehensively): authprogs/smbval/*, backends/send-uucp.in, and control/perl-nocem.in are under the GNU General Public License. See doc/GPL for a copy of @@ -52,13 +36,13 @@ domain. control/gpgverify.in, control/pgpverify.in and control/signcontrol.in - are under a license very similar to the above but with UUNET + are under a BSD-style license (with the advertising clause) with UUNET Technologies, Inc. as the copyright holder. See the end of those files for details. - control/controlchan.in and control/modules/*.pl are covered by only the - first two license points of the license above; points 3 and 4 do not - apply to them. See the beginning of those files for details. + control/controlchan.in and control/modules/*.pl are covered by a + two-clause BSD-style license (no advertising clause). See the + beginning of those files for details. lib/strcasecmp.c, lib/strspn.c, and lib/strtok.c are taken from BSD sources and are covered by the standard BSD license. See those files @@ -68,25 +52,26 @@ Security. See the file for more details. history/his.c and history/hisv6/hisv6.c are under a license very - similar to the new BSD license but with Thus plc as the copyright - holder. See those files for details. + similar to the new BSD license (no advertising clause) but with Thus + plc as the copyright holder. See those files for details. lib/tst.c, include/inn/tst.h and doc/pod/tst.pod are derived from from - and are under the BSD - license, but with Peter A. Friend as the copyright holder. + and are under the new BSD + license (no advertising clause), but with Peter A. Friend as the + copyright holder. tests/runtests.c is covered under a license very similar to the MIT/X Consortium license (less restrictive than INN's licese). See the beginning of the file for details. Note that all portions of INN that link with core INN code have to be -convered by licenses compatible with the license at the top of this file. -Some portions of this distribution are covered by incompatible licenses, -but all of that code is completely stand-alone and compiles into a -separate executable. (This is why it's permissable to distribute some -programs covered by the GPL as part of this distribution; they compile to -stand-alone executables or are stand-alone scripts and therefore fall -under the "mere aggregation" clause of the GPL.) +convered by licenses compatible with the license at the top of this file, +and since INN links with several external libraries if so configured (such +as OpenSSL), should also be compatible with the licenses of those external +libraries to be safe. Some portions of this distribution are covered by +more restrictive licenses, but all of that code is completely stand-alone, +either as a standalone script or as code that compiles into a separate +executable. Please note that the files in the contrib directory are not properly part of INN and may be under widely varying licenses. Please see each file diff -ruN inn-2.4.1/MANIFEST inn-2.4.2/MANIFEST --- inn-2.4.1/MANIFEST Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/MANIFEST Wed Dec 22 04:21:19 2004 @@ -264,10 +264,12 @@ doc/pod/expireover.pod Master file for expireover.8 doc/pod/external-auth.pod Master file for doc/external-auth doc/pod/fastrm.pod Master file for fastrm.1 +doc/pod/grephistory.pod Master file for grephistory.1 doc/pod/hacking.pod Master file for HACKING doc/pod/hook-perl.pod Master file for doc/hook-perl doc/pod/hook-python.pod Master file for doc/hook-python doc/pod/ident.pod Master file for ident.8 +doc/pod/inews.pod Master file for inews.1 doc/pod/inn.conf.pod Master file for inn.conf.5 doc/pod/innconfval.pod Master file for innconfval.1 doc/pod/innd.pod Master file for innd.8 @@ -281,6 +283,7 @@ doc/pod/list.pod Master file for list.3 doc/pod/mailpost.pod Master file for mailpost.8 doc/pod/makehistory.pod Master file for makehistory.8 +doc/pod/motd.news.pod Master file for motd.news.5 doc/pod/news.pod Master file for NEWS doc/pod/newsfeeds.pod Master file for newsfeeds.5 doc/pod/ninpaths.pod Master file for ninpaths.8 diff -ruN inn-2.4.1/Makefile inn-2.4.2/Makefile --- inn-2.4.1/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.70.2.2 2003/10/16 01:51:48 rra Exp $ +## $Id: Makefile,v 1.70.2.4 2004/12/19 19:50:51 rra Exp $ include Makefile.global @@ -81,11 +81,10 @@ cd $$D && $(MAKE) install || exit 1 ; cd .. ; \ done @echo '' - @echo 'Do not forget to update your cron entries, and also run' - @echo 'makedbz if you need to. If this is a first-time installation' - @echo 'a minimal active file has been installed. You will need to' - @echo 'touch history and run "makedbz -i" to initialize the history' - @echo 'database. See INSTALL for more information.' + @echo 'If this is a first-time installation, a minimal active file and' + @echo 'history database have been installed. Do not forget to update' + @echo 'your cron entries and configure INN. See INSTALL for more' + @echo 'information.' @echo '' directories: @@ -107,10 +106,13 @@ cert: $(SSLBIN)/openssl req -new -x509 -nodes \ -out $(PATHLIB)/cert.pem -days 366 \ - -keyout $(PATHLIB)/cert.pem + -keyout $(PATHLIB)/key.pem chown $(NEWSUSER) $(PATHLIB)/cert.pem chgrp $(NEWSGROUP) $(PATHLIB)/cert.pem - chmod 600 $(PATHLIB)/cert.pem + chmod 640 $(PATHLIB)/cert.pem + chown $(NEWSUSER) $(PATHLIB)/key.pem + chgrp $(NEWSGROUP) $(PATHLIB)/key.pem + chmod 600 $(PATHLIB)/key.pem ## Cleanup targets. clean deletes all compilation results but leaves the diff -ruN inn-2.4.1/Makefile.global.in inn-2.4.2/Makefile.global.in --- inn-2.4.1/Makefile.global.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/Makefile.global.in Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile.global.in,v 1.70.2.2 2003/07/12 19:11:01 rra Exp $ +## $Id: Makefile.global.in,v 1.70.2.6 2004/05/18 01:17:26 rra Exp $ ## ## This file is meant to be the central Makefile that configure works with ## and that all other Makefiles include. No Makefile other than this one @@ -14,7 +14,7 @@ ## put your own version information in $VERSION_EXTRA. If it's set to ## "CVS prerelease", the build time will be automatically included. -VERSION = 2.4.1 +VERSION = 2.4.2 VERSION_EXTRA = ## If you want to install INN relative to a root directory other than /, @@ -71,25 +71,25 @@ ## particular, the following warnings are *not* included: ## ## -ansi Requires messing with feature test macros. +## -pedantic Too much noise from embedded Perl. +## -Wtraditional We assume ANSI C, so these aren't interesting. +## -Wshadow Names like log or index are too convenient. +## -Wcast-qual Used for a while, but some casts are unavoidable. ## -Wconversion Too much unsigned to signed noise. ## -Wredundant-decls Too much noise from system headers. -## -Wtraditional We assume ANSI C, so these aren't interesting. -## -Wundef Too much noise from system macros. ## ## Some may be worth looking at again once a released version of gcc doesn't ## warn on system headers. The warnings below are in the same order as -## they're listed in the gcc manual. We suppress warnings for long long -## because of lib/snprintf.c; all uses of long long should be hidden behind -## #ifdef HAVE_LONG_LONG. +## they're listed in the gcc manual. ## ## Add -g because when building with warnings one generally also wants the ## debugging information, and add -O because gcc won't find some warnings -## without optimization turned on. - -WARNINGS = -g -O -pedantic -Wall -W -Wshadow -Wpointer-arith \ - -Wbad-function-cast -Wcast-qual -Wcast-align \ - -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes \ - -Wnested-externs -Wno-long-long +## without optimization turned on. Add -DDEBUG=1 so that we'll also +## compile all debugging code and check it as well. + +WARNINGS = -g -O -DDEBUG=1 -Wall -W -Wendif-labels -Wpointer-arith \ + -Wbad-function-cast -Wcast-align -Wwrite-strings \ + -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs ## libtool support. Note that INN does not use Automake (and that ## retrofitting Automake is likely more work than it's worth), so @@ -126,9 +126,6 @@ PERLLIB = $(builddir)/lib/perl$(LIBSUFFIX).o @PERL_LIB@ PERLINC = @PERL_INC@ - -TCLLIB = @TCL_LIB@ -TCLINC = @TCL_INC@ PYTHONLIB = @PYTHON_LIB@ PYTHONINC = @PYTHON_INC@ diff -ruN inn-2.4.1/NEWS inn-2.4.2/NEWS --- inn-2.4.1/NEWS Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/NEWS Wed Dec 22 04:21:19 2004 @@ -1,8 +1,72 @@ +Changes from 2.4.1 to 2.4.2 + + * 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. + + * make install and make update 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. make install now + also automatically builds a new (empty) history database if one + doesn't already exist. + + * 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 innd 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. + + * ctlinnd 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 innstat output. + + * Overview generation has been fixed in both makehistory and innd 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. + + * nnrpd now uniformly responds with a 480 or 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 411 + status code, claiming the group didn't exist, which confuses the + reactive authentication capability of news readers. + + * If a user is not authorized to approve articles (using the A access + control in readers.conf), articles that include Approved headers will + be rejected even if posted to unmoderated groups. Some other site may + consider that group to be moderated. + + * The configuration parser used for readers.conf and others now + correctly handles "#" inside quoted strings and is more robust against + unmatched double quotes. + + * Messages mailed to moderators had two spaces after the colons in the + headers, rather than one. This bug has been fixed. + + * A bug that could cause heap corruption and random crashes in innd if + INN were compiled with Python support has been fixed. + + * Some problems with innd's tracking of article size and enforcement of + the configured maximum article size have been fixed. + + * pgpverify will now correctly verify signatures generated by GnuPG and + better supports GnuPG as the PGP implementation. + + * 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. + + * Improved the error reporting in the history database code, in inews, + in controlchan, and in expire. + + * Many other, more minor bugs have also been fixed. + Changes from 2.4.0 to 2.4.1 * SECURITY: Handle the special filing of control messages into per-type - newsgroups more robust. This closes a potentially exploitable buffer - overflow. Thanks to Dan Riley for his excellent bug report. + newsgroups more robustly. This closes a potentially exploitable + buffer overflow. Thanks to Dan Riley for his excellent bug report. * Fixed article handling in innd so that articles without a Path header (arising from peers sending malformatted articles or injecting diff -ruN inn-2.4.1/README inn-2.4.2/README --- inn-2.4.1/README Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/README Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ Welcome to INN 2.4! - This work is sponsored by the Internet Software Consortium. + This work is sponsored by Internet Systems Consortium. Please see INSTALL for installation instructions, NEWS for what's changed from the previous release, and LICENSE for the copyright, @@ -60,7 +60,7 @@ server administrator to reject unwanted articles (such as spam and other abuses of Usenet). - INN is free software, supported by the Internet Software Consortium and + INN is free software, supported by Internet Systems Consortium and volunteers around the world. See "Supporting the INN Effort" below. Prerequisites @@ -198,6 +198,9 @@ effort to getting this new version together. They deserve a big round of applause. They've certainly got our thanks. + This product includes software developed by UUNET Technologies, Inc. and + by the University of California, Berkeley and its contributors. + Last, but certainly not least, Rich Salz, the original author of INN deserves a lion's share of the credit for writing INN in the first place and making it the most popular news server software on the planet (no @@ -268,18 +271,17 @@ Supporting the INN Effort - Note that INN is supported by the Internet Software Consortium, and - although it is free for use and redistribution and incorporation into - vendor products and export and anything else you can think of, it costs - money to produce. That money comes from ISPs, hardware and software - vendors, companies who make extensive use of the software, and generally + Note that INN is supported by Internet Systems Consortium, and although + it is free for use and redistribution and incorporation into vendor + products and export and anything else you can think of, it costs money + to produce. That money comes from ISPs, hardware and software vendors, + companies who make extensive use of the software, and generally kind-hearted folk such as yourself. - The Internet Software Consortium has also commissioned a DHCP server - implementation, handles the official support/release of BIND, and - supports the Kerberos Version 5 effort at MIT. You can learn more about - the ISC's goals and accomplishments from the web page at - . + Internet Systems Consortium has also commissioned a DHCP server + implementation and handles the official support/release of BIND. You + can learn more about the ISC's goals and accomplishments from the web + page at . Russ Allbery Katsuhiro Kondou diff -ruN inn-2.4.1/authprogs/Makefile inn-2.4.2/authprogs/Makefile --- inn-2.4.1/authprogs/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/authprogs/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.34 2003/01/19 01:15:24 rra Exp $ +## $Id: Makefile,v 1.34.2.2 2004/05/18 01:18:53 rra Exp $ include ../Makefile.global @@ -14,17 +14,22 @@ SOURCES = auth_krb5.c auth_smb.c ckpasswd.c domain.c ident.c libauth.c \ radius.c -INSTALLED = $(D)$(PATHAUTHPASSWD)/auth_smb \ - $(D)$(PATHAUTHPASSWD)/ckpasswd \ - $(D)$(PATHAUTHPASSWD)/radius \ - $(D)$(PATHAUTHRESOLV)/domain \ - $(D)$(PATHAUTHRESOLV)/ident - -all: $(LIBSMB) $(LIBAUTH) $(ALL) +all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + if [ x"$(KRB5_AUTH)" != x ] ; then \ + $(LI_XPUB) auth_krb5 $(D)$(PATHAUTHPASSWD)/auth_krb5 ; \ + fi + for F in auth_smb ckpasswd radius ; do \ + $(LI_XPUB) $$F $D$(PATHAUTHPASSWD)/$$F ; \ + done + for F in domain ident ; do \ + $(LI_XPUB) $$F $D$(PATHAUTHRESOLV)/$$F ; \ + done + clobber clean distclean: rm -f *.o $(ALL) rm -rf .libs @@ -40,40 +45,29 @@ ## Compilation rules. LINK = $(LIBLD) $(LDFLAGS) -o $@ -NEWSLIBS = $(LIBINN) $(LIBS) -AUTHLIBS = $(LIBAUTH) $(LIBINN) $(LIBS) +CKLIBS = $(CRYPTLIB) $(SHADOWLIB) $(PAMLIB) $(DBMLIB) -CK_LIBS = $(CRYPTLIB) $(SHADOWLIB) $(PAMLIB) $(DBMLIB) $(AUTHLIBS) -SMB_LIBS = $(LIBSMB) $(AUTHLIBS) -KRB5_LIBS = $(AUTHLIBS) $(KRB5LIB) - -auth_krb5: auth_krb5.o $(LIBAUTH) ; $(LINK) auth_krb5.o $(KRB5_LIBS) -auth_smb: auth_smb.o $(LIBSMB) ; $(LINK) auth_smb.o $(SMB_LIBS) -ckpasswd: ckpasswd.o $(LIBAUTH) ; $(LINK) ckpasswd.o $(CK_LIBS) -domain: domain.o $(LIBAUTH) ; $(LINK) domain.o $(AUTHLIBS) -ident: ident.o $(LIBAUTH) ; $(LINK) ident.o $(AUTHLIBS) -radius: radius.o $(AUTH_INN) ; $(LINK) radius.o $(AUTHLIBS) +auth_krb5: auth_krb5.o $(LIBAUTH) $(LIBINN) + $(LINK) auth_krb5.o $(LIBAUTH) $(KRB5LIB) $(LIBINN) $(LIBS) -$(LIBINN): ; (cd ../lib ; $(MAKE)) -$(LIBSTORAGE): ; (cd ../storage ; $(MAKE)) -$(LIBSMB): ; (cd smbval ; $(MAKE)) -$(LIBAUTH): libauth.h libauth.c +auth_smb: auth_smb.o $(LIBSMB) $(LIBAUTH) $(LIBINN) + $(LINK) auth_smb.o $(LIBSMB) $(LIBAUTH) $(LIBINN) $(LIBS) +ckpasswd: ckpasswd.o $(LIBAUTH) $(LIBINN) + $(LINK) ckpasswd.o $(LIBAUTH) $(CKLIBS) $(LIBINN) $(LIBS) -## Installation rules. Installation commands set in Makefile.global. -## auth_krb5 is conditionally installed, so it has to be handled as a special -## case. +domain: domain.o $(LIBAUTH) $(LIBINN) + $(LINK) domain.o $(LIBAUTH) $(LIBINN) $(LIBS) -install: $(INSTALLED) $(KRB5_AUTH) - if [ x"$(KRB5_AUTH)" != x ] ; then \ - $(LI_XPUB) auth_krb5 $(D)$(PATHAUTHPASSWD)/auth_krb5 ; \ - fi +ident: ident.o $(LIBAUTH) $(LIBINN) + $(LINK) ident.o $(LIBAUTH) $(LIBINN) $(LIBS) + +radius: radius.o $(LIBAUTH) $(LIBINN) + $(LINK) radius.o $(LIBAUTH) $(LIBINN) $(LIBS) -$(D)$(PATHAUTHPASSWD)/auth_smb: auth_smb ; $(LI_XPUB) $? $@ -$(D)$(PATHAUTHPASSWD)/ckpasswd: ckpasswd ; $(LI_XPUB) $? $@ -$(D)$(PATHAUTHPASSWD)/radius: radius ; $(LI_XPUB) $? $@ -$(D)$(PATHAUTHRESOLV)/domain: domain ; $(LI_XPUB) $? $@ -$(D)$(PATHAUTHRESOLV)/ident: ident ; $(LI_XPUB) $? $@ +$(LIBINN): ; (cd ../lib ; $(MAKE)) +$(LIBSMB): ; (cd smbval ; $(MAKE)) +$(LIBAUTH): libauth.h libauth.c ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/authprogs/smbval/rfcnb-common.h inn-2.4.2/authprogs/smbval/rfcnb-common.h --- inn-2.4.1/authprogs/smbval/rfcnb-common.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/authprogs/smbval/rfcnb-common.h Wed Dec 22 04:21:19 2004 @@ -33,4 +33,4 @@ } RFCNB_Pkt; - +void RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt); diff -ruN inn-2.4.1/authprogs/smbval/rfcnb.h inn-2.4.2/authprogs/smbval/rfcnb.h --- inn-2.4.1/authprogs/smbval/rfcnb.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/authprogs/smbval/rfcnb.h Wed Dec 22 04:21:19 2004 @@ -46,5 +46,3 @@ void *RFCNB_Listen(); struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n); - -void RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt); diff -ruN inn-2.4.1/backends/Makefile inn-2.4.2/backends/Makefile --- inn-2.4.1/backends/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/backends/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.54.2.1 2003/05/04 21:41:21 rra Exp $ +## $Id: Makefile,v 1.54.2.2 2004/05/18 01:18:53 rra Exp $ include ../Makefile.global @@ -17,36 +17,23 @@ filechan.c inndf.c innxbatch.c innxmit.c map.c ninpaths.c \ nntpget.c overchan.c shlock.c shrinkfile.c -INSTALLED = $(D)$(PATHBIN)/actmerge \ - $(D)$(PATHBIN)/actsync \ - $(D)$(PATHBIN)/actsyncd \ - $(D)$(PATHBIN)/archive \ - $(D)$(PATHBIN)/batcher \ - $(D)$(PATHBIN)/buffchan \ - $(D)$(PATHBIN)/cvtbatch \ - $(D)$(PATHBIN)/filechan \ - $(D)$(PATHBIN)/inndf \ - $(D)$(PATHBIN)/innxmit \ - $(D)$(PATHBIN)/innxbatch \ - $(D)$(PATHBIN)/mod-active \ - $(D)$(PATHBIN)/news2mail \ - $(D)$(PATHBIN)/ninpaths \ - $(D)$(PATHBIN)/nntpget \ - $(D)$(PATHBIN)/nntpsend \ - $(D)$(PATHBIN)/overchan \ - $(D)$(PATHBIN)/send-ihave \ - $(D)$(PATHBIN)/send-nntp \ - $(D)$(PATHBIN)/send-uucp \ - $(D)$(PATHBIN)/sendinpaths \ - $(D)$(PATHBIN)/sendxbatches \ - $(D)$(PATHBIN)/shlock \ - $(D)$(PATHBIN)/shrinkfile - all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + for F in actmerge actsyncd news2mail nntpsend send-ihave send-nntp \ + send-uucp sendinpaths sendxbatches ; do \ + $(CP_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + $(CP_XPRI) mod-active $D$(PATHBIN)/mod-active + $(LI_XPRI) overchan $D$(PATHBIN)/overchan + for F in actsync archive batcher buffchan cvtbatch filechan inndf \ + innxbatch innxmit ninpaths nntpget shlock shrinkfile ; do \ + $(LI_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + clean: rm -f *.o $(ALL) rm -rf .libs @@ -110,36 +97,6 @@ ../doc/man/send-uucp.8: send-uucp $(POD2MAN) -s 8 $? > $@ - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/actmerge: actmerge ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/actsync: actsync ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/actsyncd: actsyncd ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/archive: archive ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/batcher: batcher ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/buffchan: buffchan ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/cvtbatch: cvtbatch ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/filechan: filechan ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/inndf: inndf ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/innxbatch: innxbatch ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/innxmit: innxmit ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/mod-active: mod-active ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/news2mail: news2mail ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/ninpaths: ninpaths ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/nntpget: nntpget ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/nntpsend: nntpsend ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/overchan: overchan ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/send-ihave: send-ihave ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/send-nntp: send-nntp ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/send-uucp: send-uucp ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/sendinpaths: sendinpaths ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/sendxbatches: sendxbatches ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/shlock: shlock ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/shrinkfile: shrinkfile ; $(LI_XPUB) $? $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/backends/batcher.c inn-2.4.2/backends/batcher.c --- inn-2.4.1/backends/batcher.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/backends/batcher.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: batcher.c,v 1.34.2.1 2003/05/19 02:00:05 rra Exp $ +/* $Id: batcher.c,v 1.34.2.2 2004/05/17 04:24:53 rra Exp $ ** ** Read batchfiles on standard input and spew out batches. */ @@ -402,10 +402,9 @@ } } - /* Write the article. In case of interrupts, retry the read but - * not the fwrite because we can't check that reliably and - * portably. */ - if ((fprintf(F, "%s", artdata) == EOF) || ferror(F)) + /* Write the article. In case of interrupts, retry the read but not + the fwrite because we can't check that reliably and portably. */ + if ((fwrite(artdata, 1, BytesInArt, F) != BytesInArt) || ferror(F)) break; /* Update the counts. */ @@ -423,7 +422,7 @@ if (BATCHopen) BATCHstatus = BATCHclose(F); - RequeueAndExit(Cookie, (char *)NULL, 0L); - /* NOTREACHED */ + RequeueAndExit(Cookie, NULL, 0); + return 0; } diff -ruN inn-2.4.1/backends/inndf.c inn-2.4.2/backends/inndf.c --- inn-2.4.1/backends/inndf.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/backends/inndf.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: inndf.c,v 1.25 2002/11/28 06:21:20 vinocur Exp $ +/* $Id: inndf.c,v 1.25.2.2 2004/03/03 18:36:07 hkehoe Exp $ ** ** Reports free kilobytes (not disk blocks) or free inodes. ** @@ -141,6 +141,10 @@ value of a signed long. */ if (amount > (1UL << 31) - 1) amount = (1UL << 31) - 1; + + /* 2.6 kernels show 0 available and used inodes, instead. */ + if (amount == 0 && df_files(info) == 0) + amount = (1UL << 31) - 1; } else { /* Do the multiplication in floating point to try to retain accuracy if the free space in bytes would overflow an @@ -308,9 +312,8 @@ p = strchr(group, ' '); if (p != NULL) *p = '\0'; - if (!OVgroupstats(group, NULL, NULL, &count, NULL)) - continue; - total += count; + if (OVgroupstats(group, NULL, NULL, &count, NULL)) + total += count; group = QIOread(qp); } QIOclose(qp); diff -ruN inn-2.4.1/backends/innxmit.c inn-2.4.2/backends/innxmit.c --- inn-2.4.1/backends/innxmit.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/backends/innxmit.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: innxmit.c,v 1.68 2003/02/11 09:40:19 alexk Exp $ +/* $Id: innxmit.c,v 1.68.2.2 2004/05/16 20:26:53 rra Exp $ ** ** Transmit articles to remote site. ** Modified for NNTP streaming: 1996-01-03 Jerry Aguirre @@ -590,15 +590,16 @@ vec[0].iov_base = (char *) art->data; vec[0].iov_len = len; /* Add 14 bytes, which maybe will be the length of the Bytes header */ - snprintf(buf, sizeof(buf), "Bytes: %d\r\n", art->len + 14); + snprintf(buf, sizeof(buf), "Bytes: %lu\r\n", + (unsigned long) art->len + 14); vec[1].iov_base = buf; vec[1].iov_len = strlen(buf); if (iscmsg) { vec[2].iov_base = (char *) art->data + len; vec[2].iov_len = art->len - len; } else { - vec[2].iov_base = (char *) ".\r\n"; - vec[2].iov_len = 3; + vec[2].iov_base = (char *) "\r\n.\r\n"; + vec[2].iov_len = 5; } if (xwritev(ToServer, vec, 3) < 0) return false; @@ -608,7 +609,7 @@ if (GotInterrupt) Interrupted(Article, MessageID); if (Debug) { - fprintf(stderr, "> [ article %d ]\n", art->len); + fprintf(stderr, "> [ article %lu ]\n", (unsigned long) art->len); fprintf(stderr, "> .\n"); } diff -ruN inn-2.4.1/backends/news2mail.in inn-2.4.2/backends/news2mail.in --- inn-2.4.1/backends/news2mail.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/backends/news2mail.in Wed Dec 22 04:21:19 2004 @@ -99,7 +99,7 @@ my $sendmail = $inn::mta ; $sendmail =~ s!\s*%s!! ; - my @command = (split (' ', $sendmail), '-ee', '-f', '-odq', @a); + my @command = (split (' ', $sendmail), '-ee', '-fnews', '-odq', @a); # @command[0] = '/usr/local/bin/debug'; syslog('info', join(' ', @command)); diff -ruN inn-2.4.1/configure inn-2.4.2/configure --- inn-2.4.1/configure Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/configure Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ #! /bin/sh -# From configure.in Revision: 1.244.2.2 +# From configure.in Revision: 1.244.2.7 # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- ## Copyright 1996, 1997, 1998, 1999, 2000, 2001 ## Free Software Foundation, Inc. @@ -417,8 +417,6 @@ --with-perl Embedded Perl script support [default=no]" ac_help="$ac_help --with-python Embedded Python module support [default=no]" -ac_help="$ac_help - --with-tcl=PATH Embedded TCL script support [default=no]" # Initialize some variables set by options. # The variables have the same names as the options, with @@ -964,7 +962,7 @@ # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:968: checking for $ac_word" >&5 +echo "configure:966: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -994,7 +992,7 @@ # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:998: checking for $ac_word" >&5 +echo "configure:996: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1045,7 +1043,7 @@ # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1049: checking for $ac_word" >&5 +echo "configure:1047: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1077,7 +1075,7 @@ fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1081: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1079: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -1088,12 +1086,12 @@ cat > conftest.$ac_ext << EOF -#line 1092 "configure" +#line 1090 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1119,12 +1117,12 @@ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1123: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1121: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1128: checking whether we are using GNU C" >&5 +echo "configure:1126: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1133,7 +1131,7 @@ yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1135: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1152,7 +1150,7 @@ ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1156: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1154: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1184,7 +1182,7 @@ fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1188: checking how to run the C preprocessor" >&5 +echo "configure:1186: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1199,13 +1197,13 @@ # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1207: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1216,13 +1214,13 @@ rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1233,13 +1231,13 @@ rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1264,9 +1262,9 @@ echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 -echo "configure:1268: checking for AIX" >&5 +echo "configure:1266: checking for AIX" >&5 cat > conftest.$ac_ext <&6 -echo "configure:1292: checking for POSIXized ISC" >&5 +echo "configure:1290: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1309,13 +1307,13 @@ fi echo $ac_n "checking for object suffix""... $ac_c" 1>&6 -echo "configure:1313: checking for object suffix" >&5 +echo "configure:1311: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext -if { (eval echo configure:1319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; @@ -1334,7 +1332,7 @@ echo $ac_n "checking if $CC supports -c -o file.$ac_objext""... $ac_c" 1>&6 -echo "configure:1338: checking if $CC supports -c -o file.$ac_objext" >&5 +echo "configure:1336: checking if $CC supports -c -o file.$ac_objext" >&5 if eval "test \"`echo '$''{'inn_cv_compiler_c_o'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1400,12 +1398,12 @@ fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 -echo "configure:1404: checking for Cygwin environment" >&5 +echo "configure:1402: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else @@ -1433,19 +1431,19 @@ CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 -echo "configure:1437: checking for mingw32 environment" >&5 +echo "configure:1435: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1447: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else @@ -1537,7 +1535,7 @@ fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1541: checking host system type" >&5 +echo "configure:1539: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1558,7 +1556,7 @@ echo "$ac_t""$host" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1562: checking build system type" >&5 +echo "configure:1560: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1587,7 +1585,7 @@ if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:1591: checking for ld used by GCC" >&5 +echo "configure:1589: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw @@ -1617,10 +1615,10 @@ esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:1621: checking for GNU ld" >&5 +echo "configure:1619: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 -echo "configure:1624: checking for non-GNU ld" >&5 +echo "configure:1622: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1655,7 +1653,7 @@ fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1659: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1657: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1672,7 +1670,7 @@ echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 -echo "configure:1676: checking for $LD option to reload object files" >&5 +echo "configure:1674: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1684,7 +1682,7 @@ test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 -echo "configure:1688: checking for BSD-compatible nm" >&5 +echo "configure:1686: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1722,7 +1720,7 @@ echo "$ac_t""$NM" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1726: checking whether ln -s works" >&5 +echo "configure:1724: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1743,7 +1741,7 @@ fi echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 -echo "configure:1747: checking how to recognise dependant libraries" >&5 +echo "configure:1745: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1928,7 +1926,7 @@ echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 -echo "configure:1932: checking for executable suffix" >&5 +echo "configure:1930: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1938,7 +1936,7 @@ rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= - if { (eval echo configure:1942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + if { (eval echo configure:1940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in *.$ac_ext | *.c | *.o | *.obj) ;; @@ -1969,7 +1967,7 @@ # Check for command to grab the raw symbol name followed by C symbol from nm. echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6 -echo "configure:1973: checking command to parse $NM output" >&5 +echo "configure:1971: checking command to parse $NM output" >&5 if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2049,10 +2047,10 @@ int main(){nm_test_var='a';nm_test_func();return(0);} EOF - if { (eval echo configure:2053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + if { (eval echo configure:2051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo configure:2056: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then + if { (eval echo configure:2054: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -2103,7 +2101,7 @@ save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo configure:2107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + if { (eval echo configure:2105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then pipe_works=yes fi LIBS="$save_LIBS" @@ -2152,17 +2150,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2156: checking for $ac_hdr" >&5 +echo "configure:2154: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2164: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2197,7 +2195,7 @@ file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 -echo "configure:2201: checking for ${ac_tool_prefix}file" >&5 +echo "configure:2199: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2259,7 +2257,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 -echo "configure:2263: checking for file" >&5 +echo "configure:2261: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2330,7 +2328,7 @@ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2334: checking for $ac_word" >&5 +echo "configure:2332: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2362,7 +2360,7 @@ # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2366: checking for $ac_word" >&5 +echo "configure:2364: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2397,7 +2395,7 @@ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2401: checking for $ac_word" >&5 +echo "configure:2399: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2429,7 +2427,7 @@ # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2433: checking for $ac_word" >&5 +echo "configure:2431: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2478,8 +2476,8 @@ case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 2482 "configure"' > conftest.$ac_ext - if { (eval echo configure:2483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + echo '#line 2480 "configure"' > conftest.$ac_ext + if { (eval echo configure:2481: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" @@ -2500,7 +2498,7 @@ SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 -echo "configure:2504: checking whether the C compiler needs -belf" >&5 +echo "configure:2502: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2513,14 +2511,14 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else @@ -2642,7 +2640,7 @@ ## FIXME: this should be a separate macro ## echo $ac_n "checking for objdir""... $ac_c" 1>&6 -echo "configure:2646: checking for objdir" >&5 +echo "configure:2644: checking for objdir" >&5 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -2673,7 +2671,7 @@ # in isolation, and that seeing it set (from the cache) indicates that # the associated values are set (in the cache) correctly too. echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6 -echo "configure:2677: checking for $compiler option to produce PIC" >&5 +echo "configure:2675: checking for $compiler option to produce PIC" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2825,21 +2823,21 @@ # Check to make sure the pic_flag actually works. echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6 -echo "configure:2829: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 +echo "configure:2827: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* case $host_os in hpux9* | hpux10* | hpux11*) @@ -2895,7 +2893,7 @@ ## FIXME: this should be a separate macro ## echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6 -echo "configure:2899: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 +echo "configure:2897: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2903,14 +2901,14 @@ save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_prog_cc_static_works=yes else @@ -2941,7 +2939,7 @@ ## # Check to see if options -o and -c are simultaneously supported by compiler echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6 -echo "configure:2945: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo "configure:2943: checking if $compiler supports -c -o file.$ac_objext" >&5 if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2960,7 +2958,7 @@ save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no -if { (eval echo configure:2964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then +if { (eval echo configure:2962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then @@ -2989,7 +2987,7 @@ if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6 -echo "configure:2993: checking if $compiler supports -c -o file.lo" >&5 +echo "configure:2991: checking if $compiler supports -c -o file.lo" >&5 if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3000,14 +2998,14 @@ save_objext="$ac_objext" ac_objext=lo cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -3042,7 +3040,7 @@ if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6 -echo "configure:3046: checking if we can lock with hard links" >&5 +echo "configure:3044: checking if we can lock with hard links" >&5 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no @@ -3065,20 +3063,20 @@ if test "$GCC" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6 -echo "configure:3069: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo "configure:3067: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo "int some_variable = 0;" > conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" compiler_rtti_exceptions=no cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -3109,7 +3107,7 @@ ## # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6 -echo "configure:3113: checking whether the linker ($LD) supports shared libraries" >&5 +echo "configure:3111: checking whether the linker ($LD) supports shared libraries" >&5 allow_undefined_flag= no_undefined_flag= @@ -3797,7 +3795,7 @@ ## # Check hardcoding attributes. echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6 -echo "configure:3801: checking how to hardcode library paths into programs" >&5 +echo "configure:3799: checking how to hardcode library paths into programs" >&5 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then @@ -3829,7 +3827,7 @@ striplib= old_striplib= echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6 -echo "configure:3833: checking whether stripping libraries is possible" >&5 +echo "configure:3831: checking whether stripping libraries is possible" >&5 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" @@ -3847,7 +3845,7 @@ ## # PORTME Fill in your ld.so characteristics echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6 -echo "configure:3851: checking dynamic linker characteristics" >&5 +echo "configure:3849: checking dynamic linker characteristics" >&5 library_names_spec= libname_spec='lib$name' soname_spec= @@ -4248,7 +4246,7 @@ ## # Report the final consequences. echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6 -echo "configure:4252: checking if libtool supports shared libraries" >&5 +echo "configure:4250: checking if libtool supports shared libraries" >&5 echo "$ac_t""$can_build_shared" 1>&6 ## ## END FIXME @@ -4256,7 +4254,7 @@ ## FIXME: this should be a separate macro ## echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6 -echo "configure:4260: checking whether to build shared libraries" >&5 +echo "configure:4258: checking whether to build shared libraries" >&5 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -4283,7 +4281,7 @@ ## FIXME: this should be a separate macro ## echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6 -echo "configure:4287: checking whether to build static libraries" >&5 +echo "configure:4285: checking whether to build static libraries" >&5 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$ac_t""$enable_static" 1>&6 @@ -4326,12 +4324,12 @@ *) echo $ac_n "checking for shl_load""... $ac_c" 1>&6 -echo "configure:4330: checking for shl_load" >&5 +echo "configure:4328: checking for shl_load" >&5 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shl_load=yes" else @@ -4372,7 +4370,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:4376: checking for shl_load in -ldld" >&5 +echo "configure:4374: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4380,7 +4378,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4410,12 +4408,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen""... $ac_c" 1>&6 -echo "configure:4414: checking for dlopen" >&5 +echo "configure:4412: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else @@ -4456,7 +4454,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:4460: checking for dlopen in -ldl" >&5 +echo "configure:4458: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4464,7 +4462,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4494,7 +4492,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6 -echo "configure:4498: checking for dlopen in -lsvld" >&5 +echo "configure:4496: checking for dlopen in -lsvld" >&5 ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4502,7 +4500,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsvld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4532,7 +4530,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 -echo "configure:4536: checking for dld_link in -ldld" >&5 +echo "configure:4534: checking for dld_link in -ldld" >&5 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4540,7 +4538,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4607,7 +4605,7 @@ LIBS="$lt_cv_dlopen_libs $LIBS" echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 -echo "configure:4611: checking whether a program can dlopen itself" >&5 +echo "configure:4609: checking whether a program can dlopen itself" >&5 if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4617,7 +4615,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + if { (eval echo configure:4680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in @@ -4701,7 +4699,7 @@ if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 -echo "configure:4705: checking whether a statically linked program can dlopen itself" >&5 +echo "configure:4703: checking whether a statically linked program can dlopen itself" >&5 if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4711,7 +4709,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + if { (eval echo configure:4774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in @@ -4823,14 +4821,14 @@ # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6 -echo "configure:4827: checking whether -lc should be explicitly linked in" >&5 +echo "configure:4825: checking whether -lc should be explicitly linked in" >&5 if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else $rm conftest* echo 'static int dummy;' > conftest.$ac_ext - if { (eval echo configure:4834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + if { (eval echo configure:4832: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then soname=conftest lib=conftest libobjs=conftest.$ac_objext @@ -4843,7 +4841,7 @@ libname=conftest save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= - if { (eval echo configure:4847: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; } + if { (eval echo configure:4845: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; } then lt_cv_archive_cmds_need_lc=no else @@ -5444,7 +5442,7 @@ fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:5448: checking host system type" >&5 +echo "configure:5446: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -5805,7 +5803,7 @@ fi echo $ac_n "checking if BerkeleyDB is desired""... $ac_c" 1>&6 -echo "configure:5809: checking if BerkeleyDB is desired" >&5 +echo "configure:5807: checking if BerkeleyDB is desired" >&5 if test x"$BERKELEY_DB_DIR" = xno ; then echo "$ac_t""no" 1>&6 BERKELEY_DB_LDFLAGS= @@ -5814,10 +5812,10 @@ else echo "$ac_t""yes" 1>&6 echo $ac_n "checking for BerkeleyDB location""... $ac_c" 1>&6 -echo "configure:5818: checking for BerkeleyDB location" >&5 +echo "configure:5816: checking for BerkeleyDB location" >&5 if test x"$BERKELEY_DB_DIR" = xyes ; then for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 \ - BerkeleyDB.3.3 BerkeleyDB.4.0 BerkeleyDB.4.1 ; do + BerkeleyDB.3.3 BerkeleyDB.4.0 BerkeleyDB.4.1 BerkeleyDB.4.2 BerkeleyDB.4.3 ; do for d in $prefix /usr/local /opt /usr ; do if test -d "$d/$v" ; then BERKELEY_DB_DIR="$d/$v" @@ -5827,7 +5825,7 @@ done fi if test x"$BERKELEY_DB_DIR" = xyes ; then - for v in db41 db4 db3 db2 ; do + for v in db43 db42 db41 db4 db3 db2 ; do if test -d "/usr/local/include/$v" ; then BERKELEY_DB_LDFLAGS="-L/usr/local/lib" BERKELEY_DB_CFLAGS="-I/usr/local/include/$v" @@ -5837,7 +5835,7 @@ fi done if test x"$BERKELEY_DB_LIB" = x ; then - for v in db41 db4 db3 db2 ; do + for v in db43 db42 db41 db4 db3 db2 ; do if test -d "/usr/include/$v" ; then BERKELEY_DB_CFLAGS="-I/usr/include/$v" BERKELEY_DB_LIB="-l$v" @@ -5875,7 +5873,7 @@ fi echo $ac_n "checking if OpenSSL is desired""... $ac_c" 1>&6 -echo "configure:5879: checking if OpenSSL is desired" >&5 +echo "configure:5877: checking if OpenSSL is desired" >&5 if test x"$OPENSSL_DIR" = xno ; then echo "$ac_t""no" 1>&6 SSL_BIN= @@ -5884,7 +5882,7 @@ else echo "$ac_t""yes" 1>&6 echo $ac_n "checking for OpenSSL location""... $ac_c" 1>&6 -echo "configure:5888: checking for OpenSSL location" >&5 +echo "configure:5886: checking for OpenSSL location" >&5 if test x"$OPENSSL_DIR" = xyes ; then for dir in $prefix /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg \ /usr/local /usr ; do @@ -5912,7 +5910,7 @@ LIBS="$LIBS -L${OPENSSL_DIR}/lib" SSL_LIB='' echo $ac_n "checking for RSAPublicEncrypt in -lrsaref""... $ac_c" 1>&6 -echo "configure:5916: checking for RSAPublicEncrypt in -lrsaref" >&5 +echo "configure:5914: checking for RSAPublicEncrypt in -lrsaref" >&5 ac_lib_var=`echo rsaref'_'RSAPublicEncrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5920,7 +5918,7 @@ ac_save_LIBS="$LIBS" LIBS="-lrsaref $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5947,7 +5945,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for RSAPublicEncrypt in -lRSAglue""... $ac_c" 1>&6 -echo "configure:5951: checking for RSAPublicEncrypt in -lRSAglue" >&5 +echo "configure:5949: checking for RSAPublicEncrypt in -lRSAglue" >&5 ac_lib_var=`echo RSAglue'_'RSAPublicEncrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5955,7 +5953,7 @@ ac_save_LIBS="$LIBS" LIBS="-lRSAglue -lrsaref $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5991,7 +5989,7 @@ fi echo $ac_n "checking for BIO_new in -lcrypto""... $ac_c" 1>&6 -echo "configure:5995: checking for BIO_new in -lcrypto" >&5 +echo "configure:5993: checking for BIO_new in -lcrypto" >&5 ac_lib_var=`echo crypto'_'BIO_new | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5999,7 +5997,7 @@ ac_save_LIBS="$LIBS" LIBS="-lcrypto $SSL_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6026,7 +6024,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for DSO_load in -ldl""... $ac_c" 1>&6 -echo "configure:6030: checking for DSO_load in -ldl" >&5 +echo "configure:6028: checking for DSO_load in -ldl" >&5 ac_lib_var=`echo dl'_'DSO_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6034,7 +6032,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldl -lcrypto -ldl $SSL_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6072,7 +6070,7 @@ fi echo $ac_n "checking for SSL_library_init in -lssl""... $ac_c" 1>&6 -echo "configure:6076: checking for SSL_library_init in -lssl" >&5 +echo "configure:6074: checking for SSL_library_init in -lssl" >&5 ac_lib_var=`echo ssl'_'SSL_library_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6080,7 +6078,7 @@ ac_save_LIBS="$LIBS" LIBS="-lssl $SSL_LIB $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6134,7 +6132,7 @@ fi echo $ac_n "checking if SASL is desired""... $ac_c" 1>&6 -echo "configure:6138: checking if SASL is desired" >&5 +echo "configure:6136: checking if SASL is desired" >&5 if test x"$SASL_DIR" = xno ; then echo "$ac_t""no" 1>&6 SASL_INC= @@ -6142,7 +6140,7 @@ else echo "$ac_t""yes" 1>&6 echo $ac_n "checking for SASL location""... $ac_c" 1>&6 -echo "configure:6146: checking for SASL location" >&5 +echo "configure:6144: checking for SASL location" >&5 if test x"$SASL_DIR" = xyes ; then for dir in $prefix /usr/local/sasl /usr/sasl /usr/pkg /usr/local ; do if test -f "$dir/include/sasl/sasl.h" ; then @@ -6158,7 +6156,7 @@ echo "$ac_t""$SASL_DIR" 1>&6 inn_save_LIBS=$LIBS echo $ac_n "checking for sasl_getprop in -lsasl2""... $ac_c" 1>&6 -echo "configure:6162: checking for sasl_getprop in -lsasl2" >&5 +echo "configure:6160: checking for sasl_getprop in -lsasl2" >&5 ac_lib_var=`echo sasl2'_'sasl_getprop | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6166,7 +6164,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsasl2 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6213,7 +6211,7 @@ inn_save_LIBS=$LIBS LIBS="$LIBS -L${SASL_DIR}/lib" echo $ac_n "checking for sasl_getprop in -lsasl2""... $ac_c" 1>&6 -echo "configure:6217: checking for sasl_getprop in -lsasl2" >&5 +echo "configure:6215: checking for sasl_getprop in -lsasl2" >&5 ac_lib_var=`echo sasl2'_'sasl_getprop | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6221,7 +6219,7 @@ ac_save_LIBS="$LIBS" LIBS="-lsasl2 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6309,46 +6307,18 @@ fi - -# Check whether --with-tcl or --without-tcl was given. -if test "${with_tcl+set}" = set; then - withval="$with_tcl" - TCL_DIR=$with_tcl -else - TCL_DIR=no -fi - -if test x"$TCL_DIR" = xno ; then - TCL_INC= - TCL_LIB= -else - if test x"$TCL_DIR" = xyes ; then - TCL_INC="-I/usr/local/include" - TCL_LIB="-L/usr/local/lib -ltcl -lm" - else - TCL_INC="-I${TCL_DIR}/include" - TCL_LIB="-L${TCL_DIR}/lib -ltcl -lm" - fi - cat >> confdefs.h <<\EOF -#define DO_TCL 1 -EOF - -fi - - - HOSTNAME=`hostname 2> /dev/null || uname -n` if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:6346: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:6316: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -6366,7 +6336,7 @@ if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -6390,7 +6360,7 @@ # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6394: checking for $ac_word" >&5 +echo "configure:6364: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6424,7 +6394,7 @@ *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 -echo "configure:6428: checking for yywrap in -l$ac_lib" >&5 +echo "configure:6398: checking for yywrap in -l$ac_lib" >&5 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6432,7 +6402,7 @@ ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6466,7 +6436,7 @@ fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:6470: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:6440: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6495,7 +6465,7 @@ # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6499: checking for $ac_word" >&5 +echo "configure:6469: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6527,7 +6497,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6531: checking for $ac_word" >&5 +echo "configure:6501: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6592,7 +6562,7 @@ # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6596: checking for $ac_word" >&5 +echo "configure:6566: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CTAGS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6634,7 +6604,7 @@ # Extract the first word of "awk", so it can be a program name with args. set dummy awk; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6638: checking for $ac_word" >&5 +echo "configure:6608: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6672,7 +6642,7 @@ # Extract the first word of "egrep", so it can be a program name with args. set dummy egrep; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6676: checking for $ac_word" >&5 +echo "configure:6646: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_EGREP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6710,7 +6680,7 @@ # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6714: checking for $ac_word" >&5 +echo "configure:6684: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6748,7 +6718,7 @@ # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6752: checking for $ac_word" >&5 +echo "configure:6722: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_SH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6786,7 +6756,7 @@ # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6790: checking for $ac_word" >&5 +echo "configure:6760: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_SED'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6824,7 +6794,7 @@ # Extract the first word of "sort", so it can be a program name with args. set dummy sort; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6828: checking for $ac_word" >&5 +echo "configure:6798: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_SORT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6864,7 +6834,7 @@ echo $ac_n "checking for Perl version""... $ac_c" 1>&6 -echo "configure:6868: checking for Perl version" >&5 +echo "configure:6838: checking for Perl version" >&5 if eval "test \"`echo '$''{'inn_cv_perl_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6883,7 +6853,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6887: checking for $ac_word" >&5 +echo "configure:6857: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PATH_GPGV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6923,7 +6893,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6927: checking for $ac_word" >&5 +echo "configure:6897: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_PGP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6968,7 +6938,7 @@ # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6972: checking for $ac_word" >&5 +echo "configure:6942: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GETFTP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7010,7 +6980,7 @@ *) # Extract the first word of ""$LOG_COMPRESS"", so it can be a program name with args. set dummy "$LOG_COMPRESS"; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7014: checking for $ac_word" >&5 +echo "configure:6984: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_LOG_COMPRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7049,7 +7019,7 @@ # Extract the first word of "compress", so it can be a program name with args. set dummy compress; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7053: checking for $ac_word" >&5 +echo "configure:7023: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_COMPRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7091,7 +7061,7 @@ # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7095: checking for $ac_word" >&5 +echo "configure:7065: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GZIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7140,13 +7110,13 @@ if test "${with_sendmail+set}" = set ; then echo $ac_n "checking for sendmail""... $ac_c" 1>&6 -echo "configure:7144: checking for sendmail" >&5 +echo "configure:7114: checking for sendmail" >&5 echo "$ac_t""$SENDMAIL" 1>&6 else # Extract the first word of "sendmail", so it can be a program name with args. set dummy sendmail; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7150: checking for $ac_word" >&5 +echo "configure:7120: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7186,7 +7156,7 @@ # Extract the first word of "uustat", so it can be a program name with args. set dummy uustat; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7190: checking for $ac_word" >&5 +echo "configure:7160: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_HAVE_UUSTAT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7219,7 +7189,7 @@ # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:7223: checking for $ac_word" >&5 +echo "configure:7193: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path__PATH_PYTHON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -7261,14 +7231,14 @@ echo $ac_n "checking for library containing setproctitle""... $ac_c" 1>&6 -echo "configure:7265: checking for library containing setproctitle" >&5 +echo "configure:7235: checking for library containing setproctitle" >&5 if eval "test \"`echo '$''{'ac_cv_search_setproctitle'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_setproctitle="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_setproctitle="none required" else @@ -7290,7 +7260,7 @@ test "$ac_cv_search_setproctitle" = "no" && for i in util; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_setproctitle="-l$i" break @@ -7326,12 +7296,12 @@ for ac_func in pstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7330: checking for $ac_func" >&5 +echo "configure:7300: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7382,14 +7352,14 @@ echo $ac_n "checking for library containing gethostbyname""... $ac_c" 1>&6 -echo "configure:7386: checking for library containing gethostbyname" >&5 +echo "configure:7356: checking for library containing gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_search_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_gethostbyname="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_gethostbyname="none required" else @@ -7411,7 +7381,7 @@ test "$ac_cv_search_gethostbyname" = "no" && for i in nsl; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_gethostbyname="-l$i" break @@ -7444,14 +7414,14 @@ fi echo $ac_n "checking for library containing socket""... $ac_c" 1>&6 -echo "configure:7448: checking for library containing socket" >&5 +echo "configure:7418: checking for library containing socket" >&5 if eval "test \"`echo '$''{'ac_cv_search_socket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_socket="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_socket="none required" else @@ -7473,7 +7443,7 @@ test "$ac_cv_search_socket" = "no" && for i in socket; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_socket="-l$i" break @@ -7503,7 +7473,7 @@ else : echo $ac_n "checking for socket in -lnsl""... $ac_c" 1>&6 -echo "configure:7507: checking for socket in -lnsl" >&5 +echo "configure:7477: checking for socket in -lnsl" >&5 ac_lib_var=`echo nsl'_'socket | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7511,7 +7481,7 @@ ac_save_LIBS="$LIBS" LIBS="-lnsl -lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7546,14 +7516,14 @@ echo $ac_n "checking for library containing inet_aton""... $ac_c" 1>&6 -echo "configure:7550: checking for library containing inet_aton" >&5 +echo "configure:7520: checking for library containing inet_aton" >&5 if eval "test \"`echo '$''{'ac_cv_search_inet_aton'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_inet_aton="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_aton="none required" else @@ -7575,7 +7545,7 @@ test "$ac_cv_search_inet_aton" = "no" && for i in resolv; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_aton="-l$i" break @@ -7611,14 +7581,14 @@ LIBS=${CRYPT_LIB} echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6 -echo "configure:7615: checking for library containing crypt" >&5 +echo "configure:7585: checking for library containing crypt" >&5 if eval "test \"`echo '$''{'ac_cv_search_crypt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_crypt="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_crypt="none required" else @@ -7640,7 +7610,7 @@ test "$ac_cv_search_crypt" = "no" && for i in crypt; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_crypt="-l$i" break @@ -7678,14 +7648,14 @@ LIBS=${SHADOW_LIB} echo $ac_n "checking for library containing getspnam""... $ac_c" 1>&6 -echo "configure:7682: checking for library containing getspnam" >&5 +echo "configure:7652: checking for library containing getspnam" >&5 if eval "test \"`echo '$''{'ac_cv_search_getspnam'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_getspnam="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_getspnam="none required" else @@ -7707,7 +7677,7 @@ test "$ac_cv_search_getspnam" = "no" && for i in shadow; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_getspnam="-l$i" break @@ -7745,14 +7715,14 @@ LIBS=${DBM_LIB} echo $ac_n "checking for library containing dbm_open""... $ac_c" 1>&6 -echo "configure:7749: checking for library containing dbm_open" >&5 +echo "configure:7719: checking for library containing dbm_open" >&5 if eval "test \"`echo '$''{'ac_cv_search_dbm_open'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_dbm_open="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_dbm_open="none required" else @@ -7774,7 +7744,7 @@ test "$ac_cv_search_dbm_open" = "no" && for i in ndbm dbm; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_dbm_open="-l$i" break @@ -7811,18 +7781,95 @@ fi LIBS=$inn_save_LIBS -inn_save_LIBS=$LIBS + +inn_check_pam=1 +for ac_hdr in pam/pam_appl.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:7791: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:7801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +ac_safe=`echo "security/pam_appl.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for security/pam_appl.h""... $ac_c" 1>&6 +echo "configure:7826: checking for security/pam_appl.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:7836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +inn_check_pam=0 +fi + +fi +done + +if test x"$inn_check_pam" = x1; then + inn_save_LIBS=$LIBS LIBS=${PAM_LIB} echo $ac_n "checking for library containing pam_start""... $ac_c" 1>&6 -echo "configure:7819: checking for library containing pam_start" >&5 +echo "configure:7866: checking for library containing pam_start" >&5 if eval "test \"`echo '$''{'ac_cv_search_pam_start'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_pam_start="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_pam_start="none required" else @@ -7844,7 +7891,7 @@ test "$ac_cv_search_pam_start" = "no" && for i in pam; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_pam_start="-l$i" break @@ -7881,20 +7928,21 @@ fi LIBS=$inn_save_LIBS +fi if test x"$inn_enable_keywords" = x1 ; then inn_save_LIBS=$LIBS LIBS=${REGEX_LIB} echo $ac_n "checking for library containing regexec""... $ac_c" 1>&6 -echo "configure:7891: checking for library containing regexec" >&5 +echo "configure:7939: checking for library containing regexec" >&5 if eval "test \"`echo '$''{'ac_cv_search_regexec'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_regexec="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_regexec="none required" else @@ -7916,7 +7964,7 @@ test "$ac_cv_search_regexec" = "no" && for i in regex; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_regexec="-l$i" break @@ -7956,14 +8004,14 @@ LIBS=${KRB5_LIB} echo $ac_n "checking for library containing krb5_parse_name""... $ac_c" 1>&6 -echo "configure:7960: checking for library containing krb5_parse_name" >&5 +echo "configure:8008: checking for library containing krb5_parse_name" >&5 if eval "test \"`echo '$''{'ac_cv_search_krb5_parse_name'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_krb5_parse_name="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_krb5_parse_name="none required" else @@ -7985,7 +8033,7 @@ test "$ac_cv_search_krb5_parse_name" = "no" && for i in krb5; do LIBS="-l$i $LIBS -lk5crypto -lcom_err $ac_func_search_save_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_krb5_parse_name="-l$i" break @@ -8028,12 +8076,12 @@ for ac_func in krb5_init_ets do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8032: checking for $ac_func" >&5 +echo "configure:8080: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8084,7 +8132,7 @@ if test x"$DO_PERL" = xDO ; then echo $ac_n "checking for Perl linkage""... $ac_c" 1>&6 -echo "configure:8088: checking for Perl linkage" >&5 +echo "configure:8136: checking for Perl linkage" >&5 inn_perl_core_path=`$_PATH_PERL -MConfig -e 'print $Config{archlibexp}'` inn_perl_core_flags=`$_PATH_PERL -MExtUtils::Embed -e ccopts` inn_perl_core_libs=`$_PATH_PERL -MExtUtils::Embed -e ldopts 2>&1 | tail -1` @@ -8125,7 +8173,7 @@ if test x"$DO_PYTHON" = xdefine ; then echo $ac_n "checking for Python linkage""... $ac_c" 1>&6 -echo "configure:8129: checking for Python linkage" >&5 +echo "configure:8177: checking for Python linkage" >&5 py_prefix=`$_PATH_PYTHON -c 'import sys; print sys.prefix'` py_ver=`$_PATH_PYTHON -c 'import sys; print sys.version[:3]'` py_libdir="${py_prefix}/lib/python${py_ver}" @@ -8149,7 +8197,7 @@ if test x"$inn_enable_largefiles" = xyes ; then echo $ac_n "checking for largefile linkage""... $ac_c" 1>&6 -echo "configure:8153: checking for largefile linkage" >&5 +echo "configure:8201: checking for largefile linkage" >&5 case "$host" in *-aix4.01*) echo "$ac_t""no" 1>&6 @@ -8186,7 +8234,7 @@ # Extract the first word of "getconf", so it can be a program name with args. set dummy getconf; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8190: checking for $ac_word" >&5 +echo "configure:8238: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GETCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8238,12 +8286,12 @@ fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:8242: checking for ANSI C header files" >&5 +echo "configure:8290: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8251,7 +8299,7 @@ #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8303: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8268,7 +8316,7 @@ if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -8286,7 +8334,7 @@ if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -8307,7 +8355,7 @@ : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -8318,7 +8366,7 @@ exit (0); } EOF -if { (eval echo configure:8322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:8370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -8347,17 +8395,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:8351: checking for $ac_hdr" >&5 +echo "configure:8399: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8386,12 +8434,12 @@ for ac_func in memcpy strchr do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8390: checking for $ac_func" >&5 +echo "configure:8438: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8445,12 +8493,12 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:8449: checking for $ac_hdr that defines DIR" >&5 +echo "configure:8497: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -8458,7 +8506,7 @@ DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:8462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -8483,7 +8531,7 @@ # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:8487: checking for opendir in -ldir" >&5 +echo "configure:8535: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8491,7 +8539,7 @@ ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8524,7 +8572,7 @@ else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:8528: checking for opendir in -lx" >&5 +echo "configure:8576: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8532,7 +8580,7 @@ ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8566,12 +8614,12 @@ fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:8570: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:8618: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8580,7 +8628,7 @@ struct tm *tp; ; return 0; } EOF -if { (eval echo configure:8584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8632: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -8601,12 +8649,12 @@ fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:8605: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:8653: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8622,7 +8670,7 @@ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:8626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -8650,17 +8698,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:8654: checking for $ac_hdr" >&5 +echo "configure:8702: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8664: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8712: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8692,17 +8740,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:8696: checking for $ac_hdr" >&5 +echo "configure:8744: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8754: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8732,19 +8780,19 @@ echo $ac_n "checking whether h_errno must be declared""... $ac_c" 1>&6 -echo "configure:8736: checking whether h_errno must be declared" >&5 +echo "configure:8784: checking whether h_errno must be declared" >&5 if eval "test \"`echo '$''{'inn_cv_herrno_need_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { h_errno = 0; ; return 0; } EOF -if { (eval echo configure:8748: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8796: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_herrno_need_decl=no else @@ -8768,12 +8816,12 @@ echo $ac_n "checking whether inet_aton must be declared""... $ac_c" 1>&6 -echo "configure:8772: checking whether inet_aton must be declared" >&5 +echo "configure:8820: checking whether inet_aton must be declared" >&5 if eval "test \"`echo '$''{'inn_cv_decl_needed_inet_aton'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8808,7 +8856,7 @@ char *(*pfn) = (char *(*)) inet_aton ; return 0; } EOF -if { (eval echo configure:8812: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8860: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_decl_needed_inet_aton=no else @@ -8830,12 +8878,12 @@ echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether inet_ntoa must be declared""... $ac_c" 1>&6 -echo "configure:8834: checking whether inet_ntoa must be declared" >&5 +echo "configure:8882: checking whether inet_ntoa must be declared" >&5 if eval "test \"`echo '$''{'inn_cv_decl_needed_inet_ntoa'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8870,7 +8918,7 @@ char *(*pfn) = (char *(*)) inet_ntoa ; return 0; } EOF -if { (eval echo configure:8874: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_decl_needed_inet_ntoa=no else @@ -8892,12 +8940,12 @@ echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether snprintf must be declared""... $ac_c" 1>&6 -echo "configure:8896: checking whether snprintf must be declared" >&5 +echo "configure:8944: checking whether snprintf must be declared" >&5 if eval "test \"`echo '$''{'inn_cv_decl_needed_snprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8931,7 +8979,7 @@ char *(*pfn) = (char *(*)) snprintf ; return 0; } EOF -if { (eval echo configure:8935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:8983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_decl_needed_snprintf=no else @@ -8953,12 +9001,12 @@ echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether vsnprintf must be declared""... $ac_c" 1>&6 -echo "configure:8957: checking whether vsnprintf must be declared" >&5 +echo "configure:9005: checking whether vsnprintf must be declared" >&5 if eval "test \"`echo '$''{'inn_cv_decl_needed_vsnprintf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -8992,7 +9040,7 @@ char *(*pfn) = (char *(*)) vsnprintf ; return 0; } EOF -if { (eval echo configure:8996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_decl_needed_vsnprintf=no else @@ -9015,14 +9063,14 @@ fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:9019: checking whether byte ordering is bigendian" >&5 +echo "configure:9067: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -9033,11 +9081,11 @@ #endif ; return 0; } EOF -if { (eval echo configure:9037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -9048,7 +9096,7 @@ #endif ; return 0; } EOF -if { (eval echo configure:9052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -9068,7 +9116,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -9105,12 +9153,12 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:9109: checking for working const" >&5 +echo "configure:9157: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -9180,12 +9228,12 @@ fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:9184: checking for st_blksize in struct stat" >&5 +echo "configure:9232: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9193,7 +9241,7 @@ struct stat s; s.st_blksize; ; return 0; } EOF -if { (eval echo configure:9197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9245: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else @@ -9214,12 +9262,12 @@ fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:9218: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:9266: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9227,7 +9275,7 @@ struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:9231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9279: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -9248,12 +9296,12 @@ fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:9252: checking for size_t" >&5 +echo "configure:9300: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -9281,12 +9329,12 @@ fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:9285: checking for uid_t in sys/types.h" >&5 +echo "configure:9333: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -9315,12 +9363,12 @@ fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:9319: checking for off_t" >&5 +echo "configure:9367: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -9348,12 +9396,12 @@ fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:9352: checking for pid_t" >&5 +echo "configure:9400: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -9380,13 +9428,46 @@ fi +echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6 +echo "configure:9433: checking for ptrdiff_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_ptrdiff_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])ptrdiff_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_ptrdiff_t=yes +else + rm -rf conftest* + ac_cv_type_ptrdiff_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_ptrdiff_t" 1>&6 +if test $ac_cv_type_ptrdiff_t = no; then + cat >> confdefs.h <<\EOF +#define ptrdiff_t long +EOF + +fi + echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:9385: checking for ssize_t" >&5 +echo "configure:9466: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -9416,12 +9497,12 @@ echo $ac_n "checking for C99 variadic macros""... $ac_c" 1>&6 -echo "configure:9420: checking for C99 variadic macros" >&5 +echo "configure:9501: checking for C99 variadic macros" >&5 if eval "test \"`echo '$''{'inn_cv_c_c99_vamacros'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #define error(...) fprintf(stderr, __VA_ARGS__) @@ -9429,7 +9510,7 @@ error("foo"); error("foo %d", 0); return 0; ; return 0; } EOF -if { (eval echo configure:9433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_c_c99_vamacros=yes else @@ -9451,12 +9532,12 @@ echo $ac_n "checking for GNU-style variadic macros""... $ac_c" 1>&6 -echo "configure:9455: checking for GNU-style variadic macros" >&5 +echo "configure:9536: checking for GNU-style variadic macros" >&5 if eval "test \"`echo '$''{'inn_cv_c_gnu_vamacros'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #define error(args...) fprintf(stderr, args) @@ -9464,7 +9545,7 @@ error("foo"); error("foo %d", 0); return 0; ; return 0; } EOF -if { (eval echo configure:9468: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_c_gnu_vamacros=yes else @@ -9486,19 +9567,19 @@ echo $ac_n "checking for long long int""... $ac_c" 1>&6 -echo "configure:9490: checking for long long int" >&5 +echo "configure:9571: checking for long long int" >&5 if eval "test \"`echo '$''{'inn_cv_c_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_c_long_long=yes else @@ -9522,12 +9603,12 @@ echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6 -echo "configure:9526: checking for sig_atomic_t" >&5 +echo "configure:9607: checking for sig_atomic_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef STDC_HEADERS @@ -9558,12 +9639,12 @@ fi echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 -echo "configure:9562: checking for socklen_t" >&5 +echo "configure:9643: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef STDC_HEADERS @@ -9597,7 +9678,7 @@ echo $ac_n "checking value of IOV_MAX""... $ac_c" 1>&6 -echo "configure:9601: checking value of IOV_MAX" >&5 +echo "configure:9682: checking value of IOV_MAX" >&5 if eval "test \"`echo '$''{'inn_cv_macro_iov_max'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9605,7 +9686,7 @@ 16 else cat > conftest.$ac_ext < #include @@ -9653,7 +9734,7 @@ return 0; } EOF -if { (eval echo configure:9657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_macro_iov_max=`cat conftestval` else @@ -9681,12 +9762,12 @@ echo $ac_n "checking for SUN_LEN""... $ac_c" 1>&6 -echo "configure:9685: checking for SUN_LEN" >&5 +echo "configure:9766: checking for SUN_LEN" >&5 if eval "test \"`echo '$''{'inn_cv_macro_sun_len'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9697,7 +9778,7 @@ i = SUN_LEN(&sun); ; return 0; } EOF -if { (eval echo configure:9701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_macro_sun_len=yes else @@ -9719,19 +9800,19 @@ echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6 -echo "configure:9723: checking for tm_gmtoff in struct tm" >&5 +echo "configure:9804: checking for tm_gmtoff in struct tm" >&5 if eval "test \"`echo '$''{'inn_cv_struct_tm_gmtoff'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct tm t; t.tm_gmtoff = 3600 ; return 0; } EOF -if { (eval echo configure:9735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_struct_tm_gmtoff=yes else @@ -9753,19 +9834,19 @@ echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:9757: checking for tm_zone in struct tm" >&5 +echo "configure:9838: checking for tm_zone in struct tm" >&5 if eval "test \"`echo '$''{'inn_cv_struct_tm_zone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct tm t; t.tm_zone = "UTC" ; return 0; } EOF -if { (eval echo configure:9769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_struct_tm_zone=yes else @@ -9787,19 +9868,19 @@ echo $ac_n "checking for timezone variable""... $ac_c" 1>&6 -echo "configure:9791: checking for timezone variable" >&5 +echo "configure:9872: checking for timezone variable" >&5 if eval "test \"`echo '$''{'inn_cv_var_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { timezone = 3600; altzone = 7200 ; return 0; } EOF -if { (eval echo configure:9803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_timezone=yes else @@ -9821,19 +9902,19 @@ echo $ac_n "checking for tzname variable""... $ac_c" 1>&6 -echo "configure:9825: checking for tzname variable" >&5 +echo "configure:9906: checking for tzname variable" >&5 if eval "test \"`echo '$''{'inn_cv_var_tzname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { *tzname = "UTC" ; return 0; } EOF -if { (eval echo configure:9837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_tzname=yes else @@ -9856,7 +9937,7 @@ echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:9860: checking size of int" >&5 +echo "configure:9941: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9864,7 +9945,7 @@ ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() @@ -9875,7 +9956,7 @@ exit(0); } EOF -if { (eval echo configure:9879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -9894,7 +9975,7 @@ INN_INT32=int else echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:9898: checking size of long" >&5 +echo "configure:9979: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9902,7 +9983,7 @@ ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() @@ -9913,7 +9994,7 @@ exit(0); } EOF -if { (eval echo configure:9917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -9932,7 +10013,7 @@ INN_INT32=long else echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:9936: checking size of short" >&5 +echo "configure:10017: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9940,7 +10021,7 @@ ac_cv_sizeof_short=2 else cat > conftest.$ac_ext < main() @@ -9951,7 +10032,7 @@ exit(0); } EOF -if { (eval echo configure:9955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -9978,12 +10059,12 @@ echo $ac_n "checking for int32_t""... $ac_c" 1>&6 -echo "configure:9982: checking for int32_t" >&5 +echo "configure:10063: checking for int32_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_int32_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef STDC_HEADERS @@ -10021,12 +10102,12 @@ echo $ac_n "checking for uint32_t""... $ac_c" 1>&6 -echo "configure:10025: checking for uint32_t" >&5 +echo "configure:10106: checking for uint32_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_uint32_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef STDC_HEADERS @@ -10063,7 +10144,7 @@ fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:10067: checking for 8-bit clean memcmp" >&5 +echo "configure:10148: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10071,7 +10152,7 @@ ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -10099,12 +10180,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:10103: checking return type of signal handlers" >&5 +echo "configure:10184: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10121,7 +10202,7 @@ int i; ; return 0; } EOF -if { (eval echo configure:10125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -10144,7 +10225,7 @@ echo $ac_n "checking for working inet_ntoa""... $ac_c" 1>&6 -echo "configure:10148: checking for working inet_ntoa" >&5 +echo "configure:10229: checking for working inet_ntoa" >&5 if eval "test \"`echo '$''{'inn_cv_func_inet_ntoa_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10152,7 +10233,7 @@ inn_cv_func_inet_ntoa_works=no else cat > conftest.$ac_ext < #include @@ -10170,7 +10251,7 @@ return (!strcmp (inet_ntoa (in), "127.0.0.0") ? 0 : 1); } EOF -if { (eval echo configure:10174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_func_inet_ntoa_works=yes else @@ -10196,12 +10277,12 @@ echo $ac_n "checking whether struct sockaddr has sa_len""... $ac_c" 1>&6 -echo "configure:10200: checking whether struct sockaddr has sa_len" >&5 +echo "configure:10281: checking whether struct sockaddr has sa_len" >&5 if eval "test \"`echo '$''{'inn_cv_struct_sockaddr_sa_len'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10210,7 +10291,7 @@ struct sockaddr sa; int x = sa.sa_len; ; return 0; } EOF -if { (eval echo configure:10214: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_struct_sockaddr_sa_len=yes else @@ -10232,12 +10313,12 @@ echo $ac_n "checking for SA_LEN(s) macro""... $ac_c" 1>&6 -echo "configure:10236: checking for SA_LEN(s) macro" >&5 +echo "configure:10317: checking for SA_LEN(s) macro" >&5 if eval "test \"`echo '$''{'inn_cv_sa_len_macro'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10246,7 +10327,7 @@ struct sockaddr sa; int x = SA_LEN(&sa); ; return 0; } EOF -if { (eval echo configure:10250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_sa_len_macro=yes else @@ -10270,12 +10351,12 @@ echo $ac_n "checking for struct sockaddr_storage""... $ac_c" 1>&6 -echo "configure:10274: checking for struct sockaddr_storage" >&5 +echo "configure:10355: checking for struct sockaddr_storage" >&5 if eval "test \"`echo '$''{'inn_cv_struct_sockaddr_storage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10284,7 +10365,7 @@ struct sockaddr_storage ss; ; return 0; } EOF -if { (eval echo configure:10288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_struct_sockaddr_storage=yes else @@ -10303,12 +10384,12 @@ EOF echo $ac_n "checking for RFC 2553 style sockaddr_storage member names""... $ac_c" 1>&6 -echo "configure:10307: checking for RFC 2553 style sockaddr_storage member names" >&5 +echo "configure:10388: checking for RFC 2553 style sockaddr_storage member names" >&5 if eval "test \"`echo '$''{'inn_cv_2553_ss_family'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10317,7 +10398,7 @@ struct sockaddr_storage ss; int x=ss.ss_family; ; return 0; } EOF -if { (eval echo configure:10321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10402: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_2553_ss_family=no else @@ -10343,7 +10424,7 @@ if test "$inn_enable_ipv6_tests" = yes ; then echo $ac_n "checking whether IN6_ARE_ADDR_EQUAL macro is broken""... $ac_c" 1>&6 -echo "configure:10347: checking whether IN6_ARE_ADDR_EQUAL macro is broken" >&5 +echo "configure:10428: checking whether IN6_ARE_ADDR_EQUAL macro is broken" >&5 if eval "test \"`echo '$''{'inn_cv_in6_are_addr_equal_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10351,7 +10432,7 @@ inn_cv_in6_are_addr_equal_broken=no else cat > conftest.$ac_ext < #include @@ -10369,7 +10450,7 @@ return IN6_ARE_ADDR_EQUAL(&a,&b) ? 0 : 1; } EOF -if { (eval echo configure:10373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_in6_are_addr_equal_broken=no else @@ -10396,7 +10477,7 @@ echo $ac_n "checking for working snprintf""... $ac_c" 1>&6 -echo "configure:10400: checking for working snprintf" >&5 +echo "configure:10481: checking for working snprintf" >&5 if eval "test \"`echo '$''{'inn_cv_func_snprintf_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10404,7 +10485,7 @@ inn_cv_func_snprintf_works=no else cat > conftest.$ac_ext < #include @@ -10430,7 +10511,7 @@ && snprintf(NULL, 0, "%s", "abcd") == 4) ? 0 : 1); } EOF -if { (eval echo configure:10434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_func_snprintf_works=yes else @@ -10459,12 +10540,12 @@ strncasecmp strtoul symlink sysconf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10463: checking for $ac_func" >&5 +echo "configure:10544: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10516,12 +10597,12 @@ for ac_func in getdtablesize ulimit do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10520: checking for $ac_func" >&5 +echo "configure:10601: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10574,12 +10655,12 @@ for ac_func in statfs do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10578: checking for $ac_func" >&5 +echo "configure:10659: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10630,17 +10711,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10634: checking for $ac_hdr" >&5 +echo "configure:10715: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10725: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10673,12 +10754,12 @@ strspn setenv do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10677: checking for $ac_func" >&5 +echo "configure:10758: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10734,7 +10815,7 @@ if test "$ac_cv_func_fseeko" = no || test "$ac_cv_func_ftello" = no ; then echo $ac_n "checking for off_t-compatible fpos_t""... $ac_c" 1>&6 -echo "configure:10738: checking for off_t-compatible fpos_t" >&5 +echo "configure:10819: checking for off_t-compatible fpos_t" >&5 if eval "test \"`echo '$''{'inn_cv_type_fpos_t_large'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10742,7 +10823,7 @@ inn_cv_type_fpos_t_large=no else cat > conftest.$ac_ext < #include @@ -10756,7 +10837,7 @@ exit(off == (off_t) 9223372036854775807ULL ? 0 : 1); } EOF -if { (eval echo configure:10760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_type_fpos_t_large=yes else @@ -10795,7 +10876,7 @@ echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:10799: checking for working mmap" >&5 +echo "configure:10880: checking for working mmap" >&5 if eval "test \"`echo '$''{'inn_cv_func_mmap'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10803,7 +10884,7 @@ inn_cv_func_mmap=no else cat > conftest.$ac_ext < #include @@ -10867,7 +10948,7 @@ return 0; } EOF -if { (eval echo configure:10871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_func_mmap=yes else @@ -10892,12 +10973,12 @@ for ac_func in madvise do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10896: checking for $ac_func" >&5 +echo "configure:10977: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10945,7 +11026,7 @@ done echo $ac_n "checking whether mmap sees writes""... $ac_c" 1>&6 -echo "configure:10949: checking whether mmap sees writes" >&5 +echo "configure:11030: checking whether mmap sees writes" >&5 if eval "test \"`echo '$''{'inn_cv_func_mmap_sees_writes'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10953,7 +11034,7 @@ inn_cv_func_mmap_sees_writes=no else cat > conftest.$ac_ext < #include @@ -10989,7 +11070,7 @@ return 0; } EOF -if { (eval echo configure:10993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_func_mmap_sees_writes=yes else @@ -11011,7 +11092,7 @@ fi echo $ac_n "checking whether msync is needed""... $ac_c" 1>&6 -echo "configure:11015: checking whether msync is needed" >&5 +echo "configure:11096: checking whether msync is needed" >&5 if eval "test \"`echo '$''{'inn_cv_func_mmap_need_msync'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11019,7 +11100,7 @@ inn_cv_func_mmap_need_msync=yes else cat > conftest.$ac_ext < #include @@ -11090,7 +11171,7 @@ return 0; } EOF -if { (eval echo configure:11094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then inn_cv_func_mmap_need_msync=no else @@ -11112,12 +11193,12 @@ fi echo $ac_n "checking how many arguments msync takes""... $ac_c" 1>&6 -echo "configure:11116: checking how many arguments msync takes" >&5 +echo "configure:11197: checking how many arguments msync takes" >&5 if eval "test \"`echo '$''{'inn_cv_func_msync_args'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11125,7 +11206,7 @@ char *p; int psize; msync (p, psize, MS_ASYNC); ; return 0; } EOF -if { (eval echo configure:11129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11210: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* inn_cv_func_msync_args=3 else @@ -11148,12 +11229,12 @@ echo $ac_n "checking for Unix domain sockets""... $ac_c" 1>&6 -echo "configure:11152: checking for Unix domain sockets" >&5 +echo "configure:11233: checking for Unix domain sockets" >&5 if eval "test \"`echo '$''{'inn_cv_sys_unix_sockets'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef AF_UNIX @@ -11182,12 +11263,12 @@ echo $ac_n "checking log facility for news""... $ac_c" 1>&6 -echo "configure:11186: checking log facility for news" >&5 +echo "configure:11267: checking log facility for news" >&5 if eval "test \"`echo '$''{'inn_cv_log_facility'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef LOG_NEWS @@ -11423,8 +11504,6 @@ s%@SSL_LIB@%$SSL_LIB%g s%@SASL_INC@%$SASL_INC%g s%@SASL_LIB@%$SASL_LIB%g -s%@TCL_LIB@%$TCL_LIB%g -s%@TCL_INC@%$TCL_INC%g s%@HOSTNAME@%$HOSTNAME%g s%@LEX@%$LEX%g s%@LEXLIB@%$LEXLIB%g diff -ruN inn-2.4.1/configure.in inn-2.4.2/configure.in --- inn-2.4.1/configure.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/configure.in Wed Dec 22 04:21:19 2004 @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $Id: configure.in,v 1.244.2.3 2004/01/07 22:38:50 rra Exp $ +dnl $Id: configure.in,v 1.244.2.8 2004/12/20 01:43:09 hkehoe Exp $ dnl dnl Please try to follow GNU conventions and autoconf manual conventions as dnl much as possible in this file so that any macros we develop can be easily @@ -34,7 +34,7 @@ dnl useful information for someone debugging a problem than configure-time dnl errors. -AC_REVISION($Revision: 1.244.2.3 $)dnl +AC_REVISION($Revision: 1.244.2.8 $)dnl AC_PREREQ(2.13) AC_INIT(Makefile.global.in) AC_CONFIG_AUX_DIR(support) @@ -365,7 +365,7 @@ AC_MSG_CHECKING(for BerkeleyDB location) if test x"$BERKELEY_DB_DIR" = xyes ; then for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 \ - BerkeleyDB.3.3 BerkeleyDB.4.0 BerkeleyDB.4.1 ; do + BerkeleyDB.3.3 BerkeleyDB.4.0 BerkeleyDB.4.1 BerkeleyDB.4.2 BerkeleyDB.4.3 ; do for d in $prefix /usr/local /opt /usr ; do if test -d "$d/$v" ; then BERKELEY_DB_DIR="$d/$v" @@ -375,7 +375,7 @@ done fi if test x"$BERKELEY_DB_DIR" = xyes ; then - for v in db41 db4 db3 db2 ; do + for v in db43 db42 db41 db4 db3 db2 ; do if test -d "/usr/local/include/$v" ; then BERKELEY_DB_LDFLAGS="-L/usr/local/lib" BERKELEY_DB_CFLAGS="-I/usr/local/include/$v" @@ -385,7 +385,7 @@ fi done if test x"$BERKELEY_DB_LIB" = x ; then - for v in db41 db4 db3 db2 ; do + for v in db43 db42 db41 db4 db3 db2 ; do if test -d "/usr/include/$v" ; then BERKELEY_DB_CFLAGS="-I/usr/include/$v" BERKELEY_DB_LIB="-l$v" @@ -567,34 +567,6 @@ esac], DO_PYTHON=DONT) -dnl Tcl support. For Tcl, the user can supply the path to the Tcl include -dnl files and libraries (for Perl and Python, this is determined -dnl automatically from little scripts run by the binary found in the user's -dnl path). -dnl -dnl FIXME: This should really use tclConfig.sh. -AC_DEFUN([INN_LIB_TCL], -[AC_ARG_WITH(tcl, - [ --with-tcl=PATH Embedded TCL script support [default=no]], - TCL_DIR=$with_tcl, - TCL_DIR=no) -if test x"$TCL_DIR" = xno ; then - TCL_INC= - TCL_LIB= -else - if test x"$TCL_DIR" = xyes ; then - TCL_INC="-I/usr/local/include" - TCL_LIB="-L/usr/local/lib -ltcl -lm" - else - TCL_INC="-I${TCL_DIR}/include" - TCL_LIB="-L${TCL_DIR}/lib -ltcl -lm" - fi - AC_DEFINE(DO_TCL, 1, [Define to compile in TCL script support.]) -fi -AC_SUBST(TCL_LIB) -AC_SUBST(TCL_INC)]) -INN_LIB_TCL - dnl Set some configuration file defaults from the machine hostname. HOSTNAME=`hostname 2> /dev/null || uname -n` AC_SUBST(HOSTNAME) @@ -810,8 +782,17 @@ INN_SEARCH_AUX_LIBS(getspnam, shadow, SHADOW_LIB) INN_SEARCH_AUX_LIBS(dbm_open, ndbm dbm, DBM_LIB, [AC_DEFINE(HAVE_DBM, 1, [Define if you have a dbm library.])]) -INN_SEARCH_AUX_LIBS(pam_start, pam, PAM_LIB, - [AC_DEFINE(HAVE_PAM, 1, [Define if you have PAM.])]) + +dnl IRIX has a PAM library with the right symbols but no header files suitable +dnl for use with it, so we have to check the header files first and then only +dnl if one is found do we check for the library. +inn_check_pam=1 +AC_CHECK_HEADERS([pam/pam_appl.h], , + [AC_CHECK_HEADER([security/pam_appl.h], , [inn_check_pam=0])]) +if test x"$inn_check_pam" = x1; then + INN_SEARCH_AUX_LIBS([pam_start], [pam], [PAM_LIB], + [AC_DEFINE([HAVE_PAM], 1, [Define if you have PAM.])]) +fi dnl If keyword generation support was requested, check for the appropriate dnl libraries. @@ -1082,6 +1063,7 @@ AC_TYPE_UID_T AC_TYPE_OFF_T AC_TYPE_PID_T +AC_CHECK_TYPE(ptrdiff_t, long) AC_CHECK_TYPE(ssize_t, int) dnl Check for ISO C99 variadic macro support in the compiler. diff -ruN inn-2.4.1/contrib/respool.c inn-2.4.2/contrib/respool.c --- inn-2.4.1/contrib/respool.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/contrib/respool.c Wed Dec 22 04:21:19 2004 @@ -71,7 +71,7 @@ int main(int argc UNUSED, char *argv[]) { - int one = 1; + bool one = true; char buff[SMBUF]; ME = argv[0]; diff -ruN inn-2.4.1/control/Makefile inn-2.4.2/control/Makefile --- inn-2.4.1/control/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/control/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.11 2003/04/20 19:04:11 vinocur Exp $ +## $Id: Makefile,v 1.11.2.1 2004/05/18 01:18:54 rra Exp $ include ../Makefile.global @@ -9,22 +9,21 @@ MAN = ../doc/man/perl-nocem.8 ../doc/man/pgpverify.1 -INSTALLED = $(D)$(PATHBIN)/controlbatch \ - $(D)$(PATHBIN)/controlchan \ - $(D)$(PATHBIN)/docheckgroups \ - $(D)$(PATHBIN)/gpgverify \ - $(D)$(PATHBIN)/perl-nocem \ - $(D)$(PATHBIN)/pgpverify \ - $(D)$(PATHBIN)/signcontrol - all: $(ALL) +install: all + for F in $(ALL) ; do \ + $(CP_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + for M in modules/*.pl ; do \ + $(CP_RPUB) $$M $D$(PATHCONTROL)/`basename $$M` ; \ + done + man: $(MAN) clean clobber distclean: rm -f $(ALL) - profiled: all depend: @@ -50,21 +49,3 @@ ../doc/man/pgpverify.1: pgpverify $(POD2MAN) -s 1 $? > $@ - - -## Installation rules. Installation commands set in Makefile.global. - -COPY = ../$(INSTALL) $(OWNER) -m 644 -B .OLD - -install: $(INSTALLED) - cd modules && for M in *.pl ; do \ - $(COPY) $$M $D$(PATHCONTROL)/$$M ; \ - done - -$(D)$(PATHBIN)/controlbatch: controlbatch ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/controlchan: controlchan ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/docheckgroups: docheckgroups ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/gpgverify: gpgverify ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/perl-nocem: perl-nocem ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/pgpverify: pgpverify ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/signcontrol: signcontrol ; $(CP_XPUB) $? $@ diff -ruN inn-2.4.1/control/controlchan.in inn-2.4.2/control/controlchan.in --- inn-2.4.1/control/controlchan.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/control/controlchan.in Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ #! /usr/bin/perl -w require "/usr/local/news/lib/innshellvars.pl"; -## $Id: controlchan.in,v 1.7 2002/11/21 00:03:15 vinocur Exp $ +## $Id: controlchan.in,v 1.7.2.3 2004/05/17 05:26:36 rra Exp $ ## ## Channel feed program to route control messages to an appropriate handler. ## @@ -50,14 +50,14 @@ if ($use_syslog) { eval "sub Sys::Syslog::_PATH_LOG { '/dev/log' }" if $^O eq 'dec_osf'; - Sys::Syslog::setlogsock('unix') if $^O =~ /linux|dec_osf/; + Sys::Syslog::setlogsock('unix') if $^O =~ /linux|dec_osf|freebsd|darwin/; openlog('controlchan', 'pid', $inn::syslog_facility); } logmsg('starting'); # load modules from the control directory ################################# opendir(CTL, $inn::controlprogs) - or logdie("Cannot open $inn::controlprogs", 'crit'); + or logdie("Cannot open $inn::controlprogs: $!", 'crit'); foreach (readdir CTL) { next if not /^([a-z\.]+\.pl)$/ or not -f "$inn::controlprogs/$_"; eval { require "$inn::controlprogs/$1" }; @@ -228,7 +228,7 @@ my @ctllist; open(CTLFILE, $inn::ctlfile) - or logdie("Cannot open $inn::ctlfile", 'crit'); + or logdie("Cannot open $inn::ctlfile: $!", 'crit'); while () { chop; # Not a comment or blank? Convert wildmat to regex diff -ruN inn-2.4.1/control/gpgverify.in inn-2.4.2/control/gpgverify.in --- inn-2.4.1/control/gpgverify.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/control/gpgverify.in Wed Dec 22 04:21:19 2004 @@ -16,8 +16,11 @@ use strict; # if you keep your keyring somewhere that is not the default used by gpg, -# set appropriately the next line. -my $keyring = ($inn::newsetc ? $inn::newsetc . '/pgp/' : '') . 'pubring.gpg'; +# change the location below. +my $keyring; +if ($inn::newsetc && -d "$inn::newsetc/pgp") { + $keyring = $inn::newsetc . '/pgp/pubring.gpg'; +} # If you have INN and the script is able to successfully include your # innshellvars.pl file, the value of the next two variables will be diff -ruN inn-2.4.1/control/pgpverify.in inn-2.4.2/control/pgpverify.in --- inn-2.4.1/control/pgpverify.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/control/pgpverify.in Wed Dec 22 04:21:19 2004 @@ -1,16 +1,35 @@ -#! /usr/bin/perl -ws -do '@LIBDIR@/innshellvars.pl'; -# Remove the above line if not running as part of INN. +#! /usr/bin/perl -w +# do '@LIBDIR@/innshellvars.pl'; +# If running inside INN, uncomment the above and point to innshellvars.pl. # # written April 1996, tale@isc.org (David C Lawrence) # Currently maintained by Russ Allbery -# Version 1.15, 25 Nov 2002 +# Version 1.25, 2003-12-10 # -# NOTICE TO INN MAINTAINERS: The version that is shipped with INN -# is the same as the version that I make available to the rest of the -# world (including non-INN sites), so please make all changes through me. -# -# This program is intended to be compatible with Perl 4 and Perl 5. +# NOTICE TO INN MAINTAINERS: The version that is shipped with INN is the +# same as the version that I make available to the rest of the world +# (including non-INN sites), so please make all changes through me. +# +# This program requires Perl 5, probably at least about Perl 5.003 since +# that's when FileHandle was introduced. If you want to use this program +# and your Perl is too old, please contact me (rra@stanford.edu) and tell +# me about it; I want to know what old versions of Perl are still used in +# practice. +# +# Changes from 1.24 -> 1.25 +# -- Fix the -test switch to actually do something. +# -- Improve date generation when logging to standard output. +# +# Changes from 1.23 -> 1.24 +# -- Fix bug in the recognition of wire-format articles. +# +# Changes from 1.15 -> 1.23 +# -- Bump version number to match CVS revision number. +# -- Replaced all signature verification code with code that uses detached +# signatures. Signatures generated by GnuPG couldn't be verified using +# attached signatures without adding a Hash header, and this was the +# path of least resistance plus avoids munging problems in the future. +# Code taken from PGP::Sign. # # Changes from 1.14 -> 1.15 # -- Added POD documentation. @@ -53,8 +72,8 @@ # Changes from 1.9 -> 1.10 # -- minor diddling for INN 2.0: use $inn'pathtmp if it exists, and # work with the new subst method to find innshellvars.pl -# -- do not truncate the tmp file when opening, in case it is really linked -# to another file +# -- do not truncate the tmp file when opening, in case it is really +# linked to another file # # Changes from 1.8 -> 1.9 # -- match 'Bad signature' pgp output to return exit status 3 by removing @@ -67,14 +86,17 @@ # -- parse PGP 5.0 'good signature' lines. # -- allow -test swtich; prints pgp input and output # -- look for pgp in INN's innshellvars.pl -# -- changed regexp delimiters for stripping $0 to be compatible with old perl +# -- changed regexp delimiters for stripping $0 to be compatible with old +# perl # # Changes from 1.5 -> 1.6 # -- handle articles encoded in NNTP format ('.' starting line is doubled, # \r\n at line end) by stripping NNTP encoding. -# -- exit 255 with pointer to $HOME or $PGPPATH if pgp can't find key ring. -# (probably doesn't match the necessary error message with ViaCrypt PGP) -# -- failures also report message-id so the article can be looked up to retry. +# -- exit 255 with pointer to $HOME or $PGPPATH if pgp can't find key +# ring. (probably doesn't match the necessary error message with +# ViaCrypt PGP) +# -- failures also report message-id so the article can be looked up to +# retry. # # Changes from 1.4 -> 1.5 # -- force English lanugage for 'Good signature from user' by passing @@ -94,8 +116,8 @@ # file, the value of $inn::gpgv will override this. # $gpgv = '/usr/local/bin/gpgv'; -# Path to pgp binary; for PGP 5.0, set the path to the pgpv binary. -# If you have INN and the script is able to successfully include your +# Path to pgp binary; for PGP 5.0, set the path to the pgpv binary. If +# you have INN and the script is able to successfully include your # innshellvars.pl file, the value of $inn::pgp will override this. $pgp = '/usr/local/bin/pgp'; @@ -129,9 +151,9 @@ # the script will search some known directories for that program. If it # can't be found & used, everything falls back on stderr logging. # -# You can test the script's syslogging by running "pgpverify < /some/text/file" -# on a file that is not a valid news article. The "non-header at line #" -# error should be syslogged. +# You can test the script's syslogging by running "pgpverify < +# /some/text/file" on a file that is not a valid news article. The +# "non-header at line #" error should be syslogged. # # $syslog_method = 'unix'; # Unix doman socket, perl5.004_03 or higher # $syslog_method = 'inet'; # UDP to port 514 of localhost @@ -148,8 +170,8 @@ $syslog_facility = 'news'; $syslog_level = 'err'; -# Prepend the error message with a timestamp? -# This is only relevant if not syslogging, when errors go to stderr. +# Prepend the error message with a timestamp? This is only relevant if +# not syslogging, when errors go to stderr. # # $log_date = 0; # zero means don't do it. # $log_date = 1; # non-zero means do it. @@ -164,8 +186,13 @@ use vars qw($gpgv $pgp $keyring $tmp $tmpdir $lockdir $syslog_method $syslog_facility $syslog_level $log_date $test $messageid); +use Fcntl qw(O_WRONLY O_CREAT O_EXCL); +use FileHandle; +use IPC::Open3 qw(open3); +use POSIX qw(strftime); + # Turn on test mode if the first argument is '-test'. -if ($1 && $1 eq '-test') { +if (@ARGV && $ARGV[0] eq '-test') { shift @ARGV; $test = 1; } @@ -200,17 +227,34 @@ # Parse the article headers and generate the PGP message. my ($nntp_format, $header, $dup) = &parse_header(); exit 1 unless $$header{'X-PGP-Sig'}; -my $message = &generate_message($nntp_format, $header, $dup); -&write_message($message); +my ($message, $signature, $version) + = &generate_message($nntp_format, $header, $dup); +if ($test) { + print "-----MESSAGE-----\n$message\n-----END MESSAGE-----\n\n"; + print "-----SIGNATURE-----\n$signature\n-----SIGNATURE-----\n\n"; +} + +# The call to pgp needs to be locked because it tries to both read and +# write a file named randseed.bin but doesn't do its own locking as it +# should, and the consequences of a multiprocess conflict is failure to +# verify. +my $lock; +unless ($gpgv) { + $lock = "$lockdir/LOCK.$0"; + until (&shlock($lock) > 0) { + sleep(2); + } +} # Verify the message. -my ($ok, $signer); -if ($gpgv) { - ($ok, $signer) = &gpg_check($tmp, $keyring); -} else { - ($ok, $signer) = &pgp_check($tmp, $keyring); +my ($ok, $signer) = pgp_verify($signature, $version, $message); +unless ($gpgv) { + unlink ($lock) or &errmsg("$0: unlink $lock: $!\n"); } print "$signer\n" if $signer; +unless ($ok == 0) { + &fail("$0: verification failed\n"); +} exit $ok; @@ -221,12 +265,12 @@ # regards to the headers it checks. It's also insistent about the # colon-space rule. sub parse_header { - my (%header, %dup, $label, $value); + my (%header, %dup, $label, $value, $nntp_format); while (<>) { # If the first header line ends with \r\n, this article is in the # encoding it would be in during an NNTP session. Some article # storage managers keep them this way for efficiency. - my $nntp_format = /\r\n$/ if $. == 1; + $nntp_format = /\r\n$/ if $. == 1; s/\r?\n$//; last if /^$/; @@ -245,15 +289,16 @@ return ($nntp_format, \%header, \%dup); } -# Generate the PGP message to verify, undoing the same transformation as -# is applied by signcontrol (along with other changes required to deal -# with NNTP wire format and to quote the message properly for PGP). Takes -# the hash of headers and header duplicates returned by parse_header. +# Generate the PGP message to verify. Takes a flag indicating wire +# format, the hash of headers and header duplicates returned by +# parse_header and returns a list of three elements. The first is the +# message to verify, the second is the signature, and the third is the +# version number. sub generate_message { my ($nntp_format, $header, $dup) = @_; - # The regexp below might be too strict about the structure of pgp sig - # lines. + # The regexp below might be too strict about the structure of PGP + # signature lines. # The $sep value means the separator between the radix64 signature lines # can have any amount of spaces or tabs, but must have at least one @@ -271,9 +316,9 @@ my ($version, $signed_headers, $signature) = ($1, $3, $4); $signature =~ s/$sep/\n/g; + $signature =~ s/^\s+//; - my $message = "-----BEGIN PGP SIGNED MESSAGE-----\n\n"; - $message .= "X-Signed-Headers: $signed_headers\n"; + my $message = "X-Signed-Headers: $signed_headers\n"; my $label; foreach $label (split(",", $signed_headers)) { &fail("$0: duplicate signed $label header, can't verify\n") @@ -295,146 +340,166 @@ s/^\.\./\./; s/\r\n$/\n/; } - - s/^-/- -/; # pgp quote ("ASCII armor") dashes - $message .= $_; # append to output string + $message .= $_; } - $message .= "\n-----BEGIN PGP SIGNATURE-----\n"; - $message .= "Version: $version\n"; - $message .= $signature; - $message .= "\n-----END PGP SIGNATURE-----\n"; - return $message; -} - -# Write a PGP message to a file. Attempt to do so safely. -sub write_message { - my ($message) = @_; - - open(TMP,">> $tmp") || &fail("$0: open > $tmp: $!\n"); - - -f TMP || - &fail("$0: $tmp not a plain file, possible security violation attempt\n"); - (stat(_))[3] == 1 || - &fail("$0: $tmp has hard links, possible security violation attempt\n"); - - seek(TMP, 0, 0); # make sure pointer is at beginning of file - truncate(TMP, 0); # make sure file is zero length - - print TMP $message; - close(TMP) || &errmsg("$0: close > $tmp: $!\n"); - &fail("$0: write error for message to check\n") - if -s $tmp != length($message); - - print $message if $test; -} - -# Check the signature using PGP (including 2.6.2, 5.0, and the pgpgpg -# wrapper for GnuPG). -sub pgp_check { - my ($file, $ring) = @_; - - $ENV{'PGPPATH'} = $ring if $ring; - - # The call to pgp needs to be locked because it tries to both read and - # write a file named randseed.bin but doesn't do its own locking as it - # should, and the consequences of a multiprocess conflict is failure to - # verify. - my $lock = "$lockdir/LOCK.$0"; - - until (&shlock($lock) > 0) { - sleep(2); + # Strip off all trailing whitespace for compatibility with the way that + # pgpverify used to work, using attached signatures. + $message =~ s/[ \t]+\n/\n/g; + + return ($message, $signature, $version); +} + +# Check a detatched signature for given data. Takes a signature block (in +# the form of an ASCII-armored string with embedded newlines), a version +# number (which may be undef), and the message. We return an exit status +# and the key id if the signature verified. 0 means good signature, 1 +# means bad data, 2 means an unknown signer, and 3 means a bad signature. +# In the event of an error, we report with errmsg. +# +# This code is taken almost verbatim from PGP::Sign except for the code to +# figure out the PGP style. +sub pgp_verify { + my ($signature, $version, $message) = @_; + chomp $signature; + + # Ignore SIGPIPE, since we're going to be talking to PGP. + local $SIG{PIPE} = 'IGNORE'; + + # Set the PGP style based on whether $gpgv is set. + my $pgpstyle = ($gpgv ? 'GPG' : 'PGP2'); + + # Because this is a detached signature, we actually need to save both + # the signature and the data to files and then run PGP on the signature + # file to make it verify the signature. Because this is a detached + # signature, though, we don't have to do any data mangling, which makes + # our lives much easier. It would be nice to do this without having to + # use temporary files, but I don't see any way to do so without running + # into mangling problems. + # + # PGP v5 *requires* there be some subheader or another. *sigh*. So we + # supply one if Version isn't given. :) + my $umask = umask 077; + my $filename = $tmpdir . '/pgp' . time . '.' . $$; + my $sigfile = new FileHandle "$filename.asc", O_WRONLY|O_EXCL|O_CREAT; + unless ($sigfile) { + &errmsg ("Unable to open temp file $filename.asc: $!\n"); + return (255, undef); } - - open(PGP,"$pgp -f +language=en < $file 2>&1 >/dev/null |") || - &fail("$0: failed to execute pgp: $!\n"); - - undef $/; - $_ = ; - - unlink($lock) || &errmsg("$0: unlink $lock: $!\n"); - unlink($file) || &errmsg("$0: unlink $file: $!\n"); - - unless (close(PGP)) { - if ($? >> 8) { - &errmsg("$0: pgp exited status " . ($? >> 8) . "\n"); - } else { - &errmsg("$0: pgp died on signal " . ($? & 255) . "\n"); - } + if ($pgpstyle eq 'PGP2') { + print $sigfile "-----BEGIN PGP MESSAGE-----\n"; + } else { + print $sigfile "-----BEGIN PGP SIGNATURE-----\n"; } - - print if $test; - - # MIT PGP 2.6.2: - # Good signature from user "Robert Braver ". - # ViaCrypt PGP 4.0: - # Good signature from user: Robert Braver - # GnuPG (via pgpgpg) - # Good signature from "news.announce.newgroups" - # PGP 5.0i: - # Good signature made 1997-07-09 21:57 GMT by key: - # 1024 bits, Key ID B88DA9C1, Created 1996-04-10 - # "news.announce.newgroups" - - my $ok = 2; # unknown signature result is default - my $signer; - if (/B[Aa][Dd] signature /) { - $ok = 3; - } elsif (/Good signature from user(: (.*)| "(.*)"\.)/ || - /Good signature from "(.*)"/ || - /Good signature made .* by key:\n.+\n +"(.*)"/) { - $ok = 0; - $signer = $+; - } elsif (/Keyring file '(.*)' does not exist/) { - &fail("$0: couldn't access $1. Bad \$HOME or \$PGPPATH?\n"); - } - - return ($ok, $signer); -} - -# Check the signature using GnuPG. -sub gpg_check { - my ($file, $ring) = @_; - - my $opts = '--quiet --status-fd=1 --logger-fd=1'; - if ($ring) { - $opts .= " --keyring=$ring/pubring.gpg"; + if (defined $version) { + print $sigfile "Version: $version\n"; + } elsif ($pgpstyle ne 'GPG') { + print $sigfile "Comment: Use GnuPG; it's better :)\n"; + } + print $sigfile "\n", $signature; + if ($pgpstyle eq 'PGP2') { + print $sigfile "\n-----END PGP MESSAGE-----\n"; } else { - $opts .= ' --keyring=pubring.gpg'; + print $sigfile "\n-----END PGP SIGNATURE-----\n"; } + close $sigfile; - open(PGP, "$gpgv $opts $file 2> /dev/null |") || - &fail("$0: failed to execute $gpgv: $!\n"); - - undef $/; - $_ = ; - - unlink($file) || &errmsg("$0: unlink $file: $!\n"); - - unless (close(PGP)) { - if ($? >> 8) { - &errmsg("$0: gpgv exited status " . ($? >> 8) . "\n"); - } else { - &errmsg("$0: gpgv died on signal " . ($? & 255) . "\n"); - } + # Signature saved. Now save the actual message. + my $datafile = new FileHandle "$filename", O_WRONLY|O_EXCL|O_CREAT; + unless ($datafile) { + &errmsg ("Unable to open temp file $filename: $!\n"); + unlink "$filename.asc"; + return (255, undef); + } + print $datafile $message; + close $datafile; + + # Figure out what command line we'll be using. + my @command; + if ($pgpstyle eq 'GPG') { + @command = ($gpgv, qw/--quiet --status-fd=1 --logger-fd=1/); + } else { + @command = ($pgp, '+batchmode', '+language=en'); } - print if $test; - - my $ok = 255; # default exit status + # Now, call PGP to check the signature. Because we've written + # everything out to a file, this is actually fairly simple; all we need + # to do is grab stdout. PGP prints its banner information to stderr, so + # just ignore stderr. Set PGPPATH if desired. + local $ENV{PGPPATH} = $keyring if ($keyring && $pgpstyle ne 'GPG'); + if ($keyring && $pgpstyle eq 'GPG') { + push (@command, "--keyring=$keyring/pubring.gpg"); + } + push (@command, "$filename.asc"); + push (@command, $filename); + my $input = new FileHandle; + my $output = new FileHandle; + my $pid = eval { open3 ($input, $output, $output, @command) }; + if ($@) { + &errmsg ($@); + &errmsg ("Execution of $command[0] failed.\n"); + unlink ($filename, "$filename.asc"); + return (255, undef); + } + close $input; + + # Check for the message that gives us the key status and return the + # appropriate thing to our caller. This part is a zoo due to all of the + # different formats used. GPG has finally done the right thing and + # implemented a separate status stream with parseable data. + # + # MIT PGP 2.6.2 and PGP 6.5.2: + # Good signature from user "Russ Allbery ". + # ViaCrypt PGP 4.0: + # Good signature from user: Russ Allbery + # PGP 5.0: + # Good signature made 1999-02-10 03:29 GMT by key: + # 1024 bits, Key ID 0AFC7476, Created 1999-02-10 + # "Russ Allbery " + # + # Also, PGP v2 prints out "Bad signature" while PGP v5 uses "BAD + # signature", and PGP v6 reverts back to "Bad signature". + local $_; + local $/ = ''; my $signer; - if (/\[GNUPG:\]\s+GOODSIG\s+\S+\s+(\S+)/) { - $ok = 0; - $signer = $1; - } elsif (/\[GNUPG:\]\s+NODATA/ || /\[GNUPG:\]\s+UNEXPECTED/) { - $ok = 1; - } elsif (/\[GNUPG:\]\s+NO_PUBKEY/) { - $ok = 2; - } elsif (/\[GNUPG:\]\s+BADSIG\s+/) { - $ok = 3; + my $ok = 255; + while (<$output>) { + print if $test; + if ($pgpstyle eq 'GPG') { + if (/\[GNUPG:\]\s+GOODSIG\s+\S+\s+(\S+)/) { + $ok = 0; + $signer = $1; + } elsif (/\[GNUPG:\]\s+NODATA/ || /\[GNUPG:\]\s+UNEXPECTED/) { + $ok = 1; + } elsif (/\[GNUPG:\]\s+NO_PUBKEY/) { + $ok = 2; + } elsif (/\[GNUPG:\]\s+BADSIG\s+/) { + $ok = 3; + } + } else { + if (/^Good signature from user(?::\s+(.*)|\s+\"(.*)\"\.)$/m) { + $signer = $+; + $ok = 0; + last; + } elsif (/^Good signature made .* by key:\n.+\n\s+\"(.*)\"/m) { + $signer = $1; + $ok = 0; + last; + } elsif (/^\S+: Good signature from \"(.*)\"/m) { + $signer = $1; + $ok = 0; + last; + } elsif (/^(?:\S+: )?Bad signature /im) { + $ok = 3; + last; + } + } } - - return ($ok, $signer); + close $input; + waitpid ($pid, 0); + unlink ($filename, "$filename.asc"); + umask $umask; + return ($ok, $signer || ''); } # Log an error message, attempting syslog first based on $syslog_method @@ -445,7 +510,7 @@ my $date = ''; if ($log_date) { - ($date = localtime) =~ s/\d{4}\n//; + $date = strftime ('%Y-%m-%d %T ', localtime); } if ($syslog_method && $] >= 5.006) { @@ -519,7 +584,6 @@ } sub fail { - unlink($tmp); &errmsg($_[0]); exit 255; } @@ -574,9 +638,9 @@ return -1; } - # either this process unlinked the lockfile because it was bogus, - # or between this process's link() and open() the other process - # holding the lock unlinked it. This process can now try to aquire. + # either this process unlinked the lockfile because it was bogus, or + # between this process's link() and open() the other process holding + # the lock unlinked it. This process can now try to aquire. if (! link($ltmp, $file)) { unlink($ltmp); return $! == &EEXIST ? 0 : -1; # maybe another proc grabbed the lock @@ -664,6 +728,8 @@ person who installs B to ensure that when B or B runs, it has the ability to locate and read a PGP key file that contains the PGP public keys for the appropriate Usenet hierarchy administrators. +B can be pointed to an appropriate key ring by editing +variables at the beginning of this script. =head1 NOTES @@ -716,7 +782,8 @@ =head1 HISTORY B was written by David C Lawrence . Manual page -provided by James Ralston. +provided by James Ralston. It is currently maintained by Russ Allbery +. =head1 COPYRIGHT AND LICENSE diff -ruN inn-2.4.1/control/signcontrol.in inn-2.4.2/control/signcontrol.in --- inn-2.4.1/control/signcontrol.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/control/signcontrol.in Wed Dec 22 04:21:19 2004 @@ -1,32 +1,49 @@ -#! /usr/bin/perl +#! /usr/bin/perl -w # written April 1996, tale@isc.org (David C Lawrence) -# Version 1.6, 14 October 1998 +# Currently maintained by Russ Allbery +# Version 1.8, 2003-07-06 # -# Changes from 1.5 to 1.6: -# -- eliminated subprocess use (except pgp, of course) -# -- interlock against competing signing processes -# -- allow optional headers; see $use_or_add -# -- added simple comments about why particular headers are signed -# -- made error messages a tad more helpful for situations when it is hard -# to know what message was trying to be signed (such as via an "at" job) -# -- set $action, $group, $moderated to "" to prevent unusued variable -# warnings in the event a Control header can't be parsed -# -- moved assignment of $pgpend out of loop. -# Changes from 1.4 to 1.5 -# -- need to require Text::Tabs to get 'expand' for tabs in checkgroups -# Changes from 1.3 to 1.4: -# -- added checkgroups checking -# -- added group name in several error messages (for help w/batch processing) -# -- disabled moderator address checking -# -- adjusted newsgroups line (ie, tabbing fixed) now correctly substituted -# into control message. -# Changes from 1.2.3 to 1.3: -# -- skip minor pgp signature headers like "charset:" after "version:" header -# and until the empty line that starts the base64 signature block +# Changes from 1.6 -> 1.8 +# -- Added support for GnuPG. +# -- Replace signing code with code from PGP::Sign that generates detached +# signatures instead. Otherwise, GnuPG signatures with DSA keys could +# not be verified. Should still work the same as before with RSA keys. +# -- Thanks to new signing code, no longer uses a temporary file. +# -- Only lock when using PGP; GnuPG shouldn't need it. +# +# Changes from 1.5 -> 1.6 +# -- eliminated subprocess use (except pgp, of course). +# -- interlock against competing signing processes. +# -- allow optional headers; see $use_or_add. +# -- added simple comments about why particular headers are signed. +# -- made error messages a tad more helpful for situations when it is hard +# to know what message was trying to be signed (such as via an "at" +# job). +# -- set $action, $group, $moderated to "" to prevent unusued variable +# warnings in the event a Control header can't be parsed. +# -- moved assignment of $pgpend out of loop. +# +# Changes from 1.4 -> 1.5 +# -- need to require Text::Tabs to get 'expand' for tabs in checkgroups. +# +# Changes from 1.3 -> 1.4 +# -- added checkgroups checking. +# -- added group name in several error messages (for help w/batch +# processing). +# -- disabled moderator address checking. +# -- adjusted newsgroups line (ie, tabbing fixed) now correctly +# substituted into control message. +# +# Changes from 1.2.3 -> 1.3 +# -- skip minor pgp signature headers like "charset:" after "version:" +# header and until the empty line that starts the base64 signature block. # CONFIGURATION -# pgp variables. +# PGP variables. +# +# $pgp can be set to the path to GnuPG to use GnuPG instead. The program +# name needs to end in gpg so that signcontrol knows GnuPG is being used. # # STORING YOUR PASS PHRASE IN A FILE IS A POTENTIAL SECURITY HOLE. # make sure you know what you're doing if you do it. @@ -37,24 +54,26 @@ # # $pgplock is used because pgp does not guard itself against concurrent # read/write access to its randseed.bin file. A writable file is needed; -# The default value is to use the .pgp/config.txt file in the home directory -# of the user running the program. Note that this will only work to lock -# against other instances of signcontrol, not all pgp uses. +# The default value is to use the .pgp/config.txt file in the home +# directory of the user running the program. Note that this will only +# work to lock against other instances of signcontrol, not all pgp uses. +# $pgplock is not used if $pgp ends in 'gpg' since GnuPG doesn't need +# this. $pgpsigner = 'INSERT_YOUR_PGP_USERID'; $pgppassfile = ''; # file with pass phrase for $pgpsigner -$pgp = "@_PATH_PGP"; +$pgp = "/usr/local/bin/pgp"; $pgpheader = "X-PGP-Sig"; $pgplock = (getpwuid($<))[7] . '/.pgp/config.txt'; -# this program is strict about always wanting to be consistent about -# what headers appear in the control messages. the defaults for the +# this program is strict about always wanting to be consistent about what +# headers appear in the control messages. the defaults for the # @... arrays are reasonable, but you should edit the force values. -# these headers are acceptable in input, but they will be overwritten -# with these values. no sanity checking is done on what you put here. -# also, Subject: is forced to be the Control header prepending by "cmsg". -# also, Newsgroups: is forced to be just the group being added/removed. -# (but is taken as-is for checkgroups) +# these headers are acceptable in input, but they will be overwritten with +# these values. no sanity checking is done on what you put here. also, +# Subject: is forced to be the Control header prepending by "cmsg". also, +# Newsgroups: is forced to be just the group being added/removed. +# (but is taken as-is for checkgroups) $force{'Path'} = 'bounce-back'; $force{'From'} = 'YOUR_ADDRESS_AND_NAME'; $force{'Approved'} = 'ADDRESS_FOR_Approved_HEADER'; @@ -63,27 +82,27 @@ . 'ftp://ftp.isc.org/pub/pgpcontrol/README'; # these headers are acceptable in input, or if not present then will be -# created with the given value. None are enabled by default, because -# they should not be necessary. Setting one to a null string will pass -# through any instance of it found in the input, but not generate one -# if it is missing. If you set any $default{} variables, you must also -# put it in @orderheaders below. -# -# Note that Distribution nearly never works correctly, so use it only if you -# are really sure the propagation of the article will be limited as you intend. -# This normally means that you control all servers the distribution will go -# to with an iron fist. -# +# created with the given value. None are enabled by default, because they +# should not be necessary. Setting one to a null string will pass through +# any instance of it found in the input, but not generate one if it is +# missing. If you set any $default{} variables, you must also put it in +# @orderheaders below. +# +# Note that Distribution nearly never works correctly, so use it only if +# you are really sure the propagation of the article will be limited as +# you intend. This normally means that you control all servers the +# distribution will go to with an iron fist. +# # $use_or_add{'Reply-To'} = 'YOUR_REPLY_ADDRESS'; # $use_or_add{'Oranization'} = 'YOUR_ORGANIZATION'; # $use_or_add{'Distribution'} = 'MESSAGE_DISTRIBUTION'; -# host for message-id; this could be determined automatically based on where -# it is run, but consistency is the goal here +# host for message-id; this could be determined automatically based on +# where it is run, but consistency is the goal here $id_host = 'FULL_HOST_NAME'; -# headers to sign. Sender is included because non-PGP authentication uses it. -# The following should always be signed: +# headers to sign. Sender is included because non-PGP authentication uses +# it. The following should always be signed: # Subject -- some older news systems use it to identify the control action. # Control -- most news systems use this to determine what to do. # Message-ID -- guards against replay attacks. @@ -97,9 +116,9 @@ # set to () if you do not want any headers removed. @ignoreheaders = ('Sender'); -# headers that will appear in final message, and their order of appearance. -# all _must_ be set, either in input or via the $force{} and $use_or_add{} -# variables above. +# headers that will appear in final message, and their order of +# appearance. all _must_ be set, either in input or via the $force{} and +# $use_or_add{} variables above. # (exceptions: Date, Lines, Message-ID are computed by this program) # if header is in use_or_add with a null value, it will not appear in output. # several are required by the news article format standard; if you remove @@ -115,8 +134,9 @@ ('Path', 'From', 'Newsgroups', 'Subject', 'Control', 'Approved', 'Message-ID', 'Date', 'Lines', 'X-Info', $pgpheader); -# this program tries to help you out by not letting you sign erroneous names, -# especially ones that are so erroneous they run afoul of naming standards. +# this program tries to help you out by not letting you sign erroneous +# names, especially ones that are so erroneous they run afoul of naming +# standards. # # set to match only hierarchies you will use it on # include no '|' for a single hierarchy (eg, "$hierarchies = 'uk';"). @@ -141,6 +161,9 @@ ## END CONFIGURATION +use Fcntl qw(F_SETFD); +use FileHandle; +use IPC::Open3 qw(open3); use POSIX qw(setlocale strftime LC_TIME); use Text::Tabs; # to get 'expand' for tabs in checkgroups @@ -149,8 +172,10 @@ die "Usage: $0 < message\n" if @ARGV > 0; umask(0022); # flock needs a writable file, if we create it -open(LOCK, ">>$pgplock") || die "$0: open $lock: $!, exiting\n"; -flock(LOCK, 2); # block until locked +if ($pgp !~ /gpg$/) { + open(LOCK, ">>$pgplock") || die "$0: open $lock: $!, exiting\n"; + flock(LOCK, 2); # block until locked +} &setgrouppat; @@ -173,7 +198,9 @@ &signit; -close(LOCK) || warn "$0: close $lock: $!\n"; +if ($pgp !~ /gpg$/) { + close(LOCK) || warn "$0: close $lock: $!\n"; +} exit 0; sub @@ -303,9 +330,10 @@ $body = $_ = ; $header{'Lines'} = $body =~ tr/\n/\n/ if $body; - # the following tests are based on the structure of a news.announce.newgroups - # newgroup message; even if you comment out the "first line" test, please - # leave the newsgroups line and moderators checks + # the following tests are based on the structure of a + # news.announce.newgroups newgroup message; even if you comment out the + # "first line" test, please leave the newsgroups line and moderators + # checks if ($action eq 'new') { $status = $moderated ? 'a\smoderated' : 'an\sunmoderated'; $die .= "$0: nonstandard first line in body for $group\n" @@ -331,8 +359,8 @@ } else { $die .= "$0: $group newsgroup line not formatted correctly\n"; } - # moderator checks are disabled; some sites were trying to automatically - # maintain aliases based on this, which is bad policy. + # moderator checks are disabled; some sites were trying to + # automatically maintain aliases based on this, which is bad policy. if (0 && $moderated) { $die .= "$0: $group submission address not formatted correctly\n" if $body !~ /\nGroup submission address: ?\S+@\S+\.\S+\n/m; @@ -357,80 +385,162 @@ } } +# Create a detached signature for the given data. The first argument +# should be a key id, the second argument the PGP passphrase (which may be +# null, in which case PGP will prompt for it), and the third argument +# should be the complete message to sign. +# +# In a scalar context, the signature is returned as an ASCII-armored block +# with embedded newlines. In array context, a list consisting of the +# signature and the PGP version number is returned. Returns undef in the +# event of an error, and the error text is then stored in @ERROR. +# +# This function is taken almost verbatim from PGP::Sign except the PGP +# style is determined from the name of the program used. +sub pgp_sign { + my ($keyid, $passphrase, $message) = @_; + + # Ignore SIGPIPE, since we're going to be talking to PGP. + local $SIG{PIPE} = 'IGNORE'; + + # Determine the PGP style. + my $pgpstyle = 'PGP2'; + if ($pgp =~ /pgps$/) { $pgpstyle = 'PGP5' } + elsif ($pgp =~ /gpg$/) { $pgpstyle = 'GPG' } + + # Figure out what command line we'll be using. PGP v6 and PGP v2 use + # compatible syntaxes for what we're trying to do. PGP v5 would have, + # except that the -s option isn't valid when you call pgps. *sigh* + my @command; + if ($pgpstyle eq 'PGP5') { + @command = ($pgp, qw/-baft -u/, $keyid); + } elsif ($pgpstyle eq 'GPG') { + @command = ($pgp, qw/--detach-sign --armor --textmode -u/, $keyid, + qw/--force-v3-sigs --pgp2/); + } else { + @command = ($pgp, qw/-sbaft -u/, $keyid); + } + + # We need to send the password to PGP, but we don't want to use either + # the command line or an environment variable, since both may expose us + # to snoopers on the system. So we create a pipe, stick the password in + # it, and then pass the file descriptor to PGP. PGP wants to know about + # this in an environment variable; GPG uses a command-line flag. + # 5.005_03 started setting close-on-exec on file handles > $^F, so we + # need to clear that here (but ignore errors on platforms where fcntl or + # F_SETFD doesn't exist, if any). + # + # Make sure that the file handles are created outside of the if + # statement, since otherwise they leave scope at the end of the if + # statement and are automatically closed by Perl. + my $passfh = new FileHandle; + my $writefh = new FileHandle; + local $ENV{PGPPASSFD}; + if ($passphrase) { + pipe ($passfh, $writefh); + eval { fcntl ($passfh, F_SETFD, 0) }; + print $writefh $passphrase; + close $writefh; + if ($pgpstyle eq 'GPG') { + push (@command, '--batch', '--passphrase-fd', $passfh->fileno); + } else { + push (@command, '+batchmode'); + $ENV{PGPPASSFD} = $passfh->fileno; + } + } + + # Fork off a pgp process that we're going to be feeding data to, and tell + # it to just generate a signature using the given key id and pass phrase. + my $pgp = new FileHandle; + my $signature = new FileHandle; + my $errors = new FileHandle; + my $pid = eval { open3 ($pgp, $signature, $errors, @command) }; + if ($@) { + @ERROR = ($@, "Execution of $command[0] failed.\n"); + return undef; + } + + # Write the message to the PGP process. Strip all trailing whitespace + # for compatibility with older pgpverify and attached signature + # verification. + $message =~ s/[ \t]+\n/\n/g; + print $pgp $message; + + # All done. Close the pipe to PGP, clean up, and see if we succeeded. + # If not, save the error output and return undef. + close $pgp; + local $/ = "\n"; + my @errors = <$errors>; + my @signature = <$signature>; + close $signature; + close $errors; + close $passfh if $passphrase; + waitpid ($pid, 0); + if ($? != 0) { + @ERROR = (@errors, "$command[0] returned exit status $?\n"); + return undef; + } + + # Now, clean up the returned signature and return it, along with the + # version number if desired. PGP v2 calls this a PGP MESSAGE, whereas + # PGP v5 and v6 and GPG both (more correctly) call it a PGP SIGNATURE, + # so accept either. + while ((shift @signature) !~ /-----BEGIN PGP \S+-----\n/) { + unless (@signature) { + @ERROR = ("No signature from PGP (command not found?)\n"); + return undef; + } + } + my $version; + while ($signature[0] ne "\n" && @signature) { + $version = $1 if ((shift @signature) =~ /^Version:\s+(.*?)\s*$/); + } + shift @signature; + pop @signature; + $signature = join ('', @signature); + chomp $signature; + undef @ERROR; + return wantarray ? ($signature, $version) : $signature; +} + sub signit { - my($tmp, $head, $header, $signheaders, $pgpflags, $pgpbegin, $pgpend); - local(*FH); + my($head, $header, $signheaders, $pgpflags, $pgpbegin, $pgpend); - $tmp = "/tmp/sign-$$"; + # Form the message to be signed. $signheaders = join(",", @signheaders); - $head = "X-Signed-Headers: $signheaders\n"; foreach $header (@signheaders) { $head .= "$header: $header{$header}\n"; } - open(FH, "> $tmp") || die "$0: open $tmp: !$\n"; - print FH $head; - print FH "\n"; - print FH $body; - close(FH) || warn "$0: close TMP: $!\n"; - die "$0: data to sign corrupted in $tmp\n" - if -s $tmp != length($head) + length($body) + 1; + my $message = "$head\n$body"; + # Get the passphrase if available. + my $passphrase; if ($pgppassfile && -f $pgppassfile) { $pgppassfile =~ s%^(\s)%./$1%; - if (open(PGPPASS, "< $pgppassfile\0")) { - $ENV{'PGPPASS'} = ; - close(PGPPASS); + if (open (PGPPASS, "< $pgppassfile\0")) { + $passphrase = ; + close PGPPASS; + chomp $passphrase; } - chomp $ENV{'PGPPASS'} if $ENV{'PGPPASS'}; - # if PGPPASS is not now set and non-null, it will be prompted for by pgp } - # -f = write to stdout - # -a = ciphertext file in ASCII radix-64 format - # -s = sign the plaintext file - # -t = plaintext file contains ASCII text, not binary, and - # should be converted to recipient's local text line conventions - # -u = userid to use to sign - # +verbose=0 = only print errors on stderr - open(FH, "exec $pgp -fast -u $pgpsigner +verbose=0 < $tmp 2>/dev/null |") || - die "$0: open pipe from pgp: $!\n"; - - # whack any passphrase out of our environment. don't let this kid - # you, it does not stop snooping. - delete $ENV{'PGPPASS'}; - - $pgpbegin = "-----BEGIN PGP SIGNATURE-----"; - $/ = "$pgpbegin\n"; - $_ = ; # read to signature, discard - die "$0: $pgpbegin not found in $_\n" unless /\Q$pgpbegin\E$/; - - # make sure the temp file goes away even if we die now - unlink($tmp) || warn "$0: unlink $tmp: $!\n"; - - # finish getting the signature - $/ = "\n"; - $_ = ; - die "$0: didn't find PGP Version line where expected\n" - unless /^Version: (\S+)$/; - $header{$pgpheader} = "$1 $signheaders"; - - do { # skip other pgp headers like "charset:" until empty line - $_ = ; # ... is charset significant to this application? - } while ! /^$/; - - $pgpend = '-----END PGP SIGNATURE-----'; - while () { - chomp; - last if /^\Q$pgpend\E$/; - $header{$pgpheader} .= "\n\t$_"; - } - $_ = ; - die "$0: unexpected data following $pgpend\n" unless eof(FH); - close(FH) || warn "$0: close pipe from pgp returned status $?\n"; + # Sign the message, getting the signature and PGP version number. + my ($signature, $version) = pgp_sign ($pgpsigner, $passphrase, $message); + unless ($signature) { + die "@ERROR\n$0: could not generate signature\n"; + } + + # GnuPG has version numbers containing spaces, which breaks our header + # format. Find just some portion that contains a digit. + ($version) = ($version =~ /(\S*\d\S*)/); + + # Put the signature into the headers. + $signature =~ s/^/\t/mg; + $header{$pgpheader} = "$version $signheaders\n$signature"; for (@ignoreheaders) { delete $header{$_} if defined $header{$_}; @@ -451,8 +561,8 @@ print STDOUT $body; } -# Our lawyer told me to include the following. The upshot of it is -# that you can use the software for free as much as you like. +# Our lawyer told me to include the following. The upshot of it is that +# you can use the software for free as much as you like. # Copyright (c) 1996 UUNET Technologies, Inc. # All rights reserved. @@ -483,3 +593,8 @@ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. + +# Local variables: +# cperl-indent-level: 2 +# fill-column: 74 +# End: diff -ruN inn-2.4.1/doc/compliance-nntp inn-2.4.2/doc/compliance-nntp --- inn-2.4.1/doc/compliance-nntp Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/compliance-nntp Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -$Id: compliance-nntp,v 1.19.2.1 2003/05/05 04:13:17 rra Exp $ +$Id: compliance-nntp,v 1.19.2.2 2004/05/18 09:25:55 rra Exp $ The following are outstanding issues regarding INN's compliance with the NNTP standard. The reference documents used in this analysis are the @@ -234,40 +234,6 @@ different for OVER (where clients should expect this behavior since OVER is a new command) than for XOVER (where clients may be relying on the existing behavior. - ------------------------------- - - Summary: innd doesn't generate overview correctly for non-printing chars - Standard: draft-ietf-nntpext-base-15.txt, section 9.5.2.2 - Version: 1.4 to CURRENT 2002-12-26 -Reference: innd/art.c ARTmakeoverview() and expire/makehistory.c DoArt() - Severity: Violates a MUST - -The standard says: - - The content of the rest of the fields is formed by taking the original - header content (such as the raw subject line from the article), - removing all US-ASCII CRLF pairs, and then replacing each remaining - US-ASCII NUL, TAB, CR, or LF character with a single US-ASCII space. - -innd has always just replaced tabs, newlines, and CRs with spaces in a -one-to-one fashion (although older versions did, through an accident of -implementation, collapse CRLF into a single space) and has never collapsed -consecutive whitespace. - -Impact: The headers are not unfolded properly, resulting in extraneous -spaces in the overview version of the header that are not properly part of -the content of the header. NUL is also not handled correctly, but at -present INN cannot handle NUL in article headers or bodies, so this is -only part of a larger issue. - -Suggested fix: Modify ARTmakeoverview() to remove CRLF pairs completely -(RFC 2822 unfolding) and otherwise do the same as it does now. The -overview_build() function does this properly. - -Impact of fix: After an upgrade, overview will have to be rebuilt from -the spool in order to make all of the overview consistent again for folded -headers. This probably isn't significant enough to worry about. ------------------------------ diff -ruN inn-2.4.1/doc/external-auth inn-2.4.2/doc/external-auth --- inn-2.4.1/doc/external-auth Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/external-auth Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ NNRPD External Authentication Support - This is $Revision: 1.2 $ dated $Date: 2002/12/12 23:07:48 $. + This is $Revision: 1.2.2.1 $ dated $Date: 2004/05/17 12:18:18 $. A fundamental part of the readers.conf(5)-based authorization mechanism is the interface to external authenticator and resolver programs. This @@ -76,7 +76,7 @@ Returning a username and domain - If the program succeeds, it may return a username string (optionally + If the program succeeds, it must return a username string (optionally with a domain appended) by writing to standard output. The line it should write is exactly: diff -ruN inn-2.4.1/doc/hook-tcl inn-2.4.2/doc/hook-tcl --- inn-2.4.1/doc/hook-tcl Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/hook-tcl Wed Dec 22 04:21:19 2004 @@ -1,3 +1,16 @@ +NOTE: The Tcl support described in this file is disabled. The code is +all still there, but you have to define DO_TCL manually while compiling to +enable it. Compiling in Tcl filtering was causing random innd segfaults +even if no Tcl filters were defined, so it's been turned off to prevent +confusion. + +The Tcl code will be removed in the next major release of INN since no one +appears to be using it and the code is unmaintained and has no champion. +If you want to resurrect it, it may be better to start from scratch, since +a lot has changed about INN since the filters were originally written and +the Perl and Python filters have far more capabilities. + + Note, you need tcl 7.4. Rumour has it that 7.5 won't work. --------------------------------------------------------------------------- Subject: TCL-based Filtering for INN 1.5 diff -ruN inn-2.4.1/doc/man/active.5 inn-2.4.2/doc/man/active.5 --- inn-2.4.1/doc/man/active.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/active.5 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.36, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "ACTIVE 5" -.TH ACTIVE 5 "2003-04-05" "INN 2.4.0" "InterNetNews Documentation" +.TH ACTIVE 5 "2004-05-16" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" active \- List of newsgroups carried by the server .SH "DESCRIPTION" @@ -199,8 +199,7 @@ crossposted to some other valid group, it will be filed into the \f(CW\*(C`junk\*(C'\fR newsgroup instead. This is different than simply not listing the group, since the article will still be accepted and can be propagated to other -sites that receive the \f(CW\*(C`junk\*(C'\fR group, and the \f(CW\*(C`junk\*(C'\fR group can be made -available to readers if wished. +sites, and the \f(CW\*(C`junk\*(C'\fR group can be made available to readers if wished. .PP If the field begins with an equal sign, the newsgroup is an alias. Articles cannot be posted to that newsgroup, but they can be received from @@ -215,7 +214,7 @@ Written by Rich \f(CW$alz\fR for InterNetNews. Converted to \&\s-1POD\s0 by Russ Allbery . .PP -$Id: active.5,v 1.12 2003/04/06 21:50:06 rra Exp $ +$Id: active.5,v 1.12.2.1 2004/05/17 05:48:54 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIactive.times\fR\|(5), \fIcontrolchan\fR\|(8), \fIctlinnd\fR\|(8), \fIinn.conf\fR\|(5), \fIinnd\fR\|(8), diff -ruN inn-2.4.1/doc/man/actsync.8 inn-2.4.2/doc/man/actsync.8 --- inn-2.4.1/doc/man/actsync.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/actsync.8 Wed Dec 22 04:21:19 2004 @@ -6,7 +6,7 @@ .\" Permission to use and modify is hereby granted so long as this .\" notice remains. Use at your own risk. No warranty is implied. .\" -.\" @(#) $Id: actsync.8,v 1.17 2002/12/03 05:17:12 vinocur Exp $ +.\" @(#) $Id: actsync.8,v 1.17.2.1 2004/05/16 22:00:46 rra Exp $ .\" @(#) Under RCS control in /usr/local/news/src/inn/local/RCS/actsync.8,v .\" .TH ACTSYNC 8 @@ -130,7 +130,12 @@ found on both hosts. One may also synchronize a subset of newsgroups by directing .IR actsync (8) -to ignore certain newsgroups from both systems. +to ignore certain newsgroups from both systems. Only newsgroups with +valid names will be synchronized. To be valid, a newsgroup name must +consist only of alphanumeric characters, ``.'', ``+'', ``-'', and ``_''. +One may not have two ``.''s in a row. The first character must be +alphanumeric, as must any character following a ``.''. The name may not +end in a ``.'' character. .PP The .IR actsyncd (8) diff -ruN inn-2.4.1/doc/man/ctlinnd.8 inn-2.4.2/doc/man/ctlinnd.8 --- inn-2.4.1/doc/man/ctlinnd.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/ctlinnd.8 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" $Revision: 1.24.2.1 $ +.\" $Revision: 1.24.2.2 $ .TH CTLINND 8 .SH NAME ctlinnd \- control the InterNetNews daemon @@ -138,6 +138,11 @@ parameter. This may be used to make an existing group moderated or unmoderated, for example. +This command can only be used while the server is running (not throttled), +unlike +.B newgroup +or +.BR rmgroup . .TP .B checkfile Check the syntax of the @@ -644,7 +649,7 @@ .de R$ This is revision \\$3, dated \\$4. .. -.R$ $Id: ctlinnd.8,v 1.24.2.1 2003/10/20 01:15:01 rra Exp $ +.R$ $Id: ctlinnd.8,v 1.24.2.2 2004/12/19 21:41:05 rra Exp $ .SH "SEE ALSO" active(5), active.times(5), diff -ruN inn-2.4.1/doc/man/dbz.3 inn-2.4.2/doc/man/dbz.3 --- inn-2.4.1/doc/man/dbz.3 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/dbz.3 Wed Dec 22 04:21:19 2004 @@ -1,11 +1,7 @@ .TH DBZ 3 "6 Sep 1997" .BY "INN" .SH NAME -dbzinit, dbzfresh, dbzagain, dbzclose \- database routines -.br -dbzexists, dbzfetch, dbzstore \- database routines -.br -dbzsync, dbzsize, dbzgetoptions, dbzsetoptions, dbzdebug \- database routines +dbzinit, dbzfresh, dbzagain, dbzclose, dbzexists, dbzfetch, dbzstore, dbzsync, dbzsize, dbzgetoptions, dbzsetoptions, dbzdebug \- database routines .SH SYNOPSIS .nf .B #include @@ -34,7 +30,6 @@ .PP .B "void dbzsetoptions(const dbzoptions opt)" .PP -.B "bool dbzdebug(bool newvalue)" .SH DESCRIPTION These functions provide an indexing system for rapid random access to a text file (the @@ -235,15 +230,6 @@ It is a somewhat expensive operation, especially for an in-memory database. -.PP -If -.I dbz -has been compiled with debugging facilities available (which makes it -bigger and a bit slower), -.I dbzdebug -alters the value (and returns the previous value) of an internal flag -which (when 1; default is 0) causes -verbose and cryptic debugging output on standard output. .PP Concurrent reading of databases is fairly safe, but there is no (inter)locking, diff -ruN inn-2.4.1/doc/man/grephistory.1 inn-2.4.2/doc/man/grephistory.1 --- inn-2.4.1/doc/man/grephistory.1 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/grephistory.1 Wed Dec 22 04:21:19 2004 @@ -1,112 +1,200 @@ -.\" $Revision: 1.10 $ -.TH GREPHISTORY 1 -.SH NAME -grephistory \- display file names from Usenet history file -.SH SYNOPSIS -.B grephistory -[ -.B \-e -] -[ -.BI \-f " filename" -] -[ -.B \-i -] -[ -.B \-l -] -[ -.B \-n -] -[ -.B \-q -] -[ -.B \-s -] -[ -.B \-v -] -[ -.I messageid -] -.SH DESCRIPTION -.I Grephistory -queries the -.IR dbz (3) -index into the -.I history -file for an article having a specified Message-ID. +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.14 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 .PP -If -.I messageid -cannot be found in the database, the program prints ``Not found'' and -exits with a non-zero status. -If -.I messageid -is in the database, the program prints the token of the -article and exits successfully. +\fB\\$1\fR .PP -Be sure to escape any special characters in the Message-ID from the shell. -Single quotes are recommended for this purpose. -.SH OPTIONS -.TP -.B \-e -If the ``\fB\-e\fP'' flag is used, then -.I grephistory -will only print the filename of the token of an existing article. -.TP -.B \-f -To specify a different value for the history file and database, use -the ``\fB\-f\fP'' flag. -.TP -.B \-i -If the ``\fB\-i\fP'' flag is used, then -.I grephistory -will read a list of Message-ID's on standard input, one per line. -Leading and trailing whitespace is ignored, as are any malformed lines. -It will print on standard output those Message-ID's which are not -found in the history database. -This flag is used in processing ``ihave'' control messages. -.TP -.B \-l -If the ``\fB\-l\fP'' flag is used then the entire line from the history -file will be displayed. -.TP -.B \-n -If no pathname exists, the program will print ``/dev/null'' and exit -successfully. -This can happen when an article has been canceled, or if it has been -expired but its history is still retained. -This is the default behavior. -.TP -.B \-q -If the ``\fB\-q\fP'' flag is used, then no message is displayed. -The program will still exit with the appropriate exit status. -.TP -.B \-s -If the ``\fB\-s\fP'' flag is used, then -.I grephistory -will read a similar list from its standard input. -It will print on standard output a list of filenames for each article -that is still available. -This flag is used in processing ``sendme'' control messages. -.TP -.B \-v -Each use of the ``\fB\-v\fP'' flag increases the verbosity of -.IR grephistory . -The default level is ``0'', and at present, the maximum useful level -is ``1''. At level 1, the hash of the Message-ID is printed out for -diagnostic purposes. -This flag is not useful with ``\fB\-s\fP''. -.SH HISTORY -Written by Rich $alz for InterNetNews. -.de R$ -This is revision \\$3, dated \\$4. .. -.R$ $Id: grephistory.1,v 1.10 2002/12/03 05:17:13 vinocur Exp $ +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to +.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' +.\" expand to `' in nroff, nothing in troff, for use with C<>. +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "GREPHISTORY 1" +.TH GREPHISTORY 1 "2004-12-19" "INN 2.4.2" "InterNetNews Documentation" +.SH "NAME" +grephistory \- Query the INN history database +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBgrephistory\fR [\fB\-eilnqsv\fR] [\fB\-f\fR \fIdb\fR] [\fImessage-id\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBgrephistory\fR queries the \s-1INN\s0 history database for information about the +specified message \s-1ID\s0. If no flags are given, the program prints the +storage \s-1API\s0 token of the corresponding article, or \f(CW\*(C`/dev/null\*(C'\fR if the +article is listed in the history database but not stored on the server. +If the message \s-1ID\s0 cannot be found in the database, \fBgrephistory\fR will +print \f(CW\*(C`grephistory: not found\*(C'\fR and exit with a non-zero status. +.PP +Be sure to escape any special characters in the message \s-1ID\s0 from the shell. +Single quotes are recommended for this purpose since many message IDs +contain dollar signs. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-e\fR" 4 +.IX Item "-e" +Only print the storage token if the article is stored on the system. (In +other words, suppress the \f(CW\*(C`/dev/null\*(C'\fR or \f(CW\*(C`not found\*(C'\fR output for missing +or remembered articles.) +.IP "\fB\-f\fR \fIdb\fR" 4 +.IX Item "-f db" +Query the history database \fIdb\fR rather than the default history database. +.IP "\fB\-i\fR" 4 +.IX Item "-i" +Rather than expecting a message \s-1ID\s0 on the command line, \fBgrephistory\fR +will read a list of message IDs on standard input, one per line. Leading +and trailing whitespace is ignored, as are any malformed lines. It will +print out standard output those message IDs which are not found in the +history database. This is used when processing \f(CW\*(C`ihave\*(C'\fR control messages. +.IP "\fB\-l\fR" 4 +.IX Item "-l" +Display the entire line from the history database, rather than just the +storage \s-1API\s0 token. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +If the message \s-1ID\s0 is present in the history database but has no storage +\&\s-1API\s0 token, print \f(CW\*(C`/dev/null\*(C'\fR and exit successfully. This can happen if +an article has been cancelled or expired, but history information has +still been retained. This is the default behavior. +.IP "\fB\-q\fR" 4 +.IX Item "-q" +Don't print any message, but still exit with the appropriate status. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +Rather than expecting a message \s-1ID\s0 on the command line, \fBgrephistory\fR +will read a list of message IDs on standard input, one per line. Leading +and trailing whitespace is ignored, as are any malformed lines. It will +print on standard output the storage \s-1API\s0 tokens for any articles that are +still available, one per line. This flag is used when processing +\&\f(CW\*(C`sendme\*(C'\fR control messages. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +Print out the hash of the message \s-1ID\s0 for diagnostic purposes, as well as +any other requested information. This flag is not useful with \fB\-s\fR. +.SH "HISTORY" +.IX Header "HISTORY" +Written by Rich \f(CW$alz\fR for InterNetNews. Rewritten in +\&\s-1POD\s0 by Russ Allbery . +.Sp +$Id: grephistory.1,v 1.10.2.1 2004/12/19 19:37:45 rra Exp $ .SH "SEE ALSO" -dbz(3), -history(5), -inn.conf(5). +.IX Header "SEE ALSO" +\&\fIhistory\fR\|(5), \fIinn.conf\fR\|(5) diff -ruN inn-2.4.1/doc/man/incoming.conf.5 inn-2.4.2/doc/man/incoming.conf.5 --- inn-2.4.1/doc/man/incoming.conf.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/incoming.conf.5 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" $Revision: 1.18 $ +.\" $Revision: 1.18.2.1 $ .TH INCOMING.CONF 5 .SH NAME incoming.conf \- names and addresses that feed us news @@ -144,8 +144,12 @@ .TP .BI identd: This key requires a string value. It is used if you wish to require a peer's -user name retrieved through identd match the specified string. (default=no -identd) +user name retrieved through identd match the specified string. Note that +currently +.IR innd (8) +does not implement any timeout in identd callbacks, so enabling this +option may cause innd to hang if the remote peer does not respond to ident +callbacks in a reasonable timeframe (default=no identd) .TP .BI patterns: This key requires a string value. It is a list of @@ -178,7 +182,7 @@ .de R$ This is revision \\$3, dated \\$4. .. -.R$ $Id: incoming.conf.5,v 1.18 2002/12/03 05:17:13 vinocur Exp $ +.R$ $Id: incoming.conf.5,v 1.18.2.1 2004/10/01 05:30:17 rra Exp $ .SH "SEE ALSO" inn.conf(5), innd(8), diff -ruN inn-2.4.1/doc/man/inews.1 inn-2.4.2/doc/man/inews.1 --- inn-2.4.1/doc/man/inews.1 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/inews.1 Wed Dec 22 04:21:19 2004 @@ -1,192 +1,257 @@ -.\" $Revision: 1.9 $ -.TH INEWS 1 -.SH NAME -inews \- send a Usenet article to the local news server for distribution -.SH SYNOPSIS -.B inews -[ -.B \-A -] -[ -.B \-D -] -[ -.B \-h -] -[ -.B \-N -] -[ -.B \-O -] -[ -.BI \-p " port" -] -[ -.B \-R -] -[ -.B \-S -] -[ -.B \-V -] -[ -.B \-W -] -[ -.I "header_flags" -] -[ -.I input -] -.SH DESCRIPTION -.I Inews -reads a Usenet news article (perhaps with headers) from -the named file, or standard input if no file is given. -It adds some headers and performs some consistency checks. -If the article does not meet these checks (for example, too much -quoting of old articles, or posting to non-existent newsgroups) then -the article is rejected. -If it passes the checks, -.I inews -sends the article to the local news -server as specified in the -.I inn.conf -file for distribution. -.SH OPTIONS -.TP -.B "\-A \-V \-W" -For compatibility with C News, -.I inews -accepts, but ignores, the ``\fB\-A\fP'', ``\fB\-V\fP'' and ``\fB\-W\fP'' flags. -.TP -.B \-D -As a debugging aid, if the ``\fB\-D\fP'' flag is used, the consistency checks -will be performed, and the article will be sent to the standard output, -rather then sent to the server. -.TP -.B \-h -In the standard mode of operation, the input consists of the article -headers, a blank line, and the message body. -For compatibility with older software, the ``\fB\-h\fP'' flag must be used. -If there are no headers in the message, then this flag may be omitted. -.TP -.B \-N -The C News ``\fB\-N\fP'' flag is treated as the ``\fB\-D\fP'' flag. -.TP -.B \-O -By default, an Organization header will be provided if none is present -in the article. To prevent adding the default, use the ``\fB\-O\fP'' flag. -.TP -.B \-p -If the ``\fB\-p\fP'' flag is used, then the articles will be sent through the -specified port on the remote host. -.TP -.B \-R -If the ``\fB\-R\fP'' flag is used then -.I inews -will reject any attempts to post control messages. -.TP -.B \-S -By default, if a file named -.I .signature -exists in the user's home directory, -.I inews -will try to append it to the end of the article. -If the file cannot be read, or if it is too long (for example, more than -four lines or one standard I/O buffer), or if some other problem occurs, -then the article will not be posted. -To suppress this action use the ``\fB\-S\fP'' flag. -.TP -.I header_flags -Several headers may be specified on the command line, shown in the -synopsis above as -.IR "header_flags" . -Each of these flags takes a single parameter; if the value is more than -one word (for example, almost all Subject lines) then quotes must be used -to prevent the shell from splitting it into multiple words. -The options, and their corresponding headers, are as follows: - -.RS +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.14 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW .nf - a Approved - c Control - d Distribution - e Expires - F References - f From - n Newsgroups - o Organization - r Reply-To - t Subject - w Followup-To - x Path prefix +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R .fi -.RE -.IP -If -.I -is defined, the Path header is built according to the following rules. -If the ``\fB\-x\fP'' flag is used, then its value will be the start of the -header. -Any other host will see the site in the header, and therefore not -offer the article to that site. -If -.I -is defined and the ``pathhost'' configuration parameter is specified in the -.I inn.conf -file, then it will be added to the Path. -Otherwise, if the ``server'' configuration parameter is specified, -then the full domain name of the local host will be added to the Path.\} -The Path will always end -.I -(typically -.IR not-for-mail ) - -.SH NOTES -.PP -If an unapproved posting is made to a moderated newsgroup, -.I inews -will try to mail the article to the moderator for posting. -It will query the remote news server for a moderators listing. If -that fails, it will fallback to using the local -.I moderators -file to determine the mailing address. -If no address is found, it will use ``moderatormailer'' in -.IR inn.conf -to determine a ``last-chance'' host to try. -.PP -If the NNTP server needs to authenticate the client, -.I inews -will use the -.IR NNTPsendpassword (3) -routine to authenticate itself. -In order to do this, the program will need read access to the -.I passwd.nntp -file. -This is typically done by having the file group-readable and making -.I inews -run setgid to that group. -.PP -.I Inews -exits with a zero status if the article was successfully posted or mailed, -or with a non-zero status if the article could not be delivered. -.PP -Since -.I inews -will spool its input if the server is unavailable, it is usually necessary -to run -.IR rnews (1) -with the ``\-U'' flag on a regular basis, usually out of -.IR cron (8). -.SH HISTORY -Written by Rich $alz for InterNetNews. -.de R$ -This is revision \\$3, dated \\$4. .. -.R$ $Id: inews.1,v 1.9 2002/12/03 05:17:14 vinocur Exp $ +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to +.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' +.\" expand to `' in nroff, nothing in troff, for use with C<>. +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "INEWS 1" +.TH INEWS 1 "2004-12-19" "INN 2.4.2" "InterNetNews Documentation" +.SH "NEWS" +.IX Header "NEWS" +inews \- Post a Usenet article to the local news server +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBinews\fR [\fB\-ADhNORSVW\fR] [\fB\-acdeFfnortwx\fR \fIvalue\fR] [\fB\-p\fR \fIport\fR] [\fIfile\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBinews\fR reads a Usenet news article, perhaps with headers, from \fIfile\fR +or standard input if no file is given. It adds some headers and performs +some consistency checks. If the article does not meet those checks, the +article is rejected. If it passes the checks, \fBinews\fR sends the article +to the local news server as specified in \fIinn.conf\fR. +.PP +By default, if a file named \fI.signature\fR exists in the home directory of +the posting user, it is appended to the post, preceeded by a line that +contains only \f(CW\*(C`\-\- \*(C'\fR. Signatures are not allowed to be more than four +lines long. +.PP +Cancel messages can only be posted with \fBinews\fR if the sender of the +cancel message matches the sender of the original message being +cancelled. The same check is also applied to Supersedes. Sender in this +case means the contents of the Sender header if present, otherwise the +From header. +.PP +Control messages other than cancel messages are only allowed if \fBinews\fR +is being run by the news user or by a user in the news group and if the +control message is recognized. If the article contains a Distribution +header with a distribution that matches one of the bad distribution +patterns in \fIinn/options.h\fR (anything containing a period by default), +the message will be rejected. The message will also be rejected if +\&\fIcheckincludedtext\fR is true in \fIinn.conf\fR, it contains more quoted text +than original text, and it is over 40 lines long. +.PP +If not provided, the Path header of an article is constructed as follows: +The basic Path header will be \*(L"not\-for\-mail\*(R". If \fIpathhost\fR is specified +in \fIinn.conf\fR, it will be added to the beginning Path. Otherwise, if +\&\fIserver\fR is specified, the full domain of the local host will be added to +the beginning of the Path. Then, if \fB\-x\fR was given, its value will be +added to the beginning of the Path. +.PP +If posting fails, a copy of the failed post will be saved in a file named +\&\fIdead.article\fR in the home directory of the user running \fBinews\fR. +\&\fBinews\fR exits with a non-zero status if posting failed or with a zero +status if posting was successful. +.SH "OPTIONS" +.IX Header "OPTIONS" +Most of the options to \fBinews\fR take a single value and set the +corresponding header in the message that is posted. If the value is more +than one word or contains any shell metacharacters, it must be quoted to +protect it from the shell. Here are all the options that set header +fields and the corresponding header: +.PP +.Vb 12 +\& -a Approved +\& -c Control +\& -d Distribution +\& -e Expires +\& -F References +\& -f From +\& -n Newsgroups +\& -o Organization +\& -r Reply-To +\& -t Subject +\& -w Followup-To +\& -x Path prefix +.Ve +.PP +The \fB\-x\fR argument will be added to the beginning of the normal Path +header; it will not replace it. +.IP "\fB\-A\fR, \fB\-V\fR, \fB\-W\fR" 4 +.IX Item "-A, -V, -W" +Accepted for compatibility with C News. These options have no affect. +.IP "\fB\-D\fR, \fB\-N\fR" 4 +.IX Item "-D, -N" +Perform the consistency checks and add headers where appropriate, but then +print the article to standard output rather than sending it to the server. +\&\fB\-N\fR is accepted as as synonym for compatibility with C News. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +Normally, this flag should always be given. It indicates that the article +consists of headers, a blank line, and then the message body. If it is +omitted, the input is taken to be just the body of the message, and any +desired headers have to be specified with command-line options as +described above. +.IP "\fB\-O\fR" 4 +.IX Item "-O" +By default, an Organization header will be added if none is present in the +article. To prevent adding the default (from \fIorganization\fR in +\&\fIinn.conf\fR), use this flag. +.IP "\fB\-p\fR \fIport\fR" 4 +.IX Item "-p port" +Connect to the specified port on the server rather than to the default +(port 119). +.IP "\fB\-R\fR" 4 +.IX Item "-R" +Reject all control messages. +.IP "\fB\-S\fR" 4 +.IX Item "-S" +Do not attempt to append \fI~/.signature\fR to the message, even if it +exists. +.SH "NOTES" +.IX Header "NOTES" +If the \s-1NNTP\s0 server requests authentication, \fBinews\fR will try to read +\&\fIpasswd.nntp\fR to get the username and password to use and will therefore +need read access to that file. This is typically done by making that file +group-readable and adding all users who should be able to use \fBinews\fR to +post to that server to the appropriate group. +.PP +\&\fBinews\fR used to do even more than it does now, and all of the remaining +checks that are not dependent on the user running \fBinews\fR should probably +be removed in favor of letting the news server handle them. +.PP +Since \s-1INN\s0's \fBinews\fR uses \fIinn.conf\fR and some other corners of an \s-1INN\s0 +installation, it's not very appropriate as a general stand-alone \fBinews\fR +program for general use on a system that's not running a news server. +Other, more suitable versions of \fBinews\fR are available as part of various +Unix news clients or by themselves. +.SH "HISTORY" +.IX Header "HISTORY" +Written by Rich \f(CW$alz\fR for InterNetNews. Rewritten in +\&\s-1POD\s0 by Russ Allbery . .SH "SEE ALSO" -moderators(5), -inn.conf(5). -rnews(1). +.IX Header "SEE ALSO" +\&\fIinn.conf\fR\|(5), \fIrnews\fR\|(1) diff -ruN inn-2.4.1/doc/man/mailpost.8 inn-2.4.2/doc/man/mailpost.8 --- inn-2.4.1/doc/man/mailpost.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/mailpost.8 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,14 +129,15 @@ .\" ======================================================================== .\" .IX Title "MAILPOST 8" -.TH MAILPOST 8 "2002-12-27" "INN 2.4.0" "InterNetNews Documentation" +.TH MAILPOST 8 "2004-01-25" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" mailpost \- feed an email message into a news group .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBmailpost\fR [\fB\-a\fR \fIaddr\fR] [\fB\-b\fR \fIdatabase\fR] [\fB\-c\fR \fIwait-time\fR] [\fB\-d\fR \fIdistribution\fR] [\fB\-f\fR \fIaddr\fR] [\fB\-m\fR \fImailing-list\fR] -[\fB\-r\fR \fIaddr\fR] [\fB\-x\fR \fIheader\fR[\fB:\fR\fIheader\fR...]] [\fInewsgroups\fR ...] +[\fB\-p\fR \fIport\fR] [\fB\-r\fR \fIaddr\fR] [\fB\-x\fR \fIheader\fR[\fB:\fR\fIheader\fR...]] +[\fInewsgroups\fR ...] .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fBmailpost\fR program reads a properly formatted email message from stdin @@ -186,21 +187,25 @@ .IX Item "-m mailing-list" If the \fB\-m\fR flag is used the value given is added to the articles in a Mailing\-List: header, if such a header doesn't already exist. +.IP "\fB\-p\fR \fIport\fR" 4 +.IX Item "-p port" +Specifies the port on which \fBnnrpd\fR is listening, used for article posting. +If given, \fB\-p\fR is passed along to inews. .IP "\fB\-r\fR \fIaddr\fR" 4 .IX Item "-r addr" A heuristic is used to determine a reasonable value for the Path: header. The \fB\-r\fR flag indicates what to use if no other value can be determined. -.IP "\fB\-x\fR \fIheader\fR[\fB:\fR\fIheader\fR...]" 4 +.IP "\fB\-x\fR \fIheader\fR[:\fIheader\fR...]" 4 .IX Item "-x header[:header...]" -A \fB:\fR separated list of additional headers which should be treated as known -headers; these headers will be passed through to \fIinews\fR\|(1) without being -``X\-'' prefixed. +A colon-separated list of additional headers which should be treated as +known headers; these headers will be passed through to \fIinews\fR\|(1) without +having \*(L"X\-\*(R" prepended. .SH "HISTORY" .IX Header "HISTORY" Written by Paul Vixie long ago and then hacked up by James Brister for \s-1INN\s0 integration. .PP -$Id: mailpost.8,v 1.8 2002/12/28 03:55:39 rra Exp $ +$Id: mailpost.8,v 1.8.2.1 2004/01/25 23:44:19 rra Exp $ .SH "FILES" .IX Header "FILES" /mailpost\-msgid.db database file diff -ruN inn-2.4.1/doc/man/motd.news.5 inn-2.4.2/doc/man/motd.news.5 --- inn-2.4.1/doc/man/motd.news.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/motd.news.5 Wed Dec 22 04:21:19 2004 @@ -1,21 +1,154 @@ -.\" -*- nroff -*- -.\" $Revision: 1.3 $ -.TH MOTD.NEWS 5 -.SH NAME -motd.news -.SH DESCRIPTION -The -.I /motd.news -file contains any local information for news readers to be shown when they -issue the LIST MOTD command. Such information may be notifications of -upcoming downtime etc. The entire file is returned to the newsreader. -.LP -A missing \fImotd.news\fP is not an error--the client will just get an -empty response. -.LP -.de R$ -This is revision \\$3, dated \\$4. +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP .. -.R$ $Id: motd.news.5,v 1.3 1998/04/09 15:16:11 mibsoft Exp $ +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to +.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' +.\" expand to `' in nroff, nothing in troff, for use with C<>. +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "MOTD.NEWS 5" +.TH MOTD.NEWS 5 "2003-12-26" "INN 2.4.1" "InterNetNews Documentation" +.SH "NAME" +motd.news \- Message of the day information for readers +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This file, found in \fIpathetc\fR/motd.news, contains local information for +news readers in a free-form format. The entire file is returned verbatim +to any client that issues the \s-1LIST\s0 \s-1MOTD\s0 command. This might be used for +new information, notification of upcoming downtime, or similar purposes. +.PP +Be aware that use of the \s-1LIST\s0 \s-1MOTD\s0 command is not widespread and most news +clients will never ask for this file. +.PP +If this file is missing, it is not an error. The server will just send +the client an empty response. +.SH "HISTORY" +.IX Header "HISTORY" +Rewritten in \s-1POD\s0 by Russ Allbery for InterNetNews. +.PP +$Id: motd.news.5,v 1.3.8.1 2003/12/27 06:25:05 rra Exp $ .SH "SEE ALSO" -inn.conf(5). +.IX Header "SEE ALSO" +\&\fIinn.conf\fR\|(5) diff -ruN inn-2.4.1/doc/man/nnrpd.8 inn-2.4.2/doc/man/nnrpd.8 --- inn-2.4.1/doc/man/nnrpd.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/nnrpd.8 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,9 +129,9 @@ .\" ======================================================================== .\" .IX Title "NNRPD 8" -.TH NNRPD 8 "2003-09-07" "INN 2.4.1" "InterNetNews Documentation" +.TH NNRPD 8 "2004-12-19" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" -nnrpd \- NNTP server for on\-campus hosts +nnrpd \- NNTP server for reader clients .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBnnrpd\fR [\fB\-DfnoRSt\fR] [\fB\-b\fR \fIaddress\fR] [\fB\-c\fR \fIconfigfile\fR] @@ -190,6 +190,11 @@ \&\fBnnrpd\fR continues running until killed. This means that it reads \&\fIinn.conf\fR once on startup and never again until restarted. \fBnnrpd\fR should therefore be restarted if inn.conf is changed. +.Sp +When started in daemon mode, \fBnnrpd\fR will write its \s-1PID\s0 into a file in +the \fIpathrun\fR directory. The file will be named \fInnrpd\-%d.pid\fR, where +\&\f(CW%d\fR is replaced with the port that \fBnnrpd\fR is configured to listen on +(119 unless the \fB\-P\fR option is given). .IP "\fB\-f\fR" 4 .IX Item "-f" If specified, \fBnnrpd\fR does not detach itself and runs in the @@ -264,11 +269,55 @@ responses will be traced by reporting them in syslog. This flag is set by \fIinnd\fR\|(8) under the control of the \fIctlinnd\fR\|(8) \f(CW\*(C`trace\*(C'\fR command, and is toggled upon receipt of a \f(CW\*(C`SIGHUP\*(C'\fR; see \fIsignal\fR\|(2). +.SH "SSL SUPPORT" +.IX Header "SSL SUPPORT" +If \s-1INN\s0 is built with \f(CW\*(C`\-\-with\-openssl\*(C'\fR, \fBnnrpd\fR will support news reading +over \s-1TLS\s0 (also known as \s-1SSL\s0). For clients that use the \s-1STARTTLS\s0 command, +no special configuration is needed beyond creating a \s-1TLS/SSL\s0 certificate +for the server. You should do this in exactly the same way that you would +generate a certificate for a web server. +.PP +If you're happy with a self-signed certificate (which will generate +warnings with some news reader clients), you can create and install one in +the default path by running \f(CW\*(C`make cert\*(C'\fR after \f(CW\*(C`make install\*(C'\fR when +installing \s-1INN\s0, or by running the following commands: +.PP +.Vb 6 +\& openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem \e +\& -days 366 -keyout /usr/local/news/lib/key.pem +\& chown news:news /usr/local/news/lib/cert.pem +\& chmod 640 /usr/local/news/lib/cert.pem +\& chown news:news /usr/local/news/lib/key.pem +\& chmod 600 /usr/local/news/lib/key.pem +.Ve +.PP +Replace the paths with something appropriate to your \s-1INN\s0 installation. +This will create a self-signed certificate that will expire in a year. +The \fBopenssl\fR program will ask you a variety of questions about your +organization. Enter the fully qualified domain name of the server as the +name the certificate is for. +.PP +Most news clients currently do not use the \s-1STARTTLS\s0 command, however, and +instead expect to connect to a separate port (563) and start an \s-1SSL\s0 +negotiation immediately. \fBinnd\fR does not, however, know how to listen +for connections to that port and then spawn \fBnnrpd\fR the way that it does +for regular reader connections. You will therefore need to arrange for +\&\fBnnrpd\fR to listen on that port through some other means. This can be +done with the \fB\-D\fR flag (and \f(CW\*(C`\-P 563\*(C'\fR), but the easiest way is probably +to add a line like: +.PP +.Vb 1 +\& nntps stream tcp nowait news /usr/lib/news/bin/nnrpd nnrpd -S +.Ve +.PP +to \fI/etc/inetd.conf\fR or the equivalent on your system and let \fBinetd\fR +run \fBnnrpd\fR. (Change the path to \fBnnrpd\fR to match your installation if +needed.) You may need to replace \f(CW\*(C`nntps\*(C'\fR with \f(CW563\fR if \f(CW\*(C`nntps\*(C'\fR isn't +defined in \fI/etc/services\fR on your system. .SH "PROTOCOL DIFFERENCES" .IX Header "PROTOCOL DIFFERENCES" \&\fBnnrpd\fR implements the \s-1NNTP\s0 commands defined in \s-1RFC\s0 977, with the following differences: -.RS 4 .IP "1." 4 The \f(CW\*(C`slave\*(C'\fR command is not implemented. This command has never been fully defined. @@ -324,8 +373,8 @@ support added by Rob Robertston and Rich in January, 1993. Exponential backoff (for posting) added by Dave Hayes in Febuary 1998. -.Sp -$Id: nnrpd.8,v 1.30.2.1 2003/09/08 04:35:14 rra Exp $ +.PP +$Id: nnrpd.8,v 1.30.2.4 2004/12/19 20:52:21 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIctlinnd\fR\|(8), \fIinnd\fR\|(8), \fIinn.conf\fR\|(5), \fIsignal\fR\|(2), \fIuwildmat\fR\|(3). diff -ruN inn-2.4.1/doc/man/ovdb.5 inn-2.4.2/doc/man/ovdb.5 --- inn-2.4.1/doc/man/ovdb.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/ovdb.5 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "OVDB 5" -.TH OVDB 5 "2003-09-14" "INN 2.4.1" "InterNetNews Documentation" +.TH OVDB 5 "2004-06-08" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" ovdb \- Overview storage method for INN .SH "DESCRIPTION" @@ -255,7 +255,11 @@ If this parameter is set to 0, expireover will compact all newsgroups; if set to 1, expireover will not compact any newsgroups; and if set to a value greater than one, expireover will only compact groups that have less -than that number of articles. Default is 1000. +than that number of articles. +.Sp +Experience has shown that compacting has minimal effect (other than +making expireover take longer) so the default is now 1. This parameter +will probably be removed in the future. .IP "readserver" 4 .IX Item "readserver" Normally, each nnrpd process directly accesses the BerkeleyDB environment. diff -ruN inn-2.4.1/doc/man/pgpverify.1 inn-2.4.2/doc/man/pgpverify.1 --- inn-2.4.1/doc/man/pgpverify.1 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/pgpverify.1 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "PGPVERIFY 1" -.TH PGPVERIFY 1 "2002-12-03" "INN 2.4.0" "InterNetNews Documentation" +.TH PGPVERIFY 1 "2004-01-11" "INN 2.4.1" "InterNetNews Documentation" .SH "NAME" pgpverify \- Cryptographically verify Usenet control messages .SH "SYNOPSIS" @@ -188,6 +188,8 @@ person who installs \fBpgpverify\fR to ensure that when \fBpgp\fR or \fBgpgv\fR runs, it has the ability to locate and read a \s-1PGP\s0 key file that contains the \s-1PGP\s0 public keys for the appropriate Usenet hierarchy administrators. +\&\fBpgpverify\fR can be pointed to an appropriate key ring by editing +variables at the beginning of this script. .SH "NOTES" .IX Header "NOTES" Historically, Usenet news server administrators have configured their news @@ -237,7 +239,8 @@ .SH "HISTORY" .IX Header "HISTORY" \&\fBpgpverify\fR was written by David C Lawrence . Manual page -provided by James Ralston. +provided by James Ralston. It is currently maintained by Russ Allbery +. .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" David Lawrence wrote: \*(L"Our lawyer told me to include the following. The diff -ruN inn-2.4.1/doc/man/radius.conf.5 inn-2.4.2/doc/man/radius.conf.5 --- inn-2.4.1/doc/man/radius.conf.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/radius.conf.5 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "RADIUS.CONF 5" -.TH RADIUS.CONF 5 "2002-12-01" "INN 2.4.0" "InterNetNews Documentation" +.TH RADIUS.CONF 5 "2004-05-16" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" radius.conf \- Configuration for nnrpd RADIUS authenticator .SH "DESCRIPTION" @@ -141,8 +141,18 @@ .PP Blank lines and lines beginning with \f(CW\*(C`#\*(C'\fR are ignored, as is anything after a \f(CW\*(C`#\*(C'\fR on a line. All other lines should begin with a parameter -name followed by a colon and the value of that key. The available -parameters are: +name followed by a colon and the value of that key, except that each +section of configuration for a particular server should be enclosed in: +.PP +.Vb 3 +\& server { +\& # parameters... +\& } +.Ve +.PP +where is just some convenient label for that server. +.PP +The available parameters are: .IP "\fIradhost\fR" 4 .IX Item "radhost" The hostname of the \s-1RADIUS\s0 server to use for authentication. This @@ -163,9 +173,9 @@ connecting to a non-standard port. .IP "\fIsecret\fR" 4 .IX Item "secret" -The shared secret with the \s-1RADIUS\s0 server. Be careful not to include a -\&\f(CW\*(C`#\*(C'\fR in your secret, since this will be taken to be the beginning of a -comment rather than part of the secret. This parameter must be set. +The shared secret with the \s-1RADIUS\s0 server. If your secret includes spaces, +tabs, or \f(CW\*(C`#\*(C'\fR, be sure to include it in double quotes. This parameter +must be set. .IP "\fIprefix\fR" 4 .IX Item "prefix" Prepend the value of this parameter to all usernames before passing them @@ -195,11 +205,13 @@ \&\f(CW\*(C`@example.com\*(C'\fR to all client-supplied usernames before passing them to the \s-1RADIUS\s0 server: .PP -.Vb 4 -\& radhost: radius.example.com -\& lochost: news.example.com -\& secret: IamARADIUSsecRET -\& suffix: @example.com +.Vb 6 +\& server example { +\& radhost: radius.example.com +\& lochost: news.example.com +\& secret: IamARADIUSsecRET +\& suffix: @example.com +\& } .Ve .PP The shared secret with the \s-1RADIUS\s0 server is \f(CW\*(C`IamARADIUSsecRET\*(C'\fR. @@ -208,7 +220,7 @@ This documentation was written by Russ Allbery based on the comments in the sample radius.conf file by Yury B. Razbegin. .PP -$Id: radius.conf.5,v 1.2 2002/12/03 05:31:11 vinocur Exp $ +$Id: radius.conf.5,v 1.2.2.2 2004/05/16 23:06:08 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIradius\fR\|(1) diff -ruN inn-2.4.1/doc/man/sasl.conf.5 inn-2.4.2/doc/man/sasl.conf.5 --- inn-2.4.1/doc/man/sasl.conf.5 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/sasl.conf.5 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "SASL.CONF 5" -.TH SASL.CONF 5 "2002-12-03" "INN 2.4.0" "InterNetNews Documentation" +.TH SASL.CONF 5 "2004-12-19" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" sasl.conf \- SASL Configuration file for nnrpd. .SH "DESCRIPTION" @@ -142,17 +142,19 @@ http://www.openssl.org/; it has been tested with versions 0.9.4 and 0.9.5. .SH "INSTALLATION" .IX Header "INSTALLATION" -To use \s-1SSL\s0, a certificate and private key are needed that you can -create using the openssl binary. -Make certain that each keys are owned by your news user, news group, -and are mode 0640 or 0660. -.Sh "\s-1EXAMPLE\s0" -.IX Subsection "EXAMPLE" -.Vb 4 -\& openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem\e -\& -days 366 -keyout /usr/local/news/lib/cert.pem +To use \s-1SSL\s0, a certificate and private key are needed that you can create +using the openssl binary. Make certain that the certificate is owned by +your news user, news group, and is mode 0640 or 0660, and that the key is +owned by your news user, news group, and is mode 600. +.SH "EXAMPLE" +.IX Header "EXAMPLE" +.Vb 6 +\& openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem \e +\& -days 366 -keyout /usr/local/news/lib/key.pem \& chown news:news /usr/local/news/lib/cert.pem \& chmod 640 /usr/local/news/lib/cert.pem +\& chown news:news /usr/local/news/lib/key.pem +\& chmod 600 /usr/local/news/lib/key.pem .Ve .PP You also can make the keys as the root user with \f(CW\*(C`make cert\*(C'\fR. diff -ruN inn-2.4.1/doc/man/send-nntp.8 inn-2.4.2/doc/man/send-nntp.8 --- inn-2.4.1/doc/man/send-nntp.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/send-nntp.8 Wed Dec 22 04:21:19 2004 @@ -1,12 +1,17 @@ .TH SEND-UUCP 8 .SH NAME -send-uucp, send-nntp, send-ihave \- send Usenet articles to remote site +send-nntp, send-ihave \- send Usenet articles to remote site .SH SYNOPSIS -{ .B send-nntp -| +[ +.B \-d +] +.B sitename:hostname | sitename +[ +.B sitename:hostname | sitename .. +] +.PP .B send-ihave -} [ .B \-d ] diff -ruN inn-2.4.1/doc/man/sm.1 inn-2.4.2/doc/man/sm.1 --- inn-2.4.1/doc/man/sm.1 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/sm.1 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "SM 1" -.TH SM 1 "2002-12-07" "INN 2.4.0" "InterNetNews Documentation" +.TH SM 1 "2004-03-06" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" sm \- Command\-line interface to the INN storage manager .SH "SYNOPSIS" @@ -189,12 +189,23 @@ output can be fed to rnews (on another system, for example) to inject those articles into \s-1INN\s0. This option cannot be used with \fB\-d\fR, \fB\-r\fR, \&\fB\-H\fR, \fB\-i\fR, or \fB\-R\fR. +.SH "EXIT STATUS" +.IX Header "EXIT STATUS" +If all operations were successful, \fBsm\fR exits with status 0. If an +operation on any of the provided tokens fails, \fBsm\fR will exit with status +1, even if the operations on other tokens were successful. In other +words, if twenty tokens are fed to \f(CW\*(C`sm \-r\*(C'\fR on stdin, 19 articles were +successfully removed, but the sixth article couldn't be found, \fBsm\fR will +still exit with status 1. +.PP +This means that if you need to be sure whether a particular operation +succeeded, you should run sm on one token at a time. .SH "HISTORY" .IX Header "HISTORY" Written by Katsuhiro Kondou for InterNetNews. Rewritten in \s-1POD\s0 by Russ Allbery . .PP -$Id: sm.1,v 1.1 2002/12/07 23:14:54 rra Exp $ +$Id: sm.1,v 1.1.2.1 2004/03/06 18:31:58 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIctlinnd\fR\|(8), \fIgrephistory\fR\|(1), \fIhistory\fR\|(5), \fIrnews\fR\|(1), \fIstorage.conf\fR\|(5). diff -ruN inn-2.4.1/doc/man/tdx-util.8 inn-2.4.2/doc/man/tdx-util.8 --- inn-2.4.1/doc/man/tdx-util.8 Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/man/tdx-util.8 Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.14 .\" .\" Standard preamble: .\" ======================================================================== @@ -129,7 +129,7 @@ .\" ======================================================================== .\" .IX Title "TDX-UTIL 8" -.TH TDX-UTIL 8 "2002-08-30" "INN 2.4.0" "InterNetNews Documentation" +.TH TDX-UTIL 8 "2004-12-19" "INN 2.4.2" "InterNetNews Documentation" .SH "NAME" tdx\-util \- Tradindexed overview manipulation utility .SH "SYNOPSIS" @@ -153,10 +153,10 @@ is doing may cause the server to stall until \fBtdx-util\fR completes its operation. .PP -The dump operations are \fB\-g\fR, which dumps the master index for the -overview database, \fB\-i\fR, which dumps the index for an individual group, +The dump operations are \fB\-i\fR, which dumps the master index for the +overview database, \fB\-g\fR, which dumps the index for an individual group, and \fB\-o\fR, which dumps the overview information for a particular group -(including the additional metadata stored in the index). For \fB\-i\fR and +(including the additional metadata stored in the index). For \fB\-g\fR and \&\fB\-o\fR, the \fB\-n\fR option must also be given to specify a newsgroup to operate on. .PP @@ -263,13 +263,13 @@ regardless of the overview path specified in \fIinn.conf\fR: .PP .Vb 1 -\& tdx-util -g -p /news/overview +\& tdx-util -i -p /news/overview .Ve .PP Dump the group index for example.test: .PP .Vb 1 -\& tdx-util -i -n example.test +\& tdx-util -g -n example.test .Ve .PP Dump the complete overview information for example.test: @@ -298,7 +298,7 @@ .IX Header "HISTORY" Written by Russ Allbery for InterNetNews. .PP -$Id: tdx-util.8,v 1.2 2002/08/31 00:53:48 rra Exp $ +$Id: tdx-util.8,v 1.2.2.1 2004/12/19 19:41:49 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fImakehistory\fR\|(8) diff -ruN inn-2.4.1/doc/pod/Makefile inn-2.4.2/doc/pod/Makefile --- inn-2.4.1/doc/pod/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.34.2.1 2003/08/08 22:08:19 vinocur Exp $ +## $Id: Makefile,v 1.34.2.4 2004/12/20 03:26:26 rra Exp $ ## ## This Makefile contains rules to generate the files derived from POD ## source. Normal make commands at the top level of the source tree don't @@ -10,15 +10,16 @@ TEXT = ../../HACKING ../../INSTALL ../../NEWS ../../README ../hook-perl \ ../hook-python ../external-auth ../checklist -MAN1 = ../man/convdate.1 ../man/fastrm.1 ../man/innconfval.1 \ - ../man/innmail.1 ../man/simpleftp.1 ../man/sm.1 +MAN1 = ../man/convdate.1 ../man/fastrm.1 ../man/grephistory.1 \ + ../man/inews.1 ../man/innconfval.1 ../man/innmail.1 \ + ../man/simpleftp.1 ../man/sm.1 MAN3 = ../man/libauth.3 ../man/libinnhist.3 ../man/list.3 ../man/qio.3 \ ../man/tst.3 ../man/uwildmat.3 MAN5 = ../man/active.5 ../man/active.times.5 ../man/control.ctl.5 \ ../man/cycbuff.conf.5 ../man/distrib.pats.5 ../man/expire.ctl.5 \ - ../man/inn.conf.5 ../man/newsfeeds.5 ../man/ovdb.5 \ + ../man/inn.conf.5 ../man/motd.news.5 ../man/newsfeeds.5 ../man/ovdb.5 \ ../man/passwd.nntp.5 ../man/radius.conf.5 ../man/readers.conf.5 \ ../man/sasl.conf.5 ../man/subscriptions.5 @@ -48,6 +49,8 @@ ../man/convdate.1: convdate.pod ; $(POD2MAN) -s 1 $? > $@ ../man/fastrm.1: fastrm.pod ; $(POD2MAN) -s 1 $? > $@ +../man/grephistory.1: grephistory.pod ; $(POD2MAN) -s 1 $? > $@ +../man/inews.1: inews.pod ; $(POD2MAN) -s 1 $? > $@ ../man/innconfval.1: innconfval.pod ; $(POD2MAN) -s 1 $? > $@ ../man/innmail.1: innmail.pod ; $(POD2MAN) -s 1 $? > $@ ../man/simpleftp.1: simpleftp.pod ; $(POD2MAN) -s 1 $? > $@ @@ -67,6 +70,7 @@ ../man/distrib.pats.5: distrib.pats.pod ; $(POD2MAN) -s 5 $? > $@ ../man/expire.ctl.5: expire.ctl.pod ; $(POD2MAN) -s 5 $? > $@ ../man/inn.conf.5: inn.conf.pod ; $(POD2MAN) -s 5 $? > $@ +../man/motd.news.5: motd.news.pod ; $(POD2MAN) -s 5 $? > $@ ../man/newsfeeds.5: newsfeeds.pod ; $(POD2MAN) -s 5 $? > $@ ../man/ovdb.5: ovdb.pod ; $(POD2MAN) -s 5 $? > $@ ../man/passwd.nntp.5: passwd.nntp.pod ; $(POD2MAN) -s 5 $? > $@ diff -ruN inn-2.4.1/doc/pod/active.pod inn-2.4.2/doc/pod/active.pod --- inn-2.4.1/doc/pod/active.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/active.pod Wed Dec 22 04:21:19 2004 @@ -65,8 +65,7 @@ crossposted to some other valid group, it will be filed into the C newsgroup instead. This is different than simply not listing the group, since the article will still be accepted and can be propagated to other -sites that receive the C group, and the C group can be made -available to readers if wished. +sites, and the C group can be made available to readers if wished. If the field begins with an equal sign, the newsgroup is an alias. Articles cannot be posted to that newsgroup, but they can be received from @@ -82,7 +81,7 @@ Written by Rich $alz for InterNetNews. Converted to POD by Russ Allbery . -$Id: active.pod,v 1.1 2003/04/06 21:50:07 rra Exp $ +$Id: active.pod,v 1.1.2.1 2004/05/17 05:48:54 rra Exp $ =head1 SEE ALSO diff -ruN inn-2.4.1/doc/pod/external-auth.pod inn-2.4.2/doc/pod/external-auth.pod --- inn-2.4.1/doc/pod/external-auth.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/external-auth.pod Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ =head1 NNRPD External Authentication Support -This is $Revision: 1.2 $ dated $Date: 2002/12/12 23:02:14 $. +This is $Revision: 1.2.2.1 $ dated $Date: 2004/05/17 12:18:18 $. A fundamental part of the readers.conf(5)-based authorization mechanism is the interface to external authenticator and resolver programs. This @@ -77,7 +77,7 @@ =head2 Returning a username and domain -If the program succeeds, it may return a username string (optionally +If the program succeeds, it must return a username string (optionally with a domain appended) by writing to standard output. The line it should write is exactly: diff -ruN inn-2.4.1/doc/pod/grephistory.pod inn-2.4.2/doc/pod/grephistory.pod --- inn-2.4.1/doc/pod/grephistory.pod Thu Jan 1 00:00:00 1970 +++ inn-2.4.2/doc/pod/grephistory.pod Wed Dec 22 04:21:19 2004 @@ -0,0 +1,85 @@ +=head1 NAME + +grephistory - Query the INN history database + +=head1 SYNOPSIS + +B [B<-eilnqsv>] [B<-f> I] [I] + +=head1 DESCRIPTION + +B queries the INN history database for information about the +specified message ID. If no flags are given, the program prints the +storage API token of the corresponding article, or C if the +article is listed in the history database but not stored on the server. +If the message ID cannot be found in the database, B will +print C and exit with a non-zero status. + +Be sure to escape any special characters in the message ID from the shell. +Single quotes are recommended for this purpose since many message IDs +contain dollar signs. + +=head1 OPTIONS + +=over 4 + +=item B<-e> + +Only print the storage token if the article is stored on the system. (In +other words, suppress the C or C output for missing +or remembered articles.) + +=item B<-f> I + +Query the history database I rather than the default history database. + +=item B<-i> + +Rather than expecting a message ID on the command line, B +will read a list of message IDs on standard input, one per line. Leading +and trailing whitespace is ignored, as are any malformed lines. It will +print out standard output those message IDs which are not found in the +history database. This is used when processing C control messages. + +=item B<-l> + +Display the entire line from the history database, rather than just the +storage API token. + +=item B<-n> + +If the message ID is present in the history database but has no storage +API token, print C and exit successfully. This can happen if +an article has been cancelled or expired, but history information has +still been retained. This is the default behavior. + +=item B<-q> + +Don't print any message, but still exit with the appropriate status. + +=item B<-s> + +Rather than expecting a message ID on the command line, B +will read a list of message IDs on standard input, one per line. Leading +and trailing whitespace is ignored, as are any malformed lines. It will +print on standard output the storage API tokens for any articles that are +still available, one per line. This flag is used when processing +C control messages. + +=item B<-v> + +Print out the hash of the message ID for diagnostic purposes, as well as +any other requested information. This flag is not useful with B<-s>. + +=head1 HISTORY + +Written by Rich $alz for InterNetNews. Rewritten in +POD by Russ Allbery . + +$Id: grephistory.pod,v 1.1.2.1 2004/12/19 19:37:45 rra Exp $ + +=head1 SEE ALSO + +history(5), inn.conf(5) + +=cut diff -ruN inn-2.4.1/doc/pod/hacking.pod inn-2.4.2/doc/pod/hacking.pod --- inn-2.4.1/doc/pod/hacking.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/hacking.pod Wed Dec 22 04:21:19 2004 @@ -5,7 +5,7 @@ guide, resource, and accumulation of tips for maintainers and contributors, and secondarily as documentation of some of INN's internals. -This is $Revision: 1.24.2.1 $ dated $Date: 2003/07/12 19:08:59 $. +This is $Revision: 1.24.2.3 $ dated $Date: 2004/10/01 06:41:17 $. First of all, if you plan on working on INN source, please start from the current development tree. There may be significant changes from the @@ -68,28 +68,13 @@ system name and and F for libtool support. The latter file comes from the libtool distribution; the canonical version of the former two are available from ftp.gnu.org in /gnu/config. In addition, -F at the top level of the source tree is just a copy of -F from the libtool distribution. (Using libtool without using -automake requires a few odd hacks.) - -For maintainers with CVS access, these four files are on a separate vendor -branch (the 1.1.2 branch in the repository). When a new version of -libtool is released, put F in a directory and F in -a subdirectory of that directory named F and then import that -directory onto that branch with something like - - cvs import -m "Import of libtool 1.4 support files" -b 1.1.2 \ - inn FSF LIBTOOL-1_4 - -(all on one line) and then merge that vendor branch into the mainline. Do -something similar for new versions of F and F -(but only import the support directory). See the cvs manual under -Tracking Sources and specifically Multiple Vendor Branches for more -details. - -This process can also be done with just F and F -when new versions of those are released. - +F is just a copy of F from the libtool +distribution. (Using libtool without using automake requires a few odd +hacks.) These files used to be on a separate vendor branch so that we +could make local modifications, but local modifications have not been +necessary for some time. Now, new versions can just be checked in like +any other file modifications. + INN should not compile with libtool by default, only when requested, since otherwise normal compilations are quite slow. (Using libtool is not without some cost.) Basic compilation with libtool works fine as of this @@ -267,8 +252,8 @@ the format are probably F and F, at least for directories with lots of separate programs. The ALL variable holds all the files that should be generated, EXTRA those additional files -that were generated by configure, SOURCES the C source files for -generating tag information, and INSTALLED the final installed paths. +that were generated by configure, and SOURCES the C source files for +generating tag information. There are a set of standard installation commands defined in make variables by Makefile.global, and these should be used for all file diff -ruN inn-2.4.1/doc/pod/inews.pod inn-2.4.2/doc/pod/inews.pod --- inn-2.4.1/doc/pod/inews.pod Thu Jan 1 00:00:00 1970 +++ inn-2.4.2/doc/pod/inews.pod Wed Dec 22 04:21:19 2004 @@ -0,0 +1,142 @@ +=head1 NEWS + +inews - Post a Usenet article to the local news server + +=head1 SYNOPSIS + +B [B<-ADhNORSVW>] [B<-acdeFfnortwx> I] [B<-p> I] [I] + +=head1 DESCRIPTION + +B reads a Usenet news article, perhaps with headers, from I +or standard input if no file is given. It adds some headers and performs +some consistency checks. If the article does not meet those checks, the +article is rejected. If it passes the checks, B sends the article +to the local news server as specified in F. + +By default, if a file named F<.signature> exists in the home directory of +the posting user, it is appended to the post, preceeded by a line that +contains only C<-- >. Signatures are not allowed to be more than four +lines long. + +Cancel messages can only be posted with B if the sender of the +cancel message matches the sender of the original message being +cancelled. The same check is also applied to Supersedes. Sender in this +case means the contents of the Sender header if present, otherwise the +From header. + +Control messages other than cancel messages are only allowed if B +is being run by the news user or by a user in the news group and if the +control message is recognized. If the article contains a Distribution +header with a distribution that matches one of the bad distribution +patterns in F (anything containing a period by default), +the message will be rejected. The message will also be rejected if +I is true in F, it contains more quoted text +than original text, and it is over 40 lines long. + +If not provided, the Path header of an article is constructed as follows: +The basic Path header will be "not-for-mail". If I is specified +in F, it will be added to the beginning Path. Otherwise, if +I is specified, the full domain of the local host will be added to +the beginning of the Path. Then, if B<-x> was given, its value will be +added to the beginning of the Path. + +If posting fails, a copy of the failed post will be saved in a file named +F in the home directory of the user running B. +B exits with a non-zero status if posting failed or with a zero +status if posting was successful. + +=head1 OPTIONS + +Most of the options to B take a single value and set the +corresponding header in the message that is posted. If the value is more +than one word or contains any shell metacharacters, it must be quoted to +protect it from the shell. Here are all the options that set header +fields and the corresponding header: + + -a Approved + -c Control + -d Distribution + -e Expires + -F References + -f From + -n Newsgroups + -o Organization + -r Reply-To + -t Subject + -w Followup-To + -x Path prefix + +The B<-x> argument will be added to the beginning of the normal Path +header; it will not replace it. + +=over 4 + +=item B<-A>, B<-V>, B<-W> + +Accepted for compatibility with C News. These options have no affect. + +=item B<-D>, B<-N> + +Perform the consistency checks and add headers where appropriate, but then +print the article to standard output rather than sending it to the server. +B<-N> is accepted as as synonym for compatibility with C News. + +=item B<-h> + +Normally, this flag should always be given. It indicates that the article +consists of headers, a blank line, and then the message body. If it is +omitted, the input is taken to be just the body of the message, and any +desired headers have to be specified with command-line options as +described above. + +=item B<-O> + +By default, an Organization header will be added if none is present in the +article. To prevent adding the default (from I in +F), use this flag. + +=item B<-p> I + +Connect to the specified port on the server rather than to the default +(port 119). + +=item B<-R> + +Reject all control messages. + +=item B<-S> + +Do not attempt to append F<~/.signature> to the message, even if it +exists. + +=back + +=head1 NOTES + +If the NNTP server requests authentication, B will try to read +F to get the username and password to use and will therefore +need read access to that file. This is typically done by making that file +group-readable and adding all users who should be able to use B to +post to that server to the appropriate group. + +B used to do even more than it does now, and all of the remaining +checks that are not dependent on the user running B should probably +be removed in favor of letting the news server handle them. + +Since INN's B uses F and some other corners of an INN +installation, it's not very appropriate as a general stand-alone B +program for general use on a system that's not running a news server. +Other, more suitable versions of B are available as part of various +Unix news clients or by themselves. + +=head1 HISTORY + +Written by Rich $alz for InterNetNews. Rewritten in +POD by Russ Allbery . + +=head1 SEE ALSO + +inn.conf(5), rnews(1) + +=cut diff -ruN inn-2.4.1/doc/pod/install.pod inn-2.4.2/doc/pod/install.pod --- inn-2.4.1/doc/pod/install.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/install.pod Wed Dec 22 04:21:19 2004 @@ -27,6 +27,10 @@ your old build tree, look at the comments at the beginning of F. +If you made ckpasswd setuid root so that you could use system passwords, +you'll have to do that again after make update. (It's much better to use +PAM instead if you can.) + If you use C to upgrade from INN 2.3, also look at the new sample configuration files in F to see if there are new options of interest to you. In particular, F has been updated and @@ -131,9 +135,9 @@ =back -Also, if you want to use either the Tcl or Python embedded hooks, you'll -need to have suitable versions of Tcl and/or Python installed. See -F and F for more information. +Also, if you want to use the Python embedded hooks, you'll need to have a +suitable version of Python installed. See F for more +information. =head1 Unpacking the Distribution @@ -301,14 +305,6 @@ F for all the details. Note that there is an incompatibility between INN and Python 2.0 when Python is compiled with cycle garbage collection; this problem was reported fixed in Python 2.1a1. - -=item B<--with-tcl> - -Enables support for Tcl, allowing you to install filter scripts written in -Tcl. Most available filterse seem to be written in Perl these days, so -you can safely leave out Tcl support. If you choose to enable this, you -will need to have a suitable Tcl distribution installed. See -F for all the details. =item B<--with-innd-port>=PORT diff -ruN inn-2.4.1/doc/pod/mailpost.pod inn-2.4.2/doc/pod/mailpost.pod --- inn-2.4.1/doc/pod/mailpost.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/mailpost.pod Wed Dec 22 04:21:19 2004 @@ -6,7 +6,8 @@ B [B<-a> I] [B<-b> I] [B<-c> I] [B<-d> I] [B<-f> I] [B<-m> I] -[B<-r> I] [B<-x> I
[B<:>I
...]] [I ...] +[B<-p> I] [B<-r> I] [B<-x> I
[B<:>I
...]] +[I ...] =head1 DESCRIPTION @@ -66,16 +67,21 @@ If the B<-m> flag is used the value given is added to the articles in a Mailing-List: header, if such a header doesn't already exist. +=item B<-p> I + +Specifies the port on which B is listening, used for article posting. +If given, B<-p> is passed along to inews. + =item B<-r> I A heuristic is used to determine a reasonable value for the Path: header. The B<-r> flag indicates what to use if no other value can be determined. -=item B<-x> I
[B<:>I
...] +=item B<-x> I
[:I
...] -A B<:> separated list of additional headers which should be treated as known -headers; these headers will be passed through to inews(1) without being -``X-'' prefixed. +A colon-separated list of additional headers which should be treated as +known headers; these headers will be passed through to inews(1) without +having "X-" prepended. =back @@ -84,7 +90,7 @@ Written by Paul Vixie long ago and then hacked up by James Brister for INN integration. -$Id: mailpost.pod,v 1.2 2002/12/28 03:55:38 rra Exp $ +$Id: mailpost.pod,v 1.2.2.1 2004/01/25 23:44:19 rra Exp $ =head1 FILES diff -ruN inn-2.4.1/doc/pod/motd.news.pod inn-2.4.2/doc/pod/motd.news.pod --- inn-2.4.1/doc/pod/motd.news.pod Thu Jan 1 00:00:00 1970 +++ inn-2.4.2/doc/pod/motd.news.pod Wed Dec 22 04:21:19 2004 @@ -0,0 +1,26 @@ +=head1 NAME + +motd.news - Message of the day information for readers + +=head1 DESCRIPTION + +This file, found in I/motd.news, contains local information for +news readers in a free-form format. The entire file is returned verbatim +to any client that issues the LIST MOTD command. This might be used for +new information, notification of upcoming downtime, or similar purposes. + +Be aware that use of the LIST MOTD command is not widespread and most news +clients will never ask for this file. + +If this file is missing, it is not an error. The server will just send +the client an empty response. + +=head1 HISTORY + +Rewritten in POD by Russ Allbery for InterNetNews. + +$Id: motd.news.pod,v 1.1.2.1 2003/12/27 06:25:05 rra Exp $ + +=head1 SEE ALSO + +inn.conf(5) diff -ruN inn-2.4.1/doc/pod/news.pod inn-2.4.2/doc/pod/news.pod --- inn-2.4.1/doc/pod/news.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/news.pod Wed Dec 22 04:21:19 2004 @@ -1,3 +1,101 @@ +=head1 Changes from 2.4.1 to 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 * + +make install and make update 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. make install 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 innd 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 * + +ctlinnd 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 innstat output. + +=item * + +Overview generation has been fixed in both makehistory and innd 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 480 or 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 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 A access +control in readers.conf), 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 readers.conf 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 innd if INN +were compiled with Python support has been fixed. + +=item * + +Some problems with innd's tracking of article size and enforcement of the +configured maximum article size have been fixed. + +=item * + +pgpverify 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 inews, in +controlchan, and in expire. + +=item * + +Many other, more minor bugs have also been fixed. + +=back + =head1 Changes from 2.4.0 to 2.4.1 =over 2 @@ -5,7 +103,7 @@ =item * SECURITY: Handle the special filing of control messages into per-type -newsgroups more robust. This closes a potentially exploitable buffer +newsgroups more robustly. This closes a potentially exploitable buffer overflow. Thanks to Dan Riley for his excellent bug report. =item * diff -ruN inn-2.4.1/doc/pod/nnrpd.pod inn-2.4.2/doc/pod/nnrpd.pod --- inn-2.4.1/doc/pod/nnrpd.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/nnrpd.pod Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ =head1 NAME -nnrpd - NNTP server for on-campus hosts +nnrpd - NNTP server for reader clients =head1 SYNOPSIS @@ -67,6 +67,11 @@ F once on startup and never again until restarted. B should therefore be restarted if inn.conf is changed. +When started in daemon mode, B will write its PID into a file in +the I directory. The file will be named F, where +C<%d> is replaced with the port that B is configured to listen on +(119 unless the B<-P> option is given). + =item B<-f> If specified, B does not detach itself and runs in the @@ -154,6 +159,50 @@ by innd(8) under the control of the ctlinnd(8) C command, and is toggled upon receipt of a C; see signal(2). +=back + +=head1 SSL SUPPORT + +If INN is built with C<--with-openssl>, B will support news reading +over TLS (also known as SSL). For clients that use the STARTTLS command, +no special configuration is needed beyond creating a TLS/SSL certificate +for the server. You should do this in exactly the same way that you would +generate a certificate for a web server. + +If you're happy with a self-signed certificate (which will generate +warnings with some news reader clients), you can create and install one in +the default path by running C after C when +installing INN, or by running the following commands: + + openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem \ + -days 366 -keyout /usr/local/news/lib/key.pem + chown news:news /usr/local/news/lib/cert.pem + chmod 640 /usr/local/news/lib/cert.pem + chown news:news /usr/local/news/lib/key.pem + chmod 600 /usr/local/news/lib/key.pem + +Replace the paths with something appropriate to your INN installation. +This will create a self-signed certificate that will expire in a year. +The B program will ask you a variety of questions about your +organization. Enter the fully qualified domain name of the server as the +name the certificate is for. + +Most news clients currently do not use the STARTTLS command, however, and +instead expect to connect to a separate port (563) and start an SSL +negotiation immediately. B does not, however, know how to listen +for connections to that port and then spawn B the way that it does +for regular reader connections. You will therefore need to arrange for +B to listen on that port through some other means. This can be +done with the B<-D> flag (and C<-P 563>), but the easiest way is probably +to add a line like: + + nntps stream tcp nowait news /usr/lib/news/bin/nnrpd nnrpd -S + +to F or the equivalent on your system and let B +run B. (Change the path to B to match your installation if +needed.) You may need to replace C with C<563> if C isn't +defined in F on your system. + =head1 PROTOCOL DIFFERENCES B implements the NNTP commands defined in RFC 977, with the @@ -228,6 +277,8 @@ code of C<111> followed by the GMT date and time on the server in the form C. +=back + =head1 HISTORY Written by Rich $alz for InterNetNews. Overview @@ -235,7 +286,7 @@ January, 1993. Exponential backoff (for posting) added by Dave Hayes in Febuary 1998. -$Id: nnrpd.pod,v 1.2.2.1 2003/09/08 04:35:13 rra Exp $ +$Id: nnrpd.pod,v 1.2.2.4 2004/12/19 20:52:20 rra Exp $ =head1 SEE ALSO diff -ruN inn-2.4.1/doc/pod/ovdb.pod inn-2.4.2/doc/pod/ovdb.pod --- inn-2.4.1/doc/pod/ovdb.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/ovdb.pod Wed Dec 22 04:21:19 2004 @@ -137,7 +137,11 @@ If this parameter is set to 0, expireover will compact all newsgroups; if set to 1, expireover will not compact any newsgroups; and if set to a value greater than one, expireover will only compact groups that have less -than that number of articles. Default is 1000. +than that number of articles. + +Experience has shown that compacting has minimal effect (other than +making expireover take longer) so the default is now 1. This parameter +will probably be removed in the future. =item readserver diff -ruN inn-2.4.1/doc/pod/radius.conf.pod inn-2.4.2/doc/pod/radius.conf.pod --- inn-2.4.1/doc/pod/radius.conf.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/radius.conf.pod Wed Dec 22 04:21:19 2004 @@ -11,8 +11,16 @@ Blank lines and lines beginning with C<#> are ignored, as is anything after a C<#> on a line. All other lines should begin with a parameter -name followed by a colon and the value of that key. The available -parameters are: +name followed by a colon and the value of that key, except that each +section of configuration for a particular server should be enclosed in: + + server { + # parameters... + } + +where is just some convenient label for that server. + +The available parameters are: =over 4 @@ -40,9 +48,9 @@ =item I -The shared secret with the RADIUS server. Be careful not to include a -C<#> in your secret, since this will be taken to be the beginning of a -comment rather than part of the secret. This parameter must be set. +The shared secret with the RADIUS server. If your secret includes spaces, +tabs, or C<#>, be sure to include it in double quotes. This parameter +must be set. =item I @@ -78,10 +86,12 @@ C<@example.com> to all client-supplied usernames before passing them to the RADIUS server: - radhost: radius.example.com - lochost: news.example.com - secret: IamARADIUSsecRET - suffix: @example.com + server example { + radhost: radius.example.com + lochost: news.example.com + secret: IamARADIUSsecRET + suffix: @example.com + } The shared secret with the RADIUS server is C. @@ -90,7 +100,7 @@ This documentation was written by Russ Allbery based on the comments in the sample radius.conf file by Yury B. Razbegin. -$Id: radius.conf.pod,v 1.1 2002/12/01 19:44:18 rra Exp $ +$Id: radius.conf.pod,v 1.1.2.2 2004/05/16 23:06:08 rra Exp $ =head1 SEE ALSO diff -ruN inn-2.4.1/doc/pod/readme.pod inn-2.4.2/doc/pod/readme.pod --- inn-2.4.1/doc/pod/readme.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/readme.pod Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ =head1 Welcome to INN 2.4! -This work is sponsored by the Internet Software Consortium. +This work is sponsored by Internet Systems Consortium. Please see F for installation instructions, F for what's changed from the previous release, and F for the copyright, @@ -60,7 +60,7 @@ server administrator to reject unwanted articles (such as spam and other abuses of Usenet). -INN is free software, supported by the Internet Software Consortium and +INN is free software, supported by Internet Systems Consortium and volunteers around the world. See L<"Supporting the INN Effort"> below. =head1 Prerequisites @@ -204,6 +204,9 @@ effort to getting this new version together. They deserve a big round of applause. They've certainly got our thanks. +This product includes software developed by UUNET Technologies, Inc. and +by the University of California, Berkeley and its contributors. + Last, but certainly not least, Rich Salz, the original author of INN deserves a lion's share of the credit for writing INN in the first place and making it the most popular news server software on the planet (no NNTP @@ -285,17 +288,17 @@ =head1 Supporting the INN Effort -Note that INN is supported by the Internet Software Consortium, and -although it is free for use and redistribution and incorporation into -vendor products and export and anything else you can think of, it costs -money to produce. That money comes from ISPs, hardware and software -vendors, companies who make extensive use of the software, and generally -kind-hearted folk such as yourself. - -The Internet Software Consortium has also commissioned a DHCP server -implementation, handles the official support/release of BIND, and supports -the Kerberos Version 5 effort at MIT. You can learn more about the ISC's -goals and accomplishments from the web page at . +Note that INN is supported by Internet Systems Consortium, and although it +is free for use and redistribution and incorporation into vendor products +and export and anything else you can think of, it costs money to produce. +That money comes from ISPs, hardware and software vendors, companies who +make extensive use of the software, and generally kind-hearted folk such +as yourself. + +Internet Systems Consortium has also commissioned a DHCP server +implementation and handles the official support/release of BIND. You can +learn more about the ISC's goals and accomplishments from the web page at +. Russ Allbery Katsuhiro Kondou diff -ruN inn-2.4.1/doc/pod/sasl.conf.pod inn-2.4.2/doc/pod/sasl.conf.pod --- inn-2.4.1/doc/pod/sasl.conf.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/sasl.conf.pod Wed Dec 22 04:21:19 2004 @@ -13,17 +13,19 @@ =head1 INSTALLATION -To use SSL, a certificate and private key are needed that you can -create using the openssl binary. -Make certain that each keys are owned by your news user, news group, -and are mode 0640 or 0660. +To use SSL, a certificate and private key are needed that you can create +using the openssl binary. Make certain that the certificate is owned by +your news user, news group, and is mode 0640 or 0660, and that the key is +owned by your news user, news group, and is mode 600. -=head2 EXAMPLE +=head1 EXAMPLE - openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem\ - -days 366 -keyout /usr/local/news/lib/cert.pem + openssl req -new -x509 -nodes -out /usr/local/news/lib/cert.pem \ + -days 366 -keyout /usr/local/news/lib/key.pem chown news:news /usr/local/news/lib/cert.pem chmod 640 /usr/local/news/lib/cert.pem + chown news:news /usr/local/news/lib/key.pem + chmod 600 /usr/local/news/lib/key.pem You also can make the keys as the root user with C. diff -ruN inn-2.4.1/doc/pod/sm.pod inn-2.4.2/doc/pod/sm.pod --- inn-2.4.1/doc/pod/sm.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/sm.pod Wed Dec 22 04:21:19 2004 @@ -69,12 +69,24 @@ =back +=head1 EXIT STATUS + +If all operations were successful, B exits with status 0. If an +operation on any of the provided tokens fails, B will exit with status +1, even if the operations on other tokens were successful. In other +words, if twenty tokens are fed to C on stdin, 19 articles were +successfully removed, but the sixth article couldn't be found, B will +still exit with status 1. + +This means that if you need to be sure whether a particular operation +succeeded, you should run sm on one token at a time. + =head1 HISTORY Written by Katsuhiro Kondou for InterNetNews. Rewritten in POD by Russ Allbery . -$Id: sm.pod,v 1.1 2002/12/07 23:14:55 rra Exp $ +$Id: sm.pod,v 1.1.2.1 2004/03/06 18:31:57 rra Exp $ =head1 SEE ALSO diff -ruN inn-2.4.1/doc/pod/tdx-util.pod inn-2.4.2/doc/pod/tdx-util.pod --- inn-2.4.1/doc/pod/tdx-util.pod Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/doc/pod/tdx-util.pod Wed Dec 22 04:21:19 2004 @@ -24,10 +24,10 @@ is doing may cause the server to stall until B completes its operation. -The dump operations are B<-g>, which dumps the master index for the -overview database, B<-i>, which dumps the index for an individual group, +The dump operations are B<-i>, which dumps the master index for the +overview database, B<-g>, which dumps the index for an individual group, and B<-o>, which dumps the overview information for a particular group -(including the additional metadata stored in the index). For B<-i> and +(including the additional metadata stored in the index). For B<-g> and B<-o>, the B<-n> option must also be given to specify a newsgroup to operate on. @@ -147,11 +147,11 @@ Dump the master index for the overview database in F, regardless of the overview path specified in F: - tdx-util -g -p /news/overview + tdx-util -i -p /news/overview Dump the group index for example.test: - tdx-util -i -n example.test + tdx-util -g -n example.test Dump the complete overview information for example.test: @@ -174,7 +174,7 @@ Written by Russ Allbery for InterNetNews. -$Id: tdx-util.pod,v 1.2 2002/08/31 00:53:47 rra Exp $ +$Id: tdx-util.pod,v 1.2.2.1 2004/12/19 19:41:49 rra Exp $ =head1 SEE ALSO diff -ruN inn-2.4.1/expire/Makefile inn-2.4.2/expire/Makefile --- inn-2.4.1/expire/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/expire/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.39 2003/04/20 19:04:12 vinocur Exp $ +## $Id: Makefile,v 1.39.2.1 2004/05/18 01:18:54 rra Exp $ include ../Makefile.global @@ -11,21 +11,20 @@ SOURCES = convdate.c expire.c expireover.c fastrm.c grephistory.c \ makedbz.c makehistory.c prunehistory.c -INSTALLED = $(D)$(PATHBIN)/convdate \ - $(D)$(PATHBIN)/expire \ - $(D)$(PATHBIN)/expireover \ - $(D)$(PATHBIN)/expirerm \ - $(D)$(PATHBIN)/fastrm \ - $(D)$(PATHBIN)/grephistory \ - $(D)$(PATHBIN)/makedbz \ - $(D)$(PATHBIN)/makehistory \ - $(D)$(PATHBIN)/prunehistory - all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + for F in convdate fastrm grephistory ; do \ + $(LI_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + for F in expire expireover makedbz makehistory prunehistory ; do \ + $(LI_XPRI) $$F $D$(PATHBIN)/$$F ; \ + done + $(CP_XPRI) expirerm $D$(PATHBIN)/expirerm + clean: rm -f *.o $(ALL) rm -f profiled expirep @@ -79,21 +78,6 @@ $(MAKEPROFILING) expire mv expire expirep rm -f expire.o - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/convdate: convdate ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/expire: expire ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/expireover: expireover ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/expirerm: expirerm ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/fastrm: fastrm ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/grephistory: grephistory ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/makedbz: makedbz ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/makehistory: makehistory ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/prunehistory: prunehistory ; $(LI_XPRI) $? $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/expire/expireover.c inn-2.4.2/expire/expireover.c --- inn-2.4.1/expire/expireover.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/expire/expireover.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: expireover.c,v 1.43 2003/01/19 01:15:28 rra Exp $ +/* $Id: expireover.c,v 1.43.2.1 2004/05/16 19:59:26 rra Exp $ ** ** Expire the overview database. ** @@ -14,6 +14,7 @@ #include #include #include +#include #include "inn/innconf.h" #include "inn/messages.h" diff -ruN inn-2.4.1/expire/grephistory.c inn-2.4.2/expire/grephistory.c --- inn-2.4.1/expire/grephistory.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/expire/grephistory.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: grephistory.c,v 1.30 2003/01/19 01:15:28 rra Exp $ +/* $Id: grephistory.c,v 1.30.2.1 2004/12/19 08:33:49 rra Exp $ ** ** Get data from history database. */ @@ -153,9 +153,9 @@ if (!HIScheck(history, key)) { if (What == 'n') { if (Verbosity > 0) - warn("not found (hash is %s)", HashToText(HashMessageID(key))); + die("not found (hash is %s)", HashToText(HashMessageID(key))); else - warn("not found"); + die("not found"); } } else if (What != 'q') { diff -ruN inn-2.4.1/expire/makehistory.c inn-2.4.2/expire/makehistory.c --- inn-2.4.1/expire/makehistory.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/expire/makehistory.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: makehistory.c,v 1.112.2.2 2003/10/18 05:28:03 rra Exp $ +/* $Id: makehistory.c,v 1.112.2.9 2004/12/19 08:21:49 rra Exp $ ** ** Rebuild history/overview databases. */ @@ -243,8 +243,7 @@ || (r = strchr(q+1, '\t')) == NULL) { warn("sorted overview file %s has a bad line at %d", SortedTmpPath, count); - OVclose(); - Fork ? _exit(1) : exit(1); + continue; } /* p+1 now points to start of token, q+1 points to start of overline. */ if (sorttype == OVNEWSGROUP) { @@ -257,8 +256,7 @@ if ((r = strchr(r, '\t')) == NULL) { warn("sorted overview file %s has a bad line at %d", SortedTmpPath, count); - OVclose(); - Fork ? _exit(1) : exit(1); + continue; } *r++ = '\0'; } else { @@ -495,7 +493,7 @@ DoArt(ARTHANDLE *art) { ARTOVERFIELD *fp; - const char *p; + const char *p, *end; char *q; static struct buffer buffer = { 0, 0, 0, NULL }; static char SEP[] = "\t"; @@ -540,12 +538,12 @@ peel off the \r\n (we're guaranteed we're dealing with wire-format articles. */ fp->HeaderLength = p - fp->Header - 1; - } else if (RetrMode == RETR_ALL && strcmp(fp->Headername, "Bytes") == 0) - { - snprintf(bytes, sizeof(bytes), "%d", art->len); - fp->HasHeader = true; - fp->Header = bytes; - fp->HeaderLength = strlen(bytes); + } else if (RetrMode == RETR_ALL + && strcmp(fp->Headername, "Bytes") == 0) { + snprintf(bytes, sizeof(bytes), "%lu", (unsigned long) art->len); + fp->HasHeader = true; + fp->Header = bytes; + fp->HeaderLength = strlen(bytes); } } if (Missfieldsize > 0) { @@ -564,20 +562,23 @@ if (!SMprobe(SMARTNGNUM, art->token, (void *)&ann)) { Xrefp->Header = NULL; Xrefp->HeaderLength = 0; - } else - return; - if (ann.artnum == 0) - return; - len = strlen(XREF) + 2 + strlen(innconf->pathhost) + 1 + strlen(ann.groupname) + 1 + 16 + 1; - if (len > BIG_BUFFER) { - Xrefp->Header = NULL; - Xrefp->HeaderLength = 0; } else { - snprintf(overdata, sizeof(overdata), "%s: %s %s:%lu", XREF, - innconf->pathhost, ann.groupname, ann.artnum); - Xrefp->Header = overdata; - Xrefp->HeaderLength = strlen(overdata); - } + if (ann.artnum == 0 || ann.groupname == NULL) + return; + len = strlen(innconf->pathhost) + 1 + strlen(ann.groupname) + 1 + + 16 + 1; + if (len > BIG_BUFFER) { + Xrefp->Header = NULL; + Xrefp->HeaderLength = 0; + } else { + snprintf(overdata, sizeof(overdata), "%s %s:%lu", + innconf->pathhost, ann.groupname, ann.artnum); + Xrefp->Header = overdata; + Xrefp->HeaderLength = strlen(overdata); + } + if (ann.groupname != NULL) + free(ann.groupname); + } } MessageID = (char *)NULL; @@ -637,15 +638,26 @@ buffer_set(&buffer, "", 0); else buffer_append(&buffer, SEP, strlen(SEP)); + if (fp->HeaderLength == 0) + continue; if (fp->NeedHeadername) { buffer_append(&buffer, fp->Headername, fp->HeadernameLength); buffer_append(&buffer, COLONSPACE, strlen(COLONSPACE)); } i = buffer.left; - buffer_append(&buffer, fp->Header, fp->HeaderLength); - for (q = &buffer.data[i]; i < buffer.left; q++, i++) - if (*q == '\t' || *q == '\n' || *q == '\r') - *q = ' '; + buffer_resize(&buffer, buffer.left + fp->HeaderLength); + end = fp->Header + fp->HeaderLength - 1; + for (p = fp->Header, q = &buffer.data[i]; p <= end; p++) { + if (*p == '\r' && p < end && p[1] == '\n') { + p++; + continue; + } + if (*p == '\0' || *p == '\t' || *p == '\n' || *p == '\r') + *q++ = ' '; + else + *q++ = *p; + buffer.left++; + } } WriteOverLine(art->token, Xrefp->Header, Xrefp->HeaderLength, buffer.data, buffer.left, Arrived, Expires); @@ -730,7 +742,8 @@ { ARTHANDLE *art = NULL; bool AppendMode; - int i, val; + int i; + bool val; char *HistoryDir; char *p; char *buff; diff -ruN inn-2.4.1/frontends/Makefile inn-2.4.2/frontends/Makefile --- inn-2.4.1/frontends/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.56 2003/04/20 19:04:12 vinocur Exp $ +## $Id: Makefile,v 1.56.2.1 2004/05/18 01:18:54 rra Exp $ include ../Makefile.global @@ -14,33 +14,29 @@ ovdb_init.c ovdb_monitor.c ovdb_server.c ovdb_stat.c rnews.c \ sm.c -PATHRNEWS = $(PATHBIN)/rnews.libexec - -INSTALLED = $(D)$(PATHBIN)/cnfsheadconf \ - $(D)$(PATHBIN)/cnfsstat \ - $(D)$(PATHBIN)/ctlinnd \ - $(D)$(PATHBIN)/getlist \ - $(D)$(PATHBIN)/inews \ - $(D)$(PATHBIN)/innconfval \ - $(D)$(PATHBIN)/mailpost \ - $(D)$(PATHBIN)/ovdb_init \ - $(D)$(PATHBIN)/ovdb_monitor \ - $(D)$(PATHBIN)/ovdb_server \ - $(D)$(PATHBIN)/ovdb_stat \ - $(D)$(PATHBIN)/pullnews \ - $(D)$(PATHBIN)/rnews \ - $(D)$(PATHBIN)/scanspool \ - $(D)$(PATHBIN)/sm \ - $(D)$(PATHRNEWS)/c7unbatch \ - $(D)$(PATHRNEWS)/decode \ - $(D)$(PATHRNEWS)/encode \ - $(D)$(PATHRNEWS)/gunbatch - all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_INEWS) inews $D$(PATHBIN)/inews + $(LI_RNEWS) rnews $D$(PATHBIN)/rnews + $(CP_XPRI) cnfsheadconf $D$(PATHBIN)/cnfsheadconf + for F in cnfsstat mailpost pullnews scanspool ; do \ + $(CP_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + for F in ctlinnd ovdb_init ovdb_monitor ovdb_server ovdb_stat ; do \ + $(LI_XPRI) $$F $D$(PATHBIN)/$$F ; \ + done + for F in getlist innconfval sm ; do \ + $(LI_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + $(CP_XPUB) c7unbatch $D$(PATHBIN)/rnews.libexec/c7unbatch + $(LI_XPUB) decode $D$(PATHBIN)/rnews.libexec/decode + $(LI_XPUB) encode $D$(PATHBIN)/rnews.libexec/encode + $(CP_XPUB) gunbatch $D$(PATHBIN)/rnews.libexec/gunbatch + clean: rm -f *.o $(ALL) rm -rf .libs @@ -115,32 +111,6 @@ $(LIBINN): ; (cd ../lib ; $(MAKE)) $(LIBSTORAGE): ; (cd ../storage ; $(MAKE)) $(LIBHIST): ; (cd ../history ; $(MAKE)) - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/inews: inews ; $(LI_INEWS) $? $@ -$(D)$(PATHBIN)/rnews: rnews ; $(LI_RNEWS) $? $@ - -$(D)$(PATHBIN)/cnfsheadconf: cnfsheadconf ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/cnfsstat: cnfsstat ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/ctlinnd: ctlinnd ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/getlist: getlist ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/innconfval: innconfval ; $(LI_XPUB) $? $@ -$(D)$(PATHBIN)/mailpost: mailpost ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/ovdb_init: ovdb_init ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/ovdb_monitor: ovdb_monitor ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/ovdb_server: ovdb_server ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/ovdb_stat: ovdb_stat ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/pullnews: pullnews ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/scanspool: scanspool ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/sm: sm ; $(LI_XPUB) $? $@ -$(D)$(PATHRNEWS)/c7unbatch: c7unbatch ; $(CP_XPUB) $? $@ -$(D)$(PATHRNEWS)/decode: decode ; $(LI_XPUB) $? $@ -$(D)$(PATHRNEWS)/encode: encode ; $(LI_XPUB) $? $@ -$(D)$(PATHRNEWS)/gunbatch: gunbatch ; $(CP_XPUB) $? $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/frontends/cnfsheadconf.in inn-2.4.2/frontends/cnfsheadconf.in --- inn-2.4.1/frontends/cnfsheadconf.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/cnfsheadconf.in Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ #! /usr/bin/perl # fixscript will replace this line with require innshellvars.pl -# $Id: cnfsheadconf.in,v 1.5 2002/11/16 21:29:58 vinocur Exp $ +# $Id: cnfsheadconf.in,v 1.5.2.1 2004/05/16 21:21:14 rra Exp $ # # Copyright Andreas Lamrecht 1998 # @@ -304,14 +304,14 @@ chop $in; if ($in ne "") { $in = bint2hex($in); - $lena = sprintf("%0.17s\0", $in); + $lena = sprintf("%017.17s\0", $in); } print "Free [$free ($freea)] => "; $in = <>; chop $in; if ($in ne "") { $in = bint2hex($in); - $freea = sprintf("%0.17s\0", $in); + $freea = sprintf("%017.17s\0", $in); } print "Meta [$metaname] => "; $in = <>; diff -ruN inn-2.4.1/frontends/cnfsstat.in inn-2.4.2/frontends/cnfsstat.in --- inn-2.4.1/frontends/cnfsstat.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/cnfsstat.in Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ #! /usr/bin/perl # fixscript will replace this line with require innshellvars.pl -# $Id: cnfsstat.in,v 1.18 2002/10/06 04:11:42 vinocur Exp $ +# $Id: cnfsstat.in,v 1.18.2.4 2004/12/19 21:36:38 rra Exp $ # # Copyright Andreas Lamrecht 1998 # @@ -17,6 +17,7 @@ use vars qw($opt_l $opt_h $opt_a $opt_s); use Getopt::Long; use Math::BigInt; +use Math::BigFloat; use English; my($conffile) = "$inn::pathetc/cycbuff.conf"; @@ -62,7 +63,8 @@ if ($OSNAME eq "dec_osf") { sub Sys::Syslog::_PATH_LOG { "/dev/log" } } - Sys::Syslog::setlogsock('unix') if $OSNAME =~ /linux|freebsd|dec_osf/; + Sys::Syslog::setlogsock('unix') + if $OSNAME =~ /linux|freebsd|dec_osf|darwin/; } openlog ('cnfsstat', 'pid', $inn::syslog_facility); } else { @@ -277,16 +279,17 @@ if ($use_syslog) { ($name) = split(/\s/, $name); $name =~ s/\0//g; - syslog ('notice', '%s Buffer %s, len: %d Mbytes, used: %.2f Mbytes (%4.1f%%) %3d cycles', - $logline, $name, $len / (1024 * 1024), $free / (1024 * 1024), - 100 * $free/$len, $cyclenum); + syslog ('notice', '%s Buffer %s, len: %.2f Mbytes, used: %.2f Mbytes (%4.1f%%) %3d cycles', + $logline, $name, $len / (1024 * 1024), + Math::BigFloat->new ($free) / (1024 * 1024), + 100 * Math::BigFloat->new ($free) / $len, $cyclenum); return 0; } $name =~ s/\0//g; print " Buffer $name, size: ", &human_readable($len, 4); print ", position: ", &human_readable($free, 4); - printf(" %.2f cycles\n", $cyclenum + $free/$len); + printf(" %.2f cycles\n", $cyclenum + Math::BigFloat->new ($free) / $len); my ($when, $ago) = &make_time($update); print " Newest: $when, $ago ago\n"; @@ -324,7 +327,7 @@ my $factor = 1024; my $unit = -1; - my $oldscaled = $val / $base; + my $oldscaled = Math::BigFloat->new ($val) / $base; my $scaled = $oldscaled; while ( ( int($scaled) > 0 ) && ( $unit < $#name ) ) { $oldscaled = $scaled; diff -ruN inn-2.4.1/frontends/inews.c inn-2.4.2/frontends/inews.c --- inn-2.4.1/frontends/inews.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/inews.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: inews.c,v 1.54 2003/04/03 05:02:02 rra Exp $ +/* $Id: inews.c,v 1.54.2.2 2004/12/19 22:15:41 rra Exp $ ** ** Send an article (prepared by someone on the local site) to the ** master news server. @@ -959,7 +959,8 @@ break; } - if (port == 0) port = (innconf->port != 0) ? innconf->port : NNTP_PORT; + if (port == 0) + port = NNTP_PORT; /* Try to open a connection to the server. */ if (NNTPremoteopen(port, &FromServer, &ToServer, buff) < 0) { @@ -1078,7 +1079,7 @@ if ((p = strchr(buff, '\n')) != NULL) *p = '\0'; if (atoi(buff) != NNTP_POSTEDOK_VAL) - sysdie("cannot send article to server: %s", buff); + die("cannot send article to server: %s", buff); /* Close up. */ QuitServer(0); diff -ruN inn-2.4.1/frontends/mailpost.in inn-2.4.2/frontends/mailpost.in --- inn-2.4.1/frontends/mailpost.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/mailpost.in Wed Dec 22 04:21:19 2004 @@ -5,7 +5,7 @@ # 21feb00 [added "lc" to duplicate header fixer stmt to make it case-insensitive] # doka 11may99 [fixed duplicate headers problem] # brister 19oct98 cleaned up somewhat for perl v. 5. and made a little more robust. -# vixie 29jan95 RCS'd [$Id: mailpost.in,v 1.7.2.1 2003/10/16 03:22:24 rra Exp $] +# vixie 29jan95 RCS'd [$Id: mailpost.in,v 1.7.2.3 2004/05/17 09:25:39 rra Exp $] # vixie 15jun93 [added -m] # vixie 30jun92 [added -a and -d] # vixie 17jun92 [attempt simple-minded fixup to $path] @@ -40,10 +40,10 @@ $usage .= "[ -r addr ][ -f addr ][ -a approved ][ -d distribution ]" . " [ -m mailing-list ][ -b database ][ -o output-path ] [ -c wait-time ]" . - " [ -x header [:header...] ] newsgroups" ; + " [ -x header [:header...] ] [ -p port ] newsgroups" ; -use vars qw($opt_r $opt_f $opt_a $opt_d $opt_m $opt_b $opt_n $opt_o $opt_h $opt_c $opt_x ) ; -getopts("hr:f:a:d:m:b:no:c:x:") || die "usage: $usage\n" ; +use vars qw($opt_r $opt_f $opt_a $opt_d $opt_m $opt_b $opt_n $opt_o $opt_h $opt_c $opt_x $opt_p ) ; +getopts("hr:f:a:d:m:b:no:c:x:p:") || die "usage: $usage\n" ; die "usage: $usage\n" if $opt_h ; # @@ -52,7 +52,7 @@ # my $Sendmail = $inn::mta ; -my $Submit = $inn::inews . " -S -h"; +my $Submit = $inn::inews . " -S -h" . ($opt_p ? " -p $opt_p" : ''); my $Database = ($opt_b || $inn::pathtmp) . "/mailpost-msgid" ; my $Maintainer = $inn::newsmaster || "usenet" ; my $WhereTo = $opt_o || $Submit ; @@ -155,7 +155,6 @@ $path = $' . '!' . $path; $_ = $`; } - $date = $_; } else { $line = $_; } @@ -326,7 +325,6 @@ ## mailArtAndDie ("no From: found") unless $from; -mailArtAndDie ("no Date: found") unless $date; mailArtAndDie ("no Message-ID: found") unless $message_id; mailArtAndDie ("Malformed message ID ($message_id)") if ($message_id !~ /\<(\S+)\@(\S+)\>/); diff -ruN inn-2.4.1/frontends/ovdb_server.c inn-2.4.2/frontends/ovdb_server.c --- inn-2.4.1/frontends/ovdb_server.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/ovdb_server.c Wed Dec 22 04:21:19 2004 @@ -67,6 +67,7 @@ int bufpos; void *buf; time_t lastactive; + void *currentsearch; }; static struct reader *readertab; @@ -172,11 +173,17 @@ /*syslog(LOG_DEBUG, "OVDB: rs: do_opensrch '%s' %d %d", group, cmd->artlo, cmd->arthi);*/ - reply->handle = ovdb_opensearch(group, cmd->artlo, cmd->arthi); - if(reply->handle == NULL) { - reply->status = CMD_OPENSRCH | RPLY_ERROR; + if(r->currentsearch != NULL) { + /* can only open one search at a time */ + reply->status = CMD_OPENSRCH | RPLY_ERROR; } else { - reply->status = CMD_OPENSRCH; + reply->handle = ovdb_opensearch(group, cmd->artlo, cmd->arthi); + if(reply->handle == NULL) { + reply->status = CMD_OPENSRCH | RPLY_ERROR; + } else { + reply->status = CMD_OPENSRCH; + } + r->currentsearch = reply->handle; } free(r->buf); r->buf = reply; @@ -226,6 +233,7 @@ r->buf = NULL; r->bufpos = r->buflen = 0; r->mode = MODE_READ; + r->currentsearch = NULL; } static void @@ -370,12 +378,17 @@ newclient(int fd) { struct reader *r; + int i; nonblocking(fd, 1); if(numreaders >= readertablen) { readertablen += 50; readertab = xrealloc(readertab, readertablen * sizeof(struct reader)); + for(i = numreaders; i < readertablen; i++) { + readertab[i].mode = MODE_CLOSED; + readertab[i].buf = NULL; + } } r = &(readertab[numreaders]); @@ -387,6 +400,7 @@ r->bufpos = 0; r->buf = xstrdup(OVDB_SERVER_BANNER); r->lastactive = now; + r->currentsearch = NULL; handle_write(r); } @@ -403,6 +417,10 @@ if(r->buf != NULL) { free(r->buf); } + if(r->currentsearch != NULL) { + ovdb_closesearch(r->currentsearch); + r->currentsearch = NULL; + } /* numreaders will get decremented by the calling function */ for(i = which; i < numreaders-1; i++) @@ -432,6 +450,7 @@ xsignal_norestart(SIGTERM, sigfunc); xsignal_norestart(SIGHUP, sigfunc); xsignal_norestart(SIGUSR1, childsig); + xsignal(SIGPIPE, SIG_IGN); numreaders = lastnumreaders = 0; if(ovdb_conf.maxrsconn) { diff -ruN inn-2.4.1/frontends/ovdb_stat.c inn-2.4.2/frontends/ovdb_stat.c --- inn-2.4.1/frontends/ovdb_stat.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/ovdb_stat.c Wed Dec 22 04:21:19 2004 @@ -8,6 +8,7 @@ #include #include #include +#include #include "inn/innconf.h" #include "inn/messages.h" @@ -167,7 +168,7 @@ break; case SIZE: /* 'a' points to size_t */ memcpy(&sz, cp + tab[i].a, sizeof(sz)); - sprintf(val, "%d", sz); + sprintf(val, "%lu", (unsigned long) sz); break; case END: break; @@ -586,13 +587,16 @@ { DB_BTREE_STAT *sp; -#if DB_VERSION_MAJOR >= 4 || (DB_VERSION_MAJOR >= 3 && DB_VERSION_MINOR >= 3) +#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3) + if(db->stat(db, NULL, &sp, 0)) +#else +#if DB_VERSION_MAJOR == 4 || (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR >= 3) if(db->stat(db, &sp, 0)) - return 1; #else if(db->stat(db, &sp, NULL, 0)) - return 1; #endif +#endif + return 1; display_heading("Btree Statistics"); display_data(sp, BTREE_tab); @@ -646,13 +650,16 @@ #else DB_HASH_STAT *sp; +#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3) + if(db->stat(db, NULL, &sp, 0)) +#else #if DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR <= 2 if(db->stat(db, &sp, NULL, 0)) - return 1; #else if(db->stat(db, &sp, 0)) - return 1; #endif +#endif + return 1; display_heading("Hash Information"); display_data(sp, HASH_tab); diff -ruN inn-2.4.1/frontends/pullnews.in inn-2.4.2/frontends/pullnews.in --- inn-2.4.1/frontends/pullnews.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/pullnews.in Wed Dec 22 04:21:19 2004 @@ -4,7 +4,7 @@ # Start Date: Sat, 10 Oct 1998 21:40:11 +0200 # Project: INN # File: pullnews.pl -# RCSId: $Id: pullnews.in,v 1.4 2000/09/20 15:21:48 kondou Exp $ +# RCSId: $Id: pullnews.in,v 1.4.2.1 2004/05/17 07:46:10 rra Exp $ # Time-stamp: # Description: A very simple pull feeder. Connects to multiple remote # machines (in the guise of a reader), and pulls over articles @@ -61,7 +61,7 @@ $0 =~ s!.*/!!; my $rcsID =<<'EOM'; -$Id: pullnews.in,v 1.4 2000/09/20 15:21:48 kondou Exp $ +$Id: pullnews.in,v 1.4.2.1 2004/05/17 07:46:10 rra Exp $ EOM $SIG{INT} = \&outtaHere ; @@ -259,16 +259,16 @@ print LOG "done.\n" unless $quiet ; } - if ($username && !$upstream->authinfo($username, $passwd)) { - warn sprintf ("failed to authorize: %s %s\n", - $upstream->code(), $upstream->message()); - next; - } - if (!$upstream->reader()) { warn sprintf ("Cant issue MODE READER command: %s %s\n", $upstream->code(), $upstream->message()); warn "We\'ll try anyway\n" ; + } + + if ($username && !$upstream->authinfo($username, $passwd)) { + warn sprintf ("failed to authorize: %s %s\n", + $upstream->code(), $upstream->message()); + next; } foreach my $group (sort keys %{$servers->{$server}}) { diff -ruN inn-2.4.1/frontends/rnews.c inn-2.4.2/frontends/rnews.c --- inn-2.4.1/frontends/rnews.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/rnews.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: rnews.c,v 1.54 2003/02/02 23:40:05 rra Exp $ +/* $Id: rnews.c,v 1.54.2.4 2004/06/03 23:52:56 rra Exp $ ** ** A front-end for InterNetNews. ** @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -261,7 +262,10 @@ /* Get a reply, see if they want the article. */ if (fgets(buff, sizeof buff, FromServer) == NULL) { free(wirefmt); - syswarn("cannot fgets after ihave"); + if (ferror(FromServer)) + syswarn("cannot fgets after ihave"); + else + warn("unexpected EOF from server after ihave"); return false; } REMclean(buff); @@ -312,7 +316,10 @@ /* Process server reply code. */ if (fgets(buff, sizeof buff, FromServer) == NULL) { - syswarn("cant fgets after article"); + if (ferror(FromServer)) + syswarn("cannot fgets after article"); + else + warn("unexpected EOF from server after article"); return false; } REMclean(buff); @@ -677,6 +684,7 @@ if (rename(InputFile, badname) < 0) sysdie("cannot rename %s to %s", InputFile, badname); close(fd); + free(badname); continue; } @@ -822,16 +830,26 @@ message_handlers_warn(1, message_log_syslog_err); message_handlers_die(1, message_log_syslog_err); - if (setgid(getegid()) < 0) - die("cannot setgid to %lu", (unsigned long) getegid()); - if (setuid(geteuid()) < 0) - die("cannot setuid to %lu", (unsigned long) geteuid()); + /* Make sure that we switch to the news user if we're running as root, + since we may spool files and don't want those files owned by root. + Don't require that we be running as the news user, though; there are + other setups where rnews might be setuid news or be run by other + processes in the news group. */ + if (getuid() == 0 || geteuid() == 0) { + struct passwd *pwd; + + pwd = getpwnam(NEWSUSER); + if (pwd == NULL) + die("can't resolve %s to a UID (account doesn't exist?)", + NEWSUSER); + setuid(pwd->pw_uid); + } if (!innconf_read(NULL)) exit(1); - UUCPHost = getenv(_ENV_UUCPHOST); - PathBadNews = concatpath(innconf->pathincoming, _PATH_BADNEWS); - port = innconf->nnrpdpostport; + UUCPHost = getenv(_ENV_UUCPHOST); + PathBadNews = concatpath(innconf->pathincoming, _PATH_BADNEWS); + port = innconf->nnrpdpostport; umask(NEWSUMASK); diff -ruN inn-2.4.1/frontends/sm.c inn-2.4.2/frontends/sm.c --- inn-2.4.1/frontends/sm.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/frontends/sm.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: sm.c,v 1.26 2002/12/27 08:29:16 vinocur Exp $ +/* $Id: sm.c,v 1.26.2.1 2004/03/06 18:31:15 rra Exp $ ** ** Provide a command line interface to the storage manager */ @@ -42,7 +42,7 @@ ** options struct. Calls warn and die to display error messages; -q is ** implemented by removing all the warn and die error handlers. */ -static void +static bool process_token(const char *id, const struct options *options) { TOKEN token; @@ -53,25 +53,28 @@ if (!IsToken(id)) { warn("%s is not a storage token", id); - return; + return false; } token = TextToToken(id); if (options->artinfo) { if (!SMprobe(SMARTNGNUM, &token, &artinfo)) { warn("could not get article information for %s", id); + return false; } else { printf("%s: %lu\n", artinfo.groupname, artinfo.artnum); free(artinfo.groupname); } } else if (options->delete) { - if (!SMcancel(token)) + if (!SMcancel(token)) { warn("could not remove %s: %s", id, SMerrorstr); + return false; + } } else { article = SMretrieve(token, options->header ? RETR_HEAD : RETR_ALL); if (article == NULL) { warn("could not retrieve %s", id); - return; + return false; } if (options->raw) { if (fwrite(article->data, article->len, 1, stdout) != 1) @@ -86,6 +89,7 @@ } SMfreearticle(article); } + return true; } @@ -93,6 +97,7 @@ main(int argc, char *argv[]) { int option; + bool okay, status; struct options options = { false, false, false, false, false }; message_program_name = "sm"; @@ -154,13 +159,16 @@ /* Process tokens. If no arguments were given on the command line, process tokens from stdin. Otherwise, walk through the remaining command line arguments. */ + okay = true; if (optind == argc) { QIOSTATE *qp; char *line; qp = QIOfdopen(fileno(stdin)); - for (line = QIOread(qp); line != NULL; line = QIOread(qp)) - process_token(line, &options); + for (line = QIOread(qp); line != NULL; line = QIOread(qp)) { + status = process_token(line, &options); + okay = okay && status; + } if (QIOerror(qp)) { if (QIOtoolong(qp)) die("input line too long"); @@ -170,10 +178,12 @@ } else { int i; - for (i = optind; i < argc; i++) - process_token(argv[i], &options); + for (i = optind; i < argc; i++) { + status = process_token(argv[i], &options); + okay = okay && status; + } } SMshutdown(); - exit(0); + exit(okay ? 0 : 1); } diff -ruN inn-2.4.1/history/Make.methods inn-2.4.2/history/Make.methods --- inn-2.4.1/history/Make.methods Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/history/Make.methods Wed Dec 22 04:21:19 2004 @@ -3,4 +3,3 @@ METHOD_SOURCES = hisv6/hisv6.c EXTRA_SOURCES = PROGRAMS = -INSTALLED = diff -ruN inn-2.4.1/history/Makefile inn-2.4.2/history/Makefile --- inn-2.4.1/history/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/history/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.16 2003/04/20 19:04:13 vinocur Exp $ +## $Id: Makefile,v 1.16.2.1 2004/05/18 01:18:55 rra Exp $ include ../Makefile.global @@ -20,6 +20,9 @@ warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_XPUB) libinnhist.$(EXTLIB) $(D)$(PATHLIB)/libinnhist.$(EXTLIB) + library: libinnhist.$(EXTLIB) programs: $(PROGRAMS) @@ -79,14 +82,6 @@ mv libinnhist.a libinnhist$(PROFSUFFIX).a $(RANLIB) libinnhist$(PROFSUFFIX).a rm -f $(OBJECTS) - - -## Low-level install actions. - -install: $(D)$(PATHLIB)/libinnhist.$(EXTLIB) - -$(D)$(PATHLIB)/libinnhist.$(EXTLIB): libinnhist.$(EXTLIB) - $(LI_XPUB) libinnhist.$(EXTLIB) $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/history/buildconfig.in inn-2.4.2/history/buildconfig.in --- inn-2.4.1/history/buildconfig.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/history/buildconfig.in Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ #! /usr/bin/perl -## $Id: buildconfig.in,v 1.3 2002/12/26 05:25:57 rra Exp $ +## $Id: buildconfig.in,v 1.3.2.1 2004/05/18 01:18:55 rra Exp $ ## ## Generate linkage code and makefiles for storage and overview methods. ## @@ -164,12 +164,6 @@ print MAKE makefile_var ('METHOD_SOURCES', @$sources); print MAKE makefile_var ('EXTRA_SOURCES', @$extra); print MAKE makefile_var ('PROGRAMS', @$programs); - my @installed = map { - my $program = $_; - $program =~ s%.*/%%; - '$(D)$(PATHBIN)/' . $program - } @$programs; - print MAKE makefile_var ('INSTALLED', @installed); for (@$makefiles) { print MAKE "\n\n## Included from $_\n\n"; open (FRAG, $_) or die "Can't open $_: $!\n"; diff -ruN inn-2.4.1/history/hisv6/hisv6.c inn-2.4.2/history/hisv6/hisv6.c --- inn-2.4.1/history/hisv6/hisv6.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/history/hisv6/hisv6.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: hisv6.c,v 1.11.2.1 2003/05/19 02:00:06 rra Exp $ +/* $Id: hisv6.c,v 1.11.2.2 2004/06/02 20:11:06 hkehoe Exp $ ** ** History v6 implementation against the history API. ** @@ -46,6 +46,7 @@ #include "hisv6.h" #include "hisv6-private.h" #include "dbz.h" +#include "inn/innconf.h" #include "inn/timer.h" #include "inn/qio.h" #include "inn/sequence.h" @@ -348,6 +349,17 @@ /*opt.pag_incore = INCORE_NO;*/ opt.pag_incore = (h->flags & HIS_MMAP) ? INCORE_MMAP : INCORE_NO; opt.exists_incore = (h->flags & HIS_MMAP) ? INCORE_MMAP : INCORE_NO; + +# if defined(MMAP_NEEDS_MSYNC) && INND_DBZINCORE == 1 + /* Systems that have MMAP_NEEDS_MSYNC defined will have their + on-disk copies out of sync with the mmap'ed copies most of + the time. So if innd is using INCORE_MMAP, then we force + everything else to use it, too (unless we're on NFS) */ + if(!innconf->nfsreader) { + opt.pag_incore = INCORE_MMAP; + opt.exists_incore = INCORE_MMAP; + } +# endif #endif } dbzsetoptions(opt); diff -ruN inn-2.4.1/include/acconfig.h inn-2.4.2/include/acconfig.h --- inn-2.4.1/include/acconfig.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/include/acconfig.h Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: acconfig.h,v 1.41 2002/12/09 08:43:27 rra Exp $ +/* $Id: acconfig.h,v 1.41.2.1 2004/05/16 20:48:51 rra Exp $ ** ** Here be configuration data used by various InterNetNews programs. This ** file is used as source for the autoheader script, which from it and @@ -114,6 +114,9 @@ /* Define to a suitable 32-bit type if standard headers don't define. */ #undef int32_t + +/* Define to `long' if doesn't define. */ +#undef ptrdiff_t /* Define to `int' if doesn't define. */ #undef sig_atomic_t diff -ruN inn-2.4.1/include/clibrary.h inn-2.4.2/include/clibrary.h --- inn-2.4.1/include/clibrary.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/include/clibrary.h Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: clibrary.h,v 1.42 2003/01/18 22:26:46 rra Exp $ +/* $Id: clibrary.h,v 1.42.2.1 2004/05/16 19:46:20 rra Exp $ ** ** Here be declarations of routines and variables in the C library. ** Including this file is the equivalent of including all of the following @@ -107,7 +107,7 @@ #endif #if NEED_DECLARATION_SNPRINTF extern int snprintf(char *, size_t, const char *, ...) - __attribute__((__format__(3, 4))); + __attribute__((__format__(printf, 3, 4))); #endif #if !HAVE_STRERROR extern const char * strerror(int); diff -ruN inn-2.4.1/include/config.h.in inn-2.4.2/include/config.h.in --- inn-2.4.1/include/config.h.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/include/config.h.in Wed Dec 22 04:21:19 2004 @@ -1,5 +1,5 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ -/* $Id: config.h.in,v 1.112 2003/01/04 16:25:40 kondou Exp $ +/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* $Id: config.h.in,v 1.112.2.2 2004/05/17 04:06:42 rra Exp $ ** ** Here be configuration data used by various InterNetNews programs. This ** file is used as source for the autoheader script, which from it and @@ -168,6 +168,9 @@ /* Define to a suitable 32-bit type if standard headers don't define. */ #undef int32_t +/* Define to `long' if doesn't define. */ +#undef ptrdiff_t + /* Define to `int' if doesn't define. */ #undef sig_atomic_t @@ -213,6 +216,9 @@ /* Define if you have the inet_aton function. */ #undef HAVE_INET_ATON +/* Define if you have the krb5_init_ets function. */ +#undef HAVE_KRB5_INIT_ETS + /* Define if you have the madvise function. */ #undef HAVE_MADVISE @@ -294,9 +300,6 @@ /* Define if you have the ulimit function. */ #undef HAVE_ULIMIT -/* Define if you have the krb5_init_ets function. */ -#undef HAVE_KRB5_INIT_ETS - /* Define if you have the header file. */ #undef HAVE_CRYPT_H @@ -429,14 +432,14 @@ /* Define if SASL is available. */ #undef HAVE_SASL +/* Define if SASL is available. */ +#undef HAVE_SASL + /* Define to compile in Perl script support. */ #undef DO_PERL /* Define to compile in Python module support. */ #undef DO_PYTHON - -/* Define to compile in TCL script support. */ -#undef DO_TCL /* Define if you have the setproctitle function. */ #undef HAVE_SETPROCTITLE diff -ruN inn-2.4.1/include/dbz.h inn-2.4.2/include/dbz.h --- inn-2.4.1/include/dbz.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/include/dbz.h Wed Dec 22 04:21:19 2004 @@ -68,7 +68,6 @@ extern DBZSTORE_RESULT dbzstore(const HASH key, off_t data); extern bool dbzsync(void); extern long dbzsize(off_t contents); -extern bool dbzdebug(const int value); extern void dbzsetoptions(const dbzoptions options); extern void dbzgetoptions(dbzoptions *options); diff -ruN inn-2.4.1/include/inndcomm.h inn-2.4.2/include/inndcomm.h --- inn-2.4.1/include/inndcomm.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/include/inndcomm.h Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Revision: 1.13 $ +/* $Revision: 1.13.2.1 $ ** ** Here be values used for communicating with the server once it is ** running. @@ -12,8 +12,8 @@ by a 2 byte messages length*/ #define HEADER_SIZE (sizeof (ICC_PROTOCOLTYPE) + sizeof (ICC_MSGLENTYPE)) -typedef short ICC_MSGLENTYPE; /* Length code to prefix commands to - ** the server. */ +typedef unsigned short ICC_MSGLENTYPE; /* Length code to prefix commands to + ** the server. */ typedef char ICC_PROTOCOLTYPE ; /* Values for the protocol version field of the message. 8 bits wide. */ diff -ruN inn-2.4.1/innd/Makefile inn-2.4.2/innd/Makefile --- inn-2.4.1/innd/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.67 2003/01/19 01:15:31 rra Exp $ +## $Id: Makefile,v 1.67.2.3 2004/07/15 02:16:13 rra Exp $ include ../Makefile.global @@ -16,14 +16,28 @@ newsfeeds.o ng.o perl.o proc.o python.o rc.o site.o \ status.o tcl.o util.o wip.o -INSTALLED = $(D)$(PATHBIN)/innd \ - $(D)$(PATHBIN)/inndstart - all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_XPRI) innd $D$(PATHBIN)/innd + @ME=`$(WHOAMI)` ; \ + if [ x"$$ME" = xroot ] ; then \ + echo $(LI_SPRI) inndstart $D$(PATHBIN)/inndstart ; \ + $(LI_SPRI) inndstart $D$(PATHBIN)/inndstart ; \ + else \ + echo $(LI_XPRI) inndstart $D$(PATHBIN)/inndstart ; \ + $(LI_XPRI) inndstart $D$(PATHBIN)/inndstart ; \ + echo '' ; \ + echo '========================' ; \ + echo 'NOTE NOTE NOTE NOTE NOTE' ; \ + ls -l $D$(PATHBIN)/inndstart ; \ + echo '$D$(PATHBIN)/inndstart needs to be installed setuid root' ; \ + echo '' ; echo ; \ + fi + clean: rm -f *.o $(ALL) inndp profiled rm -rf .libs @@ -38,7 +52,7 @@ ## Compilation rules. INNDLIBS = $(LIBSTORAGE) $(LIBHIST) $(LIBINN) $(EXTSTORAGELIBS) \ - $(TCLLIB) $(PYTHONLIB) $(REGEXLIB) $(LIBS) $(PERLLIB) + $(PERLLIB) $(TCLLIB) $(PYTHONLIB) $(REGEXLIB) $(LIBS) perl.o: perl.c ; $(CC) $(CFLAGS) $(PERLINC) -c perl.c python.o: python.c ; $(CC) $(CFLAGS) $(PYTHONINC) -c python.c @@ -48,29 +62,6 @@ inndstart: inndstart.o $(LIBINN) $(LIBLD) $(LDFLAGS) -o $@ inndstart.o $(LIBINN) $(LIBS) - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/innd: innd ; $(LI_XPRI) $? $@ - -$(D)$(PATHBIN)/inndstart: inndstart - @ME=`$(WHOAMI)` ; \ - if [ x"$$ME" = xroot ] ; then \ - echo $(LI_SPRI) inndstart $(D)$(PATHBIN)/inndstart ; \ - $(LI_SPRI) inndstart $(D)$(PATHBIN)/inndstart ; \ - else \ - echo $(LI_XPRI) inndstart $(D)$(PATHBIN)/inndstart ; \ - $(LI_XPRI) inndstart $(D)$(PATHBIN)/inndstart ; \ - echo '' ; \ - echo '========================' ; \ - echo 'NOTE NOTE NOTE NOTE NOTE' ; \ - ls -l $@ ; \ - echo '$@ needs to be installed setuid root' ; \ - echo '' ; echo ; \ - fi $(LIBINN): ; (cd ../lib ; $(MAKE)) $(LIBSTORAGE): ; (cd ../storage ; $(MAKE)) diff -ruN inn-2.4.1/innd/art.c inn-2.4.2/innd/art.c --- inn-2.4.1/innd/art.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/art.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: art.c,v 1.212.2.3 2004/01/07 22:25:39 rra Exp $ +/* $Id: art.c,v 1.212.2.12 2004/07/16 00:43:34 rra Exp $ ** ** Article-processing. */ @@ -766,7 +766,8 @@ { struct buffer *bp = &cp->In; ARTDATA *data = &cp->Data; - int i, limit, hopcount; + long i, limit, fudge, size; + int hopcount; char **hops; HDRCONTENT *hc = data->HdrContent; @@ -824,7 +825,7 @@ data->NullHeader = true; break; case '\r': - if (data->LastCR >= cp->Start) + if (data->LastCR >= cp->Start) data->CRwithoutLF++; data->LastCR = i; break; @@ -848,7 +849,7 @@ } if (data->LastCRLF + MAXHEADERSIZE < i) snprintf(cp->Error, sizeof(cp->Error), - "%d Too long line in header %d bytes", + "%d Too long line in header %ld bytes", NNTP_REJECTIT_VAL, i - data->LastCRLF); else if (data->LastCRLF + 2 == i) { /* header ends */ @@ -906,7 +907,7 @@ /* rest of the line */ switch (bp->data[i]) { case '\r': - if (data->LastCR >= cp->Start) + if (data->LastCR >= cp->Start) data->CRwithoutLF++; data->LastCR = i; break; @@ -919,10 +920,14 @@ if (cp->State == CSeatarticle) { cp->State = CSgotlargearticle; cp->Next = ++i; - return; - } else + snprintf(cp->Error, sizeof(cp->Error), + "%d Article of %ld bytes exceeds local limit of %ld bytes", + NNTP_REJECTIT_VAL, (unsigned long) i - cp->Start, + innconf->maxartsize); + } else { cp->State = CSgotarticle; - i++; + i++; + } if (*cp->Error != '\0' && HDR_FOUND(HDR__MESSAGE_ID)) { HDR_PARSE_START(HDR__MESSAGE_ID); if (HDR_FOUND(HDR__PATH)) { @@ -950,6 +955,8 @@ ARTlog(data, ART_REJECT, cp->Error); HDR_PARSE_END(HDR__MESSAGE_ID); } + if (cp->State == CSgotlargearticle) + return; goto sizecheck; } #if 0 /* this may be examined in the future */ @@ -975,11 +982,11 @@ } } sizecheck: - if ((innconf->maxartsize > 0) && - (limit - cp->Next + cp->LargeArtSize > innconf->maxartsize)) { - cp->LargeArtSize += limit - cp->Next; - cp->State = CSeatarticle; - } + size = i - cp->Start; + fudge = data->HeaderLines + data->Lines + 4; + if (innconf->maxartsize > 0) + if (size > fudge && size - fudge > innconf->maxartsize) + cp->State = CSeatarticle; cp->Next = i; return; } @@ -1743,14 +1750,18 @@ } if (overview->used + overview->left + len > overview->size) buffer_resize(overview, overview->size + len); - for (i = 0, q = &overview->data[overview->left] ; i < len ; p++, q++, i++) { - /* we can replace consecutive '\r', '\n' and '\r' with one ' ' here */ - if (*p == '\t' || *p == '\n' || *p == '\r') - *q = ' '; - else - *q = *p; + for (i = 0, q = overview->data + overview->left; i < len; p++, i++) { + if (*p == '\r' && i < len - 1 && p[1] == '\n') { + p++; + i++; + continue; + } + if (*p == '\0' || *p == '\t' || *p == '\n' || *p == '\r') + *q++ = ' '; + else + *q++ = *p; + overview->left++; } - overview->left += len; /* Patch the old keywords back in. */ if (DO_KEYWORDS && innconf->keywords) { diff -ruN inn-2.4.1/innd/cc.c inn-2.4.2/innd/cc.c --- inn-2.4.1/innd/cc.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/cc.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: cc.c,v 1.107.2.1 2003/05/31 19:48:26 rra Exp $ +/* $Id: cc.c,v 1.107.2.2 2003/12/29 05:02:53 rra Exp $ ** ** Routines for the control channel. ** @@ -1317,9 +1317,11 @@ p = av[0]; if (*p == '\0' || strcmp(p, "all") == 0) { SITEflushall(false); - InndHisClose(); + if (Mode == OMrunning) + InndHisClose(); RCreadlist(); - InndHisOpen(); + if (Mode == OMrunning) + InndHisOpen(); ICDwrite(); ICDsetup(true); if (!ARTreadschema()) @@ -1345,6 +1347,8 @@ ICDsetup(true); } else if (strcmp(p, "history") == 0) { + if (Mode != OMrunning) + return CCnotrunning; InndHisClose(); InndHisOpen(); } diff -ruN inn-2.4.1/innd/chan.c inn-2.4.2/innd/chan.c --- inn-2.4.1/innd/chan.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/chan.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: chan.c,v 1.71.2.1 2003/05/31 19:48:26 rra Exp $ +/* $Id: chan.c,v 1.71.2.3 2004/05/16 20:54:25 rra Exp $ ** ** I/O channel (and buffer) processing. */ @@ -234,11 +234,13 @@ syslog(L_NOTICE, "%s trace sleeping %ld 0x%p", p, (long)cp->Waketime, (void *)cp->Waker); if (FD_ISSET(cp->fd, &RCHANmask)) - syslog(L_NOTICE, "%s trace reading %d %s", - p, cp->In.used, MaxLength(cp->In.data, cp->In.data)); + syslog(L_NOTICE, "%s trace reading %lu %s", + p, (unsigned long) cp->In.used, + MaxLength(cp->In.data, cp->In.data)); if (FD_ISSET(cp->fd, &WCHANmask)) - syslog(L_NOTICE, "%s trace writing %d %s", - p, cp->Out.left, MaxLength(cp->Out.data, cp->Out.data)); + syslog(L_NOTICE, "%s trace writing %lu %s", + p, (unsigned long) cp->Out.left, + MaxLength(cp->Out.data, cp->Out.data)); } } @@ -311,7 +313,8 @@ } else if (cp->Type == CTreject) syslog(L_NOTICE, "%s %ld", name, cp->Rejected); else if (cp->Out.left) - syslog(L_NOTICE, "%s closed lost %d", name, cp->Out.left); + syslog(L_NOTICE, "%s closed lost %lu", name, + (unsigned long) cp->Out.left); else syslog(L_NOTICE, "%s closed", name); WCHANremove(cp); @@ -390,8 +393,8 @@ switch (cp->Type) { default: - snprintf(buff, sizeof(buff), "?%d(#%d@%d)?", cp->Type, cp->fd, - cp - CHANtable); + snprintf(buff, sizeof(buff), "?%d(#%d@%ld)?", cp->Type, cp->fd, + (long) (cp - CHANtable)); break; case CTany: snprintf(buff, sizeof(buff), "any:%d", cp->fd); @@ -637,7 +640,7 @@ int CHANreadtext(CHANNEL *cp) { - int i, j; + ptrdiff_t i, j; struct buffer *bp; char *p; int oerrno; @@ -778,13 +781,13 @@ for (bp = &cp->Out; bp->left > 0; bp->left -= i, bp->used += i) { i = CHANwrite(cp->fd, &bp->data[bp->used], bp->left); if (i < 0) { - syslog(L_ERROR, "%s cant flush count %d %m", - CHANname(cp), bp->left); + syslog(L_ERROR, "%s cant flush count %lu %m", + CHANname(cp), (unsigned long) bp->left); return false; } if (i == 0) { - syslog(L_ERROR, "%s cant flush count %d", - CHANname(cp), bp->left); + syslog(L_ERROR, "%s cant flush count %lu", + CHANname(cp), (unsigned long) bp->left); return false; } } @@ -915,7 +918,7 @@ { static char EXITING[] = "INND exiting because of signal\n"; static int fd; - int i, j; + ptrdiff_t i, j; int startpoint; int count; int lastfd; diff -ruN inn-2.4.1/innd/innd.c inn-2.4.2/innd/innd.c --- inn-2.4.1/innd/innd.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/innd.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: innd.c,v 1.99 2003/04/01 06:07:58 rra Exp $ +/* $Id: innd.c,v 1.99.2.1 2004/10/01 05:10:30 rra Exp $ ** ** Variable definitions, miscellany, and main(). */ @@ -581,7 +581,8 @@ it's a slave, so call RCsetup before NCsetup. */ CHANsetup(i); PROCsetup(10); - InndHisOpen(); + if (Mode == OMrunning) + InndHisOpen(); CCsetup(); LCsetup(); RCsetup(fd[0]); diff -ruN inn-2.4.1/innd/innd.h inn-2.4.2/innd/innd.h --- inn-2.4.1/innd/innd.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/innd.h Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: innd.h,v 1.98 2003/02/13 13:47:51 alexk Exp $ +/* $Id: innd.h,v 1.98.2.3 2004/05/27 18:55:23 rra Exp $ ** ** Many of the data types used here have abbreviations, such as CT ** for CHANNELTYPE. Here are a list of the conventions and meanings: @@ -223,16 +223,16 @@ struct buffer Overview; /* buffer for overview data */ int CRwithoutLF; /* counter for '\r' without '\n' */ int LFwithoutCR; /* counter for '\n' without '\r' */ - int CurHeader; /* where current header starts. + long CurHeader; /* where current header starts. this is used for folded header it indicates offset from bp->Data */ bool NullHeader; /* contains NULL in current header */ - int LastTerminator; /* where last '.' exists. only set if + long LastTerminator; /* where last '.' exists. only set if it exists at the begining of line it indicates offset from bp->Data */ - int LastCR; /* where last CR exists + long LastCR; /* where last CR exists it indicates offset from bp->Data */ - int LastCRLF; /* where last CRLF exists. + long LastCRLF; /* where last CRLF exists. indicates where last LF exists it indicates offset from bp->Data */ HDRCONTENT HdrContent[MAX_ARTHEADER]; @@ -358,9 +358,9 @@ int HoldTime; time_t ArtBeg; int ArtMax; - int Start; /* where current cmd/article starts + long Start; /* where current cmd/article starts it indicates offset from bp->Data */ - int Next; /* next pointer to read + long Next; /* next pointer to read it indicates offset from bp->Data */ char Error[SMBUF]; /* error buffer */ ARTDATA Data; /* used for processing article */ diff -ruN inn-2.4.1/innd/inndstart.c inn-2.4.2/innd/inndstart.c --- inn-2.4.1/innd/inndstart.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/inndstart.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: inndstart.c,v 1.55 2003/01/19 19:58:21 rra Exp $ +/* $Id: inndstart.c,v 1.55.2.1 2004/01/11 23:21:54 rra Exp $ ** ** Open the privileged port, then exec innd. ** @@ -136,6 +136,7 @@ if (p && strcmp(p, "all") != 0 && strcmp(p, "any") != 0) { if (!inet_aton(p, &address)) die("invalid bindaddress in inn.conf (%s)", p); + addr_specified = true; } #ifdef HAVE_INET6 address6 = in6addr_any; @@ -143,6 +144,7 @@ if (p && strcmp(p, "all") != 0 && strcmp(p, "any") != 0) { if (inet_pton(AF_INET6, p, &address6) < 1) die("invalid bindaddress6 in inn.conf (%s)", p); + addr6_specified = true; } #endif diff -ruN inn-2.4.1/innd/nc.c inn-2.4.2/innd/nc.c --- inn-2.4.1/innd/nc.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/nc.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: nc.c,v 1.89 2003/01/18 22:26:47 rra Exp $ +/* $Id: nc.c,v 1.89.2.3 2004/05/16 20:54:25 rra Exp $ ** ** Routines for the NNTP channel. Other channels get the descriptors which ** we turn into NNTP channels, and over which we speak NNTP. @@ -133,8 +133,9 @@ if (i == 0) { /* if only data then try to write directly */ i = write(cp->fd, &bp->data[bp->used], bp->left); if (Tracing || cp->Tracing) - syslog(L_TRACE, "%s NCwritereply %d=write(%d, \"%.15s\", %d)", - CHANname(cp), i, cp->fd, &bp->data[bp->used], bp->left); + syslog(L_TRACE, "%s NCwritereply %d=write(%d, \"%.15s\", %lu)", + CHANname(cp), i, cp->fd, &bp->data[bp->used], + (unsigned long) bp->left); if (i > 0) bp->used += i; if (bp->used == bp->left) { /* all the data was written */ @@ -255,6 +256,7 @@ case CSgetheader: case CSgetbody: case CSgetxbatch: + case CSgotlargearticle: case CScancel: RCHANadd(cp); break; @@ -734,7 +736,8 @@ readmore = movedata = false; if (Tracing || cp->Tracing) - syslog(L_TRACE, "%s NCproc Used=%d", CHANname(cp), cp->In.used); + syslog(L_TRACE, "%s NCproc Used=%lu", CHANname(cp), + (unsigned long) cp->In.used); bp = &cp->In; if (bp->used == 0) @@ -742,8 +745,9 @@ for ( ; ; ) { if (Tracing || cp->Tracing) { - syslog(L_TRACE, "%s cp->Start=%d cp->Next=%d bp->Used=%d", CHANname(cp), - cp->Start, cp->Next, bp->used); + syslog(L_TRACE, "%s cp->Start=%lu cp->Next=%lu bp->Used=%lu", + CHANname(cp), (unsigned long) cp->Start, (unsigned long) cp->Next, + (unsigned long) bp->used); if (bp->used > 15) syslog(L_TRACE, "%s NCproc state=%d next \"%.15s\"", CHANname(cp), cp->State, &bp->data[cp->Next]); @@ -896,23 +900,9 @@ break; } - if (*cp->Error != '\0') { - cp->Rejected++; - cp->State = CSgetcmd; - cp->Start = cp->Next; - NCclearwip(cp); - if (cp->Sendid.size > 3) - NCwritereply(cp, cp->Sendid.data); - else - NCwritereply(cp, cp->Error); - readmore = false; - movedata = false; - break; - } - if (cp->State == CSgotlargearticle) { syslog(L_NOTICE, "%s internal rejecting huge article (%d > %ld)", - CHANname(cp), cp->LargeArtSize, innconf->maxartsize); + CHANname(cp), cp->Next - cp->Start, innconf->maxartsize); if (cp->Sendid.size) NCwritereply(cp, cp->Sendid.data); else { @@ -921,7 +911,6 @@ NNTP_REJECTIT_VAL, innconf->maxartsize); NCwritereply(cp, buff); } - cp->LargeArtSize = 0; cp->State = CSgetcmd; cp->Rejected++; cp->Start = cp->Next; @@ -940,6 +929,20 @@ break; } + if (*cp->Error != '\0') { + cp->Rejected++; + cp->State = CSgetcmd; + cp->Start = cp->Next; + NCclearwip(cp); + if (cp->Sendid.size > 3) + NCwritereply(cp, cp->Sendid.data); + else + NCwritereply(cp, cp->Error); + readmore = false; + movedata = false; + break; + } + if (cp->State == CSnoarticle) { /* this should happen when parsing header */ cp->Rejected++; @@ -1034,8 +1037,8 @@ * directory with an unique timestamp, and start rnews on it. */ if (Tracing || cp->Tracing) - syslog(L_TRACE, "%s CSgetxbatch: now %d of %d bytes", CHANname(cp), - bp->used, cp->XBatchSize); + syslog(L_TRACE, "%s CSgetxbatch: now %lu of %d bytes", CHANname(cp), + (unsigned long) bp->used, cp->XBatchSize); if (cp->Next != 0) { /* data must start from the begining of the buffer */ @@ -1118,8 +1121,9 @@ if (cp->State == CSwritegoodbye || cp->Type == CTfree) break; if (Tracing || cp->Tracing) - syslog(L_TRACE, "%s NCproc state=%d Start=%d Next=%d Used=%d", - CHANname(cp), cp->State, cp->Start, cp->Next, bp->used); + syslog(L_TRACE, "%s NCproc state=%d Start=%lu Next=%lu Used=%lu", + CHANname(cp), cp->State, (unsigned long) cp->Start, + (unsigned long) cp->Next, (unsigned long) bp->used); if (movedata) { /* move data rather than extend buffer */ TMRstart(TMR_DATAMOVE); @@ -1164,8 +1168,8 @@ int i; if (Tracing || cp->Tracing) - syslog(L_TRACE, "%s NCreader Used=%d", - CHANname(cp), cp->In.used); + syslog(L_TRACE, "%s NCreader Used=%lu", + CHANname(cp), (unsigned long) cp->In.used); /* Read any data that's there; ignore errors (retry next time it's our * turn) and if we got nothing, then it's EOF so mark it closed. */ diff -ruN inn-2.4.1/innd/python.c inn-2.4.2/innd/python.c --- inn-2.4.1/innd/python.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/python.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: python.c,v 1.23 2003/02/11 06:48:55 alexk Exp $ +/* $Id: python.c,v 1.23.2.1 2004/01/25 22:22:14 rra Exp $ ** ** python.c: Embed Python in the style of innd's TCL and Perl stuff. ** @@ -645,6 +645,7 @@ { const ARTHEADER *hp; int hdrindex; + size_t hdrcount; setenv("PYTHONPATH", innconf->pathfilter, 1); Py_Initialize(); @@ -675,10 +676,13 @@ syslog(L_NOTICE, "defined python methods"); } - /* Grab space for these so we aren't forever recreating them. */ + /* Grab space for these so we aren't forever recreating them. We also + put the body and the line count into PYheaditem, so it needs to be + two elements longer than the total number of headers. */ PYheaders = PyDict_New(); - PYheaditem = xmalloc((ARRAY_END(ARTheaders) - ARTheaders) * sizeof(PyObject *)); - PYheadkey = xmalloc((ARRAY_END(ARTheaders) - ARTheaders) * sizeof(PyObject *)); + hdrcount = ARRAY_END(ARTheaders) - ARTheaders; + PYheaditem = xmalloc((hdrcount + 2) * sizeof(PyObject *)); + PYheadkey = xmalloc(hdrcount * sizeof(PyObject *)); /* Preallocate keys for the article dictionary */ for (hp = ARTheaders; hp < ARRAY_END(ARTheaders); hp++) diff -ruN inn-2.4.1/innd/site.c inn-2.4.2/innd/site.c --- inn-2.4.1/innd/site.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innd/site.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: site.c,v 1.49.2.1 2003/05/31 19:48:26 rra Exp $ +/* $Id: site.c,v 1.49.2.2 2004/05/16 20:26:54 rra Exp $ ** ** Routines to implement site-feeding. Mainly working with channels to ** do buffering and determine what to send. @@ -198,8 +198,8 @@ i = write(fd, &sp->Channel->Out.data[sp->Channel->Out.used], sp->Channel->Out.left); if(i <= 0) { - syslog(L_ERROR,"%s cant spool count %d", CHANname(sp->Channel), - sp->Channel->Out.left); + syslog(L_ERROR,"%s cant spool count %lu", CHANname(sp->Channel), + (unsigned long) sp->Channel->Out.left); close(fd); return false; } @@ -502,8 +502,9 @@ if (sp->FNLwantsnames) { i = strlen(sp->Param) + sp->FNLnames.used; if (i + (sizeof(TOKEN) * 2) + 3 >= sizeof buff) { - syslog(L_ERROR, "%s toolong need %d for %s", - sp->Name, i + (sizeof(TOKEN) * 2) + 3, sp->Name); + syslog(L_ERROR, "%s toolong need %lu for %s", + sp->Name, (unsigned long) (i + (sizeof(TOKEN) * 2) + 3), + sp->Name); break; } temp = xmalloc(i + 1); @@ -763,7 +764,8 @@ * site spooling, copy any data that might be pending, * and arrange to retry later. */ if (!SITEspool(sp, (CHANNEL *)NULL)) { - syslog(L_ERROR, "%s loss %d bytes", sp->Name, cp->Out.left); + syslog(L_ERROR, "%s loss %lu bytes", sp->Name, + (unsigned long) cp->Out.left); return; } WCHANsetfrombuffer(sp->Channel, &cp->Out); @@ -852,11 +854,13 @@ else if (cp != NULL && cp->Out.left) { if (sp->Type == FTfile || sp->Spooling) { /* Can't flush a file? Hopeless. */ - syslog(L_ERROR, "%s dataloss %d", sp->Name, cp->Out.left); + syslog(L_ERROR, "%s dataloss %lu", sp->Name, + (unsigned long) cp->Out.left); return; } /* Must be a working channel; spool and retry. */ - syslog(L_ERROR, "%s spooling %d bytes", sp->Name, cp->Out.left); + syslog(L_ERROR, "%s spooling %lu bytes", sp->Name, + (unsigned long) cp->Out.left); if (SITEspool(sp, cp)) SITEflush(sp, false); return; @@ -1140,13 +1144,14 @@ case FTfile: p += strlen(strcpy(p, "file")); if (sp->Buffered) { - sprintf(p, " buffered(%d)", sp->Buffer.left); + sprintf(p, " buffered(%lu)", (unsigned long) sp->Buffer.left); p += strlen(p); } else if ((cp = sp->Channel) == NULL) p += strlen(strcpy(p, " no channel?")); else { - sprintf(p, " open fd=%d, in mem %d", cp->fd, cp->Out.left); + sprintf(p, " open fd=%d, in mem %lu", cp->fd, + (unsigned long) cp->Out.left); p += strlen(p); } break; @@ -1165,7 +1170,8 @@ if ((cp = sp->Channel) == NULL) p += strlen(strcpy(p, " no channel?")); else { - sprintf(p, " fd=%d, in mem %d", cp->fd, cp->Out.left); + sprintf(p, " fd=%d, in mem %lu", cp->fd, + (unsigned long) cp->Out.left); p += strlen(p); } break; diff -ruN inn-2.4.1/innfeed/Makefile inn-2.4.2/innfeed/Makefile --- inn-2.4.1/innfeed/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.59 2003/04/20 19:04:13 vinocur Exp $ +## $Id: Makefile,v 1.59.2.2 2004/05/20 22:25:05 rra Exp $ include ../Makefile.global @@ -19,16 +19,31 @@ endpoint.o host.o innlistener.o main.o misc.o tape.o \ version.o -INSTALLED = $(D)$(PATHBIN)/innfeed \ - $(D)$(PATHBIN)/procbatch \ - $(D)$(PATHBIN)/startinnfeed \ - $(D)$(PATHBIN)/imapfeed - all: $(ALL) warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_XPRI) innfeed $D$(PATHBIN)/innfeed + $(LI_XPRI) imapfeed $D$(PATHBIN)/imapfeed + $(CP_XPRI) procbatch $D$(PATHBIN)/procbatch + @ME=`$(WHOAMI)` ; \ + if [ x"$$ME" = xroot ] ; then \ + echo $(LI_SPRI) startinnfeed $D$(PATHBIN)/startinnfeed ; \ + $(LI_SPRI) startinnfeed $D$(PATHBIN)/startinnfeed ; \ + else \ + echo $(LI_XPRI) startinnfeed $D$(PATHBIN)/startinnfeed ; \ + $(LI_XPRI) startinnfeed $D$(PATHBIN)/startinnfeed ; \ + echo '' ; \ + echo '========================' ; \ + echo 'NOTE NOTE NOTE NOTE NOTE' ; \ + ls -l $D$(PATHBIN)/startinnfeed ; \ + echo '$D$(PATHBIN)/startinnfeed needs to be installed setuid root' ; \ + echo '' ; echo ; \ + fi + + clean: rm -f *.o $(ALL) version.c innfeed-convcfg rm -f profiled innfeedp @@ -81,31 +96,6 @@ tst: config_y.c config_l.c gcc -DWANT_MAIN -o tst -g -Wall config_y.c config_l.c -ly -ll - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/innfeed: innfeed ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/imapfeed: imapfeed ; $(LI_XPRI) $? $@ -$(D)$(PATHBIN)/procbatch: procbatch ; $(CP_XPRI) $? $@ - -$(D)$(PATHBIN)/startinnfeed: startinnfeed - @ME=`$(WHOAMI)` ; \ - if [ x"$$ME" = xroot ] ; then \ - echo $(LI_SPRI) startinnfeed $(D)$(PATHBIN)/startinnfeed ; \ - $(LI_SPRI) startinnfeed $(D)$(PATHBIN)/startinnfeed ; \ - else \ - echo $(LI_XPRI) startinnfeed $(D)$(PATHBIN)/startinnfeed ; \ - $(LI_XPRI) startinnfeed $(D)$(PATHBIN)/startinnfeed ; \ - echo '' ; \ - echo '========================' ; \ - echo 'NOTE NOTE NOTE NOTE NOTE' ; \ - ls -l $@ ; \ - echo '$@ needs to be installed setuid root' ; \ - echo '' ; echo ; \ - fi ## Profiling. These rules have not been checked for a while and may need diff -ruN inn-2.4.1/innfeed/article.c inn-2.4.2/innfeed/article.c --- inn-2.4.1/innfeed/article.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/article.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: article.c,v 1.33 2003/01/13 07:59:32 rra Exp $ +/* $Id: article.c,v 1.33.2.2 2004/05/16 20:26:54 rra Exp $ ** ** The Article class for innfeed. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The implementation of the Article class. Articles are the abstraction for ** the actual news articles. They are a reference counted object because they @@ -639,7 +636,8 @@ if ((amtToRead + bytesInUse) > maxBytesInUse && maxLimitNotified == false) { maxLimitNotified = true ; notice ("ME exceeding maximum article byte limit: %d (max)," - " %d (cur)", maxBytesInUse, amtToRead + bytesInUse) ; + " %lu (cur)", maxBytesInUse, + (unsigned long) (amtToRead + bytesInUse)) ; } if ((article->contents = newBuffer (newBufferSize)) == NULL) @@ -993,20 +991,3 @@ } #endif } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/article.h inn-2.4.2/innfeed/article.h --- inn-2.4.1/innfeed/article.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/article.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: article.h,v 1.4 2002/10/07 07:36:10 rra Exp $ +/* $Id: article.h,v 1.4.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to articles. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The public interface to articles. The articles are implemented via ** reference counting. This interface provides the methods for getting the @@ -81,20 +78,3 @@ void artSetMaxBytesInUse (unsigned int val) ; #endif /* article_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/buffer.c inn-2.4.2/innfeed/buffer.c --- inn-2.4.1/innfeed/buffer.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/buffer.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: buffer.c,v 1.16 2003/03/28 01:52:35 rra Exp $ +/* $Id: buffer.c,v 1.16.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The Buffer class for innfeed. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The implementation of the Buffer class. Buffers are reference counted ** objects that abstract memory regions in a way similar to struct iovec. @@ -530,20 +527,3 @@ return true ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/buffer.h inn-2.4.2/innfeed/buffer.h --- inn-2.4.1/innfeed/buffer.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/buffer.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: buffer.h,v 1.3 2002/10/07 07:36:10 rra Exp $ +/* $Id: buffer.h,v 1.3.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to the Buffer class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The Buffer class encapsulates a region of memory. It provides reference ** counting so that redundant memory allocation and copying is minimized. A @@ -117,20 +114,3 @@ bool nntpPrepareBuffer (Buffer buffer) ; #endif /* buffer_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/connection.c inn-2.4.2/innfeed/connection.c --- inn-2.4.1/innfeed/connection.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/connection.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: connection.c,v 1.57 2003/01/19 19:48:37 rra Exp $ +/* $Id: connection.c,v 1.57.2.2 2004/10/01 06:08:09 rra Exp $ ** ** The implementation of the innfeed Connection class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The Connection object is what manages the NNTP protocol. If the remote ** doesn't do streaming, then the standard IHAVE lock-step protcol is @@ -3399,7 +3396,7 @@ artHolder = cxn->checkRespHead ; cxn->checkRespHead = NULL ; - if (cxn->articleQTotal == 0) + if (cxn->articleQTotal == 0 && !writeIsPending(cxn->myEp)) cxnIdle (cxn) ; hostArticleNotWanted (cxn->myHost, cxn, artHolder->article) ; @@ -4913,20 +4910,3 @@ return newValue ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/connection.h inn-2.4.2/innfeed/connection.h --- inn-2.4.1/innfeed/connection.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/connection.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: connection.h,v 1.5 2002/10/07 07:36:11 rra Exp $ +/* $Id: connection.h,v 1.5.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to the Connection class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The Connection class encapulates an NNTP protocol endpoint (either regular ** or extended with the streaming protocol). Each Connection is owned by a @@ -117,20 +114,3 @@ bool cxnCheckstate (Connection cxn) ; #endif /* connection_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/endpoint.c inn-2.4.2/innfeed/endpoint.c --- inn-2.4.1/innfeed/endpoint.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/endpoint.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: endpoint.c,v 1.31 2003/01/13 07:59:32 rra Exp $ +/* $Id: endpoint.c,v 1.31.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The implementation of the innfeed EndPoint object class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The EndPoint class is what gives the illusion (sort of, kind of) of ** threading. Basically it controls a select loop and a set of EndPoint @@ -1804,20 +1801,3 @@ priorityList = NULL ; sigHandlers = NULL ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/endpoint.h inn-2.4.2/innfeed/endpoint.h --- inn-2.4.1/innfeed/endpoint.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/endpoint.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: endpoint.h,v 1.4 2002/10/07 07:36:11 rra Exp $ +/* $Id: endpoint.h,v 1.4.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to the Endpoint class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The EndPoint objects are encapsulations of file descriptors that normally ** do blocking i/o (i.e. NOT fd's hooked to a disk file). The EndPoint class @@ -185,20 +182,3 @@ #define timePasses() (PrivateTime = 0) #endif /* endpoint_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/host.c inn-2.4.2/innfeed/host.c --- inn-2.4.1/innfeed/host.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/host.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: host.c,v 1.70 2003/01/19 19:58:21 rra Exp $ +/* $Id: host.c,v 1.70.2.2 2004/06/29 22:44:03 rra Exp $ ** ** The implementation of the innfeed Host class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. */ #include "innfeed.h" @@ -3789,7 +3786,7 @@ name,v->v.real_val,low) ; v->v.real_val = setval ; } - else if (high != DBL_MAX && v->v.real_val > high) + else if (v != NULL && high != DBL_MAX && v->v.real_val > high) { logOrPrint (LOG_ERR,fp, "ME config: value of %s (%f) is higher than maximum of %f", @@ -3859,20 +3856,3 @@ free (statusFile) ; statusFile = NULL ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/host.h inn-2.4.2/innfeed/host.h --- inn-2.4.1/innfeed/host.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/host.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: host.h,v 1.13 2002/10/07 07:36:11 rra Exp $ +/* $Id: host.h,v 1.13.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to the Host class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The Host class represents the remote news system that we're feeding. A ** Host object has possibly multiple connections to the remote system which @@ -198,20 +195,3 @@ void hostChkCxns(TimeoutId tid, void *data); #endif /* host_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/imap_connection.c inn-2.4.2/innfeed/imap_connection.c --- inn-2.4.1/innfeed/imap_connection.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/imap_connection.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: imap_connection.c,v 1.25 2003/01/19 20:58:03 rra Exp $ +/* $Id: imap_connection.c,v 1.25.2.1 2004/05/16 20:26:55 rra Exp $ ** ** Feed articles to an IMAP server via LMTP and IMAP. ** @@ -795,7 +795,7 @@ str_base = bufferBase(b); str = str_base; - while ( (((int)str) - ((int)str_base)) < size - headerlen) + while ((str - str_base) < size - headerlen) { if (*str == header[0]) { diff -ruN inn-2.4.1/innfeed/innfeed.h inn-2.4.2/innfeed/innfeed.h --- inn-2.4.1/innfeed/innfeed.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/innfeed.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: innfeed.h,v 1.10 2003/02/10 01:38:57 rra Exp $ +/* $Id: innfeed.h,v 1.10.2.1 2004/01/25 20:07:10 rra Exp $ ** ** innfeed's configuration values. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The application configuration values. This file is #include'd before any ** system header files, so it can't rely on any CPP symbols other that what @@ -203,20 +200,3 @@ } TMRTYPE; #endif /* innfeed_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/innlistener.c inn-2.4.2/innfeed/innlistener.c --- inn-2.4.1/innfeed/innlistener.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/innlistener.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: innlistener.c,v 1.30 2003/01/19 19:58:22 rra Exp $ +/* $Id: innlistener.c,v 1.30.2.2 2004/05/16 20:26:55 rra Exp $ ** ** The implementation of the innfeed InnListener class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. */ #include "innfeed.h" @@ -653,7 +650,8 @@ { /* XXX need to remember we've gone over the limit and not try to add any more. */ - warn ("ME internal too many hosts. (max is %d)", lis->hostLen) ; + warn ("ME internal too many hosts. (max is %lu)", + (unsigned long) lis->hostLen) ; dropArticle (peerName,article) ; } else @@ -784,20 +782,3 @@ free (dropArtFile) ; dropArtFile = NULL ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/innlistener.h inn-2.4.2/innfeed/innlistener.h --- inn-2.4.1/innfeed/innlistener.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/innlistener.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: innlistener.h,v 1.3 2002/10/07 07:36:11 rra Exp $ +/* $Id: innlistener.h,v 1.3.2.1 2004/01/25 20:07:10 rra Exp $ ** ** The public interface to the InnListener class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The public interface of the things that listens to commands from INN. It ** receives lines of the form: @@ -72,20 +69,3 @@ void listenerLogStatus (FILE *fp) ; #endif /* innlistener_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/main.c inn-2.4.2/innfeed/main.c --- inn-2.4.1/innfeed/main.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/main.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: main.c,v 1.47.2.1 2003/05/31 19:48:26 rra Exp $ +/* $Id: main.c,v 1.47.2.4 2004/06/29 22:41:35 rra Exp $ ** ** Main routines for the innfeed program. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. */ #include "innfeed.h" @@ -350,10 +347,15 @@ if (checkConfig) { if (!rval) - fprintf (stderr,"config loading failed.\n") ; + { + fprintf (stderr,"config loading failed.\n") ; + exit (1) ; + } else - fprintf (stderr,"config loading succeeded.\n") ; - exit (1) ; + { + fprintf (stderr,"config loading succeeded.\n") ; + exit (0) ; + } } else if (!rval) exit (1) ; @@ -600,11 +602,11 @@ static void sigusr (int sig) { if (sig == SIGUSR1) { - notice ("ME increasing logging level to %d", loggingLevel) ; loggingLevel++ ; + notice ("ME increasing logging level to %d", loggingLevel) ; } else if (sig == SIGUSR2 && loggingLevel > 0) { - notice ("ME decreasing logging level to %d", loggingLevel) ; loggingLevel-- ; + notice ("ME decreasing logging level to %d", loggingLevel) ; } } @@ -963,20 +965,3 @@ (long)loggingLevel,boolToString(useMMap)) ; fprintf (fp,"\n") ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/misc.c inn-2.4.2/innfeed/misc.c --- inn-2.4.1/innfeed/misc.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/misc.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: misc.c,v 1.29 2003/01/19 19:47:57 rra Exp $ +/* $Id: misc.c,v 1.29.2.1 2004/01/25 20:07:10 rra Exp $ ** ** Helper routines for the innfeed program. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. */ #include "innfeed.h" @@ -783,20 +780,3 @@ return rval ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/misc.h inn-2.4.2/innfeed/misc.h --- inn-2.4.1/innfeed/misc.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/misc.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: misc.h,v 1.15 2002/10/07 07:36:12 rra Exp $ +/* $Id: misc.h,v 1.15.2.1 2004/01/25 20:07:10 rra Exp $ ** ** Miscellaneous utility functions for innfeed. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. */ #if ! defined ( misc_h__ ) @@ -140,20 +137,3 @@ #endif #endif /* misc_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/procbatch.in inn-2.4.2/innfeed/procbatch.in --- inn-2.4.1/innfeed/procbatch.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/procbatch.in Wed Dec 22 04:21:19 2004 @@ -5,25 +5,7 @@ # Start Date: Thu May 16 10:32:02 1996 +0200 # Project: INN -- innfeed # File: procbatch.pl -# RCSId: $Id: procbatch.in,v 1.4 1999/11/15 06:37:43 rra Exp $ -# -# Copyright: Copyright (c) 1996 by Internet Software Consortium -# -# Permission to use, copy, modify, and distribute this -# software for any purpose with or without fee is hereby -# granted, provided that the above copyright notice and this -# permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE -# CONSORTIUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -# SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET -# SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -# USE OR PERFORMANCE OF THIS SOFTWARE. +# RCSId: $Id: procbatch.in,v 1.4.4.1 2004/01/25 20:07:10 rra Exp $ # # Description: Take a file of the form generated by innd in the out.going # directory ("Wnm*") and separate it into tape files for inn. diff -ruN inn-2.4.1/innfeed/startinnfeed.c inn-2.4.2/innfeed/startinnfeed.c --- inn-2.4.1/innfeed/startinnfeed.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/startinnfeed.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: startinnfeed.c,v 1.23 2003/01/19 01:15:32 rra Exp $ +/* $Id: startinnfeed.c,v 1.23.2.1 2004/12/19 21:49:18 rra Exp $ ** ** Raise system limits and exec innfeed. ** @@ -90,9 +90,6 @@ rl.rlim_max = RLIM_INFINITY; # ifdef RLIMIT_DATA setrlimit(RLIMIT_DATA, &rl); -# endif -# ifdef RLIMIT_STACK - setrlimit(RLIMIT_STACK, &rl); # endif #endif /* HAVE_SETRLIMIT */ diff -ruN inn-2.4.1/innfeed/tape.c inn-2.4.2/innfeed/tape.c --- inn-2.4.1/innfeed/tape.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/tape.c Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: tape.c,v 1.26 2003/01/13 07:59:33 rra Exp $ +/* $Id: tape.c,v 1.26.2.2 2004/05/16 20:26:55 rra Exp $ ** ** The implementation of the innfeed Tape class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The implementation of the Tape class. Tapes are read-only or write-only ** files that are accessed sequentially. Their basic unit of i/o is an @@ -486,8 +483,8 @@ indent [i] = ' ' ; indent [i] = '\0' ; - fprintf (fp,"%sGlobal Tape List : (count %d) {\n", - indent,activeTapeIdx) ; + fprintf (fp,"%sGlobal Tape List : (count %lu) {\n", + indent,(unsigned long) activeTapeIdx) ; for (i = 0 ; i < activeTapeIdx ; i++) printTapeInfo (activeTapes [i],fp,indentAmt + INDENT_INCR) ; @@ -1295,20 +1292,3 @@ free (tapeDirectory) ; tapeDirectory = NULL ; } - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/innfeed/tape.h inn-2.4.2/innfeed/tape.h --- inn-2.4.1/innfeed/tape.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/innfeed/tape.h Wed Dec 22 04:21:19 2004 @@ -1,11 +1,8 @@ -/* $Id: tape.h,v 1.3 2002/10/07 07:36:12 rra Exp $ +/* $Id: tape.h,v 1.3.2.1 2004/01/25 20:07:11 rra Exp $ ** ** The public interface to the Tape class. ** ** Written by James Brister -** Copyright 1996 by the Internet Software Consortium -** -** For license terms, see the end of this file. ** ** The Tape class simulates a mag tape. It only reads or writes Articles. A ** tape is either in an Input or Output state. When an Article is given to a @@ -69,20 +66,3 @@ void tapeLogStatus (Tape tape, FILE *fp) ; #endif /* tape_h__ */ - -/* -** Copyright 1996 by the Internet Software Consortium -** -** Permission to use, copy, modify, and distribute this software for any -** purpose with or without fee is hereby granted, provided that the above -** copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -** DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -** INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, -** OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -** USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -** OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -** PERFORMANCE OF THIS SOFTWARE. -*/ diff -ruN inn-2.4.1/lib/Makefile inn-2.4.2/lib/Makefile --- inn-2.4.1/lib/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.106.2.1 2003/05/04 21:41:21 rra Exp $ +## $Id: Makefile,v 1.106.2.2 2004/05/18 01:18:56 rra Exp $ include ../Makefile.global @@ -32,7 +32,8 @@ warnings: $(MAKE) COPT='$(WARNINGS)' all -install: all $(D)$(PATHLIB)/libinn.$(EXTLIB) +install: all + $(LI_XPUB) libinn.$(EXTLIB) $D$(PATHLIB)/libinn.$(EXTLIB) clobber clean distclean: rm -f *.o *.lo libinn.la libinn.a parsedate.c parsedate @@ -80,10 +81,6 @@ mv perl.o perl$(PROFSUFFIX).o $(RANLIB) libinn$(PROFSUFFIX).a rm -f $(OBJECTS) - -## Low-level install actions. -$(D)$(PATHLIB)/libinn.$(EXTLIB): libinn.$(EXTLIB) - $(LI_XPUB) libinn.$(EXTLIB) $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/lib/conffile.c inn-2.4.2/lib/conffile.c --- inn-2.4.1/lib/conffile.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/conffile.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: conffile.c,v 1.22 2003/01/19 01:15:33 rra Exp $ +/* $Id: conffile.c,v 1.22.2.1 2004/05/16 23:01:23 rra Exp $ ** ** Routines for reading in incoming.conf-style config files. */ @@ -18,7 +18,7 @@ strlcpy(buffer, F->array[F->lineno], F->sbuf); } F->lineno++; - if (strlen (F->buf) == F->sbuf) { + if (strlen (F->buf) >= F->sbuf - 1) { return 1; /* Line too long */ } else { return 0; @@ -41,7 +41,7 @@ char *s; char *t; char *word; - bool flag; + bool flag, comment; if (!F) return (NULL); /* No conf file */ if (!F->buf || !F->buf[0]) { @@ -57,13 +57,9 @@ /* Ignore blank and comment lines. */ if ((p = strchr(F->buf, '\n')) != NULL) *p = '\0'; - if ((p = strchr(F->buf, '#')) != NULL) { - if (p == F->buf || (p > F->buf && *(p - 1) != '\\')) - *p = '\0'; - } for (p = F->buf; *p == ' ' || *p == '\t' ; p++); flag = true; - if (*p == '\0' && !cfeof(F)) { + if ((*p == '\0' || *p == '#') && !cfeof(F)) { flag = false; if (getconfline(F, F->buf, F->sbuf)) return (NULL); /* Line too long */ @@ -72,13 +68,17 @@ break; } while (!cfeof(F) || !flag); + comment = false; if (*p == '"') { /* double quoted string ? */ p++; do { for (t = p; (*t != '"' || (*t == '"' && *(t - 1) == '\\')) && *t != '\0'; t++); if (*t == '\0') { + if (strlen(F->buf) >= F->sbuf - 2) + return (NULL); /* Line too long */ *t++ = '\n'; + *t = '\0'; if (getconfline(F, t, F->sbuf - strlen(F->buf))) return (NULL); /* Line too long */ if ((s = strchr(t, '\n')) != NULL) @@ -87,17 +87,25 @@ else break; } while (!cfeof(F)); + if (*t != '"') + return (NULL); *t++ = '\0'; } else { - for (t = p; *t != ' ' && *t != '\t' && *t != '\0'; t++); + for (t = p; *t != ' ' && *t != '\t' && *t != '\0'; t++) + if (*t == '#' && (t == p || *(t - 1) != '\\')) { + comment = true; + break; + } if (*t != '\0') *t++ = '\0'; } if (*p == '\0' && cfeof(F)) return (NULL); word = xstrdup (p); - for (p = F->buf; *t != '\0'; t++) - *p++ = *t; + p = F->buf; + if (!comment) + for (; *t != '\0'; t++) + *p++ = *t; *p = '\0'; return (word); diff -ruN inn-2.4.1/lib/dbz.c inn-2.4.2/lib/dbz.c --- inn-2.4.1/lib/dbz.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/dbz.c Wed Dec 22 04:21:19 2004 @@ -78,6 +78,7 @@ #include #include "dbz.h" +#include "inn/messages.h" #include "inn/innconf.h" #include "inn/mmap.h" #include "libinn.h" @@ -90,7 +91,6 @@ /* * "LIA" = "leave it alone unless you know what you're doing". * - * DBZDEBUG enable debugging * DBZTEST Generate a standalone program for testing and benchmarking * DEFSIZE default table size (not as critical as in old dbz) * NMEMORY number of days of memory for use in sizing new table (LIA) @@ -259,18 +259,6 @@ static searcher srch; static searcher *prevp; /* &srch or FRESH */ -/* - * The double parentheses needed to make this work are ugly, but the - * alternative (under most compilers) is to pack around 2K of unused - * strings -- there's just no way to get rid of them. - */ -#ifdef DBZDEBUG -static int debug; /* controlled by dbzdebug() */ -#define DEBUG(args) if (debug) { printf args ; } else -#else -#define DEBUG(args) ; -#endif - /* Structure for hash tables */ typedef struct { int fd; /* Non-blocking descriptor for writes */ @@ -389,7 +377,7 @@ f = Fopen(fn, "w", TEMPORARYOPEN); free(fn); if (f == NULL) { - DEBUG(("dbz.c create_truncate: unable to create/truncate %s\n", pag1)); + syswarn("unable to create/truncate %s", pag1); return false; } else Fclose(f); @@ -413,16 +401,16 @@ #endif if (opendb) { - DEBUG(("dbzfresh: database already open\n")); + warn("dbzfresh: database already open"); return false; } if (size != 0 && size < 2) { - DEBUG(("dbzfresh: preposterous size (%ld)\n", size)); + warn("dbzfresh: preposterous size (%ld)", (long) size); return false; } /* get default configuration */ - if (!getconf((FILE *)NULL, &c)) + if (!getconf(NULL, &c)) return false; /* "can't happen" */ #ifdef DO_TAGGED_HASH @@ -455,7 +443,7 @@ f = Fopen(fn, "w", TEMPORARYOPEN); free(fn); if (f == NULL) { - DEBUG(("dbzfresh: unable to write config\n")); + syswarn("dbzfresh: unable to write config"); return false; } if (putconf(f, &c) < 0) { @@ -463,7 +451,7 @@ return false; } if (Fclose(f) == EOF) { - DEBUG(("dbzfresh: fclose failure\n")); + syswarn("dbzfresh: fclose failure"); return false; } @@ -497,7 +485,7 @@ /* this incidentally prevents ridiculously small tables */ for (ip = quick; (div1 = *ip) != 0; ip++) if (x % div1 == 0) { - DEBUG(("isprime: quick result on %ld\n", (long)x)); + debug("isprime: quick result on %ld", x); return false; } @@ -525,7 +513,7 @@ of_t n; if (contents <= 0) { /* foulup or default inquiry */ - DEBUG(("dbzsize: preposterous input (%ld)\n", contents)); + debug("dbzsize: preposterous input (%ld)", (long) contents); return DEFSIZE; } @@ -541,12 +529,12 @@ #ifdef DO_TAGGED_HASH if (!(n & 1)) n += 1; /* make it odd */ - DEBUG(("dbzsize: tentative size %ld\n", n)); + debug("dbzsize: tentative size %ld", n); while (!isprime(n)) /* look for a prime */ n += 2; #endif - DEBUG(("dbzsize: final size %ld\n", n)); + debug("dbzsize: final size %ld", (long) n); return n; } @@ -572,7 +560,7 @@ #endif if (opendb) { - DEBUG(("dbzagain: database already open\n")); + warn("dbzagain: database already open"); return false; } @@ -581,13 +569,13 @@ f = Fopen(fn, "r", TEMPORARYOPEN); free(fn); if (f == NULL) { - DEBUG(("dbzagain: cannot open old .dir file\n")); + syswarn("dbzagain: cannot open old .dir file"); return false; } result = getconf(f, &c); Fclose(f); if (!result) { - DEBUG(("dbzagain: getconf failed\n")); + syswarn("dbzagain: getconf failed"); return false; } @@ -601,7 +589,7 @@ newtable = 1; /* hasn't got full usage history yet */ } if (top == 0) { - DEBUG(("dbzagain: old table has no contents!\n")); + debug("dbzagain: old table has no contents!"); newtable = 1; } for (i = NUSEDS-1; i > 0; i--) @@ -617,7 +605,7 @@ newtable = 1; /* hasn't got full usage history yet */ } if (top != 0 && vtop == 0) { - DEBUG(("dbzagain: old table has no contents!\n")); + debug("dbzagain: old table has no contents!"); newtable = 1; } for (i = NUSEDS-1; i > 0; i--) @@ -639,13 +627,13 @@ f = Fopen(fn, "w", TEMPORARYOPEN); free(fn); if (f == NULL) { - DEBUG(("dbzagain: unable to write new .dir\n")); + syswarn("dbzagain: unable to write new .dir"); return false; } i = putconf(f, &c); Fclose(f); if (i < 0) { - DEBUG(("dbzagain: putconf failed\n")); + warn("dbzagain: putconf failed"); return false; } @@ -669,12 +657,14 @@ const size_t reclen, const dbz_incore_val incore) { char *name; + int oerrno; name = concat(base, ext, (char *) 0); if ((tab->fd = open(name, readonly ? O_RDONLY : O_RDWR)) < 0) { - DEBUG(("openhashtable: could not open raw\n")); + syswarn("openhashtable: could not open raw"); + oerrno = errno; free(name); - errno = EDOM; + errno = oerrno; return false; } free(name); @@ -687,17 +677,19 @@ tab->incore = incore; if (tab->incore != INCORE_NO) { if (!getcore(tab)) { - DEBUG(("openhashtable: getcore failure\n")); + syswarn("openhashtable: getcore failure"); + oerrno = errno; close(tab->fd); - errno = EDOM; + errno = oerrno; return false; } } if (options.nonblock && nonblocking(tab->fd, true) < 0) { - DEBUG(("fcntl: could not set nonblock\n")); + syswarn("fcntl: could not set nonblock"); + oerrno = errno; close(tab->fd); - errno = EDOM; + errno = oerrno; return false; } return true; @@ -710,10 +702,10 @@ if (tab->incore == INCORE_MMAP) { #if defined(HAVE_MMAP) if (munmap(tab->core, (int)conf.tsize * tab->reclen) == -1) { - DEBUG(("closehashtable: munmap failed\n")); + syswarn("closehashtable: munmap failed"); } #else - DEBUG(("closehashtable: can't mmap files\n")); + warn("closehashtable: can't mmap files"); #endif } } @@ -724,7 +716,7 @@ { basef = Fopen(name, "r", DBZ_BASE); if (basef == NULL) { - DEBUG(("dbzinit: basefile open failed\n")); + syswarn("dbzinit: basefile open failed"); basefname = xstrdup(name); } else basefname = NULL; @@ -749,7 +741,7 @@ char *fname; if (opendb) { - DEBUG(("dbzinit: dbzinit already called once\n")); + warn("dbzinit: dbzinit already called once"); errno = 0; return false; } @@ -763,14 +755,14 @@ readonly = false; free(fname); if (dirf == NULL) { - DEBUG(("dbzinit: can't open .dir file\n")); + syswarn("dbzinit: can't open .dir file"); return false; } close_on_exec(fileno(dirf), true); /* pick up configuration */ if (!getconf(dirf, &conf)) { - DEBUG(("dbzinit: getconf failure\n")); + warn("dbzinit: getconf failure"); Fclose(dirf); errno = EDOM; /* kind of a kludge, but very portable */ return false; @@ -808,7 +800,7 @@ opendb = true; prevp = FRESH; memset(&empty_rec, '\0', sizeof(empty_rec)); - DEBUG(("dbzinit: succeeded\n")); + debug("dbzinit: succeeded"); return true; } @@ -820,7 +812,7 @@ bool ret = true; if (!opendb) { - DEBUG(("dbzclose: not opened!\n")); + warn("dbzclose: not opened!"); return false; } @@ -830,7 +822,7 @@ #ifdef DO_TAGGED_HASH closehashtable(&pagtab); if (Fclose(basef) == EOF) { - fprintf(stderr, "dbzclose: fclose(basef) failed\n"); + syswarn("dbzclose: fclose(basef) failed"); ret = false; } if (basefname != NULL) @@ -842,11 +834,11 @@ #endif if (Fclose(dirf) == EOF) { - DEBUG(("dbzclose: fclose(dirf) failed\n")); + syswarn("dbzclose: fclose(dirf) failed"); ret = false; } - DEBUG(("dbzclose: %s\n", (ret == 0) ? "succeeded" : "failed")); + debug("dbzclose: %s", (ret == 0) ? "succeeded" : "failed"); if (ret) opendb = false; return ret; @@ -860,28 +852,26 @@ bool ret = true; if (!opendb) { - DEBUG(("dbzsync: not opened!\n")); + warn("dbzsync: not opened!"); return false; } if (!dirty) return true;; - if (!options.writethrough) { #ifdef DO_TAGGED_HASH - if (!putcore(&pagtab)) { + if (!putcore(&pagtab)) { #else - if (!putcore(&idxtab) || !putcore(&etab)) { + if (!putcore(&idxtab) || !putcore(&etab)) { #endif - DEBUG(("dbzsync: putcore failed\n")); - ret = false;; - } + warn("dbzsync: putcore failed"); + ret = false; } if (putconf(dirf, &conf) < 0) ret = false; - DEBUG(("dbzsync: %s\n", ret ? "succeeded" : "failed")); + debug("dbzsync: %s", ret ? "succeeded" : "failed"); return ret; } @@ -913,7 +903,7 @@ #else if (!opendb) { - DEBUG(("dbzexists: database not open!\n")); + warn("dbzexists: database not open!"); return false; } @@ -945,7 +935,7 @@ prevp = FRESH; if (!opendb) { - DEBUG(("dbzfetch: database not open!\n")); + warn("dbzfetch: database not open!"); return false; } @@ -958,19 +948,19 @@ nb2r = sizeof(buffer) - 1; while ((offset = search(&srch)) != NOTFOUND) { - DEBUG(("got 0x%lx\n", key_ptr)); + debug("got 0x%lx", key_ptr); /* fetch the key */ offset <<= conf.dropbits; if (offset) /* backspace 1 character to read '\n' */ offset--; if (fseeko(basef, offset, SEEK_SET) != 0) { - DEBUG(("fetch: seek failed\n")); + syswarn("dbzfetch: seek failed"); return false; } keylen = fread(buffer, 1, nb2r, basef); if (keylen < MIN_KEY_LENGTH) { - DEBUG(("fetch: read failed\n")); + syswarn("dbzfetch: read failed"); return false; } buffer[keylen] = '\0'; /* terminate the string */ @@ -982,7 +972,7 @@ if (*bp == '\n') break; if (*bp != '\n') { - DEBUG(("dbzfetch: can't locate EOL\n")); + debug("dbzfetch: can't locate EOL"); /* pag entry should be deleted, but I'm lazy... */ continue; } @@ -1012,13 +1002,13 @@ /* we found it */ offset += j; - DEBUG(("fetch: successful\n")); + debug("fetch: successful"); *value = offset; return true; } /* we didn't find it */ - DEBUG(("fetch: failed\n")); + debug("fetch: failed"); prevp = &srch; /* remember where we stopped */ return false; #else /* DO_TAGGED_HASH */ @@ -1028,18 +1018,18 @@ memcpy(value, &((of_t *)idxtab.core)[srch.place], sizeof(of_t)); } else { if (pread(idxtab.fd, value, sizeof(of_t), srch.place * idxtab.reclen) != sizeof(of_t)) { - DEBUG(("fetch: read failed\n")); + syswarn("fetch: read failed"); idxtab.pos = -1; srch.aborted = 1; return false; } } - DEBUG(("fetch: successful\n")); + debug("fetch: successful"); return true; } /* we didn't find it */ - DEBUG(("fetch: failed\n")); + debug("fetch: failed"); prevp = &srch; /* remember where we stopped */ return false; #endif @@ -1059,11 +1049,11 @@ #endif if (!opendb) { - DEBUG(("dbzstore: database not open!\n")); + warn("dbzstore: database not open!"); return DBZSTORE_ERROR; } if (readonly) { - DEBUG(("dbzstore: database open read-only\n")); + warn("dbzstore: database open read-only"); return DBZSTORE_ERROR; } @@ -1077,10 +1067,10 @@ /* now value is in fuzzy format */ value >>= conf.dropbits; - DEBUG(("dbzstore: (%ld)\n", (long)value)); + debug("dbzstore: (%ld)", (long) value); if (!okayvalue(value)) { - DEBUG(("dbzstore: reserved bit or overflow in 0x%lx\n", value)); + warn("dbzstore: reserved bit or overflow in 0x%lx", value); return DBZSTORE_ERROR; } @@ -1091,7 +1081,7 @@ prevp = FRESH; conf.used[0]++; - DEBUG(("store: used count %ld\n", conf.used[0])); + debug("store: used count %ld", conf.used[0]); dirty = 1; if (!set_pag(&srch, value)) return DBZSTORE_ERROR; @@ -1105,7 +1095,7 @@ prevp = FRESH; conf.used[0]++; - DEBUG(("store: used count %ld\n", conf.used[0])); + debug("store: used count %ld", conf.used[0]); dirty = true; memcpy(&evalue.hash, &srch.hash, @@ -1146,9 +1136,9 @@ cp->tagshift = TAGSHIFT; cp->dropbits = 0; cp->lenfuzzy = 0; - DEBUG(("getconf: defaults (%ld, %c, (0x%lx/0x%lx<<%d %d))\n", - cp->tsize, cp->casemap, cp->tagenb, - cp->tagmask, cp->tagshift, cp->dropbits)); + debug("getconf: defaults (%ld, %c, (0x%lx/0x%lx<<%d %d))", + cp->tsize, cp->casemap, cp->tagenb, + cp->tagmask, cp->tagshift, cp->dropbits); return true; } @@ -1156,11 +1146,11 @@ &cp->valuesize, &cp->fillpercent, &cp->tagenb, &cp->tagmask, &cp->tagshift, &cp->dropbits); if (i != 7) { - DEBUG(("getconf error")); + warn("dbz: bad first line in config"); return false; } if (cp->valuesize != sizeof(of_t)) { - DEBUG(("getconf: wrong of_t size (%d)\n", cp->valuesize)); + warn("dbz: wrong of_t size (%d)", cp->valuesize); return false; } cp->lenfuzzy = (int)(1 << cp->dropbits) - 1; @@ -1171,39 +1161,39 @@ cp->used[i] = 0; cp->valuesize = sizeof(of_t) + sizeof(erec); cp->fillpercent = 66; - DEBUG(("getconf: defaults (%ld)\n", cp->tsize)); + debug("getconf: defaults (%ld)", cp->tsize); return true; } i = fscanf(df, "dbz 6 %ld %d %d\n", &cp->tsize, &cp->valuesize, &cp->fillpercent); if (i != 3) { - DEBUG(("getconf error")); + warn("dbz: bad first line in config"); return false; } if (cp->valuesize != (sizeof(of_t) + sizeof(erec))) { - DEBUG(("getconf: wrong of_t size (%d)\n", cp->valuesize)); + warn("dbz: wrong of_t size (%d)", cp->valuesize); return false; } #endif /* DO_TAGGED_HASH */ - DEBUG(("size %ld\n", cp->tsize)); + debug("size %ld", cp->tsize); /* second line, the usages */ for (i = 0; i < NUSEDS; i++) if (!fscanf(df, "%ld", &cp->used[i])) { - DEBUG(("getconf error\n")); + warn("dbz: bad usage value in config"); return false; } - DEBUG(("used %ld %ld %ld...\n", cp->used[0], cp->used[1], cp->used[2])); + debug("used %ld %ld %ld...", cp->used[0], cp->used[1], cp->used[2]); #ifdef DO_TAGGED_HASH /* third line, the text usages */ for (i = 0; i < NUSEDS; i++) if (!fscanf(df, "%ld", &cp->vused[i])) { - DEBUG(("getconf error\n")); + warn("dbz: bad text usage value in config"); return false; } - DEBUG(("vused %ld %ld %ld...\n", cp->vused[0], cp->vused[1], cp->vused[2])); + debug("vused %ld %ld %ld...", cp->vused[0], cp->vused[1], cp->vused[2]); #endif /* DO_TAGGED_HASH */ return true; @@ -1219,7 +1209,7 @@ int ret = 0; if (fseeko(f, 0, SEEK_SET) != 0) { - DEBUG(("fseeko failure in putconf\n")); + syswarn("dbz: fseeko failure in putconf"); ret = -1; } @@ -1244,7 +1234,7 @@ if (ferror(f)) ret = -1; - DEBUG(("putconf status %d\n", ret)); + debug("putconf status %d", ret); return ret; } @@ -1263,13 +1253,13 @@ if (tab->incore == INCORE_MMAP) { #if defined(HAVE_MMAP) if (fstat(tab->fd, &st) == -1) { - DEBUG(("getcore: fstat failed\n")); + syswarn("dbz: getcore: fstat failed"); return false; } if ((conf.tsize * tab->reclen) > st.st_size) { /* file too small; extend it */ if (ftruncate(tab->fd, conf.tsize * tab->reclen) == -1) { - DEBUG(("getcore: ftruncate failed\n")); + syswarn("dbz: getcore: ftruncate failed"); return false; } } @@ -1277,7 +1267,7 @@ readonly ? PROT_READ : PROT_WRITE | PROT_READ, MAP_SHARED, tab->fd, 0); if (it == (char *)-1) { - DEBUG(("getcore: mmap failed\n")); + syswarn("dbz: getcore: mmap failed"); return false; } #if defined (MADV_RANDOM) && defined(HAVE_MADVISE) @@ -1285,7 +1275,7 @@ madvise(it, (size_t)conf.tsize * sizeof(tab->reclen), MADV_RANDOM); #endif #else - DEBUG(("getcore: can't mmap files\n")); + warn("dbz: getcore: can't mmap files"); return false; #endif } else { @@ -1293,7 +1283,7 @@ nread = read(tab->fd, it, tab->reclen * conf.tsize); if (nread < 0) { - DEBUG(("getcore: read failed\n")); + syswarn("dbz: getcore: read failed"); free(it); return false; } @@ -1316,6 +1306,8 @@ int size; if (tab->incore == INCORE_MEM) { + if(options.writethrough) + return true; nonblocking(tab->fd, false); size = tab->reclen * conf.tsize; if (pwrite(tab->fd, tab->core, size, 0) != size) { @@ -1324,6 +1316,11 @@ } nonblocking(tab->fd, options.nonblock); } +#ifdef HAVE_MMAP + if(tab->incore == INCORE_MMAP) { + msync(tab->core, (int)conf.tsize * tab->reclen, MS_ASYNC); + } +#endif return true; } @@ -1354,13 +1351,13 @@ if (sp != osp) *sp = *osp; sp->run--; - DEBUG(("search restarted\n")); + debug("search restarted"); } else { sp->shorthash = h; sp->tag = MKTAG(h / conf.tsize); sp->place = h % conf.tsize; - DEBUG(("hash %8.8lx tag %8.8lx place %ld\n", - sp->shorthash, sp->tag, sp->place)); + debug("hash %8.8lx tag %8.8lx place %ld", + sp->shorthash, sp->tag, sp->place); sp->tabno = 0; sp->run = -1; sp->aborted = 0; @@ -1373,7 +1370,7 @@ if (sp != osp) *sp = *osp; sp->run--; - DEBUG(("search restarted\n")); + debug("search restarted"); } else { sp->hash = hash; tocopy = sizeof(hash) < sizeof(sp->shorthash) ? sizeof(hash) : sizeof(sp->shorthash); @@ -1409,11 +1406,11 @@ taboffset = sp->tabno * conf.tsize; } sp->place = ((sp->shorthash + sp->run) % conf.tsize) + taboffset; - DEBUG(("search @ %ld\n", place)); + debug("search @ %ld", place); /* get the tagged value */ if ((options.pag_incore != INCORE_NO) && (sp->place < conf.tsize)) { - DEBUG(("search: in core\n")); + debug("search: in core"); value = ((of_t *)pagtab.core)[sp->place]; } else { off_t dest; @@ -1423,7 +1420,7 @@ errno = 0; if (pread(pagtab.fd, &value, sizeof(value), dest) != sizeof(value)) { if (errno != 0) { - DEBUG(("search: read failed\n")); + syswarn("dbz: search: read failed"); pagtab.pos = -1; sp->aborted = 1; return(NOTFOUND); @@ -1436,21 +1433,21 @@ /* vacant slot is always cause to return */ if (value == VACANT) { - DEBUG(("search: empty slot\n")); + debug("search: empty slot"); return(NOTFOUND); }; /* check the tag */ value = UNBIAS(value); - DEBUG(("got 0x%lx\n", value)); + debug("got 0x%lx", value); if (!HASTAG(value)) { - DEBUG(("tagless\n")); + debug("tagless"); return(value); } else if (TAG(value) == sp->tag) { - DEBUG(("match\n")); + debug("match"); return(NOTAG(value)); } else { - DEBUG(("mismatch 0x%lx\n", TAG(value))); + debug("mismatch 0x%lx", TAG(value)); } } /* NOTREACHED */ @@ -1480,11 +1477,11 @@ } sp->place = ((sp->shorthash + sp->run) % conf.tsize) + taboffset; - DEBUG(("search @ %ld\n", sp->place)); + debug("search @ %ld", (long) sp->place); /* get the value */ if ((options.exists_incore != INCORE_NO) && (sp->place < conf.tsize)) { - DEBUG(("search: in core\n")); + debug("search: in core"); memcpy(&value, &((erec *)etab.core)[sp->place], sizeof(erec)); } else { off_t dest; @@ -1494,7 +1491,7 @@ errno = 0; if (pread(etab.fd, &value, sizeof(erec), dest) != sizeof(erec)) { if (errno != 0) { - DEBUG(("search: read failed\n")); + debug("search: read failed"); etab.pos = -1; sp->aborted = 1; return false; @@ -1509,12 +1506,12 @@ /* Check for an empty record */ if (!memcmp(&value, &empty_rec, sizeof(erec))) { - DEBUG(("search: empty slot\n")); + debug("search: empty slot"); return false; } /* check the value */ - DEBUG(("got 0x%lx\n", value)); + debug("got 0x%.*s", DBZ_INTERNAL_HASH_SIZE, value.hash); if (!memcmp(&value.hash, &sp->hash, DBZ_INTERNAL_HASH_SIZE)) { return true; } @@ -1540,7 +1537,7 @@ void *where = (char *)tab->core + (sp->place * tab->reclen); memcpy(where, value, tab->reclen); - DEBUG(("set: incore\n")); + debug("set: incore"); if (tab->incore == INCORE_MMAP) { if (innconf->nfswriter) { mapcntl(where, tab->reclen, MS_ASYNC); @@ -1563,18 +1560,18 @@ FD_ZERO(&writeset); FD_SET(tab->fd, &writeset); if (select(tab->fd + 1, NULL, &writeset, NULL, NULL) < 1) { - DEBUG(("set: select failed\n")); + syswarn("dbz: set: select failed"); sp->aborted = 1; return false; } continue; } - DEBUG(("set: write failed\n")); + syswarn("dbz: set: write failed"); sp->aborted = 1; return false; } - DEBUG(("set: succeeded\n")); + debug("set: succeeded"); return true; } @@ -1601,7 +1598,7 @@ fprintf(stderr, " tagboth = 0x%lx\n", tagboth); canttag_warned = 1; } - DEBUG(("tagged value is 0x%lx\n", value)); + debug("tagged value is 0x%lx", value); value = BIAS(value); return set(sp, &pagtab, &value); @@ -1630,18 +1627,6 @@ } -/* dbzdebug - control dbz debugging at run time - * Returns: old value for dbzdebug - */ -#ifdef DBZDEBUG -int dbzdebug(bool value) { - bool old = debug; - - debug = value; - return old; -} -#endif - #ifdef DBZTEST int @@ -1734,9 +1719,6 @@ gettimeofday(&end, NULL); printf("dbzfresh: %d msec\n", timediffms(start, end)); } else { -#ifdef DBZDEBUG - dbzdebug(1); -#endif gettimeofday(&start, NULL); if (dbzinit(history) < 0) { fprintf(stderr, "cant dbzinit %s\n", history); diff -ruN inn-2.4.1/lib/innconf.c inn-2.4.2/lib/innconf.c --- inn-2.4.1/lib/innconf.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/innconf.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: innconf.c,v 1.13 2003/02/03 00:58:24 rra Exp $ +/* $Id: innconf.c,v 1.13.2.2 2004/05/16 20:18:43 rra Exp $ ** ** Manage the global innconf struct. ** @@ -375,7 +375,7 @@ *string = (char_ptr == NULL) ? NULL : xstrdup(char_ptr); break; default: - die("internal error: invalid type in row %d of config table", i); + die("internal error: invalid type in row %u of config table", i); break; } return config; @@ -403,6 +403,10 @@ } if (innconf->pathnews == NULL) { warn("must set pathnews in inn.conf"); + okay = false; + } + if (innconf->hismethod == NULL) { + warn("must set hismethod in inn.conf"); okay = false; } if (innconf->enableoverview && innconf->ovmethod == NULL) { diff -ruN inn-2.4.1/lib/inndcomm.c inn-2.4.2/lib/inndcomm.c --- inn-2.4.1/lib/inndcomm.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/inndcomm.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: inndcomm.c,v 1.24 2003/01/23 19:12:36 rra Exp $ +/* $Id: inndcomm.c,v 1.24.2.1 2004/05/17 08:52:15 rra Exp $ ** ** Library routines to let other programs control innd. */ @@ -30,10 +30,10 @@ #define MIN_BUFFER_SIZE 4096 static char *ICCsockname = NULL; -#if defined(HAVE_UNIX_DOMAIN_SOCKETS) +#ifdef HAVE_UNIX_DOMAIN_SOCKETS static struct sockaddr_un ICCserv; static struct sockaddr_un ICCclient; -#endif /* defined(HAVE_UNIX_DOMAIN_SOCKETS) */ +#endif static int ICCfd; static int ICCtimeout; const char *ICCfailure; @@ -83,7 +83,8 @@ return -1; } -#if defined(HAVE_UNIX_DOMAIN_SOCKETS) +#ifdef HAVE_UNIX_DOMAIN_SOCKETS + /* Make a socket and give it the name. */ if ((ICCfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) { ICCfailure = "socket"; @@ -93,8 +94,7 @@ ICCclient.sun_family = AF_UNIX; strlcpy(ICCclient.sun_path, ICCsockname, sizeof(ICCclient.sun_path)); mask = umask(0); - if (bind(ICCfd, (struct sockaddr *) &ICCclient, - SUN_LEN(&ICCclient)) < 0) { + if (bind(ICCfd, (struct sockaddr *) &ICCclient, SUN_LEN(&ICCclient)) < 0) { oerrno = errno; umask(mask); errno = oerrno; @@ -109,7 +109,9 @@ strlcpy(ICCserv.sun_path, innconf->pathrun, sizeof(ICCserv.sun_path)); strlcat(ICCserv.sun_path, "/", sizeof(ICCserv.sun_path)); strlcat(ICCserv.sun_path, _PATH_NEWSCONTROL, sizeof(ICCserv.sun_path)); -#else + +#else /* !HAVE_UNIX_DOMAIN_SOCKETS */ + /* Make a named pipe and open it. */ mask = umask(0); if (mkfifo(ICCsockname, 0666) < 0) { @@ -124,7 +126,7 @@ ICCfailure = "open"; return -1; } -#endif /* defined(HAVE_UNIX_DOMAIN_SOCKETS) */ +#endif /* !HAVE_UNIX_DOMAIN_SOCKETS */ ICCfailure = NULL; return 0; @@ -178,9 +180,8 @@ /* -** See if the server is still there. When in doubt, assume yes. -** Cache the pid since a rebooted server won't know about our pending -** message. +** See if the server is still there. When in doubt, assume yes. Cache the +** PID since a rebooted server won't know about our pending message. */ static bool ICCserveralive(pid_t pid) @@ -194,12 +195,11 @@ /* ** Send an arbitrary command to the server. ** -** The command format is now different. There is a protocol version -** (one-byte) on the front of the message, followed by a two byte -** length count. The length includes the protocol byte and the length -** itself. +** There is a protocol version (one-byte) on the front of the message, +** followed by a two byte length count. The length includes the protocol +** byte and the length itself. This differs from the protocol in much +** earlier versions of INN. */ - int ICCcommand(char cmd, const char *argv[], char **replyp) { @@ -207,18 +207,18 @@ char *p; const char *q; char save; - int bufsiz; int i ; -#if !defined(HAVE_UNIX_DOMAIN_SOCKETS) +#ifndef HAVE_UNIX_DOMAIN_SOCKETS int fd; char *path; -#endif /* !defined(HAVE_UNIX_DOMAIN_SOCKETS) */ +#endif int len; fd_set Rmask; struct timeval T; pid_t pid; - ICC_MSGLENTYPE rlen ; - ICC_PROTOCOLTYPE protocol ; + ICC_MSGLENTYPE rlen; + ICC_PROTOCOLTYPE protocol; + size_t bufsiz = 64 * 1024 - 1; /* Is server there? */ pid = ICCserverpid(); @@ -228,18 +228,13 @@ } /* Get the length of the buffer. */ - bufsiz = strlen(ICCsockname) + 1 + 1; - for (i = 0; (q = argv[i]) != NULL; i++) - bufsiz += 1 + strlen(q); - bufsiz += HEADER_SIZE ; - if (bufsiz < MIN_BUFFER_SIZE) - bufsiz = MIN_BUFFER_SIZE; buff = xmalloc(bufsiz); if (replyp) *replyp = NULL; - buff += HEADER_SIZE; /* Advance to leave space for length + - bufsiz -= HEADER_SIZE; protocol version info. */ + /* Advance to leave space for length + protocol version info. */ + buff += HEADER_SIZE; + bufsiz -= HEADER_SIZE; /* Format the message. */ snprintf(buff, bufsiz, "%s%c%c", ICCsockname, SC_SEP, cmd); @@ -252,29 +247,23 @@ /* Send message. */ ICCfailure = NULL; - len = p - buff + HEADER_SIZE ; - rlen = htons (len) ; + len = p - buff + HEADER_SIZE; + rlen = htons(len); /* now stick in the protocol version and the length. */ buff -= HEADER_SIZE; + protocol = ICC_PROTOCOL_1; + memcpy(buff, &protocol, sizeof(protocol)); + memcpy(buff + sizeof(protocol), &rlen, sizeof(rlen)); - protocol = ICC_PROTOCOL_1 ; - memcpy (buff,&protocol,sizeof (protocol)) ; - buff += sizeof (protocol) ; - - memcpy (buff,&rlen,sizeof (rlen)) ; - buff += sizeof (rlen) ; - - buff -= HEADER_SIZE ; - -#if defined(HAVE_UNIX_DOMAIN_SOCKETS) - if (sendto(ICCfd, buff, len, 0, - (struct sockaddr *)&ICCserv, SUN_LEN(&ICCserv)) < 0) { +#ifdef HAVE_UNIX_DOMAIN_SOCKETS + if (sendto(ICCfd, buff, len, 0,(struct sockaddr *) &ICCserv, + SUN_LEN(&ICCserv)) < 0) { free(buff); ICCfailure = "sendto"; return -1; } -#else +#else /* !HAVE_UNIX_DOMAIN_SOCKETS */ path = concatpath(innconf->pathrun, _PATH_NEWSCONTROL); fd = open(path, O_WRONLY); free(path); @@ -292,7 +281,7 @@ return -1; } close(fd); -#endif /* defined(HAVE_UNIX_DOMAIN_SOCKETS) */ +#endif /* !HAVE_UNIX_DOMAIN_SOCKETS */ /* Possibly get a reply. */ switch (cmd) { @@ -338,66 +327,66 @@ } } - -#if defined (HAVE_UNIX_DOMAIN_SOCKETS) +#ifdef HAVE_UNIX_DOMAIN_SOCKETS /* Read the reply. */ - i = RECVorREAD(ICCfd, buff, bufsiz) ; - if ((unsigned int)i < HEADER_SIZE) { - free(buff) ; - ICCfailure = "read" ; - return -1 ; - } - memcpy (&protocol,buff,sizeof (protocol)) ; - memcpy (&rlen,buff + sizeof (protocol),sizeof (rlen)) ; - rlen = ntohs (rlen) ; + i = RECVorREAD(ICCfd, buff, bufsiz); + if ((unsigned int) i < HEADER_SIZE) { + free(buff); + ICCfailure = "read"; + return -1; + } + memcpy(&protocol, buff, sizeof(protocol)); + memcpy(&rlen, buff + sizeof(protocol), sizeof(rlen)); + rlen = ntohs(rlen); if (i != rlen) { - free(buff) ; - ICCfailure = "short read" ; - return -1 ; + free(buff); + ICCfailure = "short read"; + return -1; } if (protocol != ICC_PROTOCOL_1) { - free(buff) ; - ICCfailure = "protocol mismatch" ; - return -1 ; + free(buff); + ICCfailure = "protocol mismatch"; + return -1; } - memmove (buff, buff + HEADER_SIZE, rlen - HEADER_SIZE) ; - i -= HEADER_SIZE ; + memmove(buff, buff + HEADER_SIZE, rlen - HEADER_SIZE); + i -= HEADER_SIZE; buff[i] = '\0'; -#else /* defined (HAVE_UNIX_DOMAIN_SOCKETS) */ +#else /* !HAVE_UNIX_DOMAIN_SOCKETS */ - i = RECVorREAD (ICCfd, buff, HEADER_SIZE) ; - if (i != HEADER_SIZE) { - return -1 ; - } + i = RECVorREAD(ICCfd, buff, HEADER_SIZE); + if (i != HEADER_SIZE) + return -1; - memcpy (&protocol,buff,sizeof (protocol)) ; - memcpy (&rlen,buff + sizeof (protocol),sizeof (rlen)) ; - rlen = ntohs (rlen) - HEADER_SIZE ; + memcpy(&protocol, buff, sizeof(protocol)); + memcpy(&rlen, buff + sizeof(protocol), sizeof(rlen)); + rlen = ntohs(rlen) - HEADER_SIZE; - i = RECVorREAD(ICCfd, buff, rlen) ; + i = RECVorREAD(ICCfd, buff, rlen); if (i != rlen) { - return -1 ; + ICCfailure = "short read"; + return -1; } buff[i] = '\0'; if (protocol != ICC_PROTOCOL_1) { - return -1 ; + ICCfailure = "protocol mismatch"; + return -1; } -#endif /* defined (HAVE_UNIX_DOMAIN_SOCKETS) */ +#endif /* !HAVE_UNIX_DOMAIN_SOCKETS */ /* Parse the rest of the reply; expected to be like " */ i = 0; - if (CTYPE(isdigit, (int)buff[0])) { - for (p = buff; *p && CTYPE(isdigit, (int)*p); p++) + if (CTYPE(isdigit, buff[0])) { + for (p = buff; *p && CTYPE(isdigit, *p); p++) continue; if (*p) { save = *p; @@ -406,12 +395,11 @@ *p = save; } } - if (replyp) { - *replyp = buff ; - } else { + if (replyp) + *replyp = buff; + else free(buff); - } - + return i; } @@ -426,7 +414,7 @@ args[0] = msgid; args[1] = NULL; - return ICCcommand(SC_CANCEL, args, (char **)NULL); + return ICCcommand(SC_CANCEL, args, NULL); } @@ -440,7 +428,7 @@ args[0] = why; args[1] = NULL; - return ICCcommand(SC_GO, args, (char **)NULL); + return ICCcommand(SC_GO, args, NULL); } @@ -454,7 +442,7 @@ args[0] = why; args[1] = NULL; - return ICCcommand(SC_PAUSE, args, (char **)NULL); + return ICCcommand(SC_PAUSE, args, NULL); } @@ -468,5 +456,5 @@ args[0] = why; args[1] = NULL; - return ICCcommand(SC_RESERVE, args, (char **)NULL); + return ICCcommand(SC_RESERVE, args, NULL); } diff -ruN inn-2.4.1/lib/qio.c inn-2.4.2/lib/qio.c --- inn-2.4.1/lib/qio.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/qio.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: qio.c,v 1.8.2.1 2003/07/12 19:12:55 rra Exp $ +/* $Id: qio.c,v 1.8.2.3 2004/06/10 22:20:24 hkehoe Exp $ ** ** Quick I/O package. ** @@ -38,8 +38,11 @@ only use this value for regular files. */ if (fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { size = st.st_blksize; - if (size > (4 * QIO_BUFFERSIZE) || size < (QIO_BUFFERSIZE / 2)) + if (size > (4 * QIO_BUFFERSIZE) || size == 0) size = QIO_BUFFERSIZE; + else + while(size < QIO_BUFFERSIZE) + size += st.st_blksize; } #endif /* HAVE_ST_BLKSIZE */ @@ -131,6 +134,7 @@ size_t nleft; /* Loop until we get a result or fill the buffer. */ + qp->_flag = QIO_ok; while (1) { nleft = qp->_end - qp->_start; @@ -148,22 +152,25 @@ qp->_length = p - qp->_start; line = qp->_start; qp->_start = p + 1; - qp->_flag = QIO_ok; - return line; + return (qp->_flag == QIO_long) ? NULL : line; } - /* Not there. See if our buffer is full. */ + /* Not there. See if our buffer is full. If so, tag as having + seen too long of a line. This will cause us to keep reading + as normal until we finally see the end of a line and then + return NULL. */ if (nleft >= qp->_size) { qp->_flag = QIO_long; qp->_start = qp->_end; - return NULL; + nleft = 0; } /* We need to read more data. If there's read data in buffer, then move the unread data down to the beginning of the buffer first. */ if (qp->_start > qp->_buffer) { - memmove(qp->_buffer, qp->_start, nleft); + if (nleft > 0) + memmove(qp->_buffer, qp->_start, nleft); qp->_start = qp->_buffer; qp->_end = qp->_buffer + nleft; } @@ -175,7 +182,8 @@ nread = read(qp->_fd, qp->_end, qp->_size - nleft); } while (nread == -1 && errno == EINTR); if (nread <= 0) { - qp->_flag = (nread < 0) ? QIO_error : QIO_ok; + if (nread < 0) + qp->_flag = QIO_error; return NULL; } qp->_count += nread; diff -ruN inn-2.4.1/lib/uwildmat.c inn-2.4.2/lib/uwildmat.c --- inn-2.4.1/lib/uwildmat.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/uwildmat.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: uwildmat.c,v 1.2 2003/01/14 06:03:23 rra Exp $ +/* $Id: uwildmat.c,v 1.2.2.1 2004/05/17 07:25:28 rra Exp $ ** ** wildmat pattern matching with Unicode UTF-8 extensions. ** @@ -196,7 +196,7 @@ const unsigned char *q, *endclass; const unsigned char *p = start; bool ismeta; - int matched; + int matched, width; uint32_t c; for (; p <= end; p++) { @@ -240,11 +240,15 @@ function call overhead. */ ismeta = (*p == '[' || *p == '?' || *p == '\\'); while (*text) { + width = ISUTF8(*text) ? utf8_length(text, NULL) : 1; if (ismeta) { - matched = match_pattern(text++, p, end); + matched = match_pattern(text, p, end); + text += width; } else { - while (*text && *text != *p) - text++; + while (*text && *text != *p) { + text += width; + width = ISUTF8(*text) ? utf8_length(text, NULL) : 1; + } if (!*text) return ABORT; matched = match_pattern(++text, p + 1, end); diff -ruN inn-2.4.1/lib/vector.c inn-2.4.2/lib/vector.c --- inn-2.4.1/lib/vector.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/lib/vector.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: vector.c,v 1.5 2003/01/19 19:58:22 rra Exp $ +/* $Id: vector.c,v 1.5.2.1 2004/04/07 06:47:44 rra Exp $ ** ** Vector handling (counted lists of char *'s). ** @@ -66,7 +66,7 @@ size_t i; if (vector->count > size) { - for (i = vector->count - 1; i < size; i++) + for (i = size; i < vector->count; i++) free(vector->strings[i]); vector->count = size; } diff -ruN inn-2.4.1/nnrpd/Makefile inn-2.4.2/nnrpd/Makefile --- inn-2.4.1/nnrpd/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.55.2.1 2003/05/04 21:41:22 rra Exp $ +## $Id: Makefile,v 1.55.2.3 2004/07/15 02:16:13 rra Exp $ include ../Makefile.global @@ -22,6 +22,9 @@ warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_XPUB) nnrpd $D$(PATHBIN)/nnrpd + clean: rm -f *.o $(ALL) nnrpdp profiled rm -rf .libs @@ -36,20 +39,13 @@ ## Compilation rules. NNRPDLIBS = $(LIBHIST) $(LIBSTORAGE) $(LIBINN) $(EXTSTORAGELIBS) \ - $(PYTHONLIB) $(SSLLIB) $(LIBS) $(PERLLIB) + $(PERLLIB) $(PYTHONLIB) $(SSLLIB) $(LIBS) perl.o: perl.c ; $(CC) $(CFLAGS) $(PERLINC) -c perl.c python.o: python.c ; $(CC) $(CFLAGS) $(PYTHONINC) -c python.c nnrpd: $(OBJECTS) $(LIBHIST) $(LIBSTORAGE) $(LIBINN) $(LIBLD) $(LDFLAGS) -o $@ $(OBJECTS) $(NNRPDLIBS) - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/nnrpd: nnrpd ; $(LI_XPUB) $? $@ $(LIBINN): ; (cd ../lib ; $(MAKE)) $(LIBSTORAGE): ; (cd ../storage ; $(MAKE)) diff -ruN inn-2.4.1/nnrpd/commands.c inn-2.4.2/nnrpd/commands.c --- inn-2.4.1/nnrpd/commands.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/commands.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: commands.c,v 1.81 2003/03/04 11:21:47 alexk Exp $ +/* $Id: commands.c,v 1.81.2.1 2004/01/12 05:18:43 rra Exp $ ** ** Miscellaneous commands. */ @@ -19,7 +19,6 @@ } GROUPDATA; -extern int LLOGenable; extern const char *NNRPinstance; /* returns: diff -ruN inn-2.4.1/nnrpd/group.c inn-2.4.2/nnrpd/group.c --- inn-2.4.1/nnrpd/group.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/group.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: group.c,v 1.62 2003/02/10 03:28:25 rra Exp $ +/* $Id: group.c,v 1.62.2.1 2004/10/14 01:49:51 rra Exp $ ** ** Newsgroups and the active file. */ @@ -31,7 +31,10 @@ #endif /* DO_PYTHON */ if (!hookpresent && !PERMcanread) { - Reply("%s\r\n", NOACCESS); + if (PERMspecified) + Reply("%d Permission denied\r\n", NNTP_ACCESS_VAL); + else + Reply("%d Authentication required\r\n", NNTP_AUTH_NEEDED_VAL); return; } @@ -72,18 +75,17 @@ } #endif /* DO_PYTHON */ - /* If permission is denied, pretend group doesn't exist. */ if (!hookpresent) { if (PERMspecified) { grplist[0] = group; grplist[1] = NULL; if (!PERMmatch(PERMreadlist, grplist)) { - Reply("%s %s\r\n", NOSUCHGROUP, group); - free(group); - return; + Reply("%d Permission denied\r\n", NNTP_ACCESS_VAL); + free(group); + return; } } else { - Reply("%s %s\r\n", NOSUCHGROUP, group); + Reply("%d Authentication required\r\n", NNTP_AUTH_NEEDED_VAL); free(group); return; } diff -ruN inn-2.4.1/nnrpd/list.c inn-2.4.2/nnrpd/list.c --- inn-2.4.1/nnrpd/list.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/list.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: list.c,v 1.1 2003/03/04 11:21:47 alexk Exp $ +/* $Id: list.c,v 1.1.2.1 2004/10/01 04:57:36 rra Exp $ ** ** List commands. */ @@ -106,6 +106,8 @@ cmd_list_extensions(LISTINFO *lp) { Reply("%d %s.\r\n", NNTP_SLAVEOK_VAL, lp->Format); + if (PERMauthorized != true) + Printf("AUTHINFO USER\r\n"); Printf("LISTGROUP\r\n"); Printf(".\r\n"); } diff -ruN inn-2.4.1/nnrpd/nnrpd.c inn-2.4.2/nnrpd/nnrpd.c --- inn-2.4.1/nnrpd/nnrpd.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/nnrpd.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: nnrpd.c,v 1.171.2.2 2003/06/04 02:59:33 rra Exp $ +/* $Id: nnrpd.c,v 1.171.2.3 2004/01/12 05:18:43 rra Exp $ ** ** NNTP server for readers (NNRP) for InterNetNews. ** @@ -104,8 +104,6 @@ #ifdef DO_PYTHON bool PY_use_dynamic = false; #endif /* DO_PYTHON */ - -bool LLOGenable; static char CMDfetchhelp[] = "[MessageID|Number]"; diff -ruN inn-2.4.1/nnrpd/nnrpd.h inn-2.4.2/nnrpd/nnrpd.h --- inn-2.4.1/nnrpd/nnrpd.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/nnrpd.h Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: nnrpd.h,v 1.76 2003/02/10 03:28:25 rra Exp $ +/* $Id: nnrpd.h,v 1.76.2.1 2004/01/12 05:18:44 rra Exp $ ** ** Net News Reading Protocol server. */ @@ -211,6 +211,7 @@ EXTERN struct line NNTPline; EXTERN struct vector *OVextra; EXTERN int overhdr_xref; +EXTERN bool LLOGenable; extern const char *ARTpost(char *article, char *idbuff, bool ihave, bool *permanent); diff -ruN inn-2.4.1/nnrpd/perm.c inn-2.4.2/nnrpd/perm.c --- inn-2.4.1/nnrpd/perm.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/perm.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: perm.c,v 1.78.2.1 2003/05/31 19:48:27 rra Exp $ +/* $Id: perm.c,v 1.78.2.3 2004/03/06 05:33:14 rra Exp $ ** ** How to figure out where a user comes from, and what that user can do once ** we know who sie is. @@ -94,7 +94,6 @@ static char *ConfigBit; static int ConfigBitsize; -extern int LLOGenable; extern bool PerlLoaded; #define PERMlbrace 1 @@ -2027,7 +2026,8 @@ syslog(L_NOTICE, "%s auth_err %s", ClientHost, ln); } -static int HandleProgInput(int fd, char *buf, int buflen, LineFunc f) +static bool +HandleProgInput(int fd, char *buf, int buflen, LineFunc f) { char *nl; char *start; @@ -2037,11 +2037,11 @@ curpos = strlen(buf); if (curpos >= buflen-1) { /* data overflow (on one line!) */ - return(-1); + return false; } got = read(fd, buf+curpos, buflen-curpos-1); if (got <= 0) - return(got); + return false; buf[curpos+got] = '\0'; /* break what we got up into lines */ @@ -2059,7 +2059,7 @@ nl = start; start = buf; if (nl == start) { - return(0); + return true; } while (*nl) { @@ -2068,7 +2068,7 @@ *start = '\0'; - return(got); + return true; } static void GetProgInput(EXECSTUFF *prog) @@ -2076,6 +2076,7 @@ fd_set rfds, tfds; int maxfd; int got; + bool okay; struct timeval tmout; pid_t tmp; int status; @@ -2099,16 +2100,16 @@ tmout.tv_usec = 0; if (got > 0) { if (FD_ISSET(prog->rdfd, &tfds)) { - got = HandleProgInput(prog->rdfd, rdbuf, sizeof(rdbuf), HandleProgLine); - if (got <= 0) { + okay = HandleProgInput(prog->rdfd, rdbuf, sizeof(rdbuf), HandleProgLine); + if (!okay) { close(prog->rdfd); FD_CLR(prog->rdfd, &tfds); kill(prog->pid, SIGTERM); } } if (FD_ISSET(prog->errfd, &tfds)) { - got = HandleProgInput(prog->errfd, errbuf, sizeof(errbuf), HandleErrorLine); - if (got <= 0) { + okay = HandleProgInput(prog->errfd, errbuf, sizeof(errbuf), HandleErrorLine); + if (!okay) { close(prog->errfd); FD_CLR(prog->errfd, &tfds); kill(prog->pid, SIGTERM); diff -ruN inn-2.4.1/nnrpd/post.c inn-2.4.2/nnrpd/post.c --- inn-2.4.1/nnrpd/post.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/post.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Revision: 1.94 $ +/* $Revision: 1.94.2.4 $ ** ** Check article, send it to the local server. */ @@ -13,8 +13,6 @@ #define FLUSH_ERROR(F) (fflush((F)) == EOF || ferror((F))) #define HEADER_DELTA 20 -extern int LLOGenable; - static char *tmpPtr ; static char Error[SMBUF]; static char NGSEPS[] = NG_SEPARATOR; @@ -630,7 +628,10 @@ /* Write the headers, a blank line, then the article. */ for (hp = Table; hp < ARRAY_END(Table); hp++) if (hp->Value) { - fprintf(F, "%s: %s\n", hp->Name, hp->Value); + if (*hp->Value == ' ' || *hp->Value == '\t') + fprintf(F, "%s:%s\n", hp->Name, hp->Value); + else + fprintf(F, "%s: %s\n", hp->Name, hp->Value); if (FLUSH_ERROR(F)) { pclose(F); return CANTSEND; @@ -690,7 +691,15 @@ if ((p = strtok(groups, NGSEPS)) == NULL) return "Can't parse newsgroups line"; + /* Reject all articles with Approved headers unless the user is allowed to + add them, even to unmoderated or local groups. We want to reject them + to unmoderated groups in case there's a disagreement of opinion + between various sites as to the moderation status. */ approved = HDR(HDR__APPROVED) != NULL; + if (approved && !PERMaccessconf->allowapproved) { + snprintf(Error, sizeof(Error), + "You are not allowed to approve postings"); + } Error[0] = '\0'; FoundOne = false; @@ -731,12 +740,8 @@ #endif /* DO_PYTHON */ break; case NF_FLAG_MODERATED: - if (approved && !PERMaccessconf->allowapproved) { - snprintf(Error, sizeof(Error), - "You are not allowed to approve postings"); - } else if (!approved && modgroup != NULL && !*modgroup) { + if (!approved && modgroup != NULL && !*modgroup) *modgroup = xstrdup(p); - } break; case NF_FLAG_IGNORE: case NF_FLAG_NOLOCAL: @@ -760,7 +765,11 @@ MaxLength(hdr,hdr)); if (Error[0]) { tmpPtr = DDend(h); - free(tmpPtr) ; + free(tmpPtr); + if (modgroup != NULL && *modgroup != NULL) { + free(*modgroup); + *modgroup = NULL; + } return Error; } @@ -1086,6 +1095,9 @@ return MailArticle(modgroup, article); } + if (idbuff) + strlcpy(idbuff, HDR(HDR__MESSAGEID), SMBUF); + if (PERMaccessconf->spoolfirst) return Spoolit(article, Error); @@ -1211,8 +1223,6 @@ /* Send a quit and close down */ SendQuit(FromServer, ToServer); - if (idbuff) - strlcpy(idbuff, HDR(HDR__MESSAGEID), SMBUF); /* Tracking */ if (PERMaccessconf->readertrack) { diff -ruN inn-2.4.1/nnrpd/tls.c inn-2.4.2/nnrpd/tls.c --- inn-2.4.1/nnrpd/tls.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/tls.c Wed Dec 22 04:21:19 2004 @@ -67,6 +67,7 @@ /* outside the ifdef so `make depend` works even ifndef HAVE_SSL */ #include "tls.h" +#include "sasl_config.h" #ifdef HAVE_SSL diff -ruN inn-2.4.1/nnrpd/tls.h inn-2.4.2/nnrpd/tls.h --- inn-2.4.1/nnrpd/tls.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/nnrpd/tls.h Wed Dec 22 04:21:19 2004 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff -ruN inn-2.4.1/samples/actsync.cfg inn-2.4.2/samples/actsync.cfg --- inn-2.4.1/samples/actsync.cfg Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/actsync.cfg Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ -# $Id: actsync.cfg,v 1.5 2001/01/15 13:28:24 rra Exp $ +# $Id: actsync.cfg,v 1.5.2.1 2004/12/22 04:20:47 rra Exp $ host=ftp.isc.org -ftppath=/pub/usenet/CONFIG/active.Z +ftppath=/pub/usenet/CONFIG/active.gz flags=-v 0 -p 80 ignore_file=actsync.ign diff -ruN inn-2.4.1/samples/actsync.ign inn-2.4.2/samples/actsync.ign --- inn-2.4.1/samples/actsync.ign Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/actsync.ign Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -# $Id: actsync.ign,v 1.1.1.1 1997/08/04 04:03:48 gpalmer Exp $ +# $Id: actsync.ign,v 1.1.1.1.8.1 2004/12/22 04:20:14 rra Exp $ # # Sample actsync ignore_file. @@ -9,7 +9,7 @@ # sync on the 8 majors # c comp.* -c gnu.* +c humanities.* c misc.* c news.* c rec.* diff -ruN inn-2.4.1/samples/control.ctl inn-2.4.2/samples/control.ctl --- inn-2.4.1/samples/control.ctl Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/control.ctl Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ -## rone's unified control.ctl -## $Id: control.ctl,v 1.57.2.4 2004/01/07 03:52:13 rra Exp $ -## ## control.ctl - Access control for control messages. +## Last modified: 2004-11-28 +## +## Based on rone's unified control.ctl file. ## ## Please copy usenet-config@isc.org on any updates to this file so that ## it can be updated in the INN CVS repository and on ftp.isc.org. For @@ -13,7 +13,9 @@ ## two files will be kept in sync. Please refer to the latest version of ## this file for the most up-to-date hierarchy control information and ## please use the latest version if you intend to carry all hierarchies. -## You may wish to change the policy for alt.*. +## +## You may wish to review and change the policy for alt.*, free.*, and +## it-alt.* below before using this file on your server. ## ## Format: ## ::: @@ -122,6 +124,24 @@ newgroup:*:*:mail rmgroup:*:*:mail +## A.BSU (*DEFUNCT* -- Ball State University, USA) +# This hierarchy is defunct. Please remove it. +newgroup:*:a.bsu.*:mail +rmgroup:*:a.bsu.*:doit + +## ABG (Augsburg, Germany) +# Contact: abgadmin@abg.news-kiste.de +# URL: http://abg.news-kiste.de/ +# Admin group: abg.admin +# Key URL: http://abg.news-kiste.de/abgadmin.asc +# Key fingerprint = 17 04 9C 48 D7 D7 9C B9 56 9E 5F 64 3D F0 A2 4B +# *PGP* See comment at top of file. +newgroup:*:abg.*:drop +rmgroup:*:abg.*:drop +checkgroups:abgadmin@abg.news-kiste.de:abg.*:verify-abgadmin@abg.news-kiste.de +newgroup:abgadmin@abg.news-kiste.de:abg.*:verify-abgadmin@abg.news-kiste.de +rmgroup:abgadmin@abg.news-kiste.de:abg.*:verify-abgadmin@abg.news-kiste.de + ## ACS & OSU (*LOCAL* -- Ohio State University, USA) # Contact: Albert J. School # Contact: Harpal Chohan @@ -644,6 +664,7 @@ rmgroup:moderator@dana.de:de.alt.*:verify-de.admin.news.announce ## DFW (Dallas/Fort Worth, Texas, USA) +# URL: http://www.cirr.com/dfw/ checkgroups:eric@*cirr.com:dfw.*:doit newgroup:eric@*cirr.com:dfw.*:doit rmgroup:eric@*cirr.com:dfw.*:doit @@ -717,15 +738,15 @@ rmgroup:admin@england.news-admin.org:england.*:verify-england-usenet ## ES (Spain) -# Contact: david.martinez@rediris.es -# URL: http://www.rediris.es/netnews/infonews/config.es.html -# Admin group: es.news +# Contact: moderador@corus-es.org +# URL: http://www.corus-es.org/docs/es_newsadmins_faq.txt +# Admin group: es.news.anuncios # *PGP* See comment at top of file. newgroup:*:es.*:drop rmgroup:*:es.*:drop -checkgroups:moderador@news.rediris.es:es.*:verify-es.news -newgroup:moderador@news.rediris.es:es.*:verify-es.news -rmgroup:moderador@news.rediris.es:es.*:verify-es.news +checkgroups:moderador@corus-es.org:es.*:verify-es.news +newgroup:moderador@corus-es.org:es.*:verify-es.news +rmgroup:moderador@corus-es.org:es.*:verify-es.news ## ESP (Spanish-language newsgroups) # Contact: @@ -1078,17 +1099,19 @@ rmgroup:gcn@news.nic.it:it.*:verify-gcn@news.nic.it ## IT-ALT (Alternate Italian) -# Contact: it-alt@x-privat.org -# URL: http://www.x-privat.org/it-alt/ -# Admin group: it-alt.config -# Key URL: http://www.x-privat.org/it-alt/pgp.txt -# Key fingerprint = 01 AE 93 F7 CE 3B C1 F4 E0 35 8E 23 C4 04 A2 30 -# *PGP* See comment at top of file. +# +# There is no one official control message issuer for the it-alt.* +# hierarchy, so this file doesn't choose any particular one. Several +# different people issue control messages for this hierarchy, which may +# or may not agree, and sites carrying this hierarchy are encouraged to +# pick one and add it below. +# +# Newgroup and removal requests are to be posted to it-alt.config. A list +# of people issuing PGP/GPG signed control messages is available in a +# periodic posting to news.admin.hierarchies and it-alt.config. +# newgroup:*:it-alt.*:drop rmgroup:*:it-alt.*:drop -checkgroups:it-alt@x-privat.org:it-alt.*:verify-it-alt@x-privat.org -newgroup:it-alt@x-privat.org:it-alt.*:verify-it-alt@x-privat.org -rmgroup:it-alt@x-privat.org:it-alt.*:verify-it-alt@x-privat.org ## ITALIA (Italy) # Contact: news@news.cineca.it @@ -1628,6 +1651,17 @@ newgroup:pgh-config@psc.edu:pgh.*:verify-pgh.config rmgroup:pgh-config@psc.edu:pgh.*:verify-pgh.config +## PGSQL (Gated PostgreSQL mailing lists) +# Contact: news@postgresql.org +# URL: http://news.hub.org/gpg_public_keys.html +# Key URL: http://news.hub.org/gpg_public_keys.html +# *PGP* See comment at top of file. +newgroup:*:pgsql.*:drop +rmgroup:*:pgsql.*:drop +checkgroups:news@postgresql.org:pgsql.*:verify-news@postgresql.org +newgroup:news@postgresql.org:pgsql.*:verify-news@postgresql.org +rmgroup:news@postgresql.org:pgsql.*:verify-news@postgresql.org + ## PHL (Philadelphia, Pennsylvania, USA) checkgroups:news@vfl.paramax.com:phl.*:doit newgroup:news@vfl.paramax.com:phl.*:doit @@ -2213,7 +2247,7 @@ ## X-PRIVAT (Italian) # Contact: dmitry@x-privat.org # URL: http://www.x-privat.org/ -# Admin group: x-privat.newsgroup +# Admin group: x-privat.info # Key URL: http://www.x-privat.org/dmitry.asc # Key fingerprint = 9B 0A 7E 68 27 80 C7 96 47 6B 03 90 51 05 68 43 # *PGP* See comment at top of file. diff -ruN inn-2.4.1/samples/innreport.conf.in inn-2.4.2/samples/innreport.conf.in --- inn-2.4.1/samples/innreport.conf.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/innreport.conf.in Wed Dec 22 04:21:19 2004 @@ -27,7 +27,7 @@ cycle none; # use a number or 'none'. separator "."; # use a valid filename character. title "Daily Usenet report"; - # title "Daily Usenet report for news.y.z"; + # title "Daily Usenet report for news.y.z"; # footer "Local contact: x@y.z"; # html_body "BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\""; # html_header_file "header.html"; # ${html_dir}/${html_header_file} diff -ruN inn-2.4.1/samples/ovdb.conf inn-2.4.2/samples/ovdb.conf --- inn-2.4.1/samples/ovdb.conf Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/ovdb.conf Wed Dec 22 04:21:19 2004 @@ -73,7 +73,11 @@ # if set to 1, expireover will not compact any newsgroups; and if set to # a value greater than one, expireover will only compact groups that # have less than that number of articles. Default is 1000. -#nocompact 1000 +# +# Experience has shown that compacting has minimal effect (other than +# making expireover take longer) so the default is now 1. This parameter +# will probably be removed in the future. +#nocompact 1 # Normally, each nnrpd process directly accesses the BerkeleyDB environment. # The process of attaching to the database (and detaching when finished) is diff -ruN inn-2.4.1/samples/sasl.conf.in inn-2.4.2/samples/sasl.conf.in --- inn-2.4.1/samples/sasl.conf.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/sasl.conf.in Wed Dec 22 04:21:19 2004 @@ -1,3 +1,3 @@ tls_ca_path: @prefix@/lib tls_cert_file: @prefix@/lib/cert.pem -tls_key_file: @prefix@/lib/cert.pem +tls_key_file: @prefix@/lib/key.pem diff -ruN inn-2.4.1/samples/storage.conf inn-2.4.2/samples/storage.conf --- inn-2.4.1/samples/storage.conf Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/samples/storage.conf Wed Dec 22 04:21:19 2004 @@ -1,62 +1,45 @@ -# This file is used to determine which storage method articles are sent to -# to be stored and which storage class they are stored as. +## $Id: storage.conf,v 1.1.6.1 2003/12/27 04:18:33 rra Exp $ +## +## Rules for where INN should store incoming articles. +## +## This file is used to determine which storage method articles are sent +## to to be stored and which storage class they are stored as. Each +## method is described as follows: +## +## method { +## newsgroups: +## class: +## size: [,] +## expires: [,] +## options: +## } +## +## Only newsgroups, class, and (for CNFS, to specify the metacycbuff) +## options are required; the other keys are optional. If any CNFS +## methods are configured, you will also need to set up cycbuff.conf. -# -# Sample for the ``timehash'' storage method: -# -# method { -# newsgroups: -# class: -# size: [,] -# expires: [,] -# options: -# } -# -#method timehash { -# newsgroups: * -# class: 0 -#} -#method timehash { -# newsgroups: alt.binaries.* -# class: 1 -# size: 2,32000 -#} -#method timehash { -# newsgroups: alt.* -# class: 2 -# size: 1 -#} +# By default, store everything in tradspool. +method tradspool { + newsgroups: * + class: 0 +} -# -# Sample for the ``cnfs'' storage method: -# -# methodname:wildmat:storage class #:minsize:maxsize:metacycbuffname -# method cnfs { -# newsgroups: -# class: -# size: [,] -# expires: [,] -# options: -# } -# -#method cnfs { -# newsgroups: * -# class: 1 -# size: 0,3999 -# expires: 4d1s -# options: FAQS -#} +## Here are some samples for a CNFS configuration. This assumes that you +## have two metacycbuffs configured, one for text newsgroups and one for +## binaries. Cancel messages, which tend to be very high-volume, are +## stored in the binary metacycbuff as well. This assumes storeonxref is +## set to true in inn.conf. + +# Pick off the binary newsgroups first. #method cnfs { -# newsgroups: * -# class: 2 -# size: 0,3999 -# expires: 0s,4d -# options: SMALLAREA +# newsgroups: *.bina*,control.cancel +# class: 1 +# options: BINARY #} + +# Put the remaining (text) groups in the other cycbuff. #method cnfs { -# newsgroups: * -# class: 3 -# size: 4000,1000000 -# options: BIGAREA +# newsgroups: * +# class: 2 +# options: TEXT #} - diff -ruN inn-2.4.1/scripts/Makefile inn-2.4.2/scripts/Makefile --- inn-2.4.1/scripts/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/scripts/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.13 2003/04/20 19:04:14 vinocur Exp $ +## $Id: Makefile,v 1.13.2.1 2004/05/18 01:18:56 rra Exp $ ## ## Files that can be handled by fixscript (and need to be so handled) need ## a rule to build them from the .in version, and then all files need an @@ -35,6 +35,19 @@ all: $(ALL) $(EXTRA) +install: all + for F in innmail innreport simpleftp ; do \ + $(CP_XPUB) $$F $D$(PATHBIN)/$$F ; \ + done + for F in inncheck innstat innupgrade innwatch news.daily rc.news \ + scanlogs tally.control writelog ; do \ + $(CP_XPRI) $$F $D$(PATHBIN)/$$F ; \ + done + for F in innreport_inn.pm innshellvars innshellvars.pl \ + innshellvars.tcl ; do \ + $(CP_RPUB) $$F $D$(PATHLIB)/$$F ; \ + done + clean: rm -f $(ALL) @@ -64,25 +77,3 @@ simpleftp: simpleftp.in $(FIX) ; $(FIX) simpleftp.in tally.control: tally.control.in $(FIX) ; $(FIX) tally.control.in writelog: writelog.in $(FIX) ; $(FIX) writelog.in - - -## Installation rules. Installation commands set in Makefile.global. - -install: $(INSTALLED) - -$(D)$(PATHBIN)/inncheck: inncheck ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/innmail: innmail ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/innreport: innreport ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/innstat: innstat ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/innupgrade: innupgrade ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/innwatch: innwatch ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/news.daily: news.daily ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/rc.news: rc.news ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/scanlogs: scanlogs ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/simpleftp: simpleftp ; $(CP_XPUB) $? $@ -$(D)$(PATHBIN)/tally.control: tally.control ; $(CP_XPRI) $? $@ -$(D)$(PATHBIN)/writelog: writelog ; $(CP_XPRI) $? $@ -$(D)$(PATHLIB)/innreport_inn.pm: innreport_inn.pm ; $(CP_RPRI) $? $@ -$(D)$(PATHLIB)/innshellvars: innshellvars ; $(CP_RPUB) $? $@ -$(D)$(PATHLIB)/innshellvars.pl: innshellvars.pl ; $(CP_RPUB) $? $@ -$(D)$(PATHLIB)/innshellvars.tcl: innshellvars.tcl ; $(CP_RPUB) $? $@ diff -ruN inn-2.4.1/scripts/innreport_inn.pm inn-2.4.2/scripts/innreport_inn.pm --- inn-2.4.1/scripts/innreport_inn.pm Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/scripts/innreport_inn.pm Wed Dec 22 04:21:19 2004 @@ -1196,7 +1196,7 @@ } ######## ## nnrpd - if ($prog eq "nnrpd") + if ($prog =~ /^nnrpd(?:-ssl)?$/) { # Fix a small bug of nnrpd (inn 1.4*) $left =~ s/^ /\? /o; @@ -1676,7 +1676,7 @@ if ($left =~ m|^Class\ (\S+)\ for\ groups\ matching\ \S+ (\ article\ size\ min/max:\ \d+/\d+)? \ Buffer\ (\S+), - \ len:\ (\d+)\s+Mbytes, + \ len:\ ([\d.]+)\s+Mbytes, \ used:\ ([\d.]+)\ Mbytes\ \(\s*[\d.]+%\) \s+(\d+)\ cycles\s* $|ox) { diff -ruN inn-2.4.1/scripts/innstat.in inn-2.4.2/scripts/innstat.in --- inn-2.4.1/scripts/innstat.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/scripts/innstat.in Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ #! /bin/sh # fixscript will replace this line with code to load innshellvars -## $Revision: 1.3 $ +## $Revision: 1.3.2.1 $ ## Display status of INN. ## Written by Landon Curt Noll . @@ -36,7 +36,7 @@ ## Show size of batch files. echo '' echo 'Batch file sizes:' -( cd ${BATCH}; ls -Cs | tail +2 ) +( cd ${BATCH}; ls -Cs | sed 1d ) ## Show size of log files. echo '' diff -ruN inn-2.4.1/scripts/rc.news.in inn-2.4.2/scripts/rc.news.in --- inn-2.4.1/scripts/rc.news.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/scripts/rc.news.in Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ #! /bin/sh # fixscript will replace this line with code to load innshellvars -## $Revision: 1.10.2.1 $ +## $Revision: 1.10.2.3 $ ## News boot script. Runs as "news" user. Requires inndstart be ## setuid root. Run from rc.whatever as: ## su news -c /path/to/rc.news >/dev/console @@ -43,6 +43,8 @@ pid=`cat ${SERVERPID} 2>/dev/null` if [ "$pid" != "" ]; then waitforpid $pid + else + printf "\n" fi # Turn off ovdb support procs, and close the DB environment @@ -156,12 +158,12 @@ # Gee, looks like lisp, doesn't it? ${DOINNWATCH} && { echo "Scheduled start of ${INNWATCH}." - ( sleep 60 ; ${INNWATCH} ) & + ( sleep 60 ; ${INNWATCH} ) > /dev/null & } ${DOCNFSSTAT} && { echo "Scheduled start of cnfsstat." - ( sleep 60 ; ${PATHBIN}/cnfsstat -s -l -P ) & + ( sleep 60 ; ${PATHBIN}/cnfsstat -s -l -P ) > /dev/null & } RMFILE=${MOST_LOGS}/expire.rm diff -ruN inn-2.4.1/site/Makefile inn-2.4.2/site/Makefile --- inn-2.4.1/site/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/site/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Revision: 1.74.2.1 $ +## $Revision: 1.74.2.3 $ include ../Makefile.global top = .. @@ -22,6 +22,7 @@ PATH_PYTHON_INN_MODULE = ${PATHFILTER}/INN.py PATH_NNRPAUTH = ${PATHFILTER}/nnrpd_auth.pl PATH_NNRPYAUTH = ${PATHFILTER}/nnrpd_auth.py +PATH_NNRPACCESS = ${PATHFILTER}/nnrpd_access.pl PATH_CONFIG = ${PATHETC}/inn.conf PATH_CONTROLCTL = ${PATHETC}/control.ctl @@ -49,6 +50,7 @@ PATH_ACTIVE = ${PATHDB}/active PATH_ACTIVE_TIMES = ${PATHDB}/active.times +PATH_HISTORY = ${PATHDB}/history PATH_NEWSGROUPS = ${PATHDB}/newsgroups ## Scripts from above, plus site-specific config files. @@ -83,11 +85,12 @@ $D$(PATH_TCL_STARTUP) $D$(PATH_TCL_FILTER) \ $D$(PATH_NNRPAUTH) $D$(PATHETC)/news2mail.cf $D$(PATH_READERSCONF) \ $D$(PATH_RADIUS_CONF) $D$(PATH_NNRPYAUTH) $D$(PATH_OVDB_CONF) \ - $D$(PATH_SASL_CONF) $D$(PATH_SUBSCRIPTIONS) + $D$(PATH_SASL_CONF) $D$(PATH_SUBSCRIPTIONS) $D$(PATH_NNRPACCESS) ALL_INSTALLED = $(MOST_INSTALLED) $(REST_INSTALLED) -SPECIAL = $D$(PATH_ACTIVE) $D$(PATH_ACTIVE_TIMES) $D$(PATH_NEWSGROUPS) +SPECIAL = $D$(PATH_ACTIVE) $D$(PATH_ACTIVE_TIMES) \ + $D$(PATH_NEWSGROUPS) $D$(PATH_HISTORY) ## Get new versions of everything from samples directory. all: $(P) $(ALL) config @@ -132,6 +135,9 @@ chown $(NEWSUSER) $@ chgrp $(NEWSGROUP) $@ chmod $(FILEMODE) $@ +$D$(PATH_HISTORY): + touch $@ + $(PATHBIN)/makedbz -i -o ## Remove files that are unchanged from the release version. clean: diff -ruN inn-2.4.1/storage/Make.methods inn-2.4.2/storage/Make.methods --- inn-2.4.1/storage/Make.methods Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/Make.methods Wed Dec 22 04:21:19 2004 @@ -7,7 +7,6 @@ tradspool/tradspool.c trash/trash.c EXTRA_SOURCES = tradindexed/tdx-util.c PROGRAMS = tradindexed/tdx-util -INSTALLED = $(D)$(PATHBIN)/tdx-util ## Included from buffindexed/ovmethod.mk @@ -15,7 +14,7 @@ # This rule requires a compiler that supports -o with -c. Since it's normally # used by developers, that should be acceptable. buffindexed/buffindexed_d.o: buffindexed/buffindexed.c - $(CC) $(CFLAGS) -DDEBUG -c -o $@ buffindexed/buffindexed.c + $(CC) $(CFLAGS) -DBUFF_DEBUG -c -o $@ buffindexed/buffindexed.c buffindexed/debug: buffindexed/buffindexed_d.o libstorage.$(EXTLIB) $(LIBHIST) $(LIBLD) $(LDFLAGS) -o $@ buffindexed/buffindexed_d.o \ @@ -30,6 +29,3 @@ tradindexed/tdx-util: tradindexed/tdx-util.o libstorage.$(EXTLIB) $(LIBHIST) $(LIBLD) $(LDFLAGS) -o $@ tradindexed/tdx-util.o \ $(LIBSTORAGE) $(LIBHIST) $(LIBINN) $(EXTSTORAGELIBS) $(LIBS) - -$(D)$(PATHBIN)/tdx-util: tradindexed/tdx-util - $(LI_XPRI) $? $@ diff -ruN inn-2.4.1/storage/Makefile inn-2.4.2/storage/Makefile --- inn-2.4.1/storage/Makefile Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/Makefile Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -## $Id: Makefile,v 1.68.2.1 2003/05/04 21:41:22 rra Exp $ +## $Id: Makefile,v 1.68.2.2 2004/05/18 01:18:56 rra Exp $ include ../Makefile.global @@ -21,6 +21,12 @@ warnings: $(MAKE) COPT='$(WARNINGS)' all +install: all + $(LI_XPUB) libstorage.$(EXTLIB) $D$(PATHLIB)/libstorage.$(EXTLIB) + for F in $(PROGRAMS) ; do \ + $(LI_XPRI) $$F $D$(PATHBIN)/`basename $$F` ; \ + done + library: libstorage.$(EXTLIB) programs: $(PROGRAMS) @@ -82,14 +88,6 @@ mv libstorage.a libstorage$(PROFSUFFIX).a $(RANLIB) libstorage$(PROFSUFFIX).a rm -f $(OBJECTS) - - -## Low-level install actions. - -install: $(D)$(PATHLIB)/libstorage.$(EXTLIB) $(INSTALLED) - -$(D)$(PATHLIB)/libstorage.$(EXTLIB): libstorage.$(EXTLIB) - $(LI_XPUB) libstorage.$(EXTLIB) $@ ## Dependencies. Default list, below, is probably good enough. diff -ruN inn-2.4.1/storage/buffindexed/buffindexed.c inn-2.4.2/storage/buffindexed/buffindexed.c --- inn-2.4.1/storage/buffindexed/buffindexed.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/buffindexed/buffindexed.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: buffindexed.c,v 1.76.2.1 2003/05/31 19:48:28 rra Exp $ +/* $Id: buffindexed.c,v 1.76.2.2 2004/05/20 22:23:28 rra Exp $ ** ** Overview buffer and index method. */ @@ -2151,7 +2151,7 @@ ovbufftab = NULL; } -#ifdef DEBUG +#ifdef BUFF_DEBUG static int countgdb(void) { int i, count = 0; GROUPDATABLOCK *gdb; @@ -2272,4 +2272,4 @@ } } } -#endif /* DEBUG */ +#endif /* BUFF_DEBUG */ diff -ruN inn-2.4.1/storage/buffindexed/ovmethod.mk inn-2.4.2/storage/buffindexed/ovmethod.mk --- inn-2.4.1/storage/buffindexed/ovmethod.mk Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/buffindexed/ovmethod.mk Wed Dec 22 04:21:19 2004 @@ -1,7 +1,7 @@ # This rule requires a compiler that supports -o with -c. Since it's normally # used by developers, that should be acceptable. buffindexed/buffindexed_d.o: buffindexed/buffindexed.c - $(CC) $(CFLAGS) -DDEBUG -c -o $@ buffindexed/buffindexed.c + $(CC) $(CFLAGS) -DBUFF_DEBUG -c -o $@ buffindexed/buffindexed.c buffindexed/debug: buffindexed/buffindexed_d.o libstorage.$(EXTLIB) $(LIBHIST) $(LIBLD) $(LDFLAGS) -o $@ buffindexed/buffindexed_d.o \ diff -ruN inn-2.4.1/storage/buildconfig.in inn-2.4.2/storage/buildconfig.in --- inn-2.4.1/storage/buildconfig.in Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/buildconfig.in Wed Dec 22 04:21:19 2004 @@ -1,6 +1,6 @@ #! /usr/bin/perl -## $Id: buildconfig.in,v 1.17 2002/12/26 05:25:58 rra Exp $ +## $Id: buildconfig.in,v 1.17.2.1 2004/05/18 01:18:56 rra Exp $ ## ## Generate linkage code and makefiles for storage and overview methods. ## @@ -220,12 +220,6 @@ print MAKE makefile_var ('METHOD_SOURCES', @$sources); print MAKE makefile_var ('EXTRA_SOURCES', @$extra); print MAKE makefile_var ('PROGRAMS', @$programs); - my @installed = map { - my $program = $_; - $program =~ s%.*/%%; - '$(D)$(PATHBIN)/' . $program - } @$programs; - print MAKE makefile_var ('INSTALLED', @installed); for (@$makefiles) { print MAKE "\n\n## Included from $_\n\n"; open (FRAG, $_) or die "Can't open $_: $!\n"; diff -ruN inn-2.4.1/storage/cnfs/cnfs.c inn-2.4.2/storage/cnfs/cnfs.c --- inn-2.4.1/storage/cnfs/cnfs.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/cnfs/cnfs.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: cnfs.c,v 1.111.2.5 2003/07/12 21:50:29 vinocur Exp $ +/* $Id: cnfs.c,v 1.111.2.7 2004/12/20 03:33:57 rra Exp $ ** ** Cyclic News File System. */ @@ -375,8 +375,9 @@ len = strtoul(l, NULL, 10) * (off_t)1024; /* This value in KB in decimal */ if (S_ISREG(sb.st_mode) && len != sb.st_size) { if (sizeof(CYCBUFFEXTERN) > (size_t) sb.st_size) { - syslog(L_NOTICE, "%s: length must be at least '%u' for '%s' cycbuff(%ld bytes)", - LocalLogName, sizeof(CYCBUFFEXTERN), cycbuff->name, (long)sb.st_size); + syslog(L_NOTICE, "%s: length must be at least '%lu' for '%s' cycbuff(%lu bytes)", + LocalLogName, (unsigned long) sizeof(CYCBUFFEXTERN), cycbuff->name, + (unsigned long) sb.st_size); free(cycbuff); return false; } @@ -1123,8 +1124,6 @@ cycbuff->currentbuff = false; CNFSflushhead(cycbuff); /* Flush, just for giggles */ if (!SMpreopen) CNFSshutdowncycbuff(cycbuff); - syslog(L_NOTICE, "%s: metacycbuff %s cycbuff is moved to %s remain calm", - LocalLogName, metacycbuff->name, cycbuff->name); metacycbuff->memb_next = (metacycbuff->memb_next + 1) % metacycbuff->count; cycbuff = metacycbuff->members[metacycbuff->memb_next]; if (!SMpreopen && !CNFSinit_disks(cycbuff)) { @@ -1133,6 +1132,8 @@ token.type = TOKEN_EMPTY; return token; } + syslog(L_NOTICE, "%s: metacycbuff %s cycbuff is moved to %s remain calm", + LocalLogName, metacycbuff->name, cycbuff->name); cycbuff->currentbuff = true; cycbuff->needflush = true; CNFSflushhead(cycbuff); /* Flush, just for giggles */ diff -ruN inn-2.4.1/storage/expire.c inn-2.4.2/storage/expire.c --- inn-2.4.1/storage/expire.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/expire.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: expire.c,v 1.16 2003/03/28 01:52:35 rra Exp $ +/* $Id: expire.c,v 1.16.2.1 2004/05/17 06:23:42 rra Exp $ ** ** Code for overview-driven expiration. ** @@ -535,7 +535,8 @@ EXPunlinkfile = NULL; } if (!SMcancel(token) && SMerrno != SMERR_NOENT && SMerrno != SMERR_UNINIT) - fprintf(stderr, "Can't unlink %s\n", TokenToText(token)); + fprintf(stderr, "Can't unlink %s: %s\n", TokenToText(token), + SMerrorstr); } /* diff -ruN inn-2.4.1/storage/ovdb/ovdb-private.h inn-2.4.2/storage/ovdb/ovdb-private.h --- inn-2.4.1/storage/ovdb/ovdb-private.h Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/ovdb/ovdb-private.h Wed Dec 22 04:21:19 2004 @@ -188,8 +188,7 @@ #define TRYAGAIN EAGAIN -#else -/* version 3 */ +#elif DB_VERSION_MAJOR == 3 #define TXN_START(label, tid) \ label: { \ @@ -209,6 +208,26 @@ #define TRYAGAIN DB_LOCK_DEADLOCK -#endif /* DB_VERSION_MAJOR == 2 */ +#else /* DB_VERSION_MAJOR == 4 */ + +#define TXN_START(label, tid) \ +label: { \ + int txn_ret; \ + txn_ret = OVDBenv->txn_begin(OVDBenv, NULL, &tid, 0); \ + if (txn_ret != 0) { \ + syslog(L_ERROR, "OVDB: " #label " txn_begin: %s", db_strerror(ret)); \ + tid = NULL; \ + } \ +} + +#define TXN_RETRY(label, tid) \ +{ (tid)->abort(tid); goto label; } + +#define TXN_ABORT(label, tid) (tid)->abort(tid) +#define TXN_COMMIT(label, tid) (tid)->commit(tid, 0) + +#define TRYAGAIN DB_LOCK_DEADLOCK + +#endif /* DB_VERSION_MAJOR == 4 */ #endif /* USE_BERKELEY_DB */ diff -ruN inn-2.4.1/storage/ovdb/ovdb.c inn-2.4.2/storage/ovdb/ovdb.c --- inn-2.4.1/storage/ovdb/ovdb.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/ovdb/ovdb.c Wed Dec 22 04:21:19 2004 @@ -1,8 +1,12 @@ /* * ovdb.c - * ovdb 2.00 beta4 - * Overview storage using BerkeleyDB 2.x/3.x + * ovdb 2.00 + * Overview storage using BerkeleyDB 2.x/3.x/4.x * + * 2004-02-17 : Need to track search cursors, since it's possible that + * ovdb_closesearch does not get called. We now close + * any cursors still open in ovdb_close, or they'd be in + * the database indefinitely causing deadlocks. * 2002-08-13 : Change BOOL to bool, remove portability to < 2.4. * 2002-08-11 : Cleaned up use of sprintf and fixed a bunch of warnings. * 2002-02-28 : Update getartinfo for the overview API change in 2.4. This @@ -145,6 +149,7 @@ #else /* USE_BERKELEY_DB */ #define EXPIREGROUP_TXN_SIZE 100 +#define DELETE_TXN_SIZE 500 struct ovdb_conf ovdb_conf; DB_ENV *OVDBenv = NULL; @@ -196,27 +201,19 @@ static int clientfd = -1; -/* read client send and recieve functions. If there is - connection trouble, we just bail out. */ +/* read client send and recieve functions. */ -static int csend(void *data, int n) +static int +csend(void *data, int n) { - int r, p = 0; + ssize_t status; - if(n == 0) + if (n == 0) return 0; - - while(p < n) { - r = write(clientfd, (char *)data + p, n - p); - if(r <= 0) { - if(r < 0 && errno == EINTR) - continue; - syslog(LOG_ERR, "OVDB: rc: cant write: %m"); - exit(1); - } - p+= r; - } - return p; + status = xwrite(clientfd, data, n); + if (status < 0) + syswarn("OVDB: rc: cant write"); + return status; } static int crecv(void *data, int n) @@ -232,6 +229,7 @@ if(r < 0 && errno == EINTR) continue; syslog(LOG_ERR, "OVDB: rc: cant read: %m"); + clientfd = -1; exit(1); } p+= r; @@ -329,14 +327,16 @@ return 0; } -static void client_disconnect(void) +static void +client_disconnect(void) { struct rs_cmd rs; - if(clientfd != -1) { - rs.what = CMD_QUIT; - csend(&rs, sizeof rs); + if (clientfd != -1) { + rs.what = CMD_QUIT; + csend(&rs, sizeof(rs)); } + clientfd = -1; } @@ -406,7 +406,7 @@ ovdb_conf.cachesize = 8000 * 1024; ovdb_conf.minkey = 0; ovdb_conf.maxlocks = 4000; - ovdb_conf.nocompact = 1000; + ovdb_conf.nocompact = 1; ovdb_conf.readserver = 0; ovdb_conf.numrsprocs = 5; ovdb_conf.maxrsconn = 0; @@ -557,7 +557,11 @@ /* Function that db will use to report errors */ +#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3) +static void OVDBerror(const DB_ENV *dbenv UNUSED, const char *db_errpfx UNUSED, const char *buffer) +#else static void OVDBerror(const char *db_errpfx UNUSED, char *buffer) +#endif { switch(ovdb_errmode) { case OVDB_ERR_SYSLOG: @@ -805,85 +809,189 @@ return ret; } - -static int delete_all_records(int whichdb, group_id_t gno, DB_TXN *tid) +/* Must be called outside of a transaction because it makes its own + transactions */ +static int delete_all_records(int whichdb, group_id_t gno) { DB *db; DBC *dbcursor; DBT key, val; struct datakey dk; + int count; int ret; + DB_TXN *tid; memset(&key, 0, sizeof key); memset(&val, 0, sizeof val); memset(&dk, 0, sizeof dk); - dk.groupnum = gno; - dk.artnum = 0; db = get_db_bynum(whichdb); if(db == NULL) return DB_NOTFOUND; - /* get a cursor to traverse the ov records and delete them */ - ret = db->cursor(db, tid, &dbcursor, 0); - if (ret != 0) { - if(ret != TRYAGAIN) + dk.groupnum = gno; + dk.artnum = 0; + + while(1) { + TXN_START(t_del, tid); + + /* get a cursor to traverse the ov records and delete them */ + ret = db->cursor(db, tid, &dbcursor, 0); + switch(ret) + { + case 0: + break; + case TRYAGAIN: + TXN_RETRY(t_del, tid); + default: + TXN_ABORT(t_del, tid); syslog(L_ERROR, "OVDB: delete_all_records: db->cursor: %s", db_strerror(ret)); - return ret; + return ret; + } + + key.data = &dk; + key.size = sizeof dk; + val.flags = DB_DBT_PARTIAL; + + for(count = 0; count < DELETE_TXN_SIZE; count++) { + ret = dbcursor->c_get(dbcursor, &key, &val, + count ? DB_NEXT : DB_SET_RANGE); + switch (ret) + { + case 0: + break; + case DB_NOTFOUND: + dbcursor->c_close(dbcursor); + TXN_COMMIT(t_del, tid); + return 0; + case TRYAGAIN: + dbcursor->c_close(dbcursor); + TXN_RETRY(t_del, tid); + default: + warn("OVDB: delete_all_records: DBcursor->c_get: %s", + db_strerror(ret)); + dbcursor->c_close(dbcursor); + TXN_ABORT(t_del, tid); + return ret; + } + + if(key.size == sizeof dk + && memcmp(key.data, &gno, sizeof gno)) { + break; + } + + ret = dbcursor->c_del(dbcursor, 0); + switch (ret) { + case 0: + case DB_KEYEMPTY: + break; + case TRYAGAIN: + dbcursor->c_close(dbcursor); + TXN_RETRY(t_del, tid); + default: + warn("OVDB: delete_all_records: DBcursor->c_del: %s", + db_strerror(ret)); + dbcursor->c_close(dbcursor); + TXN_ABORT(t_del, tid); + return ret; + } + } + dbcursor->c_close(dbcursor); + TXN_COMMIT(t_del, tid); + if(count < DELETE_TXN_SIZE) { + break; + } } + return 0; +} - key.data = &dk; - key.size = sizeof dk; - val.flags = DB_DBT_PARTIAL; +/* Make a temporary groupinfo key using the given db number and group ID. + Must be called in a transaction */ +static int +mk_temp_groupinfo(int whichdb, group_id_t gno, DB_TXN *tid) +{ + char keystr[1 + sizeof gno]; + DBT key, val; + struct groupinfo gi; + int ret; - ret = dbcursor->c_get(dbcursor, &key, &val, DB_SET_RANGE); - switch (ret) - { + memset(&key, 0, sizeof key); + memset(&val, 0, sizeof val); + memset(&gi, 0, sizeof gi); + + keystr[0] = 0; + memcpy(keystr + 1, &gno, sizeof gno); + + gi.current_db = whichdb; + gi.current_gid = gno; + gi.status = GROUPINFO_DELETED; + + key.data = keystr; + key.size = sizeof keystr; + val.data = &gi; + val.size = sizeof gi; + + ret = groupinfo->put(groupinfo, tid, &key, &val, 0); + switch (ret) { case 0: - break; - case DB_NOTFOUND: - return dbcursor->c_close(dbcursor); + break; default: - warn("OVDB: delete_all_records: DBcursor->c_get(1): %s", - db_strerror(ret)); + syslog(L_ERROR, "OVDB: mk_temp_groupinfo: groupinfo->put: %s", db_strerror(ret)); case TRYAGAIN: - dbcursor->c_close(dbcursor); return ret; } - while(key.size == sizeof dk - && !memcmp(key.data, &(dk.groupnum), sizeof(dk.groupnum))) { + return 0; +} - ret = dbcursor->c_del(dbcursor, 0); - switch (ret) { - case 0: - case DB_KEYEMPTY: - break; - default: - warn("OVDB: delete_all_records: DBcursor->c_del: %s", - db_strerror(ret)); - case TRYAGAIN: - dbcursor->c_close(dbcursor); - return ret; - } - ret = dbcursor->c_get(dbcursor, &key, &val, DB_NEXT); - switch (ret) { - case 0: - break; - case DB_NOTFOUND: - goto done; - default: - warn("OVDB: delete_all_records: DBcursor->c_get(2): %s", - db_strerror(ret)); - case TRYAGAIN: - dbcursor->c_close(dbcursor); - return ret; - } +/* Delete a temporary groupinfo key created by mk_temp_groupid, then + frees the group id. + Must NOT be called within a transaction. */ +static int +rm_temp_groupinfo(group_id_t gno) +{ + char keystr[1 + sizeof gno]; + DB_TXN *tid; + DBT key; + int ret; + + memset(&key, 0, sizeof key); + + keystr[0] = 0; + memcpy(keystr + 1, &gno, sizeof gno); + + key.data = keystr; + key.size = sizeof keystr; + + TXN_START(t_tmp, tid); + + ret = groupinfo->del(groupinfo, tid, &key, 0); + switch(ret) { + case 0: + case DB_NOTFOUND: + break; + case TRYAGAIN: + TXN_RETRY(t_tmp, tid); + default: + TXN_ABORT(t_tmp, tid); + syslog(L_ERROR, "OVDB: rm_temp_groupinfo: groupinfo->del: %s", db_strerror(ret)); + return ret; } - done: - return dbcursor->c_close(dbcursor); -} + switch(groupid_free(gno, tid)) { + case 0: + break; + case TRYAGAIN: + TXN_RETRY(t_tmp, tid); + default: + TXN_ABORT(t_tmp, tid); + syslog(L_ERROR, "OVDB: rm_temp_groupinfo: groupid_free: %s", db_strerror(ret)); + return ret; + } + + TXN_COMMIT(t_tmp, tid); + return 0; +} /* This function deletes overview records for deleted or forgotton groups */ /* argument: 0 = process deleted groups 1 = process forgotton groups */ @@ -894,6 +1002,7 @@ DB_TXN *tid; struct groupinfo gi; char **dellist = NULL; + size_t *dellistsz = NULL; int listlen, listcount; int i, ret; @@ -903,9 +1012,12 @@ free(dellist[i]); free(dellist); } + if (dellistsz != NULL) + free(dellistsz); listlen = 20; listcount = 0; dellist = xmalloc(listlen * sizeof(char *)); + dellistsz = xmalloc(listlen * sizeof(size_t)); memset(&key, 0, sizeof key); memset(&val, 0, sizeof val); @@ -919,6 +1031,7 @@ if (ret != 0) { syslog(L_ERROR, "OVDB: delete_old_stuff: groupinfo->cursor: %s", db_strerror(ret)); free(dellist); + free(dellistsz); return false; } @@ -932,13 +1045,14 @@ } if((!forgotton && (gi.status & GROUPINFO_DELETED)) || (forgotton && (gi.expired < eo_start))) { - dellist[listcount] = xmalloc(key.size + 1); + dellist[listcount] = xmalloc(key.size); memcpy(dellist[listcount], key.data, key.size); - dellist[listcount][key.size] = 0; + dellistsz[listcount] = key.size; listcount++; if(listcount >= listlen) { listlen += 20; dellist = xrealloc(dellist, listlen * sizeof(char *)); + dellistsz = xrealloc(dellistsz, listlen * sizeof(size_t)); } } } @@ -956,16 +1070,22 @@ for (i = 0; i < listcount; ++i) free(dellist[i]); free(dellist); + free(dellistsz); return false; } for(i = 0; i < listcount; i++) { TXN_START(t_dos, tid); - if(tid==NULL) - goto out; + /* Can't use ovdb_getgroupinfo here */ + key.data = dellist[i]; + key.size = dellistsz[i]; + val.data = &gi; + val.ulen = sizeof(struct groupinfo); + val.flags = DB_DBT_USERMEM; + + ret = groupinfo->get(groupinfo, tid, &key, &val, 0); - ret = ovdb_getgroupinfo(dellist[i], &gi, false, tid, DB_RMW); switch (ret) { case 0: @@ -976,33 +1096,19 @@ TXN_ABORT(t_dos, tid); continue; default: - syslog(L_ERROR, "OVDB: delete_old_stuff: getgroupinfo: %s\n", db_strerror(ret)); + syslog(L_ERROR, "OVDB: delete_old_stuff: groupinfo->get: %s\n", db_strerror(ret)); TXN_ABORT(t_dos, tid); continue; } - - switch(delete_all_records(gi.current_db, gi.current_gid, tid)) { - case 0: - break; - case TRYAGAIN: - TXN_RETRY(t_dos, tid); - default: + if(val.size != sizeof(struct groupinfo)) { TXN_ABORT(t_dos, tid); continue; } - switch(groupid_free(gi.current_gid, tid)) { - case 0: - break; - case TRYAGAIN: - TXN_RETRY(t_dos, tid); - default: - TXN_ABORT(t_dos, tid); - continue; - } + /* This if() is true if this ISN'T a key created by mk_temp_groupinfo */ + if(*((char *)key.data) != 0 || key.size != 1 + sizeof(group_id_t)) { - if(gi.status & GROUPINFO_MOVING) { - switch(delete_all_records(gi.new_db, gi.new_gid, tid)) { + switch(mk_temp_groupinfo(gi.current_db, gi.current_gid, tid)) { case 0: break; case TRYAGAIN: @@ -1011,8 +1117,22 @@ TXN_ABORT(t_dos, tid); continue; } - switch(groupid_free(gi.new_gid, tid)) { + if(gi.status & GROUPINFO_MOVING) { + switch(mk_temp_groupinfo(gi.new_db, gi.new_gid, tid)) { + case 0: + break; + case TRYAGAIN: + TXN_RETRY(t_dos, tid); + default: + TXN_ABORT(t_dos, tid); + continue; + } + } + + /* delete the corresponding groupaliases record (if exists) */ + switch(groupaliases->del(groupaliases, tid, &key, 0)) { case 0: + case DB_NOTFOUND: break; case TRYAGAIN: TXN_RETRY(t_dos, tid); @@ -1020,39 +1140,35 @@ TXN_ABORT(t_dos, tid); continue; } - } - key.data = dellist[i]; - key.size = strlen(dellist[i]); - - /* delete the corresponding groupaliases record (if exists) */ - switch(groupaliases->del(groupaliases, tid, &key, 0)) { - case 0: - case DB_NOTFOUND: - break; - case TRYAGAIN: - TXN_RETRY(t_dos, tid); - default: - TXN_ABORT(t_dos, tid); - continue; - } - switch(groupinfo->del(groupinfo, tid, &key, 0)) { - case 0: - case DB_NOTFOUND: - break; - case TRYAGAIN: - TXN_RETRY(t_dos, tid); - default: - TXN_ABORT(t_dos, tid); - continue; + switch(groupinfo->del(groupinfo, tid, &key, 0)) { + case 0: + case DB_NOTFOUND: + break; + case TRYAGAIN: + TXN_RETRY(t_dos, tid); + default: + TXN_ABORT(t_dos, tid); + continue; + } } TXN_COMMIT(t_dos, tid); + + if(delete_all_records(gi.current_db, gi.current_gid) == 0) { + rm_temp_groupinfo(gi.current_gid); + } + if(gi.status & GROUPINFO_MOVING) { + if(delete_all_records(gi.new_db, gi.new_gid) == 0) { + rm_temp_groupinfo(gi.new_gid); + } + } } out: for(i = 0; i < listcount; i++) free(dellist[i]); free(dellist); + free(dellistsz); return true; } @@ -1564,20 +1680,23 @@ } -bool ovdb_groupstats(char *group, int *lo, int *hi, int *count, int *flag) +bool +ovdb_groupstats(char *group, int *lo, int *hi, int *count, int *flag) { int ret; struct groupinfo gi; - if(clientmode) { + if (clientmode) { struct rs_cmd rs; struct rs_groupstats repl; rs.what = CMD_GROUPSTATS; rs.grouplen = strlen(group)+1; - csend(&rs, sizeof(rs)); - csend(group, rs.grouplen); + if (csend(&rs, sizeof(rs)) < 0) + return false; + if (csend(group, rs.grouplen) < 0) + return false; crecv(&repl, sizeof(repl)); if(repl.status != CMD_GROUPSTATS) @@ -1998,7 +2117,15 @@ int state; }; -void *ovdb_opensearch(char *group, int low, int high) +/* Even though nnrpd only does one search at a time, a read server process could + do many concurrent searches; hence we must keep track of an arbitrary number of + open searches */ +static struct ovdbsearch **searches = NULL; +static int nsearches = 0; +static int maxsearches = 0; + +void * +ovdb_opensearch(char *group, int low, int high) { DB *db; struct ovdbsearch *s; @@ -2014,8 +2141,10 @@ rs.artlo = low; rs.arthi = high; - csend(&rs, sizeof(rs)); - csend(group, rs.grouplen); + if (csend(&rs, sizeof(rs)) < 0) + return NULL; + if (csend(group, rs.grouplen) < 0) + return NULL; crecv(&repl, sizeof(repl)); if(repl.status != CMD_OPENSRCH) @@ -2055,10 +2184,24 @@ s->lastart = high; s->state = 0; + if(searches == NULL) { + nsearches = 0; + maxsearches = 50; + searches = xmalloc(sizeof(struct ovdbsearch *) * maxsearches); + } + if(nsearches == maxsearches) { + maxsearches += 50; + searches = xrealloc(searches, sizeof(struct ovdbsearch *) * maxsearches); + } + searches[nsearches] = s; + nsearches++; + return (void *)s; } -bool ovdb_search(void *handle, ARTNUM *artnum, char **data, int *len, TOKEN *token, time_t *arrived) +bool +ovdb_search(void *handle, ARTNUM *artnum, char **data, int *len, + TOKEN *token, time_t *arrived) { struct ovdbsearch *s = (struct ovdbsearch *)handle; DBT key, val; @@ -2067,7 +2210,7 @@ struct datakey dk; int ret; - if(clientmode) { + if (clientmode) { struct rs_cmd rs; struct rs_srch repl; static char *databuf; @@ -2076,8 +2219,10 @@ rs.what = CMD_SRCH; rs.handle = handle; - csend(&rs, sizeof(rs)); - crecv(&repl, sizeof(repl)); + if (csend(&rs, sizeof(rs)) < 0) + return false; + if (crecv(&repl, sizeof(repl)) < 0) + return false; if(repl.status != CMD_SRCH) return false; @@ -2203,6 +2348,7 @@ void ovdb_closesearch(void *handle) { + int i; if(clientmode) { struct rs_cmd rs; @@ -2216,6 +2362,16 @@ if(s->cursor) s->cursor->c_close(s->cursor); + for(i = 0; i < nsearches; i++) { + if(s == searches[i]) { + break; + } + } + nsearches--; + for( ; i < nsearches; i++) { + searches[i] = searches[i+1]; + } + free(handle); } } @@ -2239,8 +2395,10 @@ rs.grouplen = strlen(group)+1; rs.artlo = artnum; - csend(&rs, sizeof(rs)); - csend(group, rs.grouplen); + if (csend(&rs, sizeof(rs)) < 0) + return false; + if (csend(group, rs.grouplen) < 0) + return false; crecv(&repl, sizeof(repl)); if(repl.status != CMD_ARTINFO) @@ -2338,7 +2496,7 @@ DBT key, val, nkey, gkey, gval; DB_TXN *tid; DBC *cursor = NULL; - int ret = 0, delete, old_db = 0; + int ret = 0, delete, old_db = 0, cleanup; struct groupinfo gi; struct ovdata ovd; struct datakey dk, ndk; @@ -2375,6 +2533,8 @@ if(tid==NULL) return false; + cleanup = 0; + ret = ovdb_getgroupinfo(group, &gi, true, tid, DB_RMW); switch (ret) { @@ -2403,18 +2563,20 @@ /* a previous expireover run must've died. We'll clean up after it */ if(gi.status & GROUPINFO_MOVING) { - switch(delete_all_records(gi.new_db, gi.new_gid, tid)) { + cleanup = 1; + old_db = gi.new_db; + old_gid = gi.new_gid; + + ret = mk_temp_groupinfo(old_db, old_gid, tid); + switch(ret) { case 0: - break; + break; case TRYAGAIN: - TXN_RETRY(t_expgroup_1, tid); + TXN_RETRY(t_expgroup_1, tid); default: - TXN_ABORT(t_expgroup_1, tid); + TXN_ABORT(t_expgroup_1, tid); return false; } - if(groupid_free(gi.new_gid, tid) == TRYAGAIN) { - TXN_RETRY(t_expgroup_1, tid); - } gi.status &= ~GROUPINFO_MOVING; } } @@ -2472,6 +2634,12 @@ } TXN_COMMIT(t_expgroup_1, tid); + if(cleanup) { + if(delete_all_records(old_db, old_gid) == 0) { + rm_temp_groupinfo(old_gid); + } + } + /* * The following loop iterates over the OV records for the group in * "batches", to limit transaction sizes. @@ -2649,6 +2817,17 @@ old_gid = gi.current_gid; gi.current_gid = gi.new_gid; gi.status &= ~GROUPINFO_MOVING; + + ret = mk_temp_groupinfo(old_db, old_gid, tid); + switch(ret) { + case 0: + break; + case TRYAGAIN: + TXN_RETRY(t_expgroup_loop, tid); + default: + TXN_ABORT(t_expgroup_loop, tid); + return false; + } } gi.status &= ~GROUPINFO_EXPIRING; @@ -2682,37 +2861,9 @@ } if(compact) { - TXN_START(t_expgroup_cleanup, tid); - if(tid == NULL) - return false; - - ret = delete_all_records(old_db, old_gid, tid); - switch (ret) - { - case 0: - break; - case TRYAGAIN: - TXN_RETRY(t_expgroup_cleanup, tid); - default: - TXN_ABORT(t_expgroup_cleanup, tid); - syslog(L_ERROR, "OVDB: expiregroup: delete_all_records: %s", db_strerror(ret)); - return false; - } - - ret = groupid_free(old_gid, tid); - switch (ret) - { - case 0: - break; - case TRYAGAIN: - TXN_RETRY(t_expgroup_cleanup, tid); - default: - TXN_ABORT(t_expgroup_cleanup, tid); - syslog(L_ERROR, "OVDB: expiregroup: groupid_free: %s", db_strerror(ret)); - return false; + if(delete_all_records(old_db, old_gid) == 0) { + rm_temp_groupinfo(old_gid); } - - TXN_COMMIT(t_expgroup_cleanup, tid); } if(currentcount != gi.count) { @@ -2811,6 +2962,14 @@ if(clientmode) { client_disconnect(); return; + } + + while(searches != NULL && nsearches) { + ovdb_closesearch(searches[0]); + } + if(searches != NULL) { + free(searches); + searches = NULL; } if(dbs) { diff -ruN inn-2.4.1/storage/overdata.c inn-2.4.2/storage/overdata.c --- inn-2.4.1/storage/overdata.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/overdata.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: overdata.c,v 1.12.2.1 2003/05/31 19:48:27 rra Exp $ +/* $Id: overdata.c,v 1.12.2.2 2004/05/16 20:26:55 rra Exp $ ** ** Overview data processing. ** @@ -174,7 +174,7 @@ for (field = 0; field < ARRAY_SIZE(fields); field++) { buffer_append(overview, "\t", 1); if (field == 5) { - snprintf(buffer, sizeof(buffer), "%u", length); + snprintf(buffer, sizeof(buffer), "%lu", (unsigned long) length); buffer_append(overview, buffer, strlen(buffer)); } else build_header(article, length, fields[field], overview); diff -ruN inn-2.4.1/storage/timecaf/caf.c inn-2.4.2/storage/timecaf/caf.c --- inn-2.4.1/storage/timecaf/caf.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/timecaf/caf.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: caf.c,v 1.16 2003/01/19 20:58:05 rra Exp $ +/* $Id: caf.c,v 1.16.2.2 2004/05/16 21:12:53 rra Exp $ ** ** Library routines needed for handling CAF (Crunched Article Files) ** Written by Richard Todd (rmtodd@mailhost.ecn.uoknor.edu) 3/24/96, @@ -550,6 +550,7 @@ CAFHEADER head; int fd; CAFTOCENT tocent; + struct stat st; if ( (fd = open(path, O_RDONLY)) < 0) { /* @@ -595,6 +596,16 @@ return -1; } + /* I'm not sure if this fstat is worth the speed hit, but unless we check + here, we may simply segfault when we try to access mmap'd space beyond + the end of the file. I think robustness wins. */ + if (fstat(fd, &st) == 0) + if (tocent.Size > st.st_size - tocent.Offset) { + CAFError(CAF_ERR_IO); + close(fd); + return -1; + } + *len = tocent.Size; return fd; } @@ -1509,7 +1520,8 @@ CAFTOCENT *tocp2; if (verbose) { - printf("Compacting %s: Free=%d (%f%%)\n", path, head.Free, percentfree); + printf("Compacting %s: Free=%lu (%f%%)\n", path, + (unsigned long) head.Free, percentfree); } delta = newlow - head.Low; @@ -1562,7 +1574,8 @@ } else { /* need neither full cleaning nor compaction, so return. */ if (verbose) { - printf("Not cleaning %s: Free=%d (%f%%)\n", path, head.Free, percentfree); + printf("Not cleaning %s: Free=%lu (%f%%)\n", path, + (unsigned long) head.Free, percentfree); } fclose(infile); free(tocarray); diff -ruN inn-2.4.1/storage/tradindexed/ovmethod.mk inn-2.4.2/storage/tradindexed/ovmethod.mk --- inn-2.4.1/storage/tradindexed/ovmethod.mk Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/tradindexed/ovmethod.mk Wed Dec 22 04:21:19 2004 @@ -4,6 +4,3 @@ tradindexed/tdx-util: tradindexed/tdx-util.o libstorage.$(EXTLIB) $(LIBHIST) $(LIBLD) $(LDFLAGS) -o $@ tradindexed/tdx-util.o \ $(LIBSTORAGE) $(LIBHIST) $(LIBINN) $(EXTSTORAGELIBS) $(LIBS) - -$(D)$(PATHBIN)/tdx-util: tradindexed/tdx-util - $(LI_XPRI) $? $@ diff -ruN inn-2.4.1/storage/tradspool/tradspool.c inn-2.4.2/storage/tradspool/tradspool.c --- inn-2.4.1/storage/tradspool/tradspool.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/storage/tradspool/tradspool.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: tradspool.c,v 1.50 2003/03/27 23:56:01 rra Exp $ +/* $Id: tradspool.c,v 1.50.2.2 2004/12/19 08:19:48 rra Exp $ ** ** Storage manager module for traditional spool format. */ @@ -957,6 +957,8 @@ } if ((xrefs = CrackXref(xrefhdr, &numxrefs)) == NULL || numxrefs == 0) { + if (xrefs != NULL) + free(xrefs); free(path); tradspool_freearticle(article); SMseterror(SMERR_UNDEFINED, NULL); @@ -1248,7 +1250,7 @@ struct artngnum *ann; unsigned long ngnum; unsigned long artnum; - char *ng; + char *ng, *p; switch (type) { case SMARTNGNUM: @@ -1267,6 +1269,9 @@ return false; } ann->groupname = xstrdup(ng); + for (p = ann->groupname; *p != 0; p++) + if (*p == '/') + *p = '.'; ann->artnum = (ARTNUM)artnum; return true; default: diff -ruN inn-2.4.1/support/config.guess inn-2.4.2/support/config.guess --- inn-2.4.1/support/config.guess Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/support/config.guess Wed Dec 22 04:21:19 2004 @@ -1,9 +1,9 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. -timestamp='2003-01-30' +timestamp='2004-08-13' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO @@ -106,6 +106,7 @@ : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; @@ -196,15 +197,21 @@ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; + amd64:OpenBSD:*:*) + echo x86_64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} + cats:OpenBSD:*:*) + echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + luna88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -220,28 +227,33 @@ mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; sgi:OpenBSD:*:*) - echo mipseb-unknown-openbsd${UNAME_RELEASE} + echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - *:MicroBSD:*:*) - echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE} + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit 0 ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then + case $UNAME_RELEASE in + *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU @@ -279,11 +291,12 @@ "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac + # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? @@ -306,6 +319,9 @@ *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; @@ -323,6 +339,9 @@ NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; @@ -395,6 +414,9 @@ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; @@ -730,7 +752,7 @@ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) - echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` @@ -738,6 +760,11 @@ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; @@ -748,18 +775,7 @@ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) - # Determine whether the default compiler uses glibc. - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #if __GLIBC__ >= 2 - LIBC=gnu - #else - LIBC= - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin @@ -770,8 +786,8 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; - x86:Interix*:3*) - echo i586-pc-interix3 + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks @@ -792,17 +808,28 @@ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) + # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; @@ -878,6 +905,9 @@ s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; @@ -935,6 +965,9 @@ LIBC=gnuaout #endif #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 @@ -965,6 +998,9 @@ i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; @@ -1034,9 +1070,9 @@ M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; - M68*:*:R3V[567]*:*) + M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` @@ -1134,9 +1170,10 @@ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) - case `uname -p` in + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; - powerpc) UNAME_PROCESSOR=powerpc ;; + unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; @@ -1151,7 +1188,7 @@ *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; - NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) @@ -1192,6 +1229,19 @@ *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms && exit 0 ;; + I*) echo ia64-dec-vms && exit 0 ;; + V*) echo vax-dec-vms && exit 0 ;; + esac esac #echo '(No uname command or uname output not recognized.)' 1>&2 diff -ruN inn-2.4.1/support/config.sub inn-2.4.2/support/config.sub --- inn-2.4.1/support/config.sub Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/support/config.sub Wed Dec 22 04:21:19 2004 @@ -1,9 +1,9 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. -timestamp='2003-02-03' +timestamp='2004-06-24' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -70,7 +70,7 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO @@ -118,7 +118,8 @@ # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -144,7 +145,7 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis) + -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; @@ -228,14 +229,15 @@ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | clipper \ + | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ - | ip2k \ - | m32r | m68000 | m68k | m88k | mcore \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -247,6 +249,7 @@ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ @@ -259,9 +262,9 @@ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ - | tahoe | thumb | tic80 | tron \ + | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ @@ -297,15 +300,15 @@ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | cydra-* \ + | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* \ - | m32r-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ @@ -319,11 +322,13 @@ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ + | mmix-* \ | msp430-* \ - | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ @@ -332,7 +337,7 @@ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ @@ -359,6 +364,9 @@ basic_machine=a29k-amd os=-udi ;; + abacus) + basic_machine=abacus-unknown + ;; adobe68k) basic_machine=m68010-adobe os=-scout @@ -373,6 +381,12 @@ basic_machine=a29k-none os=-bsd ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; amdahl) basic_machine=580-amdahl os=-sysv @@ -432,12 +446,24 @@ basic_machine=j90-cray os=-unicos ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -638,10 +664,6 @@ mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; monitor) basic_machine=m68k-rom68k os=-coff @@ -722,10 +744,6 @@ np1) basic_machine=np1-gould ;; - nv1) - basic_machine=nv1-cray - os=-unicosmp - ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -737,6 +755,10 @@ basic_machine=or32-unknown os=-coff ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose @@ -768,18 +790,24 @@ pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; - pentiumii | pentium2) + pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; + pentium4) + basic_machine=i786-pc + ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumii-* | pentium2-*) + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pn) basic_machine=pn-gould ;; @@ -838,6 +866,10 @@ sb1el) basic_machine=mipsisa64sb1el-unknown ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; sequent) basic_machine=i386-sequent ;; @@ -845,6 +877,9 @@ basic_machine=sh-hitachi os=-hms ;; + sh64) + basic_machine=sh64-unknown + ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks @@ -919,10 +954,6 @@ basic_machine=t90-cray os=-unicos ;; - tic4x | c4x*) - basic_machine=tic4x-unknown - os=-coff - ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff @@ -948,6 +979,10 @@ tower | tower-32) basic_machine=m68k-ncr ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; udi29k) basic_machine=a29k-amd os=-udi @@ -1021,6 +1056,9 @@ romp) basic_machine=romp-ibm ;; + mmix) + basic_machine=mmix-knuth + ;; rs6000) basic_machine=rs6000-ibm ;; @@ -1043,7 +1081,7 @@ sh64) basic_machine=sh64-unknown ;; - sparc | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) @@ -1116,19 +1154,20 @@ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -microbsd*) + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1152,6 +1191,9 @@ -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; @@ -1164,6 +1206,9 @@ -opened*) os=-openedition ;; + -os400*) + os=-os400 + ;; -wince*) os=-wince ;; @@ -1185,6 +1230,9 @@ -atheos*) os=-atheos ;; + -syllable*) + os=-syllable + ;; -386bsd) os=-bsd ;; @@ -1207,6 +1255,9 @@ -sinix*) os=-sysv4 ;; + -tpf*) + os=-tpf + ;; -triton*) os=-sysv3 ;; @@ -1274,6 +1325,9 @@ arm*-semi) os=-aout ;; + c4x-* | tic4x-*) + os=-coff + ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 @@ -1320,6 +1374,9 @@ *-ibm) os=-aix ;; + *-knuth) + os=-mmixware + ;; *-wec) os=-proelf ;; @@ -1452,8 +1509,14 @@ -mvs* | -opened*) vendor=ibm ;; + -os400*) + vendor=ibm + ;; -ptx*) vendor=sequent + ;; + -tpf*) + vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs diff -ruN inn-2.4.1/support/install-sh inn-2.4.2/support/install-sh --- inn-2.4.1/support/install-sh Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/support/install-sh Wed Dec 22 04:21:19 2004 @@ -136,6 +136,7 @@ if [ -d $dst ]; then instcmd=: chmodcmd="" + chowncmd="" else instcmd=mkdir fi diff -ruN inn-2.4.1/tests/lib/qio-t.c inn-2.4.2/tests/lib/qio-t.c --- inn-2.4.1/tests/lib/qio-t.c Wed Jan 7 22:47:19 2004 +++ inn-2.4.2/tests/lib/qio-t.c Wed Dec 22 04:21:19 2004 @@ -1,4 +1,4 @@ -/* $Id: qio-t.c,v 1.4 2002/03/31 21:45:11 rra Exp $ */ +/* $Id: qio-t.c,v 1.4.2.1 2004/06/10 22:04:58 hkehoe Exp $ */ /* Test suite for the Quick I/O library */ #include "config.h" @@ -50,8 +50,11 @@ exactly as large as the buffer. */ if (fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { size = st.st_blksize; - if (size > 4 * 8192 || size < 4096) + if (size > 4 * 8192) size = 8192; + else + while(size < 8192) + size += st.st_blksize; } #endif /* HAVE_ST_BLKSIZE */