Index: inn/INSTALL diff -c inn/INSTALL:1.44.2.9 inn/INSTALL:1.44.2.15 *** inn/INSTALL:1.44.2.9 Mon Jan 8 16:29:38 2001 --- inn/INSTALL Fri Apr 13 06:03:14 2001 *************** *** 19,25 **** after building INN and then comparing the new sample configuration files with your current ones to see if anything has changed. If you take this route, the old binaries, scripts, and man pages will be saved with an ! extension of .OLD so that you can easily back out. Supported Systems --- 19,30 ---- after building INN and then comparing the new sample configuration files with your current ones to see if anything has changed. If you take this route, the old binaries, scripts, and man pages will be saved with an ! extension of .OLD so that you can easily back out. Be sure to configure ! INN with the same options that you used previously if you take this ! approach (in particular, INN compiled with --with-largefiles can't read ! the data structures written by INN compiled without that flag and vice ! versa). If you don't remember what options you used but you have your ! old build tree, look at the comments at the beginning of config.status. Supported Systems *************** *** 72,93 **** make to build INN should be sufficient. * If you want to enable support for authenticated control messages (this ! is NOT required) then you will need to install PGP. Unfortunately, ! the licensing restrictions on PGP inside the United States are ! extremely unclear; it's possible that if you are installing INN for a ! company in the U.S., even if the news server is not part of the ! business of that company, you would need to purchase a commercial ! license for PGP. For an educational or non-profit organization, this ! shouldn't be a problem. See for more ! information about PGP, including the licensing restrictions. ! ! You may also want to look at GnuPG from , a ! free software OpenPGP implementation. Unfortunately, most control ! message signatures are currently PGP 2.6.2-compatible signatures, ! which cannot be handled by stock GnuPG for patent reasons. However, ! there are add-on modules for GnuPG that allow verification of those ! types of signatures, particularly if you are outside the United ! States. 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 --- 77,98 ---- make to build INN should be sufficient. * If you want to enable support for authenticated control messages (this ! is not required but is highly recommended) then you will need to ! install some version of PGP. The recommended version is GnuPG, since ! it's actively developed, supports OpenPGP, is freely available and ! free to use for any purpose (including in the US), and (as of version ! 1.0.4 at least) supports RSA signatures used by most current control ! message senders. You need to install both GnuPG and pgpgpg from ! ; a link for pgpgpg is under "Front ends." ! ! Alternately, you can install PGP from or one of ! the international versions of it. Be warned, however, that the ! licensing restrictions on PGP inside the United States are extremely ! unclear; it's possible that if you are installing INN for a company in ! the U.S., even if the news server is not part of the business of that ! company, you would need to purchase a commercial license for PGP. For ! 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 *************** *** 127,132 **** --- 132,146 ---- and group. You can change these if you want but these are the defaults and it's easier to stick with them on a new installation. + WARNING: By default, INN installs various configuration files as + group-writeable, and in general INN is not hardened from a security + standpoint against an attack by someone who is already in the news + group. In general, you should consider membership in the news group as + equivalent to access to the news account. You should not rely on being + able to keep anyone with access to the news GID from converting that + into access to the news UID. The recommended configuration is to have + the only member of the group "news" be the user "news". + Installing INN so that all of its files are under a single directory tree, rather than scattering binaries, libraries, and man pages throughout the file system, is strongly recommended. It helps keep *************** *** 219,228 **** (but an earlier version may suffice). --with-python ! Enables support for Python, allowing you to install filter scripts ! written in Python. You will need Python 1.5.2 or later installed on ! your system to enable this option. See README.python_hook for all ! the details. --with-tcl Enables support for Tcl, allowing you to install filter scripts --- 233,245 ---- (but an earlier version may suffice). --with-python ! Enables support for Python, allowing you to install filter and ! authentication scripts written in Python. You will need Python ! 1.5.2 or later installed on your system to enable this option. See ! README.python_hook and README.python_auth_hook 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. --with-tcl Enables support for Tcl, allowing you to install filter scripts *************** *** 258,263 **** --- 275,296 ---- somewhat longer. See "./configure --help" for the various available options related to libtool builds. + Please note that INN's shared library interface is not stable and + may change drastically in future releases. For this reason, it's + also not properly versioned and won't be until some degree of + stability is guaranteed, and the relevant header files are not + installed. Only INN should use INN's shared libraries, and you + should only use the shared libraries corresponding to the version of + INN that you're installing. + + Also, when updating an existing version of INN, INN tries to save + backup copies of all files so that you can revert to the previous + installed version. Unfortunately, when using shared libraries, this + confuses ldconfig on some systems (such as Linux) and the symbolic + links for the libraries may point to the .OLD versions. If this + happens, you can either fix the links by hand or remove the .OLD + versions and re-run ldconfig. + --enable-uucp-rnews If this option is given to configure, rnews will be installed setuid root, owned by group uucp, and mode 4550. This will allow the UUCP *************** *** 1300,1306 **** news user and not as root. To start INN on system boot, you therefore want to put something like: ! su news -c /usr/local/news/bin/rc.news in the system boot scripts. If innd is stopped or killed, you can restart it by running rc.news by hand as the news user. --- 1333,1339 ---- news user and not as root. To start INN on system boot, you therefore want to put something like: ! su - news -c /usr/local/news/bin/rc.news in the system boot scripts. If innd is stopped or killed, you can restart it by running rc.news by hand as the news user. *************** *** 1308,1314 **** The rc.news script may also be used to shut down INN, with the "stop" option: ! su news -c '/usr/local/news/bin/rc.news stop' In the contrib directory of this source tree is a sample init script for people using System V-style init.d directories. --- 1341,1347 ---- The rc.news script may also be used to shut down INN, with the "stop" option: ! su - news -c '/usr/local/news/bin/rc.news stop' In the contrib directory of this source tree is a sample init script for people using System V-style init.d directories. Index: inn/LICENSE diff -c inn/LICENSE:1.2 inn/LICENSE:1.2.2.1 *** inn/LICENSE:1.2 Thu Apr 6 08:00:32 2000 --- inn/LICENSE Sat Jan 27 19:03:43 2001 *************** *** 2,8 **** different licenses and/or copyrights is covered by the following copyright and license: ! Copyright (c) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000 The Internet Software Consortium and Rich Salz This code is derived from software contributed to the Internet Software --- 2,8 ---- different licenses and/or copyrights is covered by the following copyright and license: ! Copyright (c) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 The Internet Software Consortium and Rich Salz This code is derived from software contributed to the Internet Software Index: inn/MANIFEST diff -c inn/MANIFEST:1.51.2.14 inn/MANIFEST:1.51.2.19 *** inn/MANIFEST:1.51.2.14 Thu Jan 11 14:25:39 2001 --- inn/MANIFEST Sun Apr 22 18:23:17 2001 *************** *** 38,43 **** --- 38,44 ---- backends/controlchan.in Channel program for control messages backends/cvtbatch.c Add fields to simple batchfile backends/filechan.c Split a funnel into separate files + backends/gpgverify.in Verify control messages with GnuPG backends/inndf.c df used for innwatch backends/innxbatch.c Send batches using XBATCH to remote backends/innxmit.c Send articles to remote site *************** *** 114,120 **** doc/man/expire.ctl.5 Manpage for expire.ctl config file doc/man/expireover.8 Manpage for expireover doc/man/expirerm.8 Manpage for expirerm ! doc/man/fastrm.8 Manpage for fastrm utility doc/man/filechan.8 Manpage for filechan backend doc/man/getlist.1 Manpage for getlist frontend doc/man/grephistory.1 Manpage for grephistory --- 115,121 ---- doc/man/expire.ctl.5 Manpage for expire.ctl config file doc/man/expireover.8 Manpage for expireover doc/man/expirerm.8 Manpage for expirerm ! doc/man/fastrm.1 Manpage for fastrm utility doc/man/filechan.8 Manpage for filechan backend doc/man/getlist.1 Manpage for getlist frontend doc/man/grephistory.1 Manpage for grephistory *************** *** 130,135 **** --- 131,137 ---- doc/man/inndstart.8 Manpage for inndstart doc/man/innfeed.1 Manpage for innfeed backend doc/man/innfeed.conf.5 Manpage for innfeed.conf config file + doc/man/innmail.1 Manpage for innmail utility doc/man/innreport.8 Manpage for innreport doc/man/innstat.8 Manpage for innstat utility doc/man/innwatch.8 Manpage for innwatch *************** *** 179,194 **** --- 181,199 ---- doc/man/startinnfeed.1 Manpage for startinnfeed doc/man/storage.conf.5 Manpage for storage.conf config file doc/man/strcasecmp.3 Manpage for strcasecmp (from BSD) + doc/man/subscriptions.5 Manpage for subscriptions list doc/man/tally.control.8 Manpage for tally.control doc/man/wildmat.3 Manpage for wildmat library routine doc/man/writelog.8 Manpage for writelog doc/pod POD documentation (Directory) doc/pod/ckpasswd.pod Master file for ckpasswd.1 doc/pod/dbprocs.pod Master file for dbprocs.8 + doc/pod/fastrm.pod Master file for fastrm.1 doc/pod/hacking.pod Master file for HACKING doc/pod/hook-perl.pod Master file for README.perl_hook doc/pod/inn.conf.pod Master file for inn.conf.5 doc/pod/inndstart.pod Master file for inndstart.8 + doc/pod/innmail.pod Master file for innmail.1 doc/pod/install.pod Master file for INSTALL doc/pod/makehistory.pod Master file for makehistory.8 doc/pod/news.pod Master file for NEWS *************** *** 198,203 **** --- 203,209 ---- doc/pod/readers.conf.pod Master file for readers.conf.5 doc/pod/readme.pod Master file for README doc/pod/sasl.conf.pod Master file for sasl.conf.5 + doc/pod/subscriptions.pod Master file for subscriptions.5 doc/sample-control Sample PGP-signed control message expire Expiration and recovery (Directory) expire/Makefile Makefile for expiration *************** *** 237,243 **** include/config.h.in Template configuration data include/configdata.h Obsolete header include/dbz.h Header file for DBZ - include/inn Installed header files (Directory) include/innconf.h Header file for inn.conf include/inndcomm.h innd control channel commands include/libinn.h INN library declarations --- 243,248 ---- *************** *** 430,438 **** samples/motd.news Sample MOTD file samples/newgroup.in newgroup handler samples/newgroup.pl newgroup controlchan handler - samples/newsgroups.minimal Minimal starting newsgroups file samples/news2mail.cf news2mail config file samples/newsfeeds.in innd feed configuration samples/nnrpd.py Python hooks for nnrpd samples/nnrpd.track Reader tracking configuration samples/nnrpd_auth.pl.in Sample nnrpd Perl authorization hooks --- 435,443 ---- samples/motd.news Sample MOTD file samples/newgroup.in newgroup handler samples/newgroup.pl newgroup controlchan handler samples/news2mail.cf news2mail config file samples/newsfeeds.in innd feed configuration + samples/newsgroups.minimal Minimal starting newsgroups file samples/nnrpd.py Python hooks for nnrpd samples/nnrpd.track Reader tracking configuration samples/nnrpd_auth.pl.in Sample nnrpd Perl authorization hooks *************** *** 456,461 **** --- 461,467 ---- samples/startup.tcl.in Tcl startup code for innd samples/startup_innd.pl Perl startup code for innd samples/storage.conf Sample storage configuration + samples/subscriptions Sample default subscriptions list samples/version.in version handler samples/version.pl version controlchan handler scripts Various utilities (Directory) Index: inn/Makefile.global.in diff -c inn/Makefile.global.in:1.42.2.2 inn/Makefile.global.in:1.42.2.3 *** inn/Makefile.global.in:1.42.2.2 Mon Aug 21 16:18:38 2000 --- inn/Makefile.global.in Tue Jan 16 22:27:47 2001 *************** *** 1,4 **** ! ## $Id: Makefile.global.in,v 1.42.2.2 2000/08/21 07:18:38 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 --- 1,4 ---- ! ## $Id: Makefile.global.in,v 1.42.2.3 2001/01/16 13:27:47 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,20 **** ## put your own version information in $VERSION_EXTRA. If it's set to ## "CVS prerelease", the build time will be automatically included. ! VERSION = 2.3.1 VERSION_EXTRA = CVS prerelease ## If you want to install INN relative to a root directory other than /, --- 14,20 ---- ## put your own version information in $VERSION_EXTRA. If it's set to ## "CVS prerelease", the build time will be automatically included. ! VERSION = 2.3.2 VERSION_EXTRA = CVS prerelease ## If you want to install INN relative to a root directory other than /, Index: inn/NEWS diff -c inn/NEWS:1.11.2.6 inn/NEWS:1.11.2.10 *** inn/NEWS:1.11.2.6 Mon Jan 8 17:07:49 2001 --- inn/NEWS Mon Apr 23 21:29:43 2001 *************** *** 1,3 **** --- 1,35 ---- + Changes from 2.3.1 to 2.3.2 + + * innxmit can again handle regular filenames as input as well as storage + API tokens (allowing it to be used to import an old traditional + spool). + + * Several problems with tagged-hash history files have been fixed thanks + to the debugging efforts of Andrew Gierth and Sang-yong Suh. + + * A very long-standing (since INN 1.0!) NNTP protocol bug in nnrpd was + fixed. The response to an ARTICLE command retrieving a message by + message ID should have the message ID as the third word of the + response, not the fourth. Fixing this is reported to *possibly* cause + problems with some Netscape browsers, but other news servers correctly + follow the protocol. + + * Some serious performance problems with expiration of tradspool should + now be at least somewhat alleviated. tradspool and timehash now know + how to output file names for removal rather than tokens, and fastrm's + ability to remove regular files has been restored. This should bring + expiration times for tradspool back to within a factor of two of + pre-storage-API expiration times. + + * An item that was actually changed in 2.3.0 but wasn't noted in NEWS + when it should have been: Users can no longer post articles + containing Approved: headers to moderated groups by default; they must + be specifically given that permission with the access: parameter in + readers.conf. See the man page for more details. + + * Added a sample subscriptions file and documentation for it and + innmail. + Changes from 2.3.0 to 2.3.1 * inews no longer downloads the active file, no longer tries to send *************** *** 152,157 **** --- 184,194 ---- filters, and supports Python authentication hooks. * There is preliminary support for news reading over SSL, using OpenSSL. + + * Users can no longer post articles containing Approved: headers to + moderated groups by default; they must be specifically given that + permission with the access: parameter in readers.conf. See the man + page for more details. * To simplify anti-abuse filtering, and to be more compliant with news standards and proposed standards, INN now treats as control messages Index: inn/configure diff -c inn/configure:1.161.2.11 inn/configure:1.161.2.17 *** inn/configure:1.161.2.11 Mon Jan 8 16:30:40 2001 --- inn/configure Mon Mar 5 14:44:12 2001 *************** *** 1,6 **** #! /bin/sh ! # From configure.in Revision: 1.163.2.10 ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- --- 1,6 ---- #! /bin/sh ! # From configure.in Revision: 1.163.2.16 ## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- *************** *** 1078,1109 **** yes) echo $ac_n "checking for BerkeleyDB location""... $ac_c" 1>&6 echo "configure:1081: checking for BerkeleyDB location" >&5 ! for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 ! do ! for d in /opt /usr /usr/local ! do ! if test -d "$d/$v" ; then ! BERKELEY_DB_DIR="$d/$v" ! fi ! done done ! if test "$BERKELEY_DB_DIR" = "yes" ; then ! if test -d /usr/local/include/db2 ; then ! BERKELEY_DB_LDFLAGS="-L/usr/local/lib" ! BERKELEY_DB_CFLAGS="-I/usr/local/include/db2" ! BERKELEY_DB_LIB="-ldb2" ! BERKELEY_DB_BINDIR="/usr/local/bin" ! echo "$ac_t""FreeBSD locations" 1>&6 ! else ! { echo "configure: error: Can not find BerkeleyDB" 1>&2; exit 1; } ! fi else ! BERKELEY_DB_LDFLAGS="-L$BERKELEY_DB_DIR/lib" ! BERKELEY_DB_CFLAGS="-I$BERKELEY_DB_DIR/include" ! BERKELEY_DB_LIB="-ldb" ! BERKELEY_DB_BINDIR="$BERKELEY_DB_DIR/bin" ! echo "$ac_t""$BERKELEY_DB_DIR" 1>&6 fi cat >> confdefs.h <<\EOF #define USE_BERKELEY_DB 1 --- 1078,1120 ---- yes) echo $ac_n "checking for BerkeleyDB location""... $ac_c" 1>&6 echo "configure:1081: checking for BerkeleyDB location" >&5 ! for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 ; do ! for d in /usr /opt /usr/local ; do ! test -d "$d/$v" && BERKELEY_DB_DIR="$d/$v" ! done done ! if test x"$BERKELEY_DB_DIR" = xyes ; then ! for v in 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" ! BERKELEY_DB_LIB="-l$v" ! BERKELEY_DB_BINDIR="/usr/local/bin" ! echo "$ac_t""FreeBSD locations" 1>&6 ! break ! fi ! done ! if test x"$BERKELEY_DB_LIB" = x ; then ! for v in db3 db2 ; do ! if test -d "/usr/include/$v" ; then ! BERKELEY_DB_CFLAGS="-I/usr/include/$v" ! BERKELEY_DB_LIB="-l$v" ! BERKELEY_DB_BINDIR="/usr/bin" ! echo "$ac_t""Linux locations" 1>&6 ! break ! fi ! done ! if test x"$BERKELEY_DB_LIB" = x ; then ! { echo "configure: error: Cannot find BerkeleyDB" 1>&2; exit 1; } ! fi ! fi else ! BERKELEY_DB_LDFLAGS="-L$BERKELEY_DB_DIR/lib" ! BERKELEY_DB_CFLAGS="-I$BERKELEY_DB_DIR/include" ! BERKELEY_DB_LIB="-ldb" ! BERKELEY_DB_BINDIR="$BERKELEY_DB_DIR/bin" ! echo "$ac_t""$BERKELEY_DB_DIR" 1>&6 fi cat >> confdefs.h <<\EOF #define USE_BERKELEY_DB 1 *************** *** 1207,1213 **** fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:1211: checking host system type" >&5 host_alias=$host case "$host_alias" in --- 1218,1224 ---- fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:1222: checking host system type" >&5 host_alias=$host case "$host_alias" in *************** *** 1228,1234 **** echo "$ac_t""$host" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:1232: checking build system type" >&5 build_alias=$build case "$build_alias" in --- 1239,1245 ---- echo "$ac_t""$host" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:1243: checking build system type" >&5 build_alias=$build case "$build_alias" in *************** *** 1248,1254 **** # 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:1252: 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 --- 1259,1265 ---- # 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:1263: 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 *************** *** 1278,1284 **** # 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:1282: 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 --- 1289,1295 ---- # 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:1293: 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 *************** *** 1308,1314 **** # 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:1312: 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 --- 1319,1325 ---- # 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:1323: 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 *************** *** 1359,1365 **** # 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:1363: 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 --- 1370,1376 ---- # 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:1374: 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 *************** *** 1391,1397 **** fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1395: 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. --- 1402,1408 ---- fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1406: 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. *************** *** 1402,1413 **** cat > conftest.$ac_ext << EOF ! #line 1406 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1411: \"$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 --- 1413,1424 ---- cat > conftest.$ac_ext << EOF ! #line 1417 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1422: \"$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 *************** *** 1433,1444 **** { 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:1437: 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:1442: 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 --- 1444,1455 ---- { 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:1448: 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:1453: 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 *************** *** 1447,1453 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1451: \"$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 --- 1458,1464 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1462: \"$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 *************** *** 1466,1472 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1470: 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 --- 1477,1483 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1481: 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 *************** *** 1509,1515 **** if test "$ac_cv_prog_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:1513: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. --- 1520,1526 ---- if test "$ac_cv_prog_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:1524: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. *************** *** 1533,1542 **** esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1537: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1540: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1544,1553 ---- esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1548: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1551: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 1572,1578 **** 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:1576: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1583,1589 ---- 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:1587: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** *** 1588,1594 **** echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1592: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1599,1605 ---- echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1603: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** *** 1625,1631 **** echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:1629: 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 --- 1636,1642 ---- echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:1640: 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 *************** *** 1669,1676 **** case "$host" in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 1673 "configure"' > conftest.$ac_ext ! if { (eval echo configure:1674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" --- 1680,1687 ---- case "$host" in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 1684 "configure"' > conftest.$ac_ext ! if { (eval echo configure:1685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case "`/usr/bin/file conftest.o`" in *32-bit*) LD="${LD-ld} -32" *************** *** 1691,1709 **** SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:1695: 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 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else --- 1702,1720 ---- SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:1706: 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 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else *************** *** 1816,1822 **** fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:1820: checking host system type" >&5 host_alias=$host case "$host_alias" in --- 1827,1833 ---- fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:1831: checking host system type" >&5 host_alias=$host case "$host_alias" in *************** *** 1839,1845 **** # 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:1843: 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 --- 1850,1856 ---- # 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:1854: 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 *************** *** 1869,1875 **** # 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:1873: 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 --- 1880,1886 ---- # 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:1884: 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 *************** *** 1920,1926 **** # 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:1924: 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 --- 1931,1937 ---- # 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:1935: 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 *************** *** 1952,1958 **** fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1956: 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. --- 1963,1969 ---- fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1967: 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. *************** *** 1963,1974 **** cat > conftest.$ac_ext << EOF ! #line 1967 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1972: \"$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 --- 1974,1985 ---- cat > conftest.$ac_ext << EOF ! #line 1978 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1983: \"$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 *************** *** 1994,2005 **** { 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:1998: 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:2003: 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 --- 2005,2016 ---- { 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:2009: 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:2014: 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 *************** *** 2008,2014 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2012: \"$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 --- 2019,2025 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2023: \"$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 *************** *** 2027,2033 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:2031: 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 --- 2038,2044 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:2042: 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 *************** *** 2069,2075 **** echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:2073: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 2080,2086 ---- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:2084: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** *** 2084,2096 **** # 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:2094: \"$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 : --- 2095,2107 ---- # 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:2105: \"$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 : *************** *** 2101,2113 **** 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:2111: \"$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 : --- 2112,2124 ---- 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:2122: \"$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 : *************** *** 2118,2130 **** 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:2128: \"$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 : --- 2129,2141 ---- 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:2139: \"$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 : *************** *** 2150,2162 **** if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 ! echo "configure:2154: 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 --- 2161,2173 ---- if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 ! echo "configure:2165: 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 *************** *** 2174,2180 **** if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA --- 2185,2191 ---- if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA *************** *** 2198,2204 **** # 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:2202: 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 --- 2209,2215 ---- # 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:2213: 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 *************** *** 2232,2238 **** *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 ! echo "configure:2236: 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 --- 2243,2249 ---- *) ac_lib=l ;; esac echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6 ! echo "configure:2247: 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 *************** *** 2240,2246 **** ac_save_LIBS="$LIBS" LIBS="-l$ac_lib $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 2262,2268 ---- yywrap() ; return 0; } EOF ! if { (eval echo configure:2266: \"$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 *************** *** 2274,2280 **** fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2278: 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 --- 2285,2291 ---- fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2289: 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 *************** *** 2303,2309 **** # 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:2307: 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 --- 2314,2320 ---- # 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:2318: 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 *************** *** 2335,2341 **** # 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:2339: 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 --- 2346,2352 ---- # 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:2350: 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 *************** *** 2373,2381 **** esac echo $ac_n "checking for AIX""... $ac_c" 1>&6 ! echo "configure:2377: checking for AIX" >&5 cat > conftest.$ac_ext <&6 ! echo "configure:2388: checking for AIX" >&5 cat > conftest.$ac_ext <&6 ! echo "configure:2401: 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 --- 2408,2414 ---- echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 ! echo "configure:2412: 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 *************** *** 2442,2448 **** # 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:2446: 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 --- 2453,2459 ---- # 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:2457: 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 *************** *** 2485,2491 **** # 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:2489: 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 --- 2496,2502 ---- # 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:2500: 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 *************** *** 2525,2531 **** # 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:2529: 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 --- 2536,2542 ---- # 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:2540: 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 *************** *** 2565,2571 **** # 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:2569: 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 --- 2576,2582 ---- # 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:2580: 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 *************** *** 2605,2611 **** # 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:2609: 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 --- 2616,2622 ---- # 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:2620: 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 *************** *** 2645,2651 **** # 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:2649: 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 --- 2656,2662 ---- # 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:2660: 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 *************** *** 2685,2691 **** # 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:2689: 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 --- 2696,2702 ---- # 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:2700: 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 *************** *** 2727,2733 **** if test x"$DO_PERL" = xDO ; then echo $ac_n "checking for Perl version""... $ac_c" 1>&6 ! echo "configure:2731: 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 --- 2738,2744 ---- if test x"$DO_PERL" = xDO ; then echo $ac_n "checking for Perl version""... $ac_c" 1>&6 ! echo "configure:2742: 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 *************** *** 2743,2749 **** echo "$ac_t""$inn_cv_perl_version" 1>&6 else echo $ac_n "checking for Perl version""... $ac_c" 1>&6 ! echo "configure:2747: 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 --- 2754,2760 ---- echo "$ac_t""$inn_cv_perl_version" 1>&6 else echo $ac_n "checking for Perl version""... $ac_c" 1>&6 ! echo "configure:2758: 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 *************** *** 2760,2771 **** fi pgpverify=true ! for ac_prog in pgpv pgp do # 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:2769: 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 --- 2771,2782 ---- fi pgpverify=true ! for ac_prog in pgpv pgp pgpgpg do # 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:2780: 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 *************** *** 2810,2816 **** # 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:2814: 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 --- 2821,2827 ---- # 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:2825: 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 *************** *** 2853,2859 **** # 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:2857: 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 --- 2864,2870 ---- # 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:2868: 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 *************** *** 2893,2899 **** # 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:2897: 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 --- 2904,2910 ---- # 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:2908: 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 *************** *** 2935,2941 **** # 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:2939: 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 --- 2946,2952 ---- # 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:2950: 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 *************** *** 2984,2996 **** if test "${with_sendmail+set}" = set ; then echo $ac_n "checking for sendmail""... $ac_c" 1>&6 ! echo "configure:2988: 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:2994: 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 --- 2995,3007 ---- if test "${with_sendmail+set}" = set ; then echo $ac_n "checking for sendmail""... $ac_c" 1>&6 ! echo "configure:2999: 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:3005: 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 *************** *** 3029,3035 **** # 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:3033: 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 --- 3040,3046 ---- # 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:3044: 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 *************** *** 3042,3048 **** ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH:/usr/lib:/usr/sbin:/usr/ucblib" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then --- 3053,3059 ---- ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH:/usr/sbin:/usr/lib:/usr/ucblib" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then *************** *** 3074,3080 **** # 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:3078: 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 --- 3085,3091 ---- # 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:3089: 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 *************** *** 3108,3114 **** # 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:3112: 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 --- 3119,3125 ---- # 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:3123: 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 *************** *** 3149,3162 **** echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6 ! echo "configure:3153: 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 <&6 ! echo "configure:3164: 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 rm -rf conftest* ac_cv_search_crypt="none required" else --- 3178,3184 ---- crypt() ; return 0; } EOF ! if { (eval echo configure:3182: \"$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 *************** *** 3178,3184 **** test "$ac_cv_search_crypt" = "no" && for i in crypt; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_crypt="-l$i" break --- 3200,3206 ---- crypt() ; return 0; } EOF ! if { (eval echo configure:3204: \"$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 *************** *** 3212,3225 **** echo $ac_n "checking for library containing setproctitle""... $ac_c" 1>&6 ! echo "configure:3216: 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 <&6 ! echo "configure:3227: 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 rm -rf conftest* ac_cv_search_setproctitle="none required" else --- 3241,3247 ---- setproctitle() ; return 0; } EOF ! if { (eval echo configure:3245: \"$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 *************** *** 3241,3247 **** test "$ac_cv_search_setproctitle" = "no" && for i in util; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_setproctitle="-l$i" break --- 3263,3269 ---- setproctitle() ; return 0; } EOF ! if { (eval echo configure:3267: \"$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 *************** *** 3278,3291 **** echo $ac_n "checking for library containing gethostbyname""... $ac_c" 1>&6 ! echo "configure:3282: 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 <&6 ! echo "configure:3293: 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 rm -rf conftest* ac_cv_search_gethostbyname="none required" else --- 3307,3313 ---- gethostbyname() ; return 0; } EOF ! if { (eval echo configure:3311: \"$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 *************** *** 3307,3313 **** test "$ac_cv_search_gethostbyname" = "no" && for i in nsl; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_gethostbyname="-l$i" break --- 3329,3335 ---- gethostbyname() ; return 0; } EOF ! if { (eval echo configure:3333: \"$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 *************** *** 3339,3345 **** fi echo $ac_n "checking for gethostbyname in -lresolv""... $ac_c" 1>&6 ! echo "configure:3343: checking for gethostbyname in -lresolv" >&5 ac_lib_var=`echo resolv'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3350,3356 ---- fi echo $ac_n "checking for gethostbyname in -lresolv""... $ac_c" 1>&6 ! echo "configure:3354: checking for gethostbyname in -lresolv" >&5 ac_lib_var=`echo resolv'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3347,3353 **** ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3369,3375 ---- gethostbyname() ; return 0; } EOF ! if { (eval echo configure:3373: \"$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 *************** *** 3379,3390 **** fi echo $ac_n "checking for socket""... $ac_c" 1>&6 ! echo "configure:3383: checking for socket" >&5 if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:3394: checking for socket" >&5 if eval "test \"`echo '$''{'ac_cv_func_socket'+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 rm -rf conftest* eval "ac_cv_func_socket=yes" else --- 3418,3424 ---- ; return 0; } EOF ! if { (eval echo configure:3422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_socket=yes" else *************** *** 3426,3432 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 ! echo "configure:3430: checking for socket in -lsocket" >&5 ac_lib_var=`echo socket'_'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 --- 3437,3443 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 ! echo "configure:3441: checking for socket in -lsocket" >&5 ac_lib_var=`echo socket'_'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 *************** *** 3434,3440 **** ac_save_LIBS="$LIBS" LIBS="-lsocket "$LIBS" $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3456,3462 ---- socket() ; return 0; } EOF ! if { (eval echo configure:3460: \"$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 *************** *** 3465,3471 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for socket in -lnsl""... $ac_c" 1>&6 ! echo "configure:3469: 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 --- 3476,3482 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for socket in -lnsl""... $ac_c" 1>&6 ! echo "configure:3480: 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 *************** *** 3473,3479 **** ac_save_LIBS="$LIBS" LIBS="-lnsl -lsocket $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3495,3501 ---- socket() ; return 0; } EOF ! if { (eval echo configure:3499: \"$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 *************** *** 3512,3525 **** echo $ac_n "checking for library containing inet_addr""... $ac_c" 1>&6 ! echo "configure:3516: checking for library containing inet_addr" >&5 if eval "test \"`echo '$''{'ac_cv_search_inet_addr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_inet_addr="no" cat > conftest.$ac_ext <&6 ! echo "configure:3527: checking for library containing inet_addr" >&5 if eval "test \"`echo '$''{'ac_cv_search_inet_addr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_inet_addr="no" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_addr="none required" else --- 3541,3547 ---- inet_addr() ; return 0; } EOF ! if { (eval echo configure:3545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_addr="none required" else *************** *** 3541,3547 **** test "$ac_cv_search_inet_addr" = "no" && for i in 44bsd; do LIBS="-l$i $ac_func_search_save_LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_addr="-l$i" break --- 3563,3569 ---- inet_addr() ; return 0; } EOF ! if { (eval echo configure:3567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_search_inet_addr="-l$i" break *************** *** 3574,3580 **** fi echo $ac_n "checking for pthread_create in -lthread""... $ac_c" 1>&6 ! echo "configure:3578: checking for pthread_create in -lthread" >&5 ac_lib_var=`echo thread'_'pthread_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3585,3591 ---- fi echo $ac_n "checking for pthread_create in -lthread""... $ac_c" 1>&6 ! echo "configure:3589: checking for pthread_create in -lthread" >&5 ac_lib_var=`echo thread'_'pthread_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3582,3588 **** ac_save_LIBS="$LIBS" LIBS="-lthread $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3604,3610 ---- pthread_create() ; return 0; } EOF ! if { (eval echo configure:3608: \"$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 *************** *** 3616,3622 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6 ! echo "configure:3620: checking for pthread_create in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3627,3633 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6 ! echo "configure:3631: checking for pthread_create in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3624,3630 **** ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3646,3652 ---- pthread_create() ; return 0; } EOF ! if { (eval echo configure:3650: \"$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 *************** *** 3668,3674 **** echo $ac_n "checking for getspnam in -lshadow""... $ac_c" 1>&6 ! echo "configure:3672: checking for getspnam in -lshadow" >&5 ac_lib_var=`echo shadow'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3679,3685 ---- echo $ac_n "checking for getspnam in -lshadow""... $ac_c" 1>&6 ! echo "configure:3683: checking for getspnam in -lshadow" >&5 ac_lib_var=`echo shadow'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3676,3682 **** ac_save_LIBS="$LIBS" LIBS="-lshadow $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3698,3704 ---- getspnam() ; return 0; } EOF ! if { (eval echo configure:3702: \"$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 *************** *** 3716,3722 **** echo $ac_n "checking for nlist in -lelf""... $ac_c" 1>&6 ! echo "configure:3720: checking for nlist in -lelf" >&5 ac_lib_var=`echo elf'_'nlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3727,3733 ---- echo $ac_n "checking for nlist in -lelf""... $ac_c" 1>&6 ! echo "configure:3731: checking for nlist in -lelf" >&5 ac_lib_var=`echo elf'_'nlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3724,3730 **** ac_save_LIBS="$LIBS" LIBS="-lelf $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3746,3752 ---- nlist() ; return 0; } EOF ! if { (eval echo configure:3750: \"$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 *************** *** 3764,3770 **** echo $ac_n "checking for regexec in -lregex""... $ac_c" 1>&6 ! echo "configure:3768: checking for regexec in -lregex" >&5 ac_lib_var=`echo regex'_'regexec | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3775,3781 ---- echo $ac_n "checking for regexec in -lregex""... $ac_c" 1>&6 ! echo "configure:3779: checking for regexec in -lregex" >&5 ac_lib_var=`echo regex'_'regexec | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3772,3778 **** ac_save_LIBS="$LIBS" LIBS="-lregex $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3794,3800 ---- regexec() ; return 0; } EOF ! if { (eval echo configure:3798: \"$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 *************** *** 3812,3818 **** echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 ! echo "configure:3816: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3823,3829 ---- echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 ! echo "configure:3827: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3820,3826 **** ac_save_LIBS="$LIBS" LIBS="-ldbm $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3842,3848 ---- dbm_open() ; return 0; } EOF ! if { (eval echo configure:3846: \"$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 *************** *** 3852,3858 **** fi echo $ac_n "checking for dbm_open in -lndbm""... $ac_c" 1>&6 ! echo "configure:3856: checking for dbm_open in -lndbm" >&5 ac_lib_var=`echo ndbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 3863,3869 ---- fi echo $ac_n "checking for dbm_open in -lndbm""... $ac_c" 1>&6 ! echo "configure:3867: checking for dbm_open in -lndbm" >&5 ac_lib_var=`echo ndbm'_'dbm_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 3860,3866 **** ac_save_LIBS="$LIBS" LIBS="-lndbm $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 3882,3888 ---- dbm_open() ; return 0; } EOF ! if { (eval echo configure:3886: \"$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 *************** *** 3895,3901 **** if test x"$DO_PERL" = xDO ; then echo $ac_n "checking for Perl linkage""... $ac_c" 1>&6 ! echo "configure:3899: 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` --- 3906,3912 ---- if test x"$DO_PERL" = xDO ; then echo $ac_n "checking for Perl linkage""... $ac_c" 1>&6 ! echo "configure:3910: 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` *************** *** 3921,3927 **** if test x"$DO_PYTHON" = xdefine ; then echo $ac_n "checking for Python linkage""... $ac_c" 1>&6 ! echo "configure:3925: 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}" --- 3932,3938 ---- if test x"$DO_PYTHON" = xdefine ; then echo $ac_n "checking for Python linkage""... $ac_c" 1>&6 ! echo "configure:3936: 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}" *************** *** 3947,3953 **** if test x"$DO_LFS" = xDO ; then echo $ac_n "checking for largefile linkage""... $ac_c" 1>&6 ! echo "configure:3951: checking for largefile linkage" >&5 case "$host" in *-aix4.01*) echo "$ac_t""no" 1>&6 --- 3958,3964 ---- if test x"$DO_LFS" = xDO ; then echo $ac_n "checking for largefile linkage""... $ac_c" 1>&6 ! echo "configure:3962: checking for largefile linkage" >&5 case "$host" in *-aix4.01*) echo "$ac_t""no" 1>&6 *************** *** 3974,3980 **** # 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:3978: 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 --- 3985,3991 ---- # 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:3989: 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 *************** *** 4059,4075 **** OPENSSL_DIR="no" fi echo $ac_n "checking for openssl""... $ac_c" 1>&6 ! echo "configure:4063: checking for openssl" >&5 echo "$ac_t""$OPENSSL_DIR" 1>&6 if test "$OPENSSL_DIR" != "no"; then SSL_INC="-I${OPENSSL_DIR}/include" - SSL_LIB="-L${OPENSSL_DIR}/lib -lssl -lcrypto" SSL_BIN="${OPENSSL_DIR}/bin" ! cat >> confdefs.h <<\EOF #define HAVE_SSL 1 EOF else SSL_LIB="" SSL_INC="" SSL_BIN="" --- 4070,4288 ---- OPENSSL_DIR="no" fi echo $ac_n "checking for openssl""... $ac_c" 1>&6 ! echo "configure:4074: checking for openssl" >&5 echo "$ac_t""$OPENSSL_DIR" 1>&6 if test "$OPENSSL_DIR" != "no"; then SSL_INC="-I${OPENSSL_DIR}/include" SSL_BIN="${OPENSSL_DIR}/bin" ! SSL_LIB="-L${OPENSSL_DIR}/lib" ! echo $ac_n "checking for RSAPublicEncrypt in -lrsaref""... $ac_c" 1>&6 ! echo "configure:4081: 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 ! else ! ac_save_LIBS="$LIBS" ! LIBS="-lrsaref $SSL_LIB $LIBS" ! cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=no" ! fi ! rm -f conftest* ! LIBS="$ac_save_LIBS" ! ! fi ! 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:4116: 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 ! else ! ac_save_LIBS="$LIBS" ! LIBS="-lRSAglue -lrsaref $SSL_LIB $LIBS" ! cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=no" ! fi ! rm -f conftest* ! LIBS="$ac_save_LIBS" ! ! fi ! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then ! echo "$ac_t""yes" 1>&6 ! SSL_LIB="-lRSAglue -lrsaref ${SSL_LIB}" ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! echo $ac_n "checking for RSAPublicEncrypt in -lrsaref""... $ac_c" 1>&6 ! echo "configure:4161: 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 ! else ! ac_save_LIBS="$LIBS" ! LIBS="-lrsaref $SSL_LIB $LIBS" ! cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=no" ! fi ! rm -f conftest* ! LIBS="$ac_save_LIBS" ! ! fi ! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then ! echo "$ac_t""yes" 1>&6 ! SSL_LIB="${SSL_LIB} -lRSAglue -lrsaref" ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! echo $ac_n "checking for BIO_accept in -lcrypto""... $ac_c" 1>&6 ! echo "configure:4201: checking for BIO_accept in -lcrypto" >&5 ! ac_lib_var=`echo crypto'_'BIO_accept | sed 'y%./+-%__p_%'` ! if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! 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 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=no" ! fi ! rm -f conftest* ! LIBS="$ac_save_LIBS" ! ! fi ! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then ! echo "$ac_t""yes" 1>&6 ! SSL_LIB="-lcrypto ${SSL_LIB}" ! else ! echo "$ac_t""no" 1>&6 ! { echo "configure: error: Can not find OpenSSL" 1>&2; exit 1; } ! fi ! ! echo $ac_n "checking for SSL_CTX_new in -lssl""... $ac_c" 1>&6 ! echo "configure:4242: checking for SSL_CTX_new in -lssl" >&5 ! ac_lib_var=`echo ssl'_'SSL_CTX_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 ! else ! 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 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_lib_$ac_lib_var=no" ! fi ! rm -f conftest* ! LIBS="$ac_save_LIBS" ! ! fi ! if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then ! echo "$ac_t""yes" 1>&6 ! SSL_LIB="-lssl ${SSL_LIB}"; ! cat >> confdefs.h <<\EOF #define HAVE_SSL 1 EOF else + echo "$ac_t""no" 1>&6 + { echo "configure: error: Can not find OpenSSL" 1>&2; exit 1; } + fi + + else SSL_LIB="" SSL_INC="" SSL_BIN="" *************** *** 4080,4091 **** echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:4084: 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 --- 4293,4304 ---- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:4297: 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 *************** *** 4093,4099 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:4097: \"$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* --- 4306,4312 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:4310: \"$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* *************** *** 4110,4116 **** 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 --- 4323,4329 ---- 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 *************** *** 4128,4134 **** 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 --- 4341,4347 ---- 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 *************** *** 4149,4155 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 4362,4368 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** *** 4160,4166 **** exit (0); } EOF ! if { (eval echo configure:4164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 4373,4379 ---- exit (0); } EOF ! if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** *** 4189,4205 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4193: 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:4203: \"$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* --- 4402,4418 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4406: 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:4416: \"$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* *************** *** 4228,4239 **** for ac_func in memcpy strchr do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:4232: 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 <&6 ! echo "configure:4445: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 4469,4475 ---- ; return 0; } EOF ! if { (eval echo configure:4473: \"$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 *************** *** 4283,4294 **** for ac_func in memchr memmove memset do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:4287: 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 <&6 ! echo "configure:4500: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 4524,4530 ---- ; return 0; } EOF ! if { (eval echo configure:4528: \"$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 *************** *** 4344,4355 **** 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:4348: 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> --- 4557,4568 ---- 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:4561: 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> *************** *** 4357,4363 **** DIR *dirp = 0; ; return 0; } EOF ! if { (eval echo configure:4361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else --- 4570,4576 ---- DIR *dirp = 0; ; return 0; } EOF ! if { (eval echo configure:4574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else *************** *** 4382,4388 **** # 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:4386: 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 --- 4595,4601 ---- # 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:4599: 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 *************** *** 4390,4396 **** ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 4614,4620 ---- opendir() ; return 0; } EOF ! if { (eval echo configure:4618: \"$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 *************** *** 4423,4429 **** else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 ! echo "configure:4427: 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 --- 4636,4642 ---- else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 ! echo "configure:4640: 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 *************** *** 4431,4437 **** ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 4655,4661 ---- opendir() ; return 0; } EOF ! if { (eval echo configure:4659: \"$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 *************** *** 4465,4476 **** fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:4469: 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 --- 4678,4689 ---- fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:4682: 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 *************** *** 4479,4485 **** struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:4483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else --- 4692,4698 ---- struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:4696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else *************** *** 4500,4511 **** fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:4504: 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 --- 4713,4724 ---- fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:4717: 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 *************** *** 4521,4527 **** s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:4525: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else --- 4734,4740 ---- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:4738: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else *************** *** 4548,4564 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4552: 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:4562: \"$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* --- 4761,4777 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4765: 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:4775: \"$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* *************** *** 4590,4606 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4594: 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:4604: \"$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* --- 4803,4819 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:4807: 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:4817: \"$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* *************** *** 4629,4640 **** fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 ! echo "configure:4633: 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 --- 4842,4853 ---- fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 ! echo "configure:4846: 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 *************** *** 4642,4648 **** struct stat s; s.st_blksize; ; return 0; } EOF ! if { (eval echo configure:4646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else --- 4855,4861 ---- struct stat s; s.st_blksize; ; return 0; } EOF ! if { (eval echo configure:4859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else *************** *** 4663,4674 **** fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 ! echo "configure:4667: 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 --- 4876,4887 ---- fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 ! echo "configure:4880: 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 *************** *** 4676,4682 **** struct tm *tp; tp->tm_sec; ; return 0; } EOF ! if { (eval echo configure:4680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else --- 4889,4895 ---- struct tm *tp; tp->tm_sec; ; return 0; } EOF ! if { (eval echo configure:4893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else *************** *** 4697,4708 **** fi echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:4701: 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 <&6 ! echo "configure:4914: 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 rm -rf conftest* ac_cv_c_const=yes else --- 4964,4970 ---- ; return 0; } EOF ! if { (eval echo configure:4968: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else *************** *** 4772,4783 **** fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:4776: 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 --- 4985,4996 ---- fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:4989: 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 *************** *** 4805,4816 **** fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:4809: 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 --- 5018,5029 ---- fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:5022: 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 *************** *** 4839,4850 **** fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 ! echo "configure:4843: 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 --- 5052,5063 ---- fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 ! echo "configure:5056: 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 *************** *** 4872,4883 **** fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:4876: 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 --- 5085,5096 ---- fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:5089: 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 *************** *** 4905,4916 **** fi echo $ac_n "checking for caddr_t""... $ac_c" 1>&6 ! echo "configure:4909: checking for caddr_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_caddr_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 5118,5129 ---- fi echo $ac_n "checking for caddr_t""... $ac_c" 1>&6 ! echo "configure:5122: checking for caddr_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_caddr_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** *** 4938,4949 **** fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 ! echo "configure:4942: 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 --- 5151,5162 ---- fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 ! echo "configure:5155: 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 *************** *** 4975,4986 **** echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6 ! echo "configure:4979: 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 < --- 5188,5199 ---- echo $ac_n "checking for sig_atomic_t""... $ac_c" 1>&6 ! echo "configure:5192: 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 < *************** *** 5012,5023 **** echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5016: 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 < --- 5225,5236 ---- echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 ! echo "configure:5229: 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 < *************** *** 5051,5057 **** echo $ac_n "checking value of IOV_MAX""... $ac_c" 1>&6 ! echo "configure:5055: 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 --- 5264,5270 ---- echo $ac_n "checking value of IOV_MAX""... $ac_c" 1>&6 ! echo "configure:5268: 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 *************** *** 5059,5065 **** 16 else cat > conftest.$ac_ext < --- 5272,5278 ---- 16 else cat > conftest.$ac_ext < *************** *** 5108,5114 **** } EOF ! if { (eval echo configure:5112: \"$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 --- 5321,5327 ---- } EOF ! if { (eval echo configure:5325: \"$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 *************** *** 5138,5149 **** echo $ac_n "checking for SUN_LEN""... $ac_c" 1>&6 ! echo "configure:5142: 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 < --- 5351,5362 ---- echo $ac_n "checking for SUN_LEN""... $ac_c" 1>&6 ! echo "configure:5355: 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 < *************** *** 5158,5164 **** ; return 0; } EOF ! if { (eval echo configure:5162: \"$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 --- 5371,5377 ---- ; return 0; } EOF ! if { (eval echo configure:5375: \"$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 *************** *** 5181,5199 **** echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6 ! echo "configure:5185: 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:5197: \"$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 --- 5394,5412 ---- echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6 ! echo "configure:5398: 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:5410: \"$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 *************** *** 5215,5233 **** echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 ! echo "configure:5219: 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:5231: \"$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 --- 5428,5446 ---- echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 ! echo "configure:5432: 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:5444: \"$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 *************** *** 5249,5267 **** echo $ac_n "checking for timezone variable""... $ac_c" 1>&6 ! echo "configure:5253: 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:5265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_timezone=yes else --- 5462,5480 ---- echo $ac_n "checking for timezone variable""... $ac_c" 1>&6 ! echo "configure:5466: 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:5478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_timezone=yes else *************** *** 5283,5301 **** echo $ac_n "checking for tzname variable""... $ac_c" 1>&6 ! echo "configure:5287: 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:5299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_tzname=yes else --- 5496,5514 ---- echo $ac_n "checking for tzname variable""... $ac_c" 1>&6 ! echo "configure:5500: 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:5512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_var_tzname=yes else *************** *** 5318,5324 **** echo $ac_n "checking size of int""... $ac_c" 1>&6 ! echo "configure:5322: 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 --- 5531,5537 ---- echo $ac_n "checking size of int""... $ac_c" 1>&6 ! echo "configure:5535: 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 *************** *** 5326,5332 **** ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() --- 5539,5545 ---- ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() *************** *** 5337,5343 **** exit(0); } EOF ! if { (eval echo configure:5341: \"$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 --- 5550,5556 ---- exit(0); } EOF ! if { (eval echo configure:5554: \"$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 *************** *** 5357,5363 **** else echo $ac_n "checking size of long""... $ac_c" 1>&6 ! echo "configure:5361: 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 --- 5570,5576 ---- else echo $ac_n "checking size of long""... $ac_c" 1>&6 ! echo "configure:5574: 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 *************** *** 5365,5371 **** ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() --- 5578,5584 ---- ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() *************** *** 5376,5382 **** exit(0); } EOF ! if { (eval echo configure:5380: \"$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 --- 5589,5595 ---- exit(0); } EOF ! if { (eval echo configure:5593: \"$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 *************** *** 5396,5402 **** else echo $ac_n "checking size of short""... $ac_c" 1>&6 ! echo "configure:5400: 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 --- 5609,5615 ---- else echo $ac_n "checking size of short""... $ac_c" 1>&6 ! echo "configure:5613: 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 *************** *** 5404,5410 **** ac_cv_sizeof_short=2 else cat > conftest.$ac_ext < main() --- 5617,5623 ---- ac_cv_sizeof_short=2 else cat > conftest.$ac_ext < main() *************** *** 5415,5421 **** exit(0); } EOF ! if { (eval echo configure:5419: \"$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 --- 5628,5634 ---- exit(0); } EOF ! if { (eval echo configure:5632: \"$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 *************** *** 5444,5455 **** echo $ac_n "checking for int32_t""... $ac_c" 1>&6 ! echo "configure:5448: 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 < --- 5657,5668 ---- echo $ac_n "checking for int32_t""... $ac_c" 1>&6 ! echo "configure:5661: 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 < *************** *** 5488,5499 **** echo $ac_n "checking for uint32_t""... $ac_c" 1>&6 ! echo "configure:5492: 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 < --- 5701,5712 ---- echo $ac_n "checking for uint32_t""... $ac_c" 1>&6 ! echo "configure:5705: 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 < *************** *** 5531,5537 **** echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 ! echo "configure:5535: 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 --- 5744,5750 ---- echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 ! echo "configure:5748: 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 *************** *** 5539,5545 **** ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else --- 5762,5768 ---- } EOF ! if { (eval echo configure:5766: \"$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 *************** *** 5568,5584 **** ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:5572: checking for vfork.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:5582: \"$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* --- 5781,5797 ---- ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:5785: checking for vfork.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:5795: \"$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* *************** *** 5603,5620 **** fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 ! echo "configure:5607: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:5613: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:5820: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:5826: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+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 rm -rf conftest* eval "ac_cv_func_vfork=yes" else --- 5850,5856 ---- ; return 0; } EOF ! if { (eval echo configure:5854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else *************** *** 5659,5665 **** ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < --- 5872,5878 ---- ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < *************** *** 5754,5760 **** } } EOF ! if { (eval echo configure:5758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else --- 5967,5973 ---- } } EOF ! if { (eval echo configure:5971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else *************** *** 5777,5788 **** fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:5781: 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 --- 5990,6001 ---- fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:5994: 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 *************** *** 5799,5805 **** int i; ; return 0; } EOF ! if { (eval echo configure:5803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else --- 6012,6018 ---- int i; ; return 0; } EOF ! if { (eval echo configure:6016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else *************** *** 5824,5835 **** symlink waitpid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5828: 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 <&6 ! echo "configure:6041: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6065,6071 ---- ; return 0; } EOF ! if { (eval echo configure:6069: \"$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 *************** *** 5880,5891 **** for ac_func in seteuid setreuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:5884: 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 <&6 ! echo "configure:6097: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6121,6127 ---- ; return 0; } EOF ! if { (eval echo configure:6125: \"$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 *************** *** 5934,5945 **** echo $ac_n "checking for getrlimit""... $ac_c" 1>&6 ! echo "configure:5938: checking for getrlimit" >&5 if eval "test \"`echo '$''{'ac_cv_func_getrlimit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:6151: checking for getrlimit" >&5 if eval "test \"`echo '$''{'ac_cv_func_getrlimit'+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 rm -rf conftest* eval "ac_cv_func_getrlimit=yes" else --- 6175,6181 ---- ; return 0; } EOF ! 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_func_getrlimit=yes" else *************** *** 5977,5988 **** if eval "test \"`echo '$ac_cv_func_'getrlimit`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for setrlimit""... $ac_c" 1>&6 ! echo "configure:5981: checking for setrlimit" >&5 if eval "test \"`echo '$''{'ac_cv_func_setrlimit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 echo $ac_n "checking for setrlimit""... $ac_c" 1>&6 ! echo "configure:6194: checking for setrlimit" >&5 if eval "test \"`echo '$''{'ac_cv_func_setrlimit'+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 rm -rf conftest* eval "ac_cv_func_setrlimit=yes" else --- 6218,6224 ---- ; return 0; } EOF ! if { (eval echo configure:6222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_setrlimit=yes" else *************** *** 6035,6046 **** for ac_func in sysconf getdtablesize ulimit do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6039: 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 <&6 ! echo "configure:6252: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6276,6282 ---- ; return 0; } EOF ! if { (eval echo configure:6280: \"$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 *************** *** 6090,6101 **** if test x"$ac_cv_func_fcntl" = xno ; then echo $ac_n "checking for flock""... $ac_c" 1>&6 ! echo "configure:6094: checking for flock" >&5 if eval "test \"`echo '$''{'ac_cv_func_flock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:6307: checking for flock" >&5 if eval "test \"`echo '$''{'ac_cv_func_flock'+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 rm -rf conftest* eval "ac_cv_func_flock=yes" else --- 6331,6337 ---- ; return 0; } EOF ! if { (eval echo configure:6335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_flock=yes" else *************** *** 6139,6145 **** else echo "$ac_t""no" 1>&6 echo $ac_n "checking for flock in -lbsd""... $ac_c" 1>&6 ! echo "configure:6143: checking for flock in -lbsd" >&5 ac_lib_var=`echo bsd'_'flock | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 6352,6358 ---- else echo "$ac_t""no" 1>&6 echo $ac_n "checking for flock in -lbsd""... $ac_c" 1>&6 ! echo "configure:6356: checking for flock in -lbsd" >&5 ac_lib_var=`echo bsd'_'flock | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 6147,6153 **** ac_save_LIBS="$LIBS" LIBS="-lbsd $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 6371,6377 ---- flock() ; return 0; } EOF ! if { (eval echo configure:6375: \"$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 *************** *** 6183,6194 **** for ac_func in lockf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6187: 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 <&6 ! echo "configure:6400: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6424,6430 ---- ; return 0; } EOF ! if { (eval echo configure:6428: \"$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 *************** *** 6245,6256 **** for ac_func in statfs do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6249: 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 <&6 ! echo "configure:6462: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6486,6492 ---- ; return 0; } EOF ! if { (eval echo configure:6490: \"$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 *************** *** 6301,6317 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:6305: 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:6315: \"$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* --- 6514,6530 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:6518: 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:6528: \"$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* *************** *** 6343,6354 **** strcasecmp strdup strerror strspn setenv hstrerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6347: 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 <&6 ! echo "configure:6560: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6584,6590 ---- ; return 0; } EOF ! if { (eval echo configure:6588: \"$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 *************** *** 6400,6406 **** 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:6404: 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 --- 6613,6619 ---- 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:6617: 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 *************** *** 6408,6414 **** inn_cv_type_fpos_t_large=no else cat > conftest.$ac_ext < #include --- 6621,6627 ---- inn_cv_type_fpos_t_large=no else cat > conftest.$ac_ext < #include *************** *** 6422,6428 **** exit(off == (off_t) 9223372036854775807ULL ? 0 : 1); } EOF ! if { (eval echo configure:6426: \"$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 --- 6635,6641 ---- exit(off == (off_t) 9223372036854775807ULL ? 0 : 1); } EOF ! if { (eval echo configure:6639: \"$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 *************** *** 6459,6470 **** echo $ac_n "checking if mmap() sees write()s""... $ac_c" 1>&6 ! echo "configure:6463: checking if mmap() sees write()s" >&5 if test "$cross_compiling" = yes; then result="yes" else cat > conftest.$ac_ext < #include --- 6672,6683 ---- echo $ac_n "checking if mmap() sees write()s""... $ac_c" 1>&6 ! echo "configure:6676: checking if mmap() sees write()s" >&5 if test "$cross_compiling" = yes; then result="yes" else cat > conftest.$ac_ext < #include *************** *** 6496,6502 **** } EOF ! if { (eval echo configure:6500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then result="yes" else --- 6709,6715 ---- } EOF ! if { (eval echo configure:6713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then result="yes" else *************** *** 6520,6526 **** echo $ac_n "checking for working mmap""... $ac_c" 1>&6 ! echo "configure:6524: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_shared'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6733,6739 ---- echo $ac_n "checking for working mmap""... $ac_c" 1>&6 ! echo "configure:6737: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_shared'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** *** 6528,6534 **** ac_cv_func_mmap_shared=no else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_shared=yes else --- 6841,6847 ---- } EOF ! if { (eval echo configure:6845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_shared=yes else *************** *** 6652,6663 **** for ac_func in madvise do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:6656: 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 <&6 ! echo "configure:6869: 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 rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 6893,6899 ---- ; return 0; } EOF ! if { (eval echo configure:6897: \"$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 *************** *** 6707,6713 **** fi echo $ac_n "checking whether msync is needed""... $ac_c" 1>&6 ! echo "configure:6711: checking whether msync is needed" >&5 if eval "test \"`echo '$''{'ac_cv_func_need_msync'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 6920,6926 ---- fi echo $ac_n "checking whether msync is needed""... $ac_c" 1>&6 ! echo "configure:6924: checking whether msync is needed" >&5 if eval "test \"`echo '$''{'ac_cv_func_need_msync'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** *** 6715,6721 **** ac_cv_func_need_msync=no else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_need_msync=yes else --- 7040,7046 ---- } EOF ! if { (eval echo configure:7044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_need_msync=yes else *************** *** 6852,6863 **** if test $ac_cv_lib_regex_regexec = no; then echo $ac_n "checking for regexec""... $ac_c" 1>&6 ! echo "configure:6856: checking for regexec" >&5 if eval "test \"`echo '$''{'ac_cv_func_regexec'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:7069: checking for regexec" >&5 if eval "test \"`echo '$''{'ac_cv_func_regexec'+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 rm -rf conftest* eval "ac_cv_func_regexec=yes" else --- 7093,7099 ---- ; return 0; } EOF ! if { (eval echo configure:7097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_regexec=yes" else *************** *** 6905,6916 **** fi echo $ac_n "checking for three argument msync""... $ac_c" 1>&6 ! echo "configure:6909: checking for three argument msync" >&5 if eval "test \"`echo '$''{'inn_cv_func_msync_3_args'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < --- 7118,7129 ---- fi echo $ac_n "checking for three argument msync""... $ac_c" 1>&6 ! echo "configure:7122: checking for three argument msync" >&5 if eval "test \"`echo '$''{'inn_cv_func_msync_3_args'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < *************** *** 6919,6925 **** char *p; int psize; msync(p,psize,MS_ASYNC); ; return 0; } EOF ! if { (eval echo configure:6923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_func_msync_3_args=yes else --- 7132,7138 ---- char *p; int psize; msync(p,psize,MS_ASYNC); ; return 0; } EOF ! if { (eval echo configure:7136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* inn_cv_func_msync_3_args=yes else *************** *** 6940,6948 **** fi echo $ac_n "checking for Unix domain sockets""... $ac_c" 1>&6 ! echo "configure:6944: checking for Unix domain sockets" >&5 cat > conftest.$ac_ext < --- 7153,7161 ---- fi echo $ac_n "checking for Unix domain sockets""... $ac_c" 1>&6 ! echo "configure:7157: checking for Unix domain sockets" >&5 cat > conftest.$ac_ext < *************** *** 6968,6977 **** echo $ac_n "checking log facility for news""... $ac_c" 1>&6 ! echo "configure:6972: checking log facility for news" >&5 if test x"$SYSLOG_FACILITY" = xnone ; then cat > conftest.$ac_ext < --- 7181,7190 ---- echo $ac_n "checking log facility for news""... $ac_c" 1>&6 ! echo "configure:7185: checking log facility for news" >&5 if test x"$SYSLOG_FACILITY" = xnone ; then cat > conftest.$ac_ext < Index: inn/configure.in diff -c inn/configure.in:1.163.2.11 inn/configure.in:1.163.2.17 *** inn/configure.in:1.163.2.11 Mon Jan 8 16:30:39 2001 --- inn/configure.in Mon Mar 5 14:44:17 2001 *************** *** 1,7 **** dnl Process this file with autoconf to produce a configure script. ! dnl $Id: configure.in,v 1.163.2.11 2001/01/08 07:30:39 rra Exp $ ! AC_REVISION($Revision: 1.163.2.11 $)dnl AC_PREREQ(2.13) dnl FIXME: The separable tests in this file should be broken out into --- 1,7 ---- dnl Process this file with autoconf to produce a configure script. ! dnl $Id: configure.in,v 1.163.2.17 2001/03/05 05:44:17 rra Exp $ ! AC_REVISION($Revision: 1.163.2.17 $)dnl AC_PREREQ(2.13) dnl FIXME: The separable tests in this file should be broken out into *************** *** 256,287 **** yes) AC_MSG_CHECKING(for BerkeleyDB location) ! for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 ! do ! for d in /opt /usr /usr/local ! do ! if test -d "$d/$v" ; then ! BERKELEY_DB_DIR="$d/$v" ! fi ! done done ! if test "$BERKELEY_DB_DIR" = "yes" ; then ! if test -d /usr/local/include/db2 ; then ! BERKELEY_DB_LDFLAGS="-L/usr/local/lib" ! BERKELEY_DB_CFLAGS="-I/usr/local/include/db2" ! BERKELEY_DB_LIB="-ldb2" ! BERKELEY_DB_BINDIR="/usr/local/bin" ! AC_MSG_RESULT(FreeBSD locations) ! else ! AC_MSG_ERROR(Can not find BerkeleyDB) ! fi else ! BERKELEY_DB_LDFLAGS="-L$BERKELEY_DB_DIR/lib" ! BERKELEY_DB_CFLAGS="-I$BERKELEY_DB_DIR/include" ! BERKELEY_DB_LIB="-ldb" ! BERKELEY_DB_BINDIR="$BERKELEY_DB_DIR/bin" ! AC_MSG_RESULT($BERKELEY_DB_DIR) fi AC_DEFINE(USE_BERKELEY_DB) ;; --- 256,298 ---- yes) AC_MSG_CHECKING(for BerkeleyDB location) ! for v in BerkeleyDB BerkeleyDB.3.0 BerkeleyDB.3.1 BerkeleyDB.3.2 ; do ! for d in /usr /opt /usr/local ; do ! test -d "$d/$v" && BERKELEY_DB_DIR="$d/$v" ! done done ! if test x"$BERKELEY_DB_DIR" = xyes ; then ! for v in 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" ! BERKELEY_DB_LIB="-l$v" ! BERKELEY_DB_BINDIR="/usr/local/bin" ! AC_MSG_RESULT(FreeBSD locations) ! break ! fi ! done ! if test x"$BERKELEY_DB_LIB" = x ; then ! for v in db3 db2 ; do ! if test -d "/usr/include/$v" ; then ! BERKELEY_DB_CFLAGS="-I/usr/include/$v" ! BERKELEY_DB_LIB="-l$v" ! BERKELEY_DB_BINDIR="/usr/bin" ! AC_MSG_RESULT(Linux locations) ! break ! fi ! done ! if test x"$BERKELEY_DB_LIB" = x ; then ! AC_MSG_ERROR(Cannot find BerkeleyDB) ! fi ! fi else ! BERKELEY_DB_LDFLAGS="-L$BERKELEY_DB_DIR/lib" ! BERKELEY_DB_CFLAGS="-I$BERKELEY_DB_DIR/include" ! BERKELEY_DB_LIB="-ldb" ! BERKELEY_DB_BINDIR="$BERKELEY_DB_DIR/bin" ! AC_MSG_RESULT($BERKELEY_DB_DIR) fi AC_DEFINE(USE_BERKELEY_DB) ;; *************** *** 415,423 **** INN_PERL_VERSION(5.003) fi ! dnl Look for PGP 5.0's pgpv, or pgp if pgpv is not found. pgpverify=true ! AC_PATH_PROGS(_PATH_PGP, pgpv pgp) if test -z "$_PATH_PGP" ; then pgpverify=false fi --- 426,434 ---- INN_PERL_VERSION(5.003) fi ! dnl Look for PGP 5.0's pgpv, or pgp/pgpgpg if pgpv is not found. pgpverify=true ! AC_PATH_PROGS(_PATH_PGP, pgpv pgp pgpgpg) if test -z "$_PATH_PGP" ; then pgpverify=false fi *************** *** 478,484 **** echo 'No sendmail in path. Looking in likely places....' echo '' AC_PATH_PROG(SENDMAIL, sendmail, , ! $PATH:/usr/lib:/usr/sbin:/usr/ucblib) echo '' if test -n "$SENDMAIL" ; then echo "sendmail was found at $SENDMAIL. If this is correct, re-run" --- 489,495 ---- echo 'No sendmail in path. Looking in likely places....' echo '' AC_PATH_PROG(SENDMAIL, sendmail, , ! $PATH:/usr/sbin:/usr/lib:/usr/ucblib) echo '' if test -n "$SENDMAIL" ; then echo "sendmail was found at $SENDMAIL. If this is correct, re-run" *************** *** 725,733 **** AC_MSG_RESULT($OPENSSL_DIR) if test "$OPENSSL_DIR" != "no"; then SSL_INC="-I${OPENSSL_DIR}/include" - SSL_LIB="-L${OPENSSL_DIR}/lib -lssl -lcrypto" SSL_BIN="${OPENSSL_DIR}/bin" ! AC_DEFINE(HAVE_SSL) else SSL_LIB="" SSL_INC="" --- 736,758 ---- AC_MSG_RESULT($OPENSSL_DIR) if test "$OPENSSL_DIR" != "no"; then SSL_INC="-I${OPENSSL_DIR}/include" SSL_BIN="${OPENSSL_DIR}/bin" ! SSL_LIB="-L${OPENSSL_DIR}/lib" ! AC_CHECK_LIB(rsaref, RSAPublicEncrypt, ! [AC_CHECK_LIB(RSAglue, RSAPublicEncrypt, ! SSL_LIB="-lRSAglue -lrsaref ${SSL_LIB}",,-lrsaref $SSL_LIB)] ! ,,$SSL_LIB) ! AC_CHECK_LIB(rsaref, RSAPublicEncrypt, ! SSL_LIB="${SSL_LIB} -lRSAglue -lrsaref",,$SSL_LIB) ! AC_CHECK_LIB(crypto,BIO_accept, ! SSL_LIB="-lcrypto ${SSL_LIB}", ! [AC_MSG_ERROR(Can not find OpenSSL)], ! $SSL_LIB) ! AC_CHECK_LIB(ssl, SSL_CTX_new, ! SSL_LIB="-lssl ${SSL_LIB}"; ! [AC_DEFINE(HAVE_SSL, 1, [Define if OpenSSL is available.])], ! [AC_MSG_ERROR(Can not find OpenSSL)], ! $SSL_LIB) else SSL_LIB="" SSL_INC="" Index: inn/backends/Makefile diff -c inn/backends/Makefile:1.31 inn/backends/Makefile:1.31.2.1 *** inn/backends/Makefile:1.31 Sat Apr 8 13:46:24 2000 --- inn/backends/Makefile Mon Mar 5 14:57:07 2001 *************** *** 1,13 **** ! ## $Id: Makefile,v 1.31 2000/04/08 04:46:24 rra Exp $ include ../Makefile.global CFLAGS = $(GCFLAGS) ALL = actmerge actsync actsyncd archive batcher buffchan \ ! controlbatch cvtbatch filechan inndf innxmit innxbatch \ ! mod-active news2mail nntpget nntpsend overchan send-ihave \ ! send-nntp send-uucp sendbatch sendxbatches shlock shrinkfile EXTRA = controlchan pgpverify --- 1,14 ---- ! ## $Id: Makefile,v 1.31.2.1 2001/03/05 05:57:07 rra Exp $ include ../Makefile.global CFLAGS = $(GCFLAGS) ALL = actmerge actsync actsyncd archive batcher buffchan \ ! controlbatch cvtbatch filechan gpgverify inndf innxmit \ ! innxbatch mod-active news2mail nntpget nntpsend overchan \ ! send-ihave send-nntp send-uucp sendbatch sendxbatches \ ! shlock shrinkfile EXTRA = controlchan pgpverify *************** *** 25,30 **** --- 26,32 ---- $(D)$(PATHBIN)/controlchan \ $(D)$(PATHBIN)/cvtbatch \ $(D)$(PATHBIN)/filechan \ + $(D)$(PATHBIN)/gpgverify \ $(D)$(PATHBIN)/inndf \ $(D)$(PATHBIN)/innxmit \ $(D)$(PATHBIN)/innxbatch \ *************** *** 86,91 **** --- 88,94 ---- actmerge: actmerge.in $(FIX) ; $(FIX) actmerge.in actsyncd: actsyncd.in $(FIX) ; $(FIX) actsyncd.in controlbatch: controlbatch.in $(FIX) ; $(FIX) controlbatch.in + gpgverify: gpgverify.in $(FIX) ; $(FIX) gpgverify.in mod-active: mod-active.in $(FIX) ; $(FIX) mod-active.in news2mail: news2mail.in $(FIX) ; $(FIX) news2mail.in nntpsend: nntpsend.in $(FIX) ; $(FIX) nntpsend.in *************** *** 113,118 **** --- 116,122 ---- $(D)$(PATHBIN)/controlchan: controlchan ; $(CP_XPRI) $? $@ $(D)$(PATHBIN)/cvtbatch: cvtbatch ; $(LI_XPUB) $? $@ $(D)$(PATHBIN)/filechan: filechan ; $(LI_XPUB) $? $@ + $(D)$(PATHBIN)/gpgverify: gpgverify ; $(CP_XPUB) $? $@ $(D)$(PATHBIN)/inndf: inndf ; $(LI_XPUB) $? $@ $(D)$(PATHBIN)/innxbatch: innxbatch ; $(LI_XPUB) $? $@ $(D)$(PATHBIN)/innxmit: innxmit ; $(LI_XPUB) $? $@ Index: inn/backends/gpgverify.in diff -c /dev/null inn/backends/gpgverify.in:1.1.2.1 *** /dev/null Fri May 4 05:29:43 2001 --- inn/backends/gpgverify.in Mon Mar 5 14:57:08 2001 *************** *** 0 **** --- 1,226 ---- + #!/usr/bin/perl -w + # fixscript will replace this line with require innshellvars.pl + + # written April 1996, tale@isc.org (David C Lawrence) + # mostly rewritten 2000-22-01 by Marco d'Itri + # + # requirements: + # - GnuPG + # - perl 5.004_03 + # - syslog daemon accessible via unix domain socket + # + # There is no locking because gpg is supposed to not need it and controlchan + # will serialize control messages processing anyway. + + require 5.004_03; + use strict; + + # if you keep your keyring somewhere that is not the default used by gpg, + # set appropriately the next line. + #my $gpghome = '/etc/news/pgp'; + + # 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 + # overridden. + my $tmpdir = '/var/log/news/'; + my $syslog_facility = 'news'; + + # 1: print PGP output + my $debug = 0; + #$debug = 1 if -t 1; + + ### Exit value: + ### 0 good signature + ### 1 no signature + ### 2 unknown signature + ### 3 bad signature + ### 255 problem not directly related to gpg analysis of signature + + ############################################################################## + ################ NO USER SERVICEABLE PARTS BELOW THIS COMMENT ################ + ############################################################################## + my $tmp = ($inn::pathtmp ? $inn::pathtmp : $tmpdir) . "/pgp$$"; + $syslog_facility = $inn::syslog_facility if $inn::syslog_facility; + + my $nntp_format = 0; + $0 =~ s#^.*/##; # trim /path/to/prog to prog + + die "Usage: $0 < message\n" if $#ARGV != -1; + + # Path to gpg binary + my $gpg; + foreach (split(/:/, $ENV{PATH}), qw(/usr/local/bin /opt/gnu/bin)) { + if (-x "$_/gpg") { + $gpg = "$_/gpg"; last; + } + } + fail('cannot find gpg binary') if not $gpg; + + # this is, by design, case-sensitive with regards to the headers it checks. + # it's also insistent about the colon-space rule. + my ($label, $value, %dup, %header); + while () { + # if a 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. + $nntp_format = /\r\n$/ if $. == 1; + s/\r?\n$//; + + last if /^$/; + if (/^(\S+):[ \t](.+)/) { + ($label, $value) = ($1, $2); + $dup{$label} = 1 if $header{$label}; + $header{$label} = $value; + } elsif (/^\s/) { + fail("non-header at line $.: $_") unless $label; + $header{$label} .= "\n$_"; + } else { + fail("non-header at line $.: $_"); + } + } + + my $pgpheader = 'X-PGP-Sig'; + $_ = $header{$pgpheader}; + exit 1 if not $_; # no signature + + # 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 space + # or tab, if there is a newline then the space or tab has to follow the + # newline. any number of newlines can appear as long as each is followed + # by at least one space or tab. *phew* + my $sep = "[ \t]*(\n?[ \t]+)+"; + # match all of the characters in a radix64 string + my $r64 = '[a-zA-Z0-9+/]'; + fail("$pgpheader not in expected format") + unless /^(\S+)$sep(\S+)(($sep$r64{64})+$sep$r64+=?=?$sep=$r64{4})$/; + + my ($version, $signed_headers, $signature) = ($1, $3, $4); + $signature =~ s/$sep/\n/g; + + my $message = "-----BEGIN PGP SIGNED MESSAGE-----\n\n" + . "X-Signed-Headers: $signed_headers\n"; + + foreach $label (split(',', $signed_headers)) { + fail("duplicate signed $label header, can't verify") if $dup{$label}; + $message .= "$label: "; + $message .= $header{$label} if $header{$label}; + $message .= "\n"; + } + $message .= "\n"; # end of headers + + while () { # read body lines + if ($nntp_format) { + # check for end of article; some news servers (eg, Highwind's "Breeze") + # include the dot-CRLF of the NNTP protocol in the article data passed + # to this script + last if $_ eq ".\r\n"; + + # remove NNTP encoding + s/^\.\./\./; + s/\r\n$/\n/; + } + + s/^-/- -/; # pgp quote ("ASCII armor") dashes + $message .= $_; + } + + $message .= + "\n-----BEGIN PGP SIGNATURE-----\n" . + "Version: $version\n" . + $signature . + "\n-----END PGP SIGNATURE-----\n"; + + open(TMP, ">$tmp") or fail("open $tmp: $!"); + print TMP $message; + close TMP or errmsg("close $tmp: $!"); + + my $opts = '--verify --quiet --batch --no-tty --status-fd=1'; + $opts .= " --homedir=$gpghome" if $gpghome; + + open(PGP, "$gpg $opts < $tmp 2>&1 |") or fail("failed to execute $gpg: $!"); + + undef $/; + $_ = ; + + unlink $tmp or errmsg("unlink $tmp: $!"); + + if (not close PGP) { + if ($? >> 8) { + my $status = $? >> 8; + errmsg("gpg exited status $status") if $status > 1; + } else { + errmsg('gpg died on signal ' . ($? & 255)); + } + } + + print STDERR $_ if $debug; + + my $ok = 2; # default exit status: unknown signature + my $signer; + if (/^\[GNUPG:\]\s+BADSIG\s+/m) { + $ok = 3; + } elsif (/^\[GNUPG:\]\s+GOODSIG\s+\S+\s+(\S+)/m) { + $ok = 0; + $signer = $1; + } + + print "$signer\n" if $signer; + exit $ok; + + sub errmsg { + my $msg = $_[0]; + + eval 'use Sys::Syslog qw(:DEFAULT setlogsock)'; + die "$0: cannot use Sys::Syslog: $@ [$msg]\n" if $@; + + die "$0: cannot set syslog method [$msg]\n" + if not setlogsock('unix') or setlogsock('inet'); + + $msg .= " processing $header{'Message-ID'}" if $header{'Message-ID'}; + + openlog($0, 'pid', $syslog_facility); + syslog('err', '%s', $msg); + closelog(); + } + + sub fail { + errmsg($_[0]); + unlink $tmp; + exit 255; + } + + __END__ + + # Copyright 2000 by Marco d'Itri + + # License of the original version distributed by David C. Lawrence: + + # Copyright (c) 1996 UUNET Technologies, Inc. + # All rights reserved. + # + # 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 UUNET Technologies, Inc. + # 4. The name of UUNET Technologies ("UUNET") may not be used to endorse or + # promote products derived from this software without specific prior + # written permission. + # + # THIS SOFTWARE IS PROVIDED BY UUNET ``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 UUNET 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. Index: inn/backends/innxmit.c diff -c inn/backends/innxmit.c:1.34.2.5 inn/backends/innxmit.c:1.34.2.6 *** inn/backends/innxmit.c:1.34.2.5 Fri Aug 25 07:21:57 2000 --- inn/backends/innxmit.c Sat Mar 17 14:50:29 2001 *************** *** 1,4 **** ! /* $Revision: 1.34.2.5 $ ** ** Transmit articles to remote site. ** Modified for NNTP streaming: 3Jan96 Jerry Aguirre --- 1,4 ---- ! /* $Revision: 1.34.2.6 $ ** ** Transmit articles to remote site. ** Modified for NNTP streaming: 3Jan96 Jerry Aguirre *************** *** 127,132 **** --- 127,137 ---- STATIC double STATrejectedsize; + /* Prototypes. */ + static ARTHANDLE *article_open(const char *path, const char *id); + static void article_free(ARTHANDLE *); + + /* ** Find the history file entry for the Message-ID and return a file ** positioned at the third field. *************** *** 199,205 **** ** Flush and reset the site's output buffer. Return FALSE on error. */ STATIC BOOL ! REMflush() { int i; if (REMbuffptr == REMbuffer) return TRUE; /* nothing buffered */ --- 204,211 ---- ** Flush and reset the site's output buffer. Return FALSE on error. */ STATIC BOOL ! REMflush(void) ! { int i; if (REMbuffptr == REMbuffer) return TRUE; /* nothing buffered */ *************** *** 288,294 **** STATIC void strel(int i) { if (stbuf[i].art) { ! SMfreearticle(stbuf[i].art); stbuf[i].art = NULL; } if (stbuf[i].st_id) stbuf[i].st_id[0] = '\0'; --- 294,300 ---- STATIC void strel(int i) { if (stbuf[i].art) { ! article_free(stbuf[i].art); stbuf[i].art = NULL; } if (stbuf[i].st_id) stbuf[i].st_id[0] = '\0'; *************** *** 377,383 **** ** to be the batchfile. */ STATIC void ! CloseAndRename() { /* Close the files, rename the temporary. */ if (BATCHqp) { QIOclose(BATCHqp); --- 383,390 ---- ** to be the batchfile. */ STATIC void ! CloseAndRename(void) ! { /* Close the files, rename the temporary. */ if (BATCHqp) { QIOclose(BATCHqp); *************** *** 404,410 **** ** a file write error, exit so that the original input is left alone. */ STATIC void ! Requeue(char *Article, char *MessageID) { /* Temp file already open? */ if (BATCHfp == NULL) { (void)mktemp(BATCHtemp); --- 411,417 ---- ** a file write error, exit so that the original input is left alone. */ STATIC void ! Requeue(const char *Article, const char *MessageID) { /* Temp file already open? */ if (BATCHfp == NULL) { (void)mktemp(BATCHtemp); *************** *** 671,679 **** GetMessageID(ARTHANDLE *art) { static char *buff; static int buffsize = 0; ! char *p, *q; ! if ((p = (char *)HeaderFindMem(art->data, art->len, "Message-ID", 10)) == NULL) return NULL; for (q = p; q < art->data + art->len; q++) { if (*q == '\r' || *q == '\n') --- 678,686 ---- GetMessageID(ARTHANDLE *art) { static char *buff; static int buffsize = 0; ! const char *p, *q; ! if ((p = HeaderFindMem(art->data, art->len, "Message-ID", 10)) == NULL) return NULL; for (q = p; q < art->data + art->len; q++) { if (*q == '\r' || *q == '\n') *************** *** 750,798 **** STATIC BOOL takethis(int i) { char buff[NNTP_STRLEN]; - ARTHANDLE *art; - TOKEN token; ! if (!IsToken(stbuf[i].st_fname)) { ! strel(i); ! ++STATmissing; ! return FALSE; /* Not an error. Could be canceled or expired */ ! } ! token = TextToToken(stbuf[i].st_fname); ! if (!stbuf[i].art) { /* should already be open but ... */ ! /* Open the article. */ ! if ((art = SMretrieve(token, RETR_ALL)) == NULL) { ! strel(i); ! ++STATmissing; ! return FALSE; /* Not an error. Could be canceled or expired */ ! } ! stbuf[i].art = NEW(ARTHANDLE, 1); ! *stbuf[i].art = *art; ! } else if (SMprobe(SELFEXPIRE, &token, NULL)) { ! /* examine if the article still exists */ ! if ((art = SMretrieve(token, RETR_STAT)) == NULL) { ! strel(i); ! ++STATmissing; ! return FALSE; /* Not an error. Could be canceled or expired */ ! } ! SMfreearticle(art); } /* send "takethis " to the other system */ (void)sprintf(buff, "takethis %s", stbuf[i].st_id); if (!REMwrite(buff, (int)strlen(buff), FALSE)) { ! (void)fprintf(stderr, "Can't send takethis , %s\n", ! strerror(errno)); ! return TRUE; } if (Debug) ! (void)fprintf(stderr, "> %s\n", buff); if (GotInterrupt) ! Interrupted((char *)0, (char *)0); ! if (!REMsendarticle(stbuf[i].st_fname, stbuf[i].st_id, ! stbuf[i].art)) ! return TRUE; stbuf[i].st_size = stbuf[i].art->len; ! SMfreearticle(stbuf[i].art); /* should not need file again */ stbuf[i].art = 0; /* so close to free descriptor */ stbuf[i].st_age = 0; /* That all. Response is checked later by strlisten() */ --- 757,783 ---- STATIC BOOL takethis(int i) { char buff[NNTP_STRLEN]; ! if (!stbuf[i].art) { ! fprintf(stderr, "Internal error: null article for %s in takethis\n", ! stbuf[i].st_fname); ! return TRUE; } /* send "takethis " to the other system */ (void)sprintf(buff, "takethis %s", stbuf[i].st_id); if (!REMwrite(buff, (int)strlen(buff), FALSE)) { ! (void)fprintf(stderr, "Can't send takethis , %s\n", ! strerror(errno)); ! return TRUE; } if (Debug) ! (void)fprintf(stderr, "> %s\n", buff); if (GotInterrupt) ! Interrupted((char *)0, (char *)0); ! if (!REMsendarticle(stbuf[i].st_fname, stbuf[i].st_id, stbuf[i].art)) ! return TRUE; stbuf[i].st_size = stbuf[i].art->len; ! article_free(stbuf[i].art); /* should not need file again */ stbuf[i].art = 0; /* so close to free descriptor */ stbuf[i].st_age = 0; /* That all. Response is checked later by strlisten() */ *************** *** 805,811 **** ** return TRUE on failure. */ STATIC BOOL ! strlisten() { int resp; int i; char *id, *p; --- 790,797 ---- ** return TRUE on failure. */ STATIC BOOL ! strlisten(void) ! { int resp; int i; char *id, *p; *************** *** 910,915 **** --- 896,984 ---- } + /* + ** Open an article. If the argument is a token, retrieve the article via + ** the storage API. Otherwise, open the file and fake up an ARTHANDLE for + ** it. Only fill in those fields that we'll need. Articles not retrieved + ** via the storage API will have a type of TOKEN_EMPTY. + */ + static ARTHANDLE * + article_open(const char *path, const char *id) + { + TOKEN token; + ARTHANDLE *article; + int fd, length; + struct stat st; + char *p; + + if (IsToken(path)) { + token = TextToToken(path); + article = SMretrieve(token, RETR_ALL); + if (article == NULL) { + if (SMerrno == SMERR_NOENT || SMerrno == SMERR_UNINIT) + STATmissing++; + else { + fprintf(stderr, "Requeue %s: %s\n", path, SMerrorstr); + Requeue(path, id); + } + } + return article; + } else { + fd = open(path, O_RDONLY); + if (fd < 0) + return NULL; + if (fstat(fd, &st) < 0) { + fprintf(stderr, "Requeue %s: %s\n", path, strerror(errno)); + Requeue(path, id); + return NULL; + } + article = NEW(ARTHANDLE, 1); + article->type = TOKEN_EMPTY; + article->len = st.st_size; + article->data = NEW(char, article->len); + if (xread(fd, article->data, article->len) < 0) { + fprintf(stderr, "Requeue %s: %s\n", path, strerror(errno)); + free(article->data); + free(article); + close(fd); + Requeue(path, id); + return NULL; + } + close(fd); + p = memchr(article->data, '\n', article->len); + if (p == NULL || p == article->data) { + fprintf(stderr, "Requeue %s: can't find headers\n", path); + free(article->data); + free(article); + Requeue(path, id); + return NULL; + } + if (p[-1] != '\r') { + p = ToWireFmt(article->data, article->len, &length); + free(article->data); + article->data = p; + article->len = length; + } + return article; + } + } + + + /* + ** Free an article, using the type field to determine whether to free it + ** via the storage API. + */ + static void + article_free(ARTHANDLE *article) + { + if (article->type == TOKEN_EMPTY) { + free(article->data); + free(article); + } else + SMfreearticle(article); + } + + int main(int ac, char *av[]) { static char SKIPPING[] = "Skipping \"%s\" --%s?\n"; int i; *************** *** 926,932 **** unsigned int TotalTimeout; int port = NNTP_PORT; BOOL val; - TOKEN token; (void)openlog("innxmit", L_OPENLOG_FLAGS | LOG_PID, LOG_INN_PROG); /* Set defaults. */ --- 995,1000 ---- *************** *** 1128,1135 **** } } if (CanStream) { - int i; - for (i = 0; i < STNBUF; i++) { /* reset buffers */ stbuf[i].st_fname = 0; stbuf[i].st_id = 0; --- 1196,1201 ---- *************** *** 1216,1252 **** continue; } ! /* ! * If the IHAVE plus the "message-id", separating space and trailing ! * CR-NL will exceed the maximum command length permitted by the RFC ! * (i.e. NNTP_STRLEN), then reject the article and continue to avoid ! * overrunning buffers and throwing the server on the recieving end a ! * blow from behind. ! */ ! if (MessageID != NULL && (strlen(MessageID) > NNTP_STRLEN - 12)) { (void)fprintf(stderr, "Dropping article in \"%s\" - long message id \"%s\"\n", BATCHname, MessageID); continue; } ! if (!IsToken(Article)) ! continue; ! token = TextToToken(Article); ! /* Open the article. */ ! if ((art = SMretrieve(token, RETR_ALL)) == NULL) { ! if ((SMerrno == SMERR_NOENT) || (SMerrno == SMERR_UNINIT)) { ! ++STATmissing; ! continue; ! } else { ! (void)fprintf(stderr, "Requeue \"%s\", %s\n", ! Article, SMerrorstr); ! Requeue(Article, MessageID); ! } continue; - } if (Purging) { ! SMfreearticle(art); Requeue(Article, MessageID); continue; } --- 1282,1302 ---- continue; } ! /* Drop articles with a message ID longer than NNTP_MSGID_MAXLEN to ! avoid overrunning buffers and throwing the server on the ! receiving end a blow from behind. */ ! if (MessageID != NULL && strlen(MessageID) > NNTP_MSGID_MAXLEN) { (void)fprintf(stderr, "Dropping article in \"%s\" - long message id \"%s\"\n", BATCHname, MessageID); continue; } ! art = article_open(Article, MessageID); ! if (art == NULL) continue; if (Purging) { ! article_free(art); Requeue(Article, MessageID); continue; } *************** *** 1255,1261 **** if (MessageID == NULL) { if ((MessageID = GetMessageID(art)) == NULL) { (void)fprintf(stderr, SKIPPING, Article, "no Message-ID"); ! SMfreearticle(art); continue; } } --- 1305,1311 ---- if (MessageID == NULL) { if ((MessageID = GetMessageID(art)) == NULL) { (void)fprintf(stderr, SKIPPING, Article, "no Message-ID"); ! article_free(art); continue; } } *************** *** 1264,1270 **** /* Offer the article. */ if (CanStream) { - int i; int lim; int hash; --- 1314,1319 ---- *************** *** 1273,1279 **** if (Debug) (void)fprintf(stderr, "Skipping duplicate ID %s\n", MessageID); ! SMfreearticle(art); continue; } /* This code tries to optimize by sending a burst of "check" --- 1322,1328 ---- if (Debug) (void)fprintf(stderr, "Skipping duplicate ID %s\n", MessageID); ! article_free(art); continue; } /* This code tries to optimize by sending a burst of "check" *************** *** 1293,1299 **** /* save new article in the buffer */ i = stalloc(Article, MessageID, art, hash); if (i < 0) { ! SMfreearticle(art); RequeueRestAndExit(Article, MessageID); } if (DoCheck && (stnofail < STNC)) { --- 1342,1348 ---- /* save new article in the buffer */ i = stalloc(Article, MessageID, art, hash); if (i < 0) { ! article_free(art); RequeueRestAndExit(Article, MessageID); } if (DoCheck && (stnofail < STNC)) { *************** *** 1330,1336 **** if (!REMwrite(buff, (int)strlen(buff), FALSE)) { (void)fprintf(stderr, "Can't offer article, %s\n", strerror(errno)); ! SMfreearticle(art); RequeueRestAndExit(Article, MessageID); } STAToffered++; --- 1379,1385 ---- if (!REMwrite(buff, (int)strlen(buff), FALSE)) { (void)fprintf(stderr, "Can't offer article, %s\n", strerror(errno)); ! article_free(art); RequeueRestAndExit(Article, MessageID); } STAToffered++; *************** *** 1342,1348 **** /* Does he want it? */ if (!REMread(buff, (int)sizeof buff)) { (void)fprintf(stderr, "No reply to ihave, %s\n", strerror(errno)); ! SMfreearticle(art); RequeueRestAndExit(Article, MessageID); } if (GotInterrupt) --- 1391,1397 ---- /* Does he want it? */ if (!REMread(buff, (int)sizeof buff)) { (void)fprintf(stderr, "No reply to ihave, %s\n", strerror(errno)); ! article_free(art); RequeueRestAndExit(Article, MessageID); } if (GotInterrupt) *************** *** 1386,1392 **** #endif /* defined(NNTP_SENDIT_LATER) */ } ! SMfreearticle(art); } if (CanStream) { /* need to wait for rest of ACKs */ while (stnq > 0) { --- 1435,1441 ---- #endif /* defined(NNTP_SENDIT_LATER) */ } ! article_free(art); } if (CanStream) { /* need to wait for rest of ACKs */ while (stnq > 0) { Index: inn/backends/overchan.c diff -c inn/backends/overchan.c:1.24.2.2 inn/backends/overchan.c:1.24.2.3 *** inn/backends/overchan.c:1.24.2.2 Wed Aug 9 20:03:56 2000 --- inn/backends/overchan.c Sat Jan 27 22:32:11 2001 *************** *** 1,4 **** ! /* $Revision: 1.24.2.2 $ ** ** Parse input to add to news overview database. */ --- 1,4 ---- ! /* $Revision: 1.24.2.3 $ ** ** Parse input to add to news overview database. */ *************** *** 106,112 **** if (ReadInnConf() < 0) exit(1); (void)umask(NEWSUMASK); if (innconf->enableoverview && !innconf->useoverchan) ! syslog(L_ERROR, "overchan runs while innd creates overview data(you can ignore this message if you run makehistory '-F')"); ac -= 1; av += 1; --- 106,114 ---- if (ReadInnConf() < 0) exit(1); (void)umask(NEWSUMASK); if (innconf->enableoverview && !innconf->useoverchan) ! syslog(L_ERROR, "overchan is running while innd is creating" ! " overview data (you can ignore this message if you are" ! " running makehistory -F)"); ac -= 1; av += 1; Index: inn/doc/man/Makefile diff -c inn/doc/man/Makefile:1.14.2.4 inn/doc/man/Makefile:1.14.2.7 *** inn/doc/man/Makefile:1.14.2.4 Mon Nov 6 17:41:11 2000 --- inn/doc/man/Makefile Sat Feb 3 18:52:39 2001 *************** *** 1,13 **** ! ## $Id: Makefile,v 1.14.2.4 2000/11/06 08:41:11 rra Exp $ include ../../Makefile.global ## Edit these if you need to. MANFLAGS = -c $(OWNER) -m 0444 -B .OLD ! SEC1 = ckpasswd.1 convdate.1 getlist.1 grephistory.1 inews.1 \ ! innconfval.1 innfeed.1 nntpget.1 rnews.1 shlock.1 shrinkfile.1 \ ! startinnfeed.1 simpleftp.1 ## MISSING_MAN installs man pages for standard library functions the system ## didn't have (and which were therefore added to libinn), as detected by --- 1,13 ---- ! ## $Id: Makefile,v 1.14.2.7 2001/02/03 09:52:39 rra Exp $ include ../../Makefile.global ## Edit these if you need to. MANFLAGS = -c $(OWNER) -m 0444 -B .OLD ! SEC1 = ckpasswd.1 convdate.1 fastrm.1 getlist.1 grephistory.1 inews.1 \ ! innconfval.1 innfeed.1 innmail.1 nntpget.1 rnews.1 shlock.1 \ ! shrinkfile.1 startinnfeed.1 simpleftp.1 ## MISSING_MAN installs man pages for standard library functions the system ## didn't have (and which were therefore added to libinn), as detected by *************** *** 20,30 **** distrib.pats.5 expire.ctl.5 history.5 incoming.conf.5 inn.conf.5 \ innfeed.conf.5 innwatch.ctl.5 moderators.5 motd.news.5 newsfeeds.5 \ nnrpd.track.5 newslog.5 nnrp.access.5 nntpsend.ctl.5 ovdb.5 \ ! overview.fmt.5 passwd.nntp.5 readers.conf.5 sasl.conf.5 storage.conf.5 SEC8 = actsync.8 actsyncd.8 archive.8 batcher.8 buffchan.8 cnfsheadconf.8 \ cnfsstat.8 controlchan.8 ctlinnd.8 cvtbatch.8 expire.8 expireover.8 \ ! expirerm.8 fastrm.8 filechan.8 inncheck.8 innd.8 inndf.8 inndstart.8 \ innreport.8 innstat.8 innwatch.8 innxbatch.8 innxmit.8 mailpost.8 \ makedbz.8 makehistory.8 mod-active.8 news.daily.8 news2mail.8 \ newsrequeue.8 nnrpd.8 nntpsend.8 ovdb_recover.8 ovdb_upgrade.8 \ --- 20,31 ---- distrib.pats.5 expire.ctl.5 history.5 incoming.conf.5 inn.conf.5 \ innfeed.conf.5 innwatch.ctl.5 moderators.5 motd.news.5 newsfeeds.5 \ nnrpd.track.5 newslog.5 nnrp.access.5 nntpsend.ctl.5 ovdb.5 \ ! overview.fmt.5 passwd.nntp.5 readers.conf.5 sasl.conf.5 \ ! subscriptions.5 storage.conf.5 SEC8 = actsync.8 actsyncd.8 archive.8 batcher.8 buffchan.8 cnfsheadconf.8 \ cnfsstat.8 controlchan.8 ctlinnd.8 cvtbatch.8 expire.8 expireover.8 \ ! expirerm.8 filechan.8 inncheck.8 innd.8 inndf.8 inndstart.8 \ innreport.8 innstat.8 innwatch.8 innxbatch.8 innxmit.8 mailpost.8 \ makedbz.8 makehistory.8 mod-active.8 news.daily.8 news2mail.8 \ newsrequeue.8 nnrpd.8 nntpsend.8 ovdb_recover.8 ovdb_upgrade.8 \ *************** *** 32,40 **** send-uucp.8 sm.8 tally.control.8 writelog.8 dbprocs.8 INSTALLED_SEC1 = $D$(MAN1)/ckpasswd.1 $D$(MAN1)/convdate.1 \ $D$(MAN1)/getlist.1 $D$(MAN1)/grephistory.1 \ $D$(MAN1)/inews.1 $D$(MAN1)/innconfval.1 \ ! $D$(MAN1)/innfeed.1 $D$(MAN1)/nntpget.1 \ $D$(MAN1)/rnews.1 $D$(MAN1)/shlock.1 \ $D$(MAN1)/shrinkfile.1 $D$(MAN1)/startinnfeed.1 \ $D$(MAN1)/simpleftp.1 --- 33,43 ---- send-uucp.8 sm.8 tally.control.8 writelog.8 dbprocs.8 INSTALLED_SEC1 = $D$(MAN1)/ckpasswd.1 $D$(MAN1)/convdate.1 \ + $D$(MAN1)/fastrm.1 \ $D$(MAN1)/getlist.1 $D$(MAN1)/grephistory.1 \ $D$(MAN1)/inews.1 $D$(MAN1)/innconfval.1 \ ! $D$(MAN1)/innfeed.1 $D$(MAN1)/innmail.1 \ ! $D$(MAN1)/nntpget.1 \ $D$(MAN1)/rnews.1 $D$(MAN1)/shlock.1 \ $D$(MAN1)/shrinkfile.1 $D$(MAN1)/startinnfeed.1 \ $D$(MAN1)/simpleftp.1 *************** *** 56,62 **** $D$(MAN5)/nntpsend.ctl.5 $D$(MAN5)/ovdb.5 \ $D$(MAN5)/overview.fmt.5 $D$(MAN5)/passwd.nntp.5 \ $D$(MAN5)/readers.conf.5 $D$(MAN5)/sasl.conf.5 \ ! $D$(MAN5)/storage.conf.5 INSTALLED_SEC8 = $D$(MAN8)/actsync.8 $D$(MAN8)/actsyncd.8 \ $D$(MAN8)/archive.8 $D$(MAN8)/batcher.8 \ --- 59,65 ---- $D$(MAN5)/nntpsend.ctl.5 $D$(MAN5)/ovdb.5 \ $D$(MAN5)/overview.fmt.5 $D$(MAN5)/passwd.nntp.5 \ $D$(MAN5)/readers.conf.5 $D$(MAN5)/sasl.conf.5 \ ! $D$(MAN5)/subscriptions.5 $D$(MAN5)/storage.conf.5 INSTALLED_SEC8 = $D$(MAN8)/actsync.8 $D$(MAN8)/actsyncd.8 \ $D$(MAN8)/archive.8 $D$(MAN8)/batcher.8 \ *************** *** 64,70 **** $D$(MAN8)/cnfsstat.8 $D$(MAN8)/controlchan.8 \ $D$(MAN8)/ctlinnd.8 $D$(MAN8)/cvtbatch.8 \ $D$(MAN8)/expire.8 $D$(MAN8)/expireover.8 \ ! $D$(MAN8)/expirerm.8 $D$(MAN8)/fastrm.8 \ $D$(MAN8)/filechan.8 $D$(MAN8)/inncheck.8 \ $D$(MAN8)/innd.8 $D$(MAN8)/inndf.8 \ $D$(MAN8)/inndstart.8 $D$(MAN8)/innreport.8 \ --- 67,73 ---- $D$(MAN8)/cnfsstat.8 $D$(MAN8)/controlchan.8 \ $D$(MAN8)/ctlinnd.8 $D$(MAN8)/cvtbatch.8 \ $D$(MAN8)/expire.8 $D$(MAN8)/expireover.8 \ ! $D$(MAN8)/expirerm.8 \ $D$(MAN8)/filechan.8 $D$(MAN8)/inncheck.8 \ $D$(MAN8)/innd.8 $D$(MAN8)/inndf.8 \ $D$(MAN8)/inndstart.8 $D$(MAN8)/innreport.8 \ *************** *** 113,123 **** --- 116,128 ---- $D$(MAN1)/ckpasswd.1: ckpasswd.1 ; $(COPY) $? $@ $D$(MAN1)/convdate.1: convdate.1 ; $(COPY) $? $@ + $D$(MAN1)/fastrm.1: fastrm.1 ; $(COPY) $? $@ $D$(MAN1)/getlist.1: getlist.1 ; $(COPY) $? $@ $D$(MAN1)/grephistory.1: grephistory.1 ; $(COPY) $? $@ $D$(MAN1)/inews.1: inews.1 ; $(COPY) $? $@ $D$(MAN1)/innconfval.1: innconfval.1 ; $(COPY) $? $@ $D$(MAN1)/innfeed.1: innfeed.1 ; $(COPY) $? $@ + $D$(MAN1)/innmail.1: innmail.1 ; $(COPY) $? $@ $D$(MAN1)/nntpget.1: nntpget.1 ; $(COPY) $? $@ $D$(MAN1)/rnews.1: rnews.1 ; $(COPY) $? $@ $D$(MAN1)/shlock.1: shlock.1 ; $(COPY) $? $@ *************** *** 157,162 **** --- 162,168 ---- $D$(MAN5)/passwd.nntp.5: passwd.nntp.5 ; $(COPY) $? $@ $D$(MAN5)/readers.conf.5: readers.conf.5 ; $(COPY) $? $@ $D$(MAN5)/sasl.conf.5: sasl.conf.5 ; $(COPY) $? $@ + $D$(MAN5)/subscriptions.5: subscriptions.5 ; $(COPY) $? $@ $D$(MAN5)/storage.conf.5: storage.conf.5 ; $(COPY) $? $@ $D$(MAN8)/actsync.8: actsync.8 ; $(COPY) $? $@ *************** *** 173,179 **** $D$(MAN8)/expire.8: expire.8 ; $(COPY) $? $@ $D$(MAN8)/expireover.8: expireover.8 ; $(COPY) $? $@ $D$(MAN8)/expirerm.8: expirerm.8 ; $(COPY) $? $@ - $D$(MAN8)/fastrm.8: fastrm.8 ; $(COPY) $? $@ $D$(MAN8)/filechan.8: filechan.8 ; $(COPY) $? $@ $D$(MAN8)/inncheck.8: inncheck.8 ; $(COPY) $? $@ $D$(MAN8)/innd.8: innd.8 ; $(COPY) $? $@ --- 179,184 ---- Index: inn/doc/man/ctlinnd.8 diff -c inn/doc/man/ctlinnd.8:1.16.2.2 inn/doc/man/ctlinnd.8:1.16.2.3 *** inn/doc/man/ctlinnd.8:1.16.2.2 Thu Aug 17 22:32:04 2000 --- inn/doc/man/ctlinnd.8 Sun Mar 11 22:42:49 2001 *************** *** 1,4 **** ! .\" $Revision: 1.16.2.2 $ .TH CTLINND 8 .SH NAME ctlinnd \- control the InterNetNews daemon --- 1,4 ---- ! .\" $Revision: 1.16.2.3 $ .TH CTLINND 8 .SH NAME ctlinnd \- control the InterNetNews daemon *************** *** 575,580 **** --- 575,583 ---- If it starts with the letter ``n'' then future .IR nnrpd 's will or will not have the ``\-t'' flag enabled, as appropriate. + \&``n'' does not affect to + .I nnrpd + with ``-D'' (running as a daemon). .TP .BI xabort " reason" The server logs the specified *************** *** 617,623 **** .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: ctlinnd.8,v 1.16.2.2 2000/08/17 13:32:04 kondou Exp $ .SH "SEE ALSO" active(5), expire(8), --- 620,626 ---- .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: ctlinnd.8,v 1.16.2.3 2001/03/11 13:42:49 kondou Exp $ .SH "SEE ALSO" active(5), expire(8), Index: inn/doc/man/fastrm.1 diff -c /dev/null inn/doc/man/fastrm.1:1.1.2.1 *** /dev/null Fri May 4 05:29:44 2001 --- inn/doc/man/fastrm.1 Sat Feb 3 16:38:44 2001 *************** *** 0 **** --- 1,304 ---- + .\" Automatically generated by Pod::Man version 1.14 + .\" Fri Feb 2 22:44:34 2001 + .\" + .\" 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 Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. + .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. + .bd B 3 + . \" 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 "FASTRM 1" + .TH FASTRM 1 "INN 2.3.2" "2001-02-02" "InterNetNews Documentation" + .UC + .SH "NAME" + fastrm \- Quickly remove a list of files + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + \&\fBfastrm\fR [\fB\-de\fR] [\fB\-u\fR|\fB\-u\fR\fIN\fR] [\fB\-s\fR|\fB\-s\fR\fIM\fR] [\fB\-c\fR|\fB\-c\fR\fII\fR] + \&\fIbase-directory\fR + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + \&\fBfastrm\fR reads a list of either file names or storage \s-1API\s0 tokens, one per + line, from its standard input and removes them. Storage \s-1API\s0 tokens are + removed via the \fISMcancel()\fR interface. + .PP + If a file name is not an absolute path name, it is considered to be + relative to \fIbase-directory\fR as given on the command line. The + \&\fIbase-directory\fR parameter must be a simple absolute pathname (it must + not contain multiple consecutive slashes or references to the special + directories \f(CW\*(C`.\*(C'\fR or \f(CW\*(C`..\*(C'\fR). + .PP + \&\fBfastrm\fR is designed to be faster than the typical \f(CW\*(C`| xargs rm\*(C'\fR pipeline + when given a sorted list of file names as input. For example, \fBfastrm\fR + will usually \fIchdir\fR\|(2) into a directory before removing files from it, + meaning that if its input is sorted, most names passed to \fIunlink\fR\|(2) will + be simple names. This can substantially reduce the operating system + overhead from directory lookups. + .PP + \&\fBfastrm\fR assumes that its input is valid and that it is safe to call + \&\fIunlink\fR\|(2) on every file name it is given. As a safety measure, however, + \&\fBfastrm\fR when running as root will check with \fIstat\fR\|(2) that a file name + doesn't specify a directory before removing it. (In some operating + systems, root is allowed to unlink directories, even directories which + aren't empty, which can cause file system corruption.) + .PP + The input to \fBfastrm\fR should always be sorted \*(-- or even better be in the + order file names are output by \fIfind\fR\|(1) \*(-- if speed is an issue and the + input isn't solely storage \s-1API\s0 tokens. (It deals fine with unsorted + input, but is unlikely to be any faster in that case than a simple \f(CW\*(C`xargs + rm\*(C'\fR command.) Sorting may even slightly speed up the removal of storage + \&\s-1API\s0 tokens due to caching effects, since sorting will tend to keep all of + the tokens from a particular storage method together. + .PP + Various additional optimizations for removing files can be turned on + and/or tuned with options (see below). Which options will be most + effective depends heavily on the underlying structure of the file system, + the way in which directories are stored and searched, and similar often + underdocumented operating system implementation details. The more + sophisticated the underlying operating system and file system, the more + likely that it will already perform the equivalent of these optimizations + internally. + .SH "OPTIONS" + .IX Header "OPTIONS" + .Ip "\fB\-d\fR" 4 + .IX Item "-d" + Don't remove any files. Instead, print a list of the files that would be + removed to standard output. Each line contains either the current + directory of \fBfastrm\fR at the time it would do the unlink and the relative + path name it would pass to \fIunlink\fR\|(2) as two fields separated by whitespace + and a \f(CW\*(C`/\*(C'\fR, the absolute path name (as a single field) that would be + passed to \fIunlink\fR\|(2), or the string \f(CW\*(C`Token\*(C'\fR and the storage \s-1API\s0 token that + would be removed. + .Ip "\fB\-e\fR" 4 + .IX Item "-e" + Treat an empty input file as an error. This is most useful when \fBfastrm\fR + is last in a pipeline after a preceding \fIsort\fR\|(1) command, ensuring that + \&\fBfastrm\fR will fail if the sort fails. + .Ip "\fB\-c\fR\fII\fR" 4 + .IX Item "-cI" + Controls when \fBfastrm\fR calls \fIchdir\fR\|(2). If the number of files to be + unlinked from a given directory is at least \fII\fR, then \fBfastrm\fR will + change to that directory before unlinking those files. Otherwise, it will + use either the absolute path names or a path name relative to the current + directory (whichever is likely more efficient). The \fII\fR parameter is + optional; if just \fB\-c\fR is given, \fB\-c1\fR is assumed, which will cause + \&\fBfastrm\fR to always chdir before calling \fIunlink\fR\|(2). The default is + \&\fB\-c3\fR. Use \fB\-c0\fR to prevent \fBfastrm\fR from ever using \fIchdir\fR\|(2). + .Ip "\fB\-s\fR\fIM\fR" 4 + .IX Item "-sM" + When \fB\-s\fR is given and the number of files to remove in a directory is + greater than \fIM\fR, rather than remove files in the order given, \fBfastrm\fR + will open the directory and read it, unlinking files in the order that + they appear in the directory. On systems with a per-process directory + cache or that use a linear search to find files in a directory, this + should make directory lookups faster. The \fIM\fR parameter is optional; if + just \fB\-s\fR is given, \fB\-s5\fR is assumed. + .Sp + When this option is in effect, \fBfastrm\fR won't attempt to remove files + that it doesn't see in the directory, possibly significantly speeding it + up if most of the files to be removed have already been deleted. However, + using this option requires \fBfastrm\fR to do more internal work and it also + assumes that the order of directory listings is stable in the presence of + calls to \fIunlink\fR\|(2) between calls to \fIreaddir\fR\|(3). This may be a dangerous + assumption with some sophisticated file systems (and in general this + option is only useful with file systems that use unindexed linear searches + to find files in directories or when most of the files to be removed have + already been deleted). + .Sp + This optimization is off by default. + .Ip "\fB\-u\fR\fIN\fR" 4 + .IX Item "-uN" + Specifying this option promises that there are no symbolic links in the + directory tree from which files are being removed. This allows \fBfastrm\fR + to make an additional optimization to its calls to \fIchdir\fR\|(2), constructing + a relative path using \f(CW\*(C`../..\*(C'\fR and the like to pass to \fIchdir\fR\|(2) rather + than always using absolute paths. Since this reduces the number of + directory lookups needed with deeply nested directory structures (such as + that typically created by traditional news spool storage), it can be a + significant optimization, but it breaks horribly in the presence of + symbolic links to directories. + .Sp + When \fB\-u\fR is given, \fBfastrm\fR will use at most \fIN\fR levels of \f(CW\*(C`..\*(C'\fR + segments to construct paths. \fIN\fR is optional; if just \fB\-u\fR is given, + \&\fB\-u1\fR is assumed. + .Sp + This optimization is off by default. + .PP + \&\fBfastrm\fR also accepts \fB\-a\fR and \fB\-r\fR options, which do nothing at all + except allow you to say \f(CW\*(C`fastrm \-usa\*(C'\fR, \f(CW\*(C`fastrm \-ussr\*(C'\fR, or \f(CW\*(C`fastrm + \&\-user\*(C'\fR. These happen to often be convenient sets of options to use. + .SH "EXIT STATUS" + .IX Header "EXIT STATUS" + \&\fBfastrm\fR exits with a status of zero if there were no problems, and an + exit status of 1 if something went wrong. Attempting to remove a file + that does not exist is not considered a problem. + .SH "EXAMPLES" + .IX Header "EXAMPLES" + \&\fBfastrm\fR is typically invoked by \s-1INN\s0 via \fIexpirerm\fR\|(8) using a command + like: + .PP + .Vb 1 + \& fastrm -e /usr/local/news/spool/articles < expire.list + .Ve + To enable all optimizations and see the affect on the order of removal + caused by \fB\-s\fR, use: + .PP + .Vb 1 + \& fastrm -d -s -e -u ~news/spool/articles < expire.list + .Ve + If your file system has indexed directory lookups, but you have a deeply + nested directory structure, you may want to use a set of flags like: + .PP + .Vb 1 + \& fastrm -e -u3 ~news/spool/articles < expire.list + .Ve + to strongly prefer relative paths but not to use \fIreaddir\fR\|(2) to order the + calls to \fIunlink\fR\|(2). + .PP + You may want to edit \fIexpirerm\fR\|(8) to change the flags passed to \fBfastrm\fR. + .SH "NOTES" + .IX Header "NOTES" + \&\fBfastrm\fR defers opening the storage subsystem or attempting to parse any + \&\s-1INN\s0 configuration files until it encounters a token in the list of files + to remove. It's therefore possible to use \fBfastrm\fR outside of \s-1INN\s0 as a + general fast file removal program. + .SH "HISTORY" + .IX Header "HISTORY" + \&\fBfastrm\fR was originally written by kre@munnari.oz.au. This manual page + rewritten in \s-1POD\s0 by Russ Allbery for + InterNetNews. + .PP + $Id: fastrm.1,v 1.1.2.1 2001/02/03 07:38:44 rra Exp $ + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIexpirerm\fR\|(8) Index: inn/doc/man/fastrm.8 diff -c inn/doc/man/fastrm.8:1.3.2.1 inn/doc/man/fastrm.8:removed *** inn/doc/man/fastrm.8:1.3.2.1 Wed Oct 11 06:35:54 2000 --- inn/doc/man/fastrm.8 Fri May 4 05:29:44 2001 *************** *** 1,37 **** - .\" $Revision $ - .TH FASTRM 1 - .SH NAME - fastrm \- quickly remove a set of files - .SH SYNOPSIS - .B fastrm - [ - .B \-e - ] - .SH DESCRIPTION - .I Fastrm - reads a list of article tokens, one per line, - from its standard input and removes them. - .SH OPTIONS - .TP - .B \-e - If the ``\fB\-e\fP'' flag is used, - .I fastrm - will treat an empty input file (\fBstdin\fP) as an error. - This is most useful when - .I fastrm - is last in a pipeline after a preceding - .BR sort (1) - as if the sort fails, there will usually be no output to become - input of - .IR fastrm . - .SH "EXIT STATUS" - .PP - .I Fastrm - exits with a status of zero if there were no problems, or one if something - went wrong. - Attempting to remove a file that does not exist is not considered a problem. - .SH HISTORY - .de R$ - This is revision \\$3, dated \\$4. - .. - .R$ $Id: fastrm.8,v 1.3.2.1 2000/10/10 21:35:54 kondou Exp $ --- 0 ---- Index: inn/doc/man/incoming.conf.5 diff -c inn/doc/man/incoming.conf.5:1.11.2.2 inn/doc/man/incoming.conf.5:1.11.2.3 *** inn/doc/man/incoming.conf.5:1.11.2.2 Thu Aug 17 22:32:07 2000 --- inn/doc/man/incoming.conf.5 Sat Jan 13 01:59:45 2001 *************** *** 1,4 **** ! .\" $Revision: 1.11.2.2 $ .TH INCOMING.CONF 5 .SH NAME incoming.conf \- names and addresses that feed us news --- 1,4 ---- ! .\" $Revision: 1.11.2.3 $ .TH INCOMING.CONF 5 .SH NAME incoming.conf \- names and addresses that feed us news *************** *** 165,175 **** from another peer. This can be useful for peers that resend messages right away, as innfeed does. (default=false) .SH HISTORY ! Written by Fabien Tassin for InterNetNews. .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: incoming.conf.5,v 1.11.2.2 2000/08/17 13:32:07 kondou Exp $ .SH "SEE ALSO" inn.conf(5), innd(8), --- 165,175 ---- from another peer. This can be useful for peers that resend messages right away, as innfeed does. (default=false) .SH HISTORY ! Written by Fabien Tassin for InterNetNews. .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: incoming.conf.5,v 1.11.2.3 2001/01/12 16:59:45 kondou Exp $ .SH "SEE ALSO" inn.conf(5), innd(8), Index: inn/doc/man/inn.conf.5 diff -c inn/doc/man/inn.conf.5:1.86.2.5 inn/doc/man/inn.conf.5:1.86.2.6 *** inn/doc/man/inn.conf.5:1.86.2.5 Fri Oct 13 16:53:42 2000 --- inn/doc/man/inn.conf.5 Tue Jan 16 23:01:33 2001 *************** *** 1,5 **** ! .\" Automatically generated by Pod::Man version 1.04 ! .\" Sun Jul 16 23:44:46 2000 .\" .\" Standard preamble: .\" ====================================================================== --- 1,5 ---- ! .\" Automatically generated by Pod::Man version 1.14 ! .\" Tue Jan 16 06:00:02 2001 .\" .\" Standard preamble: .\" ====================================================================== *************** *** 46,53 **** . 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\| --- 46,53 ---- . 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\| *************** *** 63,69 **** .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" ! . . . nr % 0 . rr F .\} --- 63,69 ---- .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" ! .. . nr % 0 . rr F .\} *************** *** 137,144 **** .rm #[ #] #H #V #F C .\" ====================================================================== .\" ! .IX Title "inn.conf 5" ! .TH inn.conf 5 "INN 2.3.0" "2000-07-16" "InterNetNews Documentation" .UC .SH "NAME" inn.conf \- Configuration data for InterNetNews programs --- 137,144 ---- .rm #[ #] #H #V #F C .\" ====================================================================== .\" ! .IX Title "INN.CONF 1" ! .TH INN.CONF 1 "INN 2.3" "2001-01-16" "InterNetNews Documentation" .UC .SH "NAME" inn.conf \- Configuration data for InterNetNews programs *************** *** 170,175 **** --- 170,181 ---- \&\fIinn.conf\fR; those defaults are noted in the description of each parameter. .PP + For the time being, it is strongly recommended to include every parameter + in \fIinn.conf\fR even if it is set to the default value, since some shell + scripts don't correctly handle missing keys that they care about. This is + a difficult-to-fix bug in the current parser that will be fixed in future + versions of \s-1INN\s0. + .PP Many parameters take a boolean value. For all such parameters, the value may be specified as \f(CW\*(C`true\*(C'\fR, \f(CW\*(C`yes\*(C'\fR, or \f(CW\*(C`on\*(C'\fR to turn it on and may be any of \f(CW\*(C`false\*(C'\fR, \f(CW\*(C`no\*(C'\fR, or \f(CW\*(C`off\*(C'\fR to turn it off. The case of these values is *************** *** 179,185 **** generally not affect any running programs until they restart. Unlike nearly every other configuration file, \fIinn.conf\fR cannot be reloaded dynamically using \fIctlinnd\fR\|(8); \fIinnd\fR\|(8) must be stopped and restarted for ! relevant changes to \fIinn.conf\fR to take effect. .PP This documentation is extremely long and organized as a reference manual rather than as a tutorial. If this is your first exposure to \s-1INN\s0 and --- 185,192 ---- generally not affect any running programs until they restart. Unlike nearly every other configuration file, \fIinn.conf\fR cannot be reloaded dynamically using \fIctlinnd\fR\|(8); \fIinnd\fR\|(8) must be stopped and restarted for ! relevant changes to \fIinn.conf\fR to take effect (\f(CW\*(C`ctlinnd xexec innd\*(C'\fR is ! the fastest way to do this.) .PP This documentation is extremely long and organized as a reference manual rather than as a tutorial. If this is your first exposure to \s-1INN\s0 and *************** *** 460,475 **** \&\f(CW\*(C`tradindexed\*(C'\fR, \f(CW\*(C`buffindexed\*(C'\fR, and \f(CW\*(C`ovdb\*(C'\fR. There is no default value; this parameter must be set if \fIenableoverview\fR is true (the default). .RS 4 ! .Ip "\f(CW\*(C`buffindexed\*(C'\fR" 4 .IX Item "buffindexed" Stores overview data and index information into buffers, which are preconfigured files defined in \fIbuffinedexed.conf\fR. \f(CW\*(C`buffindexed\*(C'\fR never consumes additional disk space beyond that allocated to these buffers. ! .Ip "\f(CW\*(C`tradindexed\*(C'\fR" 4 .IX Item "tradindexed" Uses two files per newsgroup, one containing the overview data and one containing the index. Fast for readers, but slow to write to. ! .Ip "\f(CW\*(C`ovdb\*(C'\fR" 4 .IX Item "ovdb" Stores data into a Berkeley \s-1DB\s0 database. See the \fIovdb\fR\|(5) man page. .RE --- 467,485 ---- \&\f(CW\*(C`tradindexed\*(C'\fR, \f(CW\*(C`buffindexed\*(C'\fR, and \f(CW\*(C`ovdb\*(C'\fR. There is no default value; this parameter must be set if \fIenableoverview\fR is true (the default). .RS 4 ! .if n .Ip "\f(CW""""buffindexed""""\fR" 4 ! .el .Ip "\f(CWbuffindexed\fR" 4 .IX Item "buffindexed" Stores overview data and index information into buffers, which are preconfigured files defined in \fIbuffinedexed.conf\fR. \f(CW\*(C`buffindexed\*(C'\fR never consumes additional disk space beyond that allocated to these buffers. ! .if n .Ip "\f(CW""""tradindexed""""\fR" 4 ! .el .Ip "\f(CWtradindexed\fR" 4 .IX Item "tradindexed" Uses two files per newsgroup, one containing the overview data and one containing the index. Fast for readers, but slow to write to. ! .if n .Ip "\f(CW""""ovdb""""\fR" 4 ! .el .Ip "\f(CWovdb\fR" 4 .IX Item "ovdb" Stores data into a Berkeley \s-1DB\s0 database. See the \fIovdb\fR\|(5) man page. .RE *************** *** 1064,1070 **** Written by Rich \f(CW$alz\fR for InterNetNews and since modified, updated, and reorganized by innumerable other people. .PP ! $Id: inn.conf.5,v 1.86.2.5 2000/10/13 07:53:42 kondou Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIinews\fR\|(1), \fIinnd\fR\|(8), \fIinnwatch\fR\|(8), \fInnrpd\fR\|(8), \fIrnews\fR\|(1). --- 1074,1080 ---- Written by Rich \f(CW$alz\fR for InterNetNews and since modified, updated, and reorganized by innumerable other people. .PP ! $Id: inn.conf.5,v 1.86.2.6 2001/01/16 14:01:33 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIinews\fR\|(1), \fIinnd\fR\|(8), \fIinnwatch\fR\|(8), \fInnrpd\fR\|(8), \fIrnews\fR\|(1). Index: inn/doc/man/innfeed.conf.5 diff -c inn/doc/man/innfeed.conf.5:1.9 inn/doc/man/innfeed.conf.5:1.9.2.1 *** inn/doc/man/innfeed.conf.5:1.9 Tue Nov 16 22:50:42 1999 --- inn/doc/man/innfeed.conf.5 Sun Mar 11 15:33:49 2001 *************** *** 4,10 **** .\" Start Date: Sun, 21 Jan 1996 00:47:37 +1100 .\" Project: INN -- innfeed .\" File: innfeed.conf.5 ! .\" RCSId: $Id: innfeed.conf.5,v 1.9 1999/11/16 13:50:42 kondou Exp $ .\" Description: Man page for innfeed.conf(5) .\" .TH innfeed.conf 5 --- 4,10 ---- .\" Start Date: Sun, 21 Jan 1996 00:47:37 +1100 .\" Project: INN -- innfeed .\" File: innfeed.conf.5 ! .\" RCSId: $Id: innfeed.conf.5,v 1.9.2.1 2001/03/11 06:33:49 rra Exp $ .\" Description: Man page for innfeed.conf(5) .\" .TH innfeed.conf 5 *************** *** 209,216 **** .TP .B backlog-ckpt-period This key requires a positive integer value. It specifies how many seconds ! between checkpoints of the input backlog file. To small a number will mean ! frequent disk accesses, to large a number will mean after a crash innfeed will re-offer more already-processed articles than necessary. .TP .B backlog-newfile-period --- 209,216 ---- .TP .B backlog-ckpt-period This key requires a positive integer value. It specifies how many seconds ! between checkpoints of the input backlog file. Too small a number will mean ! frequent disk accesses, too large a number will mean after a crash innfeed will re-offer more already-processed articles than necessary. .TP .B backlog-newfile-period *************** *** 653,658 **** .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: innfeed.conf.5,v 1.9 1999/11/16 13:50:42 kondou Exp $ .SH SEE ALSO innfeed(1), newsfeeds(5) --- 653,658 ---- .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: innfeed.conf.5,v 1.9.2.1 2001/03/11 06:33:49 rra Exp $ .SH SEE ALSO innfeed(1), newsfeeds(5) Index: inn/doc/man/innmail.1 diff -c /dev/null inn/doc/man/innmail.1:1.1.2.1 *** /dev/null Fri May 4 05:29:45 2001 --- inn/doc/man/innmail.1 Sat Feb 3 18:52:39 2001 *************** *** 0 **** --- 1,196 ---- + .\" Automatically generated by Pod::Man version 1.14 + .\" Sat Feb 3 01:50:41 2001 + .\" + .\" 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 Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. + .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. + .bd B 3 + . \" 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 "INNMAIL 1" + .TH INNMAIL 1 "INN 2.3.2" "2001-02-03" "InterNetNews Documentation" + .UC + .SH "NAME" + innmail \- Simple mail-sending program + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + \&\fBinnmail\fR [\fB\-h\fR] [\fB\-s\fR \fIsubject\fR] \fIaddress\fR [\fIaddress\fR ...] + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + \&\fBinnmail\fR is a Perl script intended to provide the non-interactive + mail-sending functionality of \fImail\fR\|(1) while avoiding nasty security + problems. It takes the body of a mail message on standard input and sends + it to the specified addresses by invoking the value of \fImta\fR in + \&\fIinn.conf\fR. + .PP + At least one address (formatted for the \s-1MTA\s0 specified in \fIinn.conf\fR if it + matters) is required. \fBinnmail\fR will sanitize the addresses so that they + contain only alphanumerics and the symbols \f(CW\*(C`@\*(C'\fR, \f(CW\*(C`.\*(C'\fR, \f(CW\*(C`\-\*(C'\fR, \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`_\*(C'\fR, + and \f(CW\*(C`%\*(C'\fR. + .PP + \&\fBinnmail\fR was written to be suitable for the \fImailcmd\fR setting in + \&\fIinn.conf\fR. + .SH "OPTIONS" + .IX Header "OPTIONS" + .Ip "\fB\-h\fR" 4 + .IX Item "-h" + Gives usage information. + .Ip "\fB\-s\fR \fIsubject\fR" 4 + .IX Item "-s subject" + Sets the Subject: header of the message. A warning is issued if this + option is omitted. + .SH "EXAMPLES" + .IX Header "EXAMPLES" + This sends a one-line message to the local user \f(CW\*(C`joe\*(C'\fR: + .PP + .Vb 1 + \& echo "A one-line message." | innmail -s "Simple message" joe + .Ve + \&\fBinnmail\fR by default is used by \s-1INN\s0 for sending nightly reports and + control message reports. + .SH "BUGS" + .IX Header "BUGS" + \&\fBinnmail\fR fails on addresses that begin with \f(CW\*(C`\-\*(C'\fR, although one might + hope that the news server will not need to contact any such addresses. + .PP + There are many \*(L"correct\*(R" addresses that will be silently modified by the + sanitization process. A news administrator should be careful to use + particularly sane addresses if they may be passed to \fBinnmail\fR. + .SH "HISTORY" + .IX Header "HISTORY" + \&\fBinnmail\fR was written by James Brister for + InterNetNews. This manual page was originally written by Jeffrey + M. Vinocur. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIinn.conf\fR\|(5), \fImail\fR\|(1). Index: inn/doc/man/innreport.8 diff -c inn/doc/man/innreport.8:1.1 inn/doc/man/innreport.8:1.1.6.1 *** inn/doc/man/innreport.8:1.1 Mon Mar 23 23:18:09 1998 --- inn/doc/man/innreport.8 Sat Jan 13 01:59:46 2001 *************** *** 23,33 **** There are lots of 'em. Run innreport with ``\-h'' or ``\-help'' to get full details. .SH HISTORY ! Written by Fabien Tassin for InterNetNews. .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: innreport.8,v 1.1 1998/03/23 14:18:09 mibsoft Exp $ .SH "SEE ALSO" innd(8), --- 23,33 ---- There are lots of 'em. Run innreport with ``\-h'' or ``\-help'' to get full details. .SH HISTORY ! Written by Fabien Tassin for InterNetNews. .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: innreport.8,v 1.1.6.1 2001/01/12 16:59:46 kondou Exp $ .SH "SEE ALSO" innd(8), Index: inn/doc/man/readers.conf.5 diff -c inn/doc/man/readers.conf.5:1.5.2.3 inn/doc/man/readers.conf.5:1.5.2.8 *** inn/doc/man/readers.conf.5:1.5.2.3 Sat Jun 24 18:52:41 2000 --- inn/doc/man/readers.conf.5 Sat Mar 3 16:57:56 2001 *************** *** 1,5 **** ! .\" Automatically generated by Pod::Man version 1.04 ! .\" Sat Jun 24 02:51:20 2000 .\" .\" Standard preamble: .\" ====================================================================== --- 1,5 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Fri Mar 2 23:56:46 2001 .\" .\" Standard preamble: .\" ====================================================================== *************** *** 46,53 **** . 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\| --- 46,53 ---- . 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\| *************** *** 63,69 **** .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" ! . . . nr % 0 . rr F .\} --- 63,69 ---- .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" ! .. . nr % 0 . rr F .\} *************** *** 138,144 **** .\" ====================================================================== .\" .IX Title "readers.conf 5" ! .TH readers.conf 5 "INN 2.3" "2000-06-24" "InterNetNews Documentation" .UC .SH "NAME" readers.conf \- Access control and configuration for nnrpd --- 138,144 ---- .\" ====================================================================== .\" .IX Title "readers.conf 5" ! .TH readers.conf 5 "INN 2.3.2" "2001-03-02" "InterNetNews Documentation" .UC .SH "NAME" readers.conf \- Access control and configuration for nnrpd *************** *** 268,274 **** Just like with auth groups, when matching access groups the last matching one in the file is used to determine the user's permissions. .PP ! There is one additional special case to be aware of. First, when forming particularly complex authentication and authorization rules, it is sometimes useful for the identities provided by a given auth group to only apply to particular access groups; in other words, rather than checking --- 268,274 ---- Just like with auth groups, when matching access groups the last matching one in the file is used to determine the user's permissions. .PP ! There is one additional special case to be aware of. When forming particularly complex authentication and authorization rules, it is sometimes useful for the identities provided by a given auth group to only apply to particular access groups; in other words, rather than checking *************** *** 324,329 **** --- 324,331 ---- break that auth group into multiple auth groups, each with a portion of the hosts listed in its hosts: parameter, and each assigning the same user identity. + .Sp + All hosts match if this parameter does not exist. .Ip "\fBres:\fR" 4 .IX Item "res:" A command line for a user resolver. The program executed must be located *************** *** 371,381 **** .IX Item "users:" The privileges given by this access group apply to any user identity which matches this comma-separated list of wildmat patterns. If this parameter ! isn't given, the access group applies to all users. Note that the absence ! of this parameter is not the same as \f(CW\*(C`users: *\*(C'\fR; the latter will match ! all successful authentications and any client matching an auth group with ! a default: parameter, but the former will match any client including one ! that failed authentication and is in an auth group without a default. .Ip "\fBnewsgroups:\fR" 4 .IX Item "newsgroups:" Users that match this access group are allowed to read and post to all --- 373,380 ---- .IX Item "users:" The privileges given by this access group apply to any user identity which matches this comma-separated list of wildmat patterns. If this parameter ! isn't given, the access group applies to all users (and is essentially ! equivalent to \f(CW\*(C`users: *\*(C'\fR). .Ip "\fBnewsgroups:\fR" 4 .IX Item "newsgroups:" Users that match this access group are allowed to read and post to all *************** *** 389,395 **** .Ip "\fBpost:\fR" 4 .IX Item "post:" Like the newsgroups: parameter, but the client is only given permission to ! post to the matching newsgroups. This parameter is often used with post: (above) to define the patterns for reading and posting separately (usually to give the user permission to read more newsgroups than they're permitted to post to). It cannot be used in the same access group with a --- 388,394 ---- .Ip "\fBpost:\fR" 4 .IX Item "post:" Like the newsgroups: parameter, but the client is only given permission to ! post to the matching newsgroups. This parameter is often used with read: (above) to define the patterns for reading and posting separately (usually to give the user permission to read more newsgroups than they're permitted to post to). It cannot be used in the same access group with a *************** *** 405,410 **** --- 404,414 ---- .Ip "P" 3 .IX Item "P" The client may post articles. + .Ip "A" 3 + .IX Item "A" + The client may post articles with Approved: headers (in other words, may + approve articles for moderated newsgroups). By default, this is not + allowed. .Ip "N" 3 .IX Item "N" The client may use the \s-1NEWNEWS\s0 command, overriding the global setting. *************** *** 415,420 **** --- 419,430 ---- .RE .RS 4 .Sp + Note that if this parameter is given, \fIallownewnews\fR in \fIinn.conf\fR\|(5) is + ignored for connections matching this access group and the ability of the + client to use \s-1NEWNEWS\s0 is entirely determined by the presence of \f(CW\*(C`N\*(C'\fR in + the access string. If you want to support \s-1NEWNEWS\s0, make sure to include + \&\f(CW\*(C`N\*(C'\fR in the access string when you use this parameter. + .Sp Note that if this parameter is given and \f(CW\*(C`R\*(C'\fR isn't present in the access string, the client cannot read regardless of newsgroups: or read: parameters. Similarly, if this parameter is given and \f(CW\*(C`P\*(C'\fR isn't present, *************** *** 474,479 **** --- 484,516 ---- fromhost, localmaxartsize, moderatormailer, nnrpdauthsender, nnrpdcheckart, nnrpdoverstats, nnrpdposthost, nnrpdpostport, organization, pathhost, readertrack, spoolfirst, and strippostcc. + .SH "SUMMARY" + .IX Header "SUMMARY" + Here's a basic summary of what happens when a client connects: + .Ip "\(bu" 2 + All auth groups are scanned and the ones that don't match the client \s-1IP\s0 + address are eliminated. + .Ip "\(bu" 2 + Each remaining auth group is scanned from the last to the first, and an + attempt is made to apply it to the current connection. This means running + res: programs, if any, and otherwise applying default:. The first auth + group to return a valid user is kept as the active auth group. + .Ip "\(bu" 2 + If no auth groups yield a valid user (none have default: parameters or + successful res: programs) but some of the auth groups have auth: lines + (indicating a possibility that the user can authenticate and then obtain + permissions), the connection is considered to have no valid auth group + (which means that the access groups are ignored completely) but the + connection isn't closed. Instead, 480 is returned for everything until + the user authenticates. + .Ip "\(bu" 2 + When the user authenticates, all auth groups with auth: lines are then + checked from the bottom up and the first one that returns a valid user is + kept as the default auth group. + .Ip "\(bu" 2 + Regardless of how an auth group is established, as soon as one is, the + user permissions are granted by scanning the access groups from bottom up + and finding the first match. .SH "EXAMPLES" .IX Header "EXAMPLES" Here is probably the simplest useful example of a complete readers.conf. *************** *** 514,520 **** \& } .Ve If those are put in the file after the above example, they'll take ! precedent (because they're later in the file) for any user coming from a machine in the lab.example.com domain, and those users will only have read access, not posting access. .PP --- 551,557 ---- \& } .Ve If those are put in the file after the above example, they'll take ! precedence (because they're later in the file) for any user coming from a machine in the lab.example.com domain, and those users will only have read access, not posting access. .PP *************** *** 529,562 **** \& auth: "ckpasswd -s" \& } .Ve - .Vb 3 - \& access fail { - \& newsgroups: !* - \& } - .Ve .Vb 4 \& access full { \& users: * \& newsgroups: * \& } .Ve ! Note the use of two separate access groups. When the user first connects, ! there are no res: keys and no default, so they get an empty identity. An ! empty identity can't match a users: parameter, so they fall into the first ! access group and receive no access. .PP If they then later authenticate, the username and password are checked first by running \fBckpasswd\fR with the \fB\-d\fR option for an external dbm file of encrypted passwords, and then with the \fB\-s\fR option to check the shadow password database (note that ckpasswd may have to be setgid to a shadow group to use this option). If both of those fail, the user will ! keep the empty identity; otherwise, they will acquire some other identity ! string (whatever username they specified, since the password was valid) ! and the first access group will match, giving them full access. ! .PP ! Note that the order of the access groups is significant. If the fail ! access group were last, it would always match, and no one would ever get ! access regardless of whether they authenticated. .PP Finally, here's a very complicated example. This is for an organization that has an internal hierarchy example.* only available to local shell --- 566,590 ---- \& auth: "ckpasswd -s" \& } .Ve .Vb 4 \& access full { \& users: * \& newsgroups: * \& } .Ve ! When the user first connects, there are no res: keys and no default, so ! they don't receive any valid identity and the connection won't match any ! access groups (even ones with \f(CW\*(C`users: *\*(C'\fR). Such users receive nothing ! but authentication required responses from nnrpd until they authenticate. .PP If they then later authenticate, the username and password are checked first by running \fBckpasswd\fR with the \fB\-d\fR option for an external dbm file of encrypted passwords, and then with the \fB\-s\fR option to check the shadow password database (note that ckpasswd may have to be setgid to a shadow group to use this option). If both of those fail, the user will ! continue to have no identity; otherwise, they will acquire some other ! identity string (whatever username they specified, since the password was ! valid) and the access group will match, giving them full access. .PP Finally, here's a very complicated example. This is for an organization that has an internal hierarchy example.* only available to local shell *************** *** 654,660 **** Written by Aidan Cully for InterNetNews. Substantially expanded by Russ Allbery . .PP ! $Id: readers.conf.5,v 1.5.2.3 2000/06/24 09:52:41 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIinn.conf\fR\|(5), \fIinnd\fR\|(8), \fInewsfeeds\fR\|(5), \fInnrpd\fR\|(8), \fIwildmat\fR\|(3). --- 682,688 ---- Written by Aidan Cully for InterNetNews. Substantially expanded by Russ Allbery . .PP ! $Id: readers.conf.5,v 1.5.2.8 2001/03/03 07:57:56 rra Exp $ .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIinn.conf\fR\|(5), \fIinnd\fR\|(8), \fInewsfeeds\fR\|(5), \fInnrpd\fR\|(8), \fIwildmat\fR\|(3). Index: inn/doc/man/storage.conf.5 diff -c inn/doc/man/storage.conf.5:1.7.2.1 inn/doc/man/storage.conf.5:1.7.2.2 *** inn/doc/man/storage.conf.5:1.7.2.1 Wed Sep 6 08:21:41 2000 --- inn/doc/man/storage.conf.5 Wed Apr 18 06:53:23 2001 *************** *** 1,4 **** ! .\" $Revision: 1.7.2.1 $ .TH STORAGE.CONF 5 .SH NAME storage.conf \- configuration file for storage manager --- 1,4 ---- ! .\" $Revision: 1.7.2.2 $ .TH STORAGE.CONF 5 .SH NAME storage.conf \- configuration file for storage manager *************** *** 72,78 **** \&``newsgroups: *''. .TP .B size ! A range of article sizes that should be stored using this storage method. If is ``0'' or not given, the upper size of articles is limited only by ``maxartsize'' in .IR inn.conf (5). --- 72,79 ---- \&``newsgroups: *''. .TP .B size ! A range of article sizes (in bytes) that should be stored using this ! storage method. If is ``0'' or not given, the upper size of articles is limited only by ``maxartsize'' in .IR inn.conf (5). *************** *** 255,261 **** .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: storage.conf.5,v 1.7.2.1 2000/09/05 23:21:41 kondou Exp $ .SH "SEE ALSO" cycbuff.conf(5), expire.ctl(5), --- 256,262 ---- .de R$ This is revision \\$3, dated \\$4. .. ! .R$ $Id: storage.conf.5,v 1.7.2.2 2001/04/17 21:53:23 rra Exp $ .SH "SEE ALSO" cycbuff.conf(5), expire.ctl(5), Index: inn/doc/man/subscriptions.5 diff -c /dev/null inn/doc/man/subscriptions.5:1.1.2.1 *** /dev/null Fri May 4 05:29:45 2001 --- inn/doc/man/subscriptions.5 Sat Feb 3 18:43:15 2001 *************** *** 0 **** --- 1,185 ---- + .\" Automatically generated by Pod::Man version 1.14 + .\" Sat Feb 3 01:40:31 2001 + .\" + .\" 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 Ip \" List item + .br + .ie \\n(.$>=3 .ne \\$3 + .el .ne 3 + .IP "\\$1" \\$2 + .. + .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. + .bd B 3 + . \" 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 "subscriptions 5" + .TH subscriptions 5 "INN 2.3.2" "2001-02-03" "InterNetNews Documentation" + .UC + .SH "NAME" + subscriptions \- Default recommended subscriptions + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + The \fIpathetc\fR/\fIsubscriptions\fR file contains a list of newsgroups that is + returned by the \s-1NNTP\s0 command \s-1LIST\s0 \s-1SUBSCRIPTIONS\s0. + .PP + Clients that support this command and send it the first time they connect + to a new news server use the returned list to initialize the list of + subscribed newsgroups. The \fIsubscriptions\fR file therefore should contain + groups intented for new users, for testing, or that contain FAQs and other + useful information for first-time Usenet users. + .PP + The syntax of the \fIsubscriptions\fR file is trivial; it is a simple list of + newsgroup names, one per line. The order of newsgroups may be + significant; the news reading client may present the groups in that order + to the user. + .SH "EXAMPLE" + .IX Header "EXAMPLE" + A typical \fIsubscriptions\fR file may look like: + .PP + .Vb 9 + \& news.announce.newusers + \& news.newusers.questions + \& local.test + \& local.general + \& local.talk + \& misc.test + \& misc.test.moderated + \& news.answers + \& news.announce.newgroups + .Ve + This gives the client the FAQs and question newsgroup for new users first, + then a local newsgroup for testing and various commonly-read local + discussion groups, followed by the world-wide test groups, all the FAQs, + and announcements of new world-wide newsgroups. If there is a local new + users group, one might want to list it first. + .SH "HISTORY" + .IX Header "HISTORY" + Written by Bettina Fink for InterNetNews. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fInnrpd\fR\|(8). Index: inn/doc/pod/fastrm.pod diff -c /dev/null inn/doc/pod/fastrm.pod:1.1.2.1 *** /dev/null Fri May 4 05:29:45 2001 --- inn/doc/pod/fastrm.pod Sat Feb 3 16:38:44 2001 *************** *** 0 **** --- 1,178 ---- + =head1 NAME + + fastrm - Quickly remove a list of files + + =head1 SYNOPSIS + + B [B<-de>] [B<-u>|B<-u>I] [B<-s>|B<-s>I] [B<-c>|B<-c>I] + I + + =head1 DESCRIPTION + + B reads a list of either file names or storage API tokens, one per + line, from its standard input and removes them. Storage API tokens are + removed via the SMcancel() interface. + + If a file name is not an absolute path name, it is considered to be + relative to I as given on the command line. The + I parameter must be a simple absolute pathname (it must + not contain multiple consecutive slashes or references to the special + directories C<.> or C<..>). + + B is designed to be faster than the typical C<| xargs rm> pipeline + when given a sorted list of file names as input. For example, B + will usually chdir(2) into a directory before removing files from it, + meaning that if its input is sorted, most names passed to unlink(2) will + be simple names. This can substantially reduce the operating system + overhead from directory lookups. + + B assumes that its input is valid and that it is safe to call + unlink(2) on every file name it is given. As a safety measure, however, + B when running as root will check with stat(2) that a file name + doesn't specify a directory before removing it. (In some operating + systems, root is allowed to unlink directories, even directories which + aren't empty, which can cause file system corruption.) + + The input to B should always be sorted -- or even better be in the + order file names are output by find(1) -- if speed is an issue and the + input isn't solely storage API tokens. (It deals fine with unsorted + input, but is unlikely to be any faster in that case than a simple C command.) Sorting may even slightly speed up the removal of storage + API tokens due to caching effects, since sorting will tend to keep all of + the tokens from a particular storage method together. + + Various additional optimizations for removing files can be turned on + and/or tuned with options (see below). Which options will be most + effective depends heavily on the underlying structure of the file system, + the way in which directories are stored and searched, and similar often + underdocumented operating system implementation details. The more + sophisticated the underlying operating system and file system, the more + likely that it will already perform the equivalent of these optimizations + internally. + + =head1 OPTIONS + + =over 4 + + =item B<-d> + + Don't remove any files. Instead, print a list of the files that would be + removed to standard output. Each line contains either the current + directory of B at the time it would do the unlink and the relative + path name it would pass to unlink(2) as two fields separated by whitespace + and a C, the absolute path name (as a single field) that would be + passed to unlink(2), or the string C and the storage API token that + would be removed. + + =item B<-e> + + Treat an empty input file as an error. This is most useful when B + is last in a pipeline after a preceding sort(1) command, ensuring that + B will fail if the sort fails. + + =item B<-c>I + + Controls when B calls chdir(2). If the number of files to be + unlinked from a given directory is at least I, then B will + change to that directory before unlinking those files. Otherwise, it will + use either the absolute path names or a path name relative to the current + directory (whichever is likely more efficient). The I parameter is + optional; if just B<-c> is given, B<-c1> is assumed, which will cause + B to always chdir before calling unlink(2). The default is + B<-c3>. Use B<-c0> to prevent B from ever using chdir(2). + + =item B<-s>I + + When B<-s> is given and the number of files to remove in a directory is + greater than I, rather than remove files in the order given, B + will open the directory and read it, unlinking files in the order that + they appear in the directory. On systems with a per-process directory + cache or that use a linear search to find files in a directory, this + should make directory lookups faster. The I parameter is optional; if + just B<-s> is given, B<-s5> is assumed. + + When this option is in effect, B won't attempt to remove files + that it doesn't see in the directory, possibly significantly speeding it + up if most of the files to be removed have already been deleted. However, + using this option requires B to do more internal work and it also + assumes that the order of directory listings is stable in the presence of + calls to unlink(2) between calls to readdir(3). This may be a dangerous + assumption with some sophisticated file systems (and in general this + option is only useful with file systems that use unindexed linear searches + to find files in directories or when most of the files to be removed have + already been deleted). + + This optimization is off by default. + + =item B<-u>I + + Specifying this option promises that there are no symbolic links in the + directory tree from which files are being removed. This allows B + to make an additional optimization to its calls to chdir(2), constructing + a relative path using C<../..> and the like to pass to chdir(2) rather + than always using absolute paths. Since this reduces the number of + directory lookups needed with deeply nested directory structures (such as + that typically created by traditional news spool storage), it can be a + significant optimization, but it breaks horribly in the presence of + symbolic links to directories. + + When B<-u> is given, B will use at most I levels of C<..> + segments to construct paths. I is optional; if just B<-u> is given, + B<-u1> is assumed. + + This optimization is off by default. + + =back + + B also accepts B<-a> and B<-r> options, which do nothing at all + except allow you to say C, C, or C. These happen to often be convenient sets of options to use. + + =head1 EXIT STATUS + + B exits with a status of zero if there were no problems, and an + exit status of 1 if something went wrong. Attempting to remove a file + that does not exist is not considered a problem. + + =head1 EXAMPLES + + B is typically invoked by INN via expirerm(8) using a command + like: + + fastrm -e /usr/local/news/spool/articles < expire.list + + To enable all optimizations and see the affect on the order of removal + caused by B<-s>, use: + + fastrm -d -s -e -u ~news/spool/articles < expire.list + + If your file system has indexed directory lookups, but you have a deeply + nested directory structure, you may want to use a set of flags like: + + fastrm -e -u3 ~news/spool/articles < expire.list + + to strongly prefer relative paths but not to use readdir(2) to order the + calls to unlink(2). + + You may want to edit expirerm(8) to change the flags passed to B. + + =head1 NOTES + + B defers opening the storage subsystem or attempting to parse any + INN configuration files until it encounters a token in the list of files + to remove. It's therefore possible to use B outside of INN as a + general fast file removal program. + + =head1 HISTORY + + B was originally written by kre@munnari.oz.au. This manual page + rewritten in POD by Russ Allbery Erra@stanford.eduE for + InterNetNews. + + $Id: fastrm.pod,v 1.1.2.1 2001/02/03 07:38:44 rra Exp $ + + =head1 SEE ALSO + + expirerm(8) + + =cut Index: inn/doc/pod/inn.conf.pod diff -c inn/doc/pod/inn.conf.pod:1.12.2.5 inn/doc/pod/inn.conf.pod:1.12.2.6 *** inn/doc/pod/inn.conf.pod:1.12.2.5 Fri Oct 13 16:53:53 2000 --- inn/doc/pod/inn.conf.pod Tue Jan 16 23:01:33 2001 *************** *** 29,34 **** --- 29,40 ---- F; those defaults are noted in the description of each parameter. + For the time being, it is strongly recommended to include every parameter + in F even if it is set to the default value, since some shell + scripts don't correctly handle missing keys that they care about. This is + a difficult-to-fix bug in the current parser that will be fixed in future + versions of INN. + Many parameters take a boolean value. For all such parameters, the value may be specified as C, C, or C to turn it on and may be any of C, C, or C to turn it off. The case of these values is *************** *** 38,44 **** generally not affect any running programs until they restart. Unlike nearly every other configuration file, F cannot be reloaded dynamically using ctlinnd(8); innd(8) must be stopped and restarted for ! relevant changes to F to take effect. This documentation is extremely long and organized as a reference manual rather than as a tutorial. If this is your first exposure to INN and --- 44,51 ---- generally not affect any running programs until they restart. Unlike nearly every other configuration file, F cannot be reloaded dynamically using ctlinnd(8); innd(8) must be stopped and restarted for ! relevant changes to F to take effect (C is ! the fastest way to do this.) This documentation is extremely long and organized as a reference manual rather than as a tutorial. If this is your first exposure to INN and *************** *** 1095,1101 **** Written by Rich $alz for InterNetNews and since modified, updated, and reorganized by innumerable other people. ! $Id: inn.conf.pod,v 1.12.2.5 2000/10/13 07:53:53 kondou Exp $ =head1 SEE ALSO --- 1102,1108 ---- Written by Rich $alz for InterNetNews and since modified, updated, and reorganized by innumerable other people. ! $Id: inn.conf.pod,v 1.12.2.6 2001/01/16 14:01:33 rra Exp $ =head1 SEE ALSO Index: inn/doc/pod/innmail.pod diff -c /dev/null inn/doc/pod/innmail.pod:1.1.2.1 *** /dev/null Fri May 4 05:29:45 2001 --- inn/doc/pod/innmail.pod Sat Feb 3 18:52:39 2001 *************** *** 0 **** --- 1,68 ---- + =head1 NAME + + innmail - Simple mail-sending program + + =head1 SYNOPSIS + + B [B<-h>] [B<-s> I] I
[I
...] + + =head1 DESCRIPTION + + B is a Perl script intended to provide the non-interactive + mail-sending functionality of mail(1) while avoiding nasty security + problems. It takes the body of a mail message on standard input and sends + it to the specified addresses by invoking the value of I in + F. + + At least one address (formatted for the MTA specified in F if it + matters) is required. B will sanitize the addresses so that they + contain only alphanumerics and the symbols C<@>, C<.>, C<->, C<+>, C<_>, + and C<%>. + + B was written to be suitable for the I setting in + F. + + =head1 OPTIONS + + =over 4 + + =item B<-h> + + Gives usage information. + + =item B<-s> I + + Sets the Subject: header of the message. A warning is issued if this + option is omitted. + + =back + + =head1 EXAMPLES + + This sends a one-line message to the local user C: + + echo "A one-line message." | innmail -s "Simple message" joe + + B by default is used by INN for sending nightly reports and + control message reports. + + =head1 BUGS + + B fails on addresses that begin with C<->, although one might + hope that the news server will not need to contact any such addresses. + + There are many "correct" addresses that will be silently modified by the + sanitization process. A news administrator should be careful to use + particularly sane addresses if they may be passed to B. + + =head1 HISTORY + + B was written by James Brister for + InterNetNews. This manual page was originally written by Jeffrey + M. Vinocur. + + =head1 SEE ALSO + + inn.conf(5), mail(1). + + =cut Index: inn/doc/pod/install.pod diff -c inn/doc/pod/install.pod:1.14.2.9 inn/doc/pod/install.pod:1.14.2.15 *** inn/doc/pod/install.pod:1.14.2.9 Mon Jan 8 16:29:40 2001 --- inn/doc/pod/install.pod Fri Apr 13 06:03:17 2001 *************** *** 19,25 **** after building INN and then comparing the new sample configuration files with your current ones to see if anything has changed. If you take this route, the old binaries, scripts, and man pages will be saved with an ! extension of .OLD so that you can easily back out. =head1 Supported Systems --- 19,30 ---- after building INN and then comparing the new sample configuration files with your current ones to see if anything has changed. If you take this route, the old binaries, scripts, and man pages will be saved with an ! extension of .OLD so that you can easily back out. Be sure to configure ! INN with the same options that you used previously if you take this ! approach (in particular, INN compiled with --with-largefiles can't read ! the data structures written by INN compiled without that flag and vice ! versa). If you don't remember what options you used but you have your old ! build tree, look at the comments at the beginning of F. =head1 Supported Systems *************** *** 81,101 **** =item * If you want to enable support for authenticated control messages (this is ! NOT required) then you will need to install PGP. Unfortunately, the ! licensing restrictions on PGP inside the United States are extremely ! unclear; it's possible that if you are installing INN for a company in the ! U.S., even if the news server is not part of the business of that company, ! you would need to purchase a commercial license for PGP. For an ! educational or non-profit organization, this shouldn't be a problem. See ! for more information about PGP, including the ! licensing restrictions. ! ! You may also want to look at GnuPG from , a free ! software OpenPGP implementation. Unfortunately, most control message ! signatures are currently PGP 2.6.2-compatible signatures, which cannot be ! handled by stock GnuPG for patent reasons. However, there are add-on ! modules for GnuPG that allow verification of those types of signatures, ! particularly if you are outside the United States. =back --- 86,106 ---- =item * If you want to enable support for authenticated control messages (this is ! not required but is highly recommended) then you will need to install some ! version of PGP. The recommended version is GnuPG, since it's actively ! developed, supports OpenPGP, is freely available and free to use for any ! purpose (including in the US), and (as of version 1.0.4 at least) supports ! RSA signatures used by most current control message senders. You need to ! install both GnuPG and pgpgpg from ; a link for ! pgpgpg is under "Front ends." ! ! Alternately, you can install PGP from or one of the ! international versions of it. Be warned, however, that the licensing ! restrictions on PGP inside the United States are extremely unclear; it's ! possible that if you are installing INN for a company in the U.S., even if ! the news server is not part of the business of that company, you would ! need to purchase a commercial license for PGP. For an educational or ! non-profit organization, this shouldn't be a problem. =back *************** *** 137,142 **** --- 142,156 ---- and group. You can change these if you want but these are the defaults and it's easier to stick with them on a new installation. + WARNING: By default, INN installs various configuration files as + group-writeable, and in general INN is not hardened from a security + standpoint against an attack by someone who is already in the news group. + In general, you should consider membership in the news group as equivalent + to access to the news account. You should not rely on being able to keep + anyone with access to the news GID from converting that into access to the + news UID. The recommended configuration is to have the only member of the + group C be the user C. + Installing INN so that all of its files are under a single directory tree, rather than scattering binaries, libraries, and man pages throughout the file system, is strongly recommended. It helps keep everything involved *************** *** 236,244 **** =item B<--with-python> ! Enables support for Python, allowing you to install filter scripts written ! in Python. You will need Python 1.5.2 or later installed on your system ! to enable this option. See F for all the details. =item B<--with-tcl> --- 250,262 ---- =item B<--with-python> ! Enables support for Python, allowing you to install filter and ! authentication scripts written in Python. You will need Python 1.5.2 or ! later installed on your system to enable this option. See ! F and 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> *************** *** 276,281 **** --- 294,313 ---- default because they take somewhat longer. See C<./configure --help> for the various available options related to libtool builds. + Please note that INN's shared library interface is not stable and may + change drastically in future releases. For this reason, it's also not + properly versioned and won't be until some degree of stability is + guaranteed, and the relevant header files are not installed. Only INN + should use INN's shared libraries, and you should only use the shared + libraries corresponding to the version of INN that you're installing. + + Also, when updating an existing version of INN, INN tries to save backup + copies of all files so that you can revert to the previous installed + version. Unfortunately, when using shared libraries, this confuses + ldconfig on some systems (such as Linux) and the symbolic links for the + libraries may point to the .OLD versions. If this happens, you can either + fix the links by hand or remove the .OLD versions and re-run ldconfig. + =item B<--enable-uucp-rnews> If this option is given to configure, rnews will be installed setuid root, *************** *** 1328,1334 **** user and not as root. To start INN on system boot, you therefore want to put something like: ! su news -c /usr/local/news/bin/rc.news in the system boot scripts. If innd is stopped or killed, you can restart it by running rc.news by hand as the news user. --- 1360,1366 ---- user and not as root. To start INN on system boot, you therefore want to put something like: ! su - news -c /usr/local/news/bin/rc.news in the system boot scripts. If innd is stopped or killed, you can restart it by running rc.news by hand as the news user. *************** *** 1336,1342 **** The rc.news script may also be used to shut down INN, with the C option: ! su news -c '/usr/local/news/bin/rc.news stop' In the F directory of this source tree is a sample init script for people using System V-style init.d directories. --- 1368,1374 ---- The rc.news script may also be used to shut down INN, with the C option: ! su - news -c '/usr/local/news/bin/rc.news stop' In the F directory of this source tree is a sample init script for people using System V-style init.d directories. Index: inn/doc/pod/news.pod diff -c inn/doc/pod/news.pod:1.6.2.6 inn/doc/pod/news.pod:1.6.2.10 *** inn/doc/pod/news.pod:1.6.2.6 Mon Jan 8 17:07:50 2001 --- inn/doc/pod/news.pod Mon Apr 23 21:29:43 2001 *************** *** 1,3 **** --- 1,48 ---- + =head1 Changes from 2.3.1 to 2.3.2 + + =over 2 + + =item * + + innxmit can again handle regular filenames as input as well as storage API + tokens (allowing it to be used to import an old traditional spool). + + =item * + + Several problems with tagged-hash history files have been fixed thanks to + the debugging efforts of Andrew Gierth and Sang-yong Suh. + + =item * + + A very long-standing (since INN 1.0!) NNTP protocol bug in nnrpd was + fixed. The response to an ARTICLE command retrieving a message by message + ID should have the message ID as the third word of the response, not the + fourth. Fixing this is reported to *possibly* cause problems with some + Netscape browsers, but other news servers correctly follow the protocol. + + =item * + + Some serious performance problems with expiration of tradspool should now + be at least somewhat alleviated. tradspool and timehash now know how to + output file names for removal rather than tokens, and fastrm's ability to + remove regular files has been restored. This should bring expiration + times for tradspool back to within a factor of two of pre-storage-API + expiration times. + + =item * + + An item that was actually changed in 2.3.0 but wasn't noted in NEWS when + it should have been: Users can no longer post articles containing + Approved: headers to moderated groups by default; they must be + specifically given that permission with the access: parameter in + F. See the man page for more details. + + =item * + + Added a sample subscriptions file and documentation for it and innmail. + + =back + =head1 Changes from 2.3.0 to 2.3.1 =over 2 *************** *** 179,184 **** --- 224,236 ---- =item * There is preliminary support for news reading over SSL, using OpenSSL. + + =item * + + Users can no longer post articles containing Approved: headers to + moderated groups by default; they must be specifically given that + permission with the access: parameter in F. See the man + page for more details. =item * Index: inn/doc/pod/readers.conf.pod diff -c inn/doc/pod/readers.conf.pod:1.2.2.3 inn/doc/pod/readers.conf.pod:1.2.2.8 *** inn/doc/pod/readers.conf.pod:1.2.2.3 Sat Jun 24 18:52:40 2000 --- inn/doc/pod/readers.conf.pod Sat Mar 3 16:57:55 2001 *************** *** 122,128 **** Just like with auth groups, when matching access groups the last matching one in the file is used to determine the user's permissions. ! There is one additional special case to be aware of. First, when forming particularly complex authentication and authorization rules, it is sometimes useful for the identities provided by a given auth group to only apply to particular access groups; in other words, rather than checking --- 122,128 ---- Just like with auth groups, when matching access groups the last matching one in the file is used to determine the user's permissions. ! There is one additional special case to be aware of. When forming particularly complex authentication and authorization rules, it is sometimes useful for the identities provided by a given auth group to only apply to particular access groups; in other words, rather than checking *************** *** 180,185 **** --- 180,187 ---- the hosts listed in its hosts: parameter, and each assigning the same user identity. + All hosts match if this parameter does not exist. + =item B A command line for a user resolver. The program executed must be located *************** *** 236,246 **** The privileges given by this access group apply to any user identity which matches this comma-separated list of wildmat patterns. If this parameter ! isn't given, the access group applies to all users. Note that the absence ! of this parameter is not the same as C; the latter will match ! all successful authentications and any client matching an auth group with ! a default: parameter, but the former will match any client including one ! that failed authentication and is in an auth group without a default. =item B --- 238,245 ---- The privileges given by this access group apply to any user identity which matches this comma-separated list of wildmat patterns. If this parameter ! isn't given, the access group applies to all users (and is essentially ! equivalent to C). =item B *************** *** 257,263 **** =item B Like the newsgroups: parameter, but the client is only given permission to ! post to the matching newsgroups. This parameter is often used with post: (above) to define the patterns for reading and posting separately (usually to give the user permission to read more newsgroups than they're permitted to post to). It cannot be used in the same access group with a --- 256,262 ---- =item B Like the newsgroups: parameter, but the client is only given permission to ! post to the matching newsgroups. This parameter is often used with read: (above) to define the patterns for reading and posting separately (usually to give the user permission to read more newsgroups than they're permitted to post to). It cannot be used in the same access group with a *************** *** 278,283 **** --- 277,288 ---- The client may post articles. + =item A + + The client may post articles with Approved: headers (in other words, may + approve articles for moderated newsgroups). By default, this is not + allowed. + =item N The client may use the NEWNEWS command, overriding the global setting. *************** *** 289,294 **** --- 294,305 ---- =back + Note that if this parameter is given, I in inn.conf(5) is + ignored for connections matching this access group and the ability of the + client to use NEWNEWS is entirely determined by the presence of C in + the access string. If you want to support NEWNEWS, make sure to include + C in the access string when you use this parameter. + Note that if this parameter is given and C isn't present in the access string, the client cannot read regardless of newsgroups: or read: parameters. Similarly, if this parameter is given and C

isn't present, *************** *** 357,362 **** --- 368,415 ---- nnrpdcheckart, nnrpdoverstats, nnrpdposthost, nnrpdpostport, organization, pathhost, readertrack, spoolfirst, and strippostcc. + =head1 SUMMARY + + Here's a basic summary of what happens when a client connects: + + =over 2 + + =item * + + All auth groups are scanned and the ones that don't match the client IP + address are eliminated. + + =item * + + Each remaining auth group is scanned from the last to the first, and an + attempt is made to apply it to the current connection. This means running + res: programs, if any, and otherwise applying default:. The first auth + group to return a valid user is kept as the active auth group. + + =item * + + If no auth groups yield a valid user (none have default: parameters or + successful res: programs) but some of the auth groups have auth: lines + (indicating a possibility that the user can authenticate and then obtain + permissions), the connection is considered to have no valid auth group + (which means that the access groups are ignored completely) but the + connection isn't closed. Instead, 480 is returned for everything until + the user authenticates. + + =item * + + When the user authenticates, all auth groups with auth: lines are then + checked from the bottom up and the first one that returns a valid user is + kept as the default auth group. + + =item * + + Regardless of how an auth group is established, as soon as one is, the + user permissions are granted by scanning the access groups from bottom up + and finding the first match. + + =back + =head1 EXAMPLES Here is probably the simplest useful example of a complete readers.conf. *************** *** 393,399 **** } If those are put in the file after the above example, they'll take ! precedent (because they're later in the file) for any user coming from a machine in the lab.example.com domain, and those users will only have read access, not posting access. --- 446,452 ---- } If those are put in the file after the above example, they'll take ! precedence (because they're later in the file) for any user coming from a machine in the lab.example.com domain, and those users will only have read access, not posting access. *************** *** 407,438 **** auth: "ckpasswd -s" } - access fail { - newsgroups: !* - } - access full { users: * newsgroups: * } ! Note the use of two separate access groups. When the user first connects, ! there are no res: keys and no default, so they get an empty identity. An ! empty identity can't match a users: parameter, so they fall into the first ! access group and receive no access. If they then later authenticate, the username and password are checked first by running B with the B<-d> option for an external dbm file of encrypted passwords, and then with the B<-s> option to check the shadow password database (note that ckpasswd may have to be setgid to a shadow group to use this option). If both of those fail, the user will ! keep the empty identity; otherwise, they will acquire some other identity ! string (whatever username they specified, since the password was valid) ! and the first access group will match, giving them full access. ! ! Note that the order of the access groups is significant. If the fail ! access group were last, it would always match, and no one would ever get ! access regardless of whether they authenticated. Finally, here's a very complicated example. This is for an organization that has an internal hierarchy example.* only available to local shell --- 460,483 ---- auth: "ckpasswd -s" } access full { users: * newsgroups: * } ! When the user first connects, there are no res: keys and no default, so ! they don't receive any valid identity and the connection won't match any ! access groups (even ones with C). Such users receive nothing ! but authentication required responses from nnrpd until they authenticate. If they then later authenticate, the username and password are checked first by running B with the B<-d> option for an external dbm file of encrypted passwords, and then with the B<-s> option to check the shadow password database (note that ckpasswd may have to be setgid to a shadow group to use this option). If both of those fail, the user will ! continue to have no identity; otherwise, they will acquire some other ! identity string (whatever username they specified, since the password was ! valid) and the access group will match, giving them full access. Finally, here's a very complicated example. This is for an organization that has an internal hierarchy example.* only available to local shell *************** *** 523,530 **** Written by Aidan Cully for InterNetNews. Substantially expanded by Russ Allbery . ! $Id: readers.conf.pod,v 1.2.2.3 2000/06/24 09:52:40 rra Exp $ =head1 SEE ALSO inn.conf(5), innd(8), newsfeeds(5), nnrpd(8), wildmat(3). --- 568,577 ---- Written by Aidan Cully for InterNetNews. Substantially expanded by Russ Allbery . ! $Id: readers.conf.pod,v 1.2.2.8 2001/03/03 07:57:55 rra Exp $ =head1 SEE ALSO inn.conf(5), innd(8), newsfeeds(5), nnrpd(8), wildmat(3). + + =cut Index: inn/doc/pod/subscriptions.pod diff -c /dev/null inn/doc/pod/subscriptions.pod:1.1.2.1 *** /dev/null Fri May 4 05:29:45 2001 --- inn/doc/pod/subscriptions.pod Sat Feb 3 18:43:16 2001 *************** *** 0 **** --- 1,49 ---- + =head1 NAME + + subscriptions - Default recommended subscriptions + + =head1 DESCRIPTION + + The I/F file contains a list of newsgroups that is + returned by the NNTP command LIST SUBSCRIPTIONS. + + Clients that support this command and send it the first time they connect + to a new news server use the returned list to initialize the list of + subscribed newsgroups. The F file therefore should contain + groups intented for new users, for testing, or that contain FAQs and other + useful information for first-time Usenet users. + + The syntax of the F file is trivial; it is a simple list of + newsgroup names, one per line. The order of newsgroups may be + significant; the news reading client may present the groups in that order + to the user. + + =head1 EXAMPLE + + A typical F file may look like: + + news.announce.newusers + news.newusers.questions + local.test + local.general + local.talk + misc.test + misc.test.moderated + news.answers + news.announce.newgroups + + This gives the client the FAQs and question newsgroup for new users first, + then a local newsgroup for testing and various commonly-read local + discussion groups, followed by the world-wide test groups, all the FAQs, + and announcements of new world-wide newsgroups. If there is a local new + users group, one might want to list it first. + + =head1 HISTORY + + Written by Bettina Fink for InterNetNews. + + =head1 SEE ALSO + + nnrpd(8). + + =cut Index: inn/expire/expire.c diff -c inn/expire/expire.c:1.70 inn/expire/expire.c:1.70.2.1 *** inn/expire/expire.c:1.70 Fri Dec 10 01:29:26 1999 --- inn/expire/expire.c Fri Mar 16 08:00:53 2001 *************** *** 1,4 **** ! /* $Id: expire.c,v 1.70 1999/12/09 16:29:26 kondou Exp $ ** ** Expire news articles. */ --- 1,4 ---- ! /* $Id: expire.c,v 1.70.2.1 2001/03/15 23:00:53 kondou Exp $ ** ** Expire news articles. */ *************** *** 637,643 **** --- 637,647 ---- if (out == NULL) return TRUE; + #ifdef DO_TAGGED_HASH + if (ferror(out) || fflush(out) == EOF) { + #else if (ferror(out)) { + #endif (void)fprintf(stderr, "Can't write new history, %s\n", strerror(errno)); return FALSE; Index: inn/expire/expireover.c diff -c inn/expire/expireover.c:1.24.2.4 inn/expire/expireover.c:1.24.2.5 *** inn/expire/expireover.c:1.24.2.4 Wed Sep 6 08:22:01 2000 --- inn/expire/expireover.c Sat Feb 3 16:33:24 2001 *************** *** 1,4 **** ! /* $Revision: 1.24.2.4 $ ** ** Expire overview database. */ --- 1,4 ---- ! /* $Revision: 1.24.2.5 $ ** ** Expire overview database. */ *************** *** 95,102 **** fprintf(stderr, "expireover: -e and -k cannot be specified at the same time\n"); exit(1); } - if (!ovge.earliest && !ovge.keep) - ovge.earliest = TRUE; if (ReadInnConf() < 0) exit(1); --- 95,100 ---- Index: inn/expire/expirerm.in diff -c inn/expire/expirerm.in:1.3 inn/expire/expirerm.in:1.3.2.1 *** inn/expire/expirerm.in:1.3 Sat Nov 27 01:49:36 1999 --- inn/expire/expirerm.in Sat Feb 3 15:42:27 2001 *************** *** 7,13 **** MAIL="${MAILCMD} -s 'Problem removing expired files' ${NEWSMASTER}" #RMPROC="xargs rm" ! RMPROC="fastrm -e" if [ -z "$1" ] ; then echo "Expire called with zero list of files on `hostname`" \ --- 7,13 ---- MAIL="${MAILCMD} -s 'Problem removing expired files' ${NEWSMASTER}" #RMPROC="xargs rm" ! RMPROC="fastrm -e ${SPOOL}" if [ -z "$1" ] ; then echo "Expire called with zero list of files on `hostname`" \ Index: inn/expire/fastrm.c diff -c inn/expire/fastrm.c:1.21.2.1 inn/expire/fastrm.c:1.21.2.2 *** inn/expire/fastrm.c:1.21.2.1 Thu May 18 06:50:57 2000 --- inn/expire/fastrm.c Sat Feb 3 16:36:45 2001 *************** *** 1,104 **** ! /* ! * delete a list of filenames from stdin ! * ! * exit(0) if all is OK (files that can't be unlinked because they ! * didn't exist is "OK") ! * ! * exit(1) in other cases - problems with stdin, no permission, ... ! * written by ! */ ! #include ! #include ! #include "configdata.h" #include "clibrary.h" - #include "qio.h" #include - #include - #include #include ! #include ! #include "macros.h" #include "libinn.h" #include "storage.h" ! STATIC char *MyName; ! STATIC void err_exit(char *s) { ! (void)fprintf(stderr, "%s: %s\n", MyName, s); ! SMshutdown(); exit(1); } ! static int ! err_alloc(const char *what, size_t size, const char *file, int line) { ! fprintf(stderr, "%s: Can't %s %lu bytes at line %d of %s: %s", MyName, ! what, (unsigned long) size, line, file, strerror(errno)); ! SMshutdown(); exit(1); } ! int main(int ac, char *av[]) { ! int i; ! char *p, *line; ! BOOL empty_error, val; ! QIOSTATE *qp; ! TOKEN token; ! ! /* First thing, set up logging and our identity. */ ! openlog("fastrm", L_OPENLOG_FLAGS | LOG_PID, LOG_INN_PROG); ! ! MyName = av[0]; ! if ((p = strrchr(MyName, '/')) != NULL) ! MyName = p + 1; ! ONALLOCFAIL(err_alloc); ! empty_error = FALSE; ! ! if (ReadInnConf() < 0) { exit(1); } ! ! while ((i = getopt(ac, av, "e")) != EOF) { ! switch (i) { ! case 'e': ! empty_error = TRUE; ! break; ! default: ! err_exit("Usage error, unknown flag"); ! break; ! } ! } ! ! val = TRUE; ! if (!SMsetup(SM_RDWR, (void *)&val) || !SMsetup(SM_PREOPEN, (void *)&val)) { ! fprintf(stderr, "Can't setup storage manager\n"); ! exit(1); ! } ! if (!SMinit()) { ! fprintf(stderr, "Can't initialize storage manager\n"); ! exit(1); } qp = QIOfdopen(fileno(stdin)); ! while ((line = QIOread(qp)) != NULL) { ! if (!IsToken(line)) ! continue; ! token = TextToToken(line); ! if (!SMcancel(token) && SMerrno != SMERR_NOENT && SMerrorstr != NULL) ! fprintf(stderr, "Could not remove %s: %s\n", line, SMerrorstr); ! empty_error = FALSE; } ! QIOclose(qp); SMshutdown(); - if (empty_error) ! err_exit("No files to remove"); ! ! exit(0); ! /* NOTREACHED */ } --- 1,795 ---- + /* $Id: fastrm.c,v 1.21.2.2 2001/02/03 07:36:45 rra Exp $ + ** + ** Delete a list of filenames or tokens from stdin. + ** + ** Originally written by (to only handle files) + ** + ** Files that can't be unlinked because they didn't exist are considered + ** okay. Any error condition results in exiting with non-zero exit + ** status. Input lines in the form @...@ are taken to be storage API + ** tokens. Input filenames should be fully qualified. For maximum + ** efficiency, input filenames should be sorted; fastrm will cd into each + ** directory to avoid additional directory lookups when removing a lot of + ** files in a single directory. + */ ! #include "config.h" #include "clibrary.h" #include #include ! #include ! #include ! #include ! #include ! #include "libinn.h" + #include "macros.h" + #include "qio.h" #include "storage.h" + + /* We reject any path names longer than this. */ + #define MAX_DIR_LEN 2048 ! /* Data structure for a list of files in a single directory. */ ! typedef struct filelist { ! int count; ! int size; ! char *dir; ! char **files; ! } filelist; ! ! /* All relative paths are relative to this directory. */ ! static char *base_dir = NULL; ! ! /* The absolute path of the current working directory. */ ! static char current_dir[MAX_DIR_LEN]; ! ! /* The prefix for the files that we're currently working with. We sometimes ! also use this as working space for forming file names to remove, so give ! ourselves a bit of additional leeway just in case. */ ! static char prefix_dir[MAX_DIR_LEN * 2]; ! static int prefix_len; ! ! /* Some threshold values that govern the optimizations that we are willing ! to perform. chdir_threshold determines how many files to be removed we ! want in a directory before we chdir to that directory. sort_threshold ! determines how many files must be in a directory before we use readdir to ! remove them in order. relative_threshold determines how many levels of ! "../" we're willing to try to use to move to the next directory rather ! than just calling chdir with the new absolute path. */ ! static int chdir_threshold = 3; ! static int relative_threshold = 0; ! static int sort_threshold = 0; ! ! /* True if we should only print what we would do, not actually do it. */ ! static BOOL debug_only = FALSE; ! ! /* A string used for constructing relative paths. */ ! static const char dotdots[] = "../../../../"; + /* The number of errors encountered, used to determine exit status. */ + static int error_count = 0; ! /* Whether the storage manager has been initialized. */ ! static BOOL sm_initialized = FALSE; ! ! /* True if unlink may be able to remove directories. */ ! static BOOL unlink_dangerous = FALSE; ! ! ! /* ! ** Exit handler for die. Shut down the storage manager before exiting. ! */ ! static int ! sm_cleanup(void) { ! if (sm_initialized) ! SMshutdown(); ! return 1; ! } ! ! ! /* ! ** Warn to stderr. ! */ ! static void ! warn(const char *format, ...) ! { ! va_list args; ! ! fprintf(stderr, "fastrm: "); ! va_start(args, format); ! vfprintf(stderr, format, args); ! va_end(args); ! fprintf(stderr, "\n"); ! } ! ! ! /* ! ** Warn to stderr, including the results of strerror. ! */ ! static void ! syswarn(const char *format, ...) ! { ! int oerrno; ! va_list args; ! ! oerrno = errno; ! fprintf(stderr, "fastrm: "); ! va_start(args, format); ! vfprintf(stderr, format, args); ! va_end(args); ! fprintf(stderr, ": %s\n", strerror(oerrno)); ! } ! ! ! /* ! ** Report a fatal error and exit. ! */ ! static void ! die(const char *format, ...) ! { ! va_list args; ! ! fflush(stdout); ! fprintf(stderr, "fastrm: "); ! va_start(args, format); ! vfprintf(stderr, format, args); ! va_end(args); ! fprintf(stderr, "\n"); ! sm_cleanup(); exit(1); } ! /* ! ** Report a fatal error, including the results of strerror, and exit. ! */ ! static void ! sysdie(const char *format, ...) { ! int oerrno; ! va_list args; ! ! oerrno = errno; ! fflush(stdout); ! fprintf(stderr, "fastrm: "); ! va_start(args, format); ! vfprintf(stderr, format, args); ! va_end(args); ! fprintf(stderr, ": %s\n", strerror(oerrno)); ! sm_cleanup(); exit(1); } ! /* ! ** Sorting predicate for qsort and bsearch. ! */ ! static int ! file_compare(const void *a, const void *b) { ! const char *f1, *f2; ! ! f1 = *((const char **) a); ! f2 = *((const char **) b); ! return strcmp(f1, f2); ! } ! ! ! /* ! ** Create a new filelist. ! */ ! static filelist * ! filelist_new(char *dir) ! { ! filelist *new; ! ! new = NEW(filelist, 1); ! new->count = 0; ! new->size = 0; ! new->dir = dir; ! new->files = NULL; ! return new; ! } ! ! ! /* ! ** Insert a file name into a list of files (unsorted). ! */ ! static void ! filelist_insert(filelist *list, char *name) ! { ! if (list->count == list->size) { ! list->size = (list->size == 0) ? 16 : list->size * 2; ! RENEW(list->files, char *, list->size); } + list->files[list->count++] = COPY(name); + } + + + /* + ** Find a file name in a sorted list of files. + */ + static char * + filelist_lookup(filelist *list, const char *name) + { + char **p; + + p = bsearch(&name, list->files, list->count, sizeof(char *), + file_compare); + return (p == NULL ? NULL : *p); + } + + + /* + ** Empty a list of files, freeing all of the names but keeping the + ** structure intact. + */ + static void + filelist_empty(filelist *list) + { + int i; + + for (i = 0; i < list->count; i++) + free(list->files[i]); + list->count = 0; + } + + + /* + ** Free a list of files. + */ + static void + filelist_free(filelist *list) + { + filelist_empty(list); + if (list->files != NULL) + free(list->files); + if (list->dir != NULL) + free(list->dir); + free(list); + } + + + /* + ** Initialize the storage manager. This includes parsing inn.conf, which + ** fastrm doesn't need for any other purpose. + */ + static void + sm_initialize(void) + { + BOOL value; + + if (ReadInnConf() < 0) + exit(1); + value = TRUE; + if (!SMsetup(SM_RDWR, &value) || !SMsetup(SM_PREOPEN, &value)) + die("can't set up storage manager"); + if (!SMinit()) + die("can't initialize storage manager: %s", SMerrorstr); + sm_initialized = TRUE; + } + + + /* + ** Get a line from a given QIO stream, returning a pointer to it. Warn + ** about and then skip lines that are too long. Returns NULL at EOF or on + ** an error. + */ + static char * + get_line(QIOSTATE *qp) + { + static int count; + char *p; + p = QIOread(qp); + count++; + while (QIOtoolong(qp) || (p != NULL && strlen(p) >= MAX_DIR_LEN)) { + warn("line %d too long", count); + error_count++; + while (p == NULL && QIOtoolong(qp)) + p = QIOread(qp); + p = QIOread(qp); + } + if (p == NULL) { + if (QIOerror(qp)) { + syswarn("read error"); + error_count++; + } + return NULL; + } + return p; + } + + + /* + ** Read lines from stdin (including the first that may have been there + ** from our last time in) until we reach EOF or until we get a line that + ** names a file not in the same directory as the previous lot. Remember + ** the file names in the directory we're examining and return the list. + */ + static filelist * + process_line(QIOSTATE *qp, int *queued, int *deleted) + { + static char *line = NULL; + filelist *list = NULL; + char *p, *dir; + int dlen; + + *queued = 0; + *deleted = 0; + + if (line == NULL) + line = get_line(qp); + + for (; line != NULL; line = get_line(qp)) { + if (IsToken(line)) { + (*deleted)++; + if (debug_only) { + printf("Token %s\n", line); + continue; + } + if (!sm_initialized) + sm_initialize(); + if (!SMcancel(TextToToken(line))) + if (SMerrno != SMERR_NOENT && SMerrno != SMERR_UNINIT) { + warn("can't cancel %s", line); + error_count++; + } + } else { + if (list == NULL) { + p = strrchr(line, '/'); + if (p != NULL) { + *p++ = '\0'; + dlen = strlen(line); + dir = COPY(line); + } else { + p = line; + dlen = -1; + dir = NULL; + } + list = filelist_new(dir); + } else { + if ((dlen < 0 && strchr(line, '/')) + || (dlen >= 0 && (line[dlen] != '/' + || strchr(line + dlen + 1, '/') + || strncmp(dir, line, dlen)))) + return list; + } + filelist_insert(list, line + dlen + 1); + (*queued)++; + } + } + return list; + } + + + /* + ** Copy n leading segments of a path. + */ + static void + copy_segments(char *to, const char *from, int n) + { + char c; + + for (c = *from++; c != '\0'; c = *from++) { + if (c == '/' && --n <= 0) + break; + *to++ = c; + } + *to = '\0'; + } + + + /* + ** Return the count of path segments in a file name (the number of + ** slashes). + */ + static int + slashcount(char *name) + { + int i; + + for (i = 0; *name != '\0'; name++) + if (*name == '/') + i++; + return i; + } + + + /* + ** Unlink a file, reporting errors if the unlink fails for a reason other + ** than the file not existing doesn't exist. Be careful to avoid unlinking + ** a directory if unlink_dangerous is true. + */ + static void + unlink_file(const char *file) + { + struct stat st; + + /* On some systems, unlink will remove directories if used by root. If + we're running as root, unlink_dangerous will be set, and we need to + make sure that the file isn't a directory first. */ + if (unlink_dangerous) { + if (stat(file, &st) < 0) { + if (errno != ENOENT) { + if (*file == '/') + syswarn("can't stat %s", file); + else + syswarn("can't stat %s in %s", file, current_dir); + error_count++; + } + return; + } + if (S_ISDIR(st.st_mode)) { + if (*file == '/') + syswarn("%s is a directory", file); + else + syswarn("%s in %s is a directory", file, current_dir); + error_count++; + return; + } + } + + if (debug_only) { + if (*file != '/') + printf("%s / ", current_dir); + printf("%s\n", file); + return; + } + + if (unlink(file) < 0 && errno != ENOENT) { + if (*file == '/') + syswarn("can't unlink %s", file); + else + syswarn("can't unlink %s in %s", file, current_dir); + } + } + + + /* + ** A wrapper around chdir that dies if chdir fails for a reason other than + ** the directory not existing, returns false if the directory doesn't + ** exist (reporting an error), and otherwise returns true. It also checks + ** to make sure that filecount is larger than chdir_threshold, and if it + ** isn't it instead just sets prefix_dir and prefix_len to point to the new + ** directory without changing the working directory. + */ + static BOOL + chdir_checked(const char *path, int filecount) + { + if (filecount < chdir_threshold) { + strcpy(prefix_dir, path); + prefix_len = strlen(path); + } else { + prefix_len = 0; + if (chdir(path) < 0) { + if (errno != ENOENT) + sysdie("can't chdir from %s to %s", current_dir, path); + else { + syswarn("can't chdir from %s to %s", current_dir, path); + return FALSE; + } + } + } + return TRUE; + } + + + /* + ** Set our environment (process working directory, and global vars) to + ** reflect a change of directory to dir (relative to base_dir if dir is not + ** an absolute path). We're likely to want to do different things + ** depending on the amount of work to do in dir, so we also take the number + ** of files to remove in dir as the second argument. Return false if the + ** directory doesn't exist (and therefore all files in it have already been + ** removed; otherwise, return true. + */ + static BOOL + setup_dir(char *dir, int filecount) + { + char *p, *q, *absolute; + char path[MAX_DIR_LEN]; + int base_depth, depth; + + /* Set absolute to the absolute path to the new directory. */ + if (dir == NULL) + absolute = base_dir; + else if (*dir == '/') + absolute = dir; + else if (*dir == '\0') { + strcpy(path, "/"); + absolute = path; + } else { + /* Strip off leading "./". */ + while (dir[0] == '.' && dir[1] == '/') + for (dir += 2; *dir == '/'; dir++) + ; + + /* Handle any leading "../", but only up to the number of segments + in base_dir. */ + base_depth = slashcount(base_dir); + while (base_depth > 0 && EQn(dir, "../", 3)) + for (base_depth--, dir += 3; *dir == '/'; dir++) + ; + if (base_depth <= 0) + die("too many ../'s in path %s", dir); + copy_segments(path, base_dir, base_depth + 1); + if (strlen(path) + strlen(dir) + 2 > MAX_DIR_LEN) + die("path %s too long", dir); + strcat(path, "/"); + strcat(path, dir); + absolute = path; + } + + /* Find the first point of difference between absolute and current_dir. + If there is no difference, we're done; we're changing to the same + directory we were in (this is probably some sort of error, but can + happen with odd relative paths). */ + for (p = absolute, q = current_dir; *p == *q; p++, q++) + if (*p == '\0') + return TRUE; + + /* If we reached the end of current_dir and there's more left of + absolute, we're changing to a subdirectory of where we were. */ + if (*q == '\0' && *p == '/') { + p++; + if (!chdir_checked(p, filecount)) + return FALSE; + if (prefix_len == 0) + strcpy(current_dir, absolute); + return TRUE; + } + + /* Otherwise, if we were promised that we have a pure tree (in other + words, no symbolic links to directories), see if it's worth going up + the tree with ".." and then down again rather than chdir to the + absolute path. relative_threshold determines how many levels of ".." + we're willing to use; the default of 1 seems fractionally faster than + 2 and 0 indicates to always use absolute paths. Values larger than 3 + would require extending the dotdots string, but are unlikely to be + worth it. */ + if (p != '\0' && relative_threshold > 0) { + depth = slashcount(q); + if (depth <= relative_threshold) { + while (p > absolute && *--p != '/') + ; + p++; + strcpy(prefix_dir, dotdots + 9 - depth * 3); + strcpy(prefix_dir + (depth + 1) * 3, p); + if (!chdir_checked(prefix_dir, filecount)) + return FALSE; + + /* Now patch up current_dir to reflect where we are. */ + if (prefix_len == 0) { + while (q > current_dir && *--q != '/') + ; + strcpy(q + 1, p); + } + return TRUE; + } + } + + /* All else has failed; just use the absolute path. This includes the + case where current_dir is a subdirectory of absolute, in which case + it may be somewhat faster to use chdir("../..") or the like rather + than the absolute path, but this case rarely happens when the user + cares about speed (it usually doesn't happen with sorted input). So + we don't bother. */ + if (!chdir_checked(absolute, filecount)) + return FALSE; + if (prefix_len == 0) + strcpy(current_dir, absolute); + return TRUE; + } + + + /* + ** Process a filelist of files to be deleted, all in the same directory. + */ + static void + unlink_filelist(filelist *list, int filecount) + { + BOOL sorted; + DIR *dir; + struct dirent *entry; + char *file; + int i; + + /* If setup_dir returns false, the directory doesn't exist and we're + already all done. */ + if (!setup_dir(list->dir, filecount)) { + filelist_free(list); + return; + } + + /* We'll use prefix_dir as a buffer to write each file name into as we + go, so get it set up. */ + if (prefix_len == 0) + file = prefix_dir; + else { + prefix_dir[prefix_len++] = '/'; + file = prefix_dir + prefix_len; + *file = '\0'; + } + + /* If we're not sorting directories or if the number of files is under + the threshold, just remove the files. */ + if (sort_threshold == 0 || filecount < sort_threshold) { + for (i = 0; i < list->count; i++) { + strcpy(file, list->files[i]); + unlink_file(prefix_dir); + } + filelist_free(list); + return; + } + + /* We have enough files to remove in this directory that it's worth + optimizing. First, make sure the list of files is sorted. It's not + uncommon for the files to already be sorted, so check first. */ + for (sorted = TRUE, i = 1; sorted && i < list->count; i++) + sorted = (strcmp(list->files[i - 1], list->files[i]) <= 0); + if (!sorted) + qsort(list->files, list->count, sizeof(char *), file_compare); + + /* Now, begin doing our optimized unlinks. The technique we use is to + open the directory containing the files and read through it, checking + each file in the directory to see if it's one of the files we should + be removing. The theory is that we want to minimize the amount of + time the operating system spends doing string compares trying to find + the file to be removed in the directory. This is often an O(n) + operation. Note that this optimization may slightly slow more + effecient operating systems. */ + dir = opendir(prefix_len == 0 ? "." : prefix_dir); + if (dir == NULL) { + if (prefix_len > 0 && prefix_dir[0] == '/') + warn("can't open directory %s", prefix_dir); + else + warn("can't open directory %s in %s", + (prefix_len == 0) ? "." : prefix_dir, current_dir); + error_count++; + filelist_free(list); + return; + } + for (i = 0, entry = readdir(dir); entry != NULL; entry = readdir(dir)) + if (filelist_lookup(list, entry->d_name) != NULL) { + i++; + strcpy(file, entry->d_name); + unlink_file(prefix_dir); + if (i == list->count) + break; + } + closedir(dir); + filelist_free(list); + } + + + /* + ** Check a path to see if it's okay (not likely to confuse us). This + ** ensures that it doesn't contain elements like "./" or "../" and doesn't + ** contain doubled slashes. + */ + static BOOL + bad_path(const char *p) + { + if (strlen(p) >= MAX_DIR_LEN) + return TRUE; + while (*p) { + if (p[0] == '.' && (p[1] == '/' || (p[1] == '.' && p[2] == '/'))) + return TRUE; + while (*p && *p != '/') + p++; + if (p[0] == '/' && p[1] == '/') + return TRUE; + if (*p == '/') + p++; + } + return FALSE; + } + + + /* + ** Main routine. Parse options, initialize the storage manager, and + ** initalize various global variables, and then go into a loop calling + ** process_line and unlink_filelist as needed. + */ + int + main(int argc, char *argv[]) + { + const char *name; + char *p, **arg; + QIOSTATE *qp; + filelist *list; + int filecount, deleted; + BOOL empty_error = FALSE; + + /* Establish our identity. Since we use the storage manager, we need to + set up syslog as well, although we won't use it ourselves. */ + name = argv[0]; + if (*name == '\0') + name = "fastrm"; + else { + p = strrchr(name, '/'); + if (p != NULL) + name = p + 1; + } + openlog(name, LOG_CONS | LOG_PID, LOG_INN_PROG); + + /* If we're running as root, unlink may remove directories. */ + unlink_dangerous = (geteuid() == 0); + + /* Unfortunately, we can't use getopt, because several of our options + take optional arguments. Bleh. */ + arg = argv + 1; + while (argc >= 2 && **arg == '-') { + p = *arg; + while (*++p) { + switch (*p) { + default: + die("invalid option -- %c", *p); + case 'a': + case 'r': + continue; + case 'c': + chdir_threshold = 1; + if (!CTYPE(isdigit, p[1])) + continue; + chdir_threshold = atoi(p + 1); + break; + case 'd': + debug_only = TRUE; + continue; + case 'e': + empty_error = TRUE; + continue; + case 's': + sort_threshold = 5; + if (!CTYPE(isdigit, p[1])) + continue; + sort_threshold = atoi(p + 1); + break; + case 'u': + relative_threshold = 1; + if (!CTYPE(isdigit, p[1])) + continue; + relative_threshold = atoi(p + 1); + if (relative_threshold >= (int) strlen(dotdots) / 3) + relative_threshold = strlen(dotdots) / 3 - 1; + break; + } + break; + } + argc--; + arg++; + } + if (argc != 2) + die("usage error, wrong number of arguments"); + + /* The remaining argument is the base path. Make sure it's valid and + not excessively large and then change to it. */ + base_dir = *arg; + if (*base_dir != '/' || bad_path(base_dir)) + die("bad base path %s", base_dir); + strcpy(current_dir, base_dir); + if (chdir(current_dir) < 0) + sysdie("can't chdir to base path %s", current_dir); + + /* Open our input stream and then loop through it, building filelists + and processing them until done. */ qp = QIOfdopen(fileno(stdin)); ! if (qp == NULL) ! sysdie("can't reopen stdin"); ! while ((list = process_line(qp, &filecount, &deleted)) != NULL) { ! empty_error = FALSE; ! unlink_filelist(list, filecount); } ! if (deleted > 0) ! empty_error = FALSE; + /* All done. */ SMshutdown(); if (empty_error) ! die("no files to remove"); ! exit(error_count > 0 ? 1 : 0); } Index: inn/expire/makehistory.c diff -c inn/expire/makehistory.c:1.74.2.7 inn/expire/makehistory.c:1.74.2.9 *** inn/expire/makehistory.c:1.74.2.7 Thu Aug 10 07:09:02 2000 --- inn/expire/makehistory.c Tue Mar 27 07:37:45 2001 *************** *** 1,4 **** ! /* $Id: makehistory.c,v 1.74.2.7 2000/08/09 22:09:02 kondou Exp $ ** ** Rebuild history/overview databases. */ --- 1,4 ---- ! /* $Id: makehistory.c,v 1.74.2.9 2001/03/26 22:37:45 kondou Exp $ ** ** Rebuild history/overview databases. */ *************** *** 623,629 **** if (!SMprobe(SMARTNGNUM, art->token, (void *)&ann)) { Xrefp->Header = NULL; Xrefp->HeaderLength = 0; ! } len = strlen(XREF) + 1 + strlen(innconf->pathhost) + 1 + strlen(ann.groupname) + 1 + 16 + 1; if (len > BIG_BUFFER) { Xrefp->Header = NULL; --- 623,632 ---- if (!SMprobe(SMARTNGNUM, art->token, (void *)&ann)) { Xrefp->Header = NULL; Xrefp->HeaderLength = 0; ! } else ! return; ! if (ann.artnum == 0) ! return; len = strlen(XREF) + 1 + strlen(innconf->pathhost) + 1 + strlen(ann.groupname) + 1 + 16 + 1; if (len > BIG_BUFFER) { Xrefp->Header = NULL; *************** *** 736,742 **** void Usage(void) { ! fprintf(stderr, "Usage: makehistory [-b] [-f file] [-O] [-I] [-l overtmpsegsize [-a] [-u] [-x] [-T tmpdir]\n"); fprintf(stderr, "\t-b -- delete bad articles from spool\n"); fprintf(stderr, "\t-e -- read entire articles to compute proper Bytes headers\n"); fprintf(stderr, "\t-f -- write history entries to file (default $pathdb/history)\n"); --- 739,745 ---- void Usage(void) { ! fprintf(stderr, "Usage: makehistory [-b] [-f file] [-O] [-I] [-l overtmpsegsize [-a] [-x] [-T tmpdir]\n"); fprintf(stderr, "\t-b -- delete bad articles from spool\n"); fprintf(stderr, "\t-e -- read entire articles to compute proper Bytes headers\n"); fprintf(stderr, "\t-f -- write history entries to file (default $pathdb/history)\n"); *************** *** 744,750 **** fprintf(stderr, "\t-O -- create overview entries for articles\n"); fprintf(stderr, "\t-I -- do not create overview entries for articles below lowmark in active\n"); fprintf(stderr, "\t-l nnn -- set size of batches too do overview updates in (default 10000)\n"); - fprintf(stderr, "\t-u -- 'update mode' assume server running, only output to file\n"); fprintf(stderr,"\t\tentries not already in main history file.\n"); fprintf(stderr, "\t-x -- don't bother writing any history entries at all\n"); fprintf(stderr, "\t-T tmpdir -- use directory tmpdir for temp files. \n"); --- 747,752 ---- Index: inn/include/storage.h diff -c inn/include/storage.h:1.12.2.2 inn/include/storage.h:1.12.2.3 *** inn/include/storage.h:1.12.2.2 Wed Sep 6 08:22:24 2000 --- inn/include/storage.h Sat Feb 3 16:32:30 2001 *************** *** 1,4 **** ! /* $Id: storage.h,v 1.12.2.2 2000/09/05 23:22:24 kondou Exp $ ** ** Here be declarations related to the storage subsystem. */ --- 1,4 ---- ! /* $Id: storage.h,v 1.12.2.3 2001/02/03 07:32:30 rra Exp $ ** ** Here be declarations related to the storage subsystem. */ *************** *** 85,90 **** --- 85,91 ---- BOOL SMcancel(TOKEN token); BOOL SMprobe(PROBETYPE type, TOKEN *token, void *value); BOOL SMflushcacheddata(FLUSHTYPE type); + void SMprintfiles(FILE *, TOKEN, char **xref, int ngroups); void SMshutdown(void); #ifdef __cplusplus Index: inn/innd/art.c diff -c inn/innd/art.c:1.131.2.13 inn/innd/art.c:1.131.2.14 *** inn/innd/art.c:1.131.2.13 Fri Sep 8 02:01:54 2000 --- inn/innd/art.c Wed Feb 7 00:07:07 2001 *************** *** 1,4 **** ! /* $Id: art.c,v 1.131.2.13 2000/09/07 17:01:54 kondou Exp $ ** ** Article-processing. */ --- 1,4 ---- ! /* $Id: art.c,v 1.131.2.14 2001/02/06 15:07:07 kondou Exp $ ** ** Article-processing. */ *************** *** 2417,2423 **** * which you explicitly excluded in your active file. */ if (!GroupMissing) { if (innconf->remembertrash && (Mode == OMrunning) && ! !HISremember(hash)) syslog(L_ERROR, "%s cant write history %s %m", LogName, Data.MessageID); if (distributions) --- 2417,2423 ---- * which you explicitly excluded in your active file. */ if (!GroupMissing) { if (innconf->remembertrash && (Mode == OMrunning) && ! !NoHistoryUpdate && !HISremember(hash)) syslog(L_ERROR, "%s cant write history %s %m", LogName, Data.MessageID); if (distributions) Index: inn/innd/inndstart.c diff -c inn/innd/inndstart.c:1.30.2.2 inn/innd/inndstart.c:1.30.2.3 *** inn/innd/inndstart.c:1.30.2.2 Thu Jun 22 12:33:43 2000 --- inn/innd/inndstart.c Tue Feb 6 09:09:19 2001 *************** *** 1,4 **** ! /* $Id: inndstart.c,v 1.30.2.2 2000/06/22 03:33:43 rra Exp $ ** ** Open the privileged port, then exec innd. ** --- 1,4 ---- ! /* $Id: inndstart.c,v 1.30.2.3 2001/02/06 00:09:19 rra Exp $ ** ** Open the privileged port, then exec innd. ** *************** *** 26,32 **** ** to run innd as the news user with bogus configuration information, ** thereby possibly compromising the news account. ** ! ** - The only ports < 1024 that we'll bind to are 119 and 443, or a port ** given at configure time with --with-innd-port. This is to prevent ** the news user from taking over a service such as telnet or POP and ** potentially gaining access to user passwords. --- 26,32 ---- ** to run innd as the news user with bogus configuration information, ** thereby possibly compromising the news account. ** ! ** - The only ports < 1024 that we'll bind to are 119 and 433, or a port ** given at configure time with --with-innd-port. This is to prevent ** the news user from taking over a service such as telnet or POP and ** potentially gaining access to user passwords. Index: inn/innd/rc.c diff -c inn/innd/rc.c:1.45.2.1 inn/innd/rc.c:1.45.2.2 *** inn/innd/rc.c:1.45.2.1 Fri Apr 14 03:22:53 2000 --- inn/innd/rc.c Sat Jan 13 01:59:51 2001 *************** *** 1,4 **** ! /* $Id: rc.c,v 1.45.2.1 2000/04/13 18:22:53 rra Exp $ ** ** Routines for the remote connect channel. Create an Internet stream ** socket that processes connect to. If the incoming site is not one of --- 1,4 ---- ! /* $Id: rc.c,v 1.45.2.2 2001/01/12 16:59:51 kondou Exp $ ** ** Routines for the remote connect channel. Create an Internet stream ** socket that processes connect to. If the incoming site is not one of *************** *** 551,557 **** * into one file called incoming.conf (to avoid confusion). * See ../samples/incoming.conf for the new syntax. * ! * Fabien Tassin , 21-Dec-1997. */ --- 551,557 ---- * into one file called incoming.conf (to avoid confusion). * See ../samples/incoming.conf for the new syntax. * ! * Fabien Tassin , 21-Dec-1997. */ *************** *** 1375,1381 **** if (*p == '/') q = p + 1; ! fprintf (F, "## $Revision: 1.45.2.1 $\n"); fprintf (F, "## %s - names and addresses that feed us news\n", q); DISPOSE(r); fprintf (F, "##\n\n"); --- 1375,1381 ---- if (*p == '/') q = p + 1; ! fprintf (F, "## $Revision: 1.45.2.2 $\n"); fprintf (F, "## %s - names and addresses that feed us news\n", q); DISPOSE(r); fprintf (F, "##\n\n"); Index: inn/innfeed/host.c diff -c inn/innfeed/host.c:1.40.2.4 inn/innfeed/host.c:1.40.2.5 *** inn/innfeed/host.c:1.40.2.4 Fri Aug 18 14:03:57 2000 --- inn/innfeed/host.c Thu Mar 15 12:12:54 2001 *************** *** 4,10 **** * Start Date: Thu Dec 28 17:29:05 1995 * Project: INN (innfeed) * File: host.c ! * RCSId: $Id: host.c,v 1.40.2.4 2000/08/18 05:03:57 rra Exp $ * * Copyright: Copyright (c) 1996 by Internet Software Consortium * --- 4,10 ---- * Start Date: Thu Dec 28 17:29:05 1995 * Project: INN (innfeed) * File: host.c ! * RCSId: $Id: host.c,v 1.40.2.5 2001/03/15 03:12:54 kondou Exp $ * * Copyright: Copyright (c) 1996 by Internet Software Consortium * *************** *** 29,35 **** */ #if ! defined (lint) ! static const char *rcsid = "$Id: host.c,v 1.40.2.4 2000/08/18 05:03:57 rra Exp $" ; static void use_rcsid (const char *rid) { /* Never called */ use_rcsid (rcsid) ; use_rcsid (rid) ; } --- 29,35 ---- */ #if ! defined (lint) ! static const char *rcsid = "$Id: host.c,v 1.40.2.5 2001/03/15 03:12:54 kondou Exp $" ; static void use_rcsid (const char *rid) { /* Never called */ use_rcsid (rcsid) ; use_rcsid (rid) ; } *************** *** 2639,2645 **** bool isGood = false ; if (topScope == NULL) ! return false ; while ((v = getNextPeer (&idx)) != NULL) { --- 2639,2645 ---- bool isGood = false ; if (topScope == NULL) ! return p; while ((v = getNextPeer (&idx)) != NULL) { Index: inn/innfeed/misc.c diff -c inn/innfeed/misc.c:1.8.2.3 inn/innfeed/misc.c:1.8.2.4 *** inn/innfeed/misc.c:1.8.2.3 Mon Oct 2 07:55:30 2000 --- inn/innfeed/misc.c Fri Apr 13 01:20:24 2001 *************** *** 4,10 **** * Start Date: Wed Dec 27 17:10:18 1995 * Project: INN (innfeed) * File: misc.c ! * RCSId: $Id: misc.c,v 1.8.2.3 2000/10/01 22:55:30 kondou Exp $ * * Copyright: Copyright (c) 1996 by Internet Software Consortium * --- 4,10 ---- * Start Date: Wed Dec 27 17:10:18 1995 * Project: INN (innfeed) * File: misc.c ! * RCSId: $Id: misc.c,v 1.8.2.4 2001/04/12 16:20:24 rra Exp $ * * Copyright: Copyright (c) 1996 by Internet Software Consortium * *************** *** 29,35 **** */ #if ! defined (lint) ! static const char *rcsid = "$Id: misc.c,v 1.8.2.3 2000/10/01 22:55:30 kondou Exp $" ; static void use_rcsid (const char *rid) { /* Never called */ use_rcsid (rcsid) ; use_rcsid (rid) ; } --- 29,35 ---- */ #if ! defined (lint) ! static const char *rcsid = "$Id: misc.c,v 1.8.2.4 2001/04/12 16:20:24 rra Exp $" ; static void use_rcsid (const char *rid) { /* Never called */ use_rcsid (rcsid) ; use_rcsid (rid) ; } *************** *** 154,163 **** } else { ! char buffer [512] ; /* gag me */ ! ! vsprintf (buffer,fmt,ap) ; ! syslog (level,buffer) ; } va_end (ap) ; } --- 154,160 ---- } else { ! dolog (level,fmt,ap) ; } va_end (ap) ; } Index: inn/lib/dbz.c diff -c inn/lib/dbz.c:1.34.2.2 inn/lib/dbz.c:1.34.2.5 *** inn/lib/dbz.c:1.34.2.2 Wed Sep 6 13:47:02 2000 --- inn/lib/dbz.c Sun Feb 4 23:53:22 2001 *************** *** 164,175 **** #endif /* DO_TAGGED_HASH */ - #ifdef MAP_FILE - #define MAP__ARG (MAP_FILE | MAP_SHARED) - #else - #define MAP__ARG (MAP_SHARED) - #endif - /* Old dbz used a long as the record type for dbz entries, which became * really gross in places because of mixed references. We define these to * make it a bit easier if we want to store more in here. --- 164,169 ---- *************** *** 791,800 **** tagboth = tagbits | taghere; canttag_warned = 0; #else - if ((innconf == NULL) && (ReadInnConf() < 0)) { - Fclose(dirf); - return FALSE; - } if (!openhashtable(name, idx, &idxtab, sizeof(of_t), options.pag_incore)) { Fclose(dirf); return FALSE; --- 785,790 ---- *************** *** 1390,1396 **** search(searcher *sp) { of_t value; ! unsigned long taboffset = 0; if (sp->aborted) return(NOTFOUND); --- 1380,1386 ---- search(searcher *sp) { of_t value; ! unsigned long taboffset = sp->tabno * conf.tsize; if (sp->aborted) return(NOTFOUND); *************** *** 1423,1432 **** return(NOTFOUND); } else value = VACANT; ! } ! ! /* and finish up */ ! pagtab.pos += sizeof(value); } /* vacant slot is always cause to return */ --- 1413,1421 ---- return(NOTFOUND); } else value = VACANT; ! pagtab.pos = -1; ! } else ! pagtab.pos += sizeof(value); } /* vacant slot is always cause to return */ Index: inn/nnrpd/article.c diff -c inn/nnrpd/article.c:1.86.2.9 inn/nnrpd/article.c:1.86.2.12 *** inn/nnrpd/article.c:1.86.2.9 Thu Jun 29 12:47:33 2000 --- inn/nnrpd/article.c Mon Apr 23 15:29:38 2001 *************** *** 1,4 **** ! /* $Revision: 1.86.2.9 $ ** ** Article-related routines. */ --- 1,4 ---- ! /* $Revision: 1.86.2.12 $ ** ** Article-related routines. */ *************** *** 520,526 **** char *GetHeader(char *header, BOOL IsLines) { static char buff[40]; ! char *p, *q, *r, *s, *virtualpath; /* Bogus value here to make sure that it isn't initialized to \n */ char lastchar = ' '; char *limit; --- 520,526 ---- char *GetHeader(char *header, BOOL IsLines) { static char buff[40]; ! char *p, *q, *r, *s, *t, *virtualpath; /* Bogus value here to make sure that it isn't initialized to \n */ char lastchar = ' '; char *limit; *************** *** 543,550 **** for (; (p < limit) && !isspace((int)*p) ; p++); for (; (p < limit) && isspace((int)*p) ; p++); for (q = p; q < limit; q++) ! if ((*q == '\r') || (*q == '\n')) ! break; if (q == limit) return NULL; if (caseEQn("Path", header, headerlen)) --- 543,567 ---- for (; (p < limit) && !isspace((int)*p) ; p++); for (; (p < limit) && isspace((int)*p) ; p++); for (q = p; q < limit; q++) ! if ((*q == '\r') || (*q == '\n')) { ! /* Check for continuation header lines */ ! t = q + 1; ! if (t < limit) { ! if ((*q == '\r' && *t == '\n')) { ! t++; ! if (t == limit) ! break; ! } ! if ((*t == '\t' || *t == ' ')) { ! for (; (t < limit) && isspace((int)*t) ; t++); ! q = t; ! } else { ! break; ! } ! } else { ! break; ! } ! } if (q == limit) return NULL; if (caseEQn("Path", header, headerlen)) *************** *** 583,594 **** if (r == q) return NULL; memcpy(retval, VirtualPath, VirtualPathlen - 1); ! memcpy(retval + VirtualPathlen - 1, r, q - r); ! *(retval + (int)(q - r) + VirtualPathlen - 1) = '\0'; } else { memcpy(retval, p, q - p); *(retval + (int)(q - p)) = '\0'; } return retval; } } --- 600,614 ---- if (r == q) return NULL; memcpy(retval, VirtualPath, VirtualPathlen - 1); ! memcpy(retval + VirtualPathlen - 1, r - 1, q - r + 1); ! *(retval + (int)(q - r) + VirtualPathlen) = '\0'; } else { memcpy(retval, p, q - p); *(retval + (int)(q - p)) = '\0'; } + for (p = retval; *p; p++) + if (*p == '\n' || *p == '\r') + *p = ' '; return retval; } } *************** *** 654,660 **** return; } tart=art; ! Reply("%d %ld %s %s\r\n", what->ReplyCode, art, what->Item, av[1]); if (what->Type != STstat) { ARTsendmmap(what->Type); } --- 674,680 ---- return; } tart=art; ! Reply("%d %ld %s %s\r\n", what->ReplyCode, art, av[1], what->Item); if (what->Type != STstat) { ARTsendmmap(what->Type); } Index: inn/nnrpd/nnrpd.c diff -c inn/nnrpd/nnrpd.c:1.78.2.17 inn/nnrpd/nnrpd.c:1.78.2.20 *** inn/nnrpd/nnrpd.c:1.78.2.17 Tue Nov 7 18:35:38 2000 --- inn/nnrpd/nnrpd.c Sun Mar 11 22:43:47 2001 *************** *** 1,4 **** ! /* $Revision: 1.78.2.17 $ ** ** NNTP server for readers (NNRP) for InterNetNews. ** This server doesn't do any real load-limiting, except for what has --- 1,4 ---- ! /* $Revision: 1.78.2.20 $ ** ** NNTP server for readers (NNRP) for InterNetNews. ** This server doesn't do any real load-limiting, except for what has *************** *** 486,500 **** HostErrorStr = NULL; if (!Address2Name(&sin.sin_addr, ServerHost, sizeof(ServerHost))) { strcpy(ServerHost, inet_ntoa(sin.sin_addr)); ! if (HostErrorStr == NULL) { ! syslog(L_NOTICE, ! "? cant gethostbyaddr %s %m -- using IP address for access", ! ServerHost); ! } else { ! syslog(L_NOTICE, ! "? cant gethostbyaddr %s %s -- using IP address for access", ! ServerHost, HostErrorStr); ! } } #else strcpy(ServerHost, inet_ntoa(sin.sin_addr)); --- 486,492 ---- HostErrorStr = NULL; if (!Address2Name(&sin.sin_addr, ServerHost, sizeof(ServerHost))) { strcpy(ServerHost, inet_ntoa(sin.sin_addr)); ! /* suppress error reason */ } #else strcpy(ServerHost, inet_ntoa(sin.sin_addr)); *************** *** 955,960 **** --- 947,955 ---- /* Set signal handle to care for dead children */ (void)xsignal(SIGCHLD, WaitChild); + + /* Arrange to toggle tracing. */ + (void)xsignal(SIGHUP, ToggleTrace); TITLEset("nnrpd: accepting connections"); *************** *** 974,979 **** --- 969,979 ---- syslog(L_NOTICE, "cant fork (waiting): %m"); sleep(1); } + if (ChangeTrace) { + Tracing = Tracing ? FALSE : TRUE; + syslog(L_TRACE, "trace %sabled", Tracing ? "en" : "dis"); + ChangeTrace = FALSE; + } if (pid != 0) close(fd); } while (pid != 0); *************** *** 998,1003 **** --- 998,1005 ---- } else { SetupDaemon(); + /* Arrange to toggle tracing. */ + (void)xsignal(SIGHUP, ToggleTrace); }/* DaemonMode */ /* Setup. */ *************** *** 1033,1039 **** ssl_result=tls_start_servertls(0, /* read */ 1); /* write */ if (ssl_result==-1) { ! Reply("%d Starttls failed\r\n", NNTP_STARTTLS_BAD_VAL); ExitWithStats(1, FALSE); } --- 1035,1041 ---- ssl_result=tls_start_servertls(0, /* read */ 1); /* write */ if (ssl_result==-1) { ! Reply("%d SSL connection failed\r\n", NNTP_STARTTLS_BAD_VAL); ExitWithStats(1, FALSE); } *************** *** 1053,1061 **** /* Catch SIGPIPE so that we can exit out of long write loops */ (void)xsignal(SIGPIPE, CatchPipe); - - /* Arrange to toggle tracing. */ - (void)xsignal(SIGHUP, ToggleTrace); /* Get permissions and see if we can talk to this client */ StartConnection(); --- 1055,1060 ---- Index: inn/nnrpd/perm.c diff -c inn/nnrpd/perm.c:1.17.2.7 inn/nnrpd/perm.c:1.17.2.9 *** inn/nnrpd/perm.c:1.17.2.7 Thu Jan 11 01:06:40 2001 --- inn/nnrpd/perm.c Wed Apr 18 17:02:50 2001 *************** *** 1,4 **** ! /* $Id: perm.c,v 1.17.2.7 2001/01/10 16:06:40 kondou Exp $ ** ** How to figure out where a user comes from, and what that user can do once ** we know who sie is. --- 1,4 ---- ! /* $Id: perm.c,v 1.17.2.9 2001/04/18 08:02:50 rra Exp $ ** ** How to figure out where a user comes from, and what that user can do once ** we know who sie is. *************** *** 1701,1707 **** /* messages from a program's stdout */ static void HandleProgLine(char *ln) { ! if (!strncmp(ln, "User:", strlen("User:"))) strcpy(ubuf, ln+strlen("User:")); } --- 1701,1707 ---- /* messages from a program's stdout */ static void HandleProgLine(char *ln) { ! if (caseEQn(ln, "User:", strlen("User:"))) strcpy(ubuf, ln+strlen("User:")); } *************** *** 1862,1868 **** GetProgInput(foo); done = (ubuf[0] != '\0'); if (done) ! syslog(L_TRACE, "%s res resolver succesful, user %s", ClientHost, ubuf); else syslog(L_TRACE, "%s res resolver failed", ClientHost); DISPOSE(foo); --- 1862,1868 ---- GetProgInput(foo); done = (ubuf[0] != '\0'); if (done) ! syslog(L_TRACE, "%s res resolver successful, user %s", ClientHost, ubuf); else syslog(L_TRACE, "%s res resolver failed", ClientHost); DISPOSE(foo); Index: inn/nnrpd/post.c diff -c inn/nnrpd/post.c:1.50.2.5 inn/nnrpd/post.c:1.50.2.7 *** inn/nnrpd/post.c:1.50.2.5 Wed Jun 28 07:24:18 2000 --- inn/nnrpd/post.c Sat Feb 17 23:57:23 2001 *************** *** 1,4 **** ! /* $Revision: 1.50.2.5 $ ** ** Check article, send it to the local server. */ --- 1,4 ---- ! /* $Revision: 1.50.2.7 $ ** ** Check article, send it to the local server. */ *************** *** 357,380 **** } if (PERMaccessconf->nnrpdauthsender) { ! /* If authorized and we didn't get a sender, add the header based on ! * our info. If not authorized, zap the Sender so we don't put out ! * unauthenticated data. */ ! if (PERMauthorized && HDR(_sender) == NULL) { if (PERMuser[0] == '\0') { (void)sprintf(sendbuff, "%s@%s", "UNKNOWN", ClientHost); } else { if ((p = strchr(PERMuser, '@')) == NULL) { (void)sprintf(sendbuff, "%s@%s", PERMuser, ClientHost); } else { ! *p = '\0'; ! (void)sprintf(sendbuff, "%s@%s", PERMuser, ClientHost); ! *p = '@'; } } HDR(_sender) = sendbuff; } ! else if (!PERMauthorized) HDR(_sender) = NULL; } --- 357,378 ---- } if (PERMaccessconf->nnrpdauthsender) { ! /* If authorized, add the header based on our info. If not ! * authorized, zap the Sender so we don't put out unauthenticated ! * data. */ ! if (PERMauthorized) { if (PERMuser[0] == '\0') { (void)sprintf(sendbuff, "%s@%s", "UNKNOWN", ClientHost); } else { if ((p = strchr(PERMuser, '@')) == NULL) { (void)sprintf(sendbuff, "%s@%s", PERMuser, ClientHost); } else { ! (void)sprintf(sendbuff, "%s", PERMuser); } } HDR(_sender) = sendbuff; } ! else HDR(_sender) = NULL; } *************** *** 1119,1126 **** (void)fprintf(ToServer, "%s: %s\r\n", hp->Name, hp->Value); } } ! for (i = 0; i < OtherCount; i++) ! (void)fprintf(ToServer, "%s\r\n", OtherHeaders[i]); (void)fprintf(ToServer, "\r\n"); if (FLUSH_ERROR(ToServer)) { (void)sprintf(Error, CANTSEND, "headers", strerror(errno)); --- 1117,1132 ---- (void)fprintf(ToServer, "%s: %s\r\n", hp->Name, hp->Value); } } ! for (i = 0; i < OtherCount; i++) { ! if (strchr(OtherHeaders[i], '\n') != NULL) { ! if ((p = Towire(OtherHeaders[i])) != NULL) { ! (void)fprintf(ToServer, "%s\r\n", p); ! DISPOSE(p); ! } ! } else { ! (void)fprintf(ToServer, "%s\r\n", OtherHeaders[i]); ! } ! } (void)fprintf(ToServer, "\r\n"); if (FLUSH_ERROR(ToServer)) { (void)sprintf(Error, CANTSEND, "headers", strerror(errno)); Index: inn/nnrpd/tls.c diff -c inn/nnrpd/tls.c:1.1.2.2 inn/nnrpd/tls.c:1.1.2.3 *** inn/nnrpd/tls.c:1.1.2.2 Sun Aug 6 12:07:48 2000 --- inn/nnrpd/tls.c Fri Feb 9 07:23:48 2001 *************** *** 456,462 **** unsigned int n; SSL_SESSION *session; SSL_CIPHER *cipher; - X509 *peer; if (!tls_serverengine) { --- 456,461 ---- *************** *** 523,578 **** if (tls_loglevel < 4) do_dump = 0; - /* - * Lets see, whether a peer certificate is availabe and what is - * the actual information. We want to save it for later use. - */ - peer = SSL_get_peer_certificate(tls_conn); - - if (peer != NULL) { - - syslog(L_ERROR,"GOT CLIENT CERTIFICATE!!!\n"); - - X509_NAME_oneline(X509_get_subject_name(peer), - peer_subject, CCERT_BUFSIZ); - if (tls_loglevel >= 2) - Printf("subject=%s", peer_subject); - - syslog(L_ERROR, "subject=%s", peer_subject); - tls_peer_subject = peer_subject; - X509_NAME_oneline(X509_get_issuer_name(peer), - peer_issuer, CCERT_BUFSIZ); - if (tls_loglevel >= 2) - Printf("issuer=%s", peer_issuer); - tls_peer_issuer = peer_issuer; - if (X509_digest(peer, EVP_md5(), md, &n)) { - for (j = 0; j < (int) n; j++) - { - fingerprint[j * 3] = hexcodes[(md[j] & 0xf0) >> 4]; - fingerprint[(j * 3) + 1] = hexcodes[(md[j] & 0x0f)]; - if (j + 1 != (int) n) - fingerprint[(j * 3) + 2] = '_'; - else - fingerprint[(j * 3) + 2] = '\0'; - } - if (tls_loglevel >= 2) - Printf("fingerprint=%s", fingerprint); - syslog(L_ERROR,"fingerprint=%s", fingerprint); - tls_peer_fingerprint = fingerprint; - } - X509_NAME_get_text_by_NID(X509_get_subject_name(peer), - NID_commonName, peer_CN, CCERT_BUFSIZ); - tls_peer_CN = peer_CN; - X509_NAME_get_text_by_NID(X509_get_issuer_name(peer), - NID_commonName, issuer_CN, CCERT_BUFSIZ); - if (tls_loglevel >= 3) - Printf("subject_CN=%s, issuer_CN=%s", peer_CN, issuer_CN); - - syslog(L_ERROR,"subject_CN=%s, issuer_CN=%s", peer_CN, issuer_CN); - - tls_issuer_CN = issuer_CN; - /* xxx X509_free(peer);*/ - } tls_protocol = SSL_get_version(tls_conn); cipher = SSL_get_current_cipher(tls_conn); --- 522,527 ---- Index: inn/samples/control.ctl diff -c inn/samples/control.ctl:1.20.2.2 inn/samples/control.ctl:1.20.2.5 *** inn/samples/control.ctl:1.20.2.2 Tue Jul 25 23:28:00 2000 --- inn/samples/control.ctl Wed Apr 25 04:18:51 2001 *************** *** 1,5 **** ## rone's unified control.ctl ! ## $Id: control.ctl,v 1.20.2.2 2000/07/25 14:28:00 kondou Exp $ ## ## control.ctl - access control for control messages ## --- 1,5 ---- ## rone's unified control.ctl ! ## $Id: control.ctl,v 1.20.2.5 2001/04/24 19:18:51 rra Exp $ ## ## control.ctl - access control for control messages ## *************** *** 289,305 **** rmgroup:news@*netuse.de:bda.*:doit ## BE (Belgique/Belgie/Belgien/Belgium ) ! # Contact: usenet@innet.be ! # URL: ftp://ftp.innet.be/pub/staff/stef/ # *PGP* See comment at top of file. newgroup:*:be.*:drop rmgroup:*:be.*:drop ! checkgroups:news@*innet.be:be.*:verify-be.announce.newgroups ! newgroup:news@*innet.be:be.*:verify-be.announce.newgroups ! rmgroup:news@*innet.be:be.*:verify-be.announce.newgroups ! # newgroup:news@innet.be:be.*:doit ! # rmgroup:news@innet.be:be.*:doit ## BERMUDA newgroup:news@*ibl.bm:bermuda.*:doit --- 289,307 ---- rmgroup:news@*netuse.de:bda.*:doit ## BE (Belgique/Belgie/Belgien/Belgium ) ! # Contact: be-hierarchy-admin@usenet.be ! # URL: http://usenet.be/ ! # Key URL: http://usenet.be/be.announce.newgroups.asc ! # Key fingerprint = 30 2A 45 94 70 DE 1F D5 81 8C 58 64 D2 F7 08 71 # *PGP* See comment at top of file. newgroup:*:be.*:drop rmgroup:*:be.*:drop ! checkgroups:group-admin@usenet.be:be.*:verify-be.announce.newgroups ! newgroup:group-admin@usenet.be:be.*:verify-be.announce.newgroups ! rmgroup:group-admin@usenet.be:be.*:verify-be.announce.newgroups ! # newgroup:group-admin@usenet.be:be.*:doit ! # rmgroup:group-admin@usenet.be:be.*:doit ## BERMUDA newgroup:news@*ibl.bm:bermuda.*:doit *************** *** 335,346 **** # *PGP* See comment at top of file. newgroup:*:bit.*:drop rmgroup:*:bit.*:drop ! checkgroups:jim@american.edu:bit.*:verify-bit.admin ! newgroup:jim@american.edu:bit.*:verify-bit.admin ! rmgroup:jim@american.edu:bit.*:verify-bit.admin ! # newgroup:jim@*american.edu:bit.*:doit ! # rmgroup:jim@*american.edu:bit.*:doit ## BIZ (Business Groups) newgroup:edhew@xenitec.on.ca:biz.*:doit --- 337,348 ---- # *PGP* See comment at top of file. newgroup:*:bit.*:drop rmgroup:*:bit.*:drop ! checkgroups:bit@newsadmin.com:bit.*:verify-bit@newsadmin.com ! newgroup:bit@newsadmin.com:bit.*:verify-bit@newsadmin.com ! rmgroup:bit@newsadmin.com:bit.*:verify-bit@newsadmin.com ! # newgroup:bit@newsadmin.com:bit.*:doit ! # rmgroup:bit@newsadmin.com:bit.*:doit ## BIZ (Business Groups) newgroup:edhew@xenitec.on.ca:biz.*:doit *************** *** 514,519 **** --- 516,526 ---- rmgroup:coadmin@boyznoyz.com:co.*:doit checkgroups:coadmin@boyznoyz.com:co.*:doit + ## CODEWARRIOR (CodeWarrior discussion) + checkgroups:news@supernews.net:codewarrior.*:doit + newgroup:news@supernews.net:codewarrior.*:doit + rmgroup:news@supernews.net:codewarrior.*:doit + ## COMPUTER42 (Computer 42, Germany) # Contact: Dirk Schmitt newgroup:news@computer42.org:computer42.*:doit *************** *** 605,610 **** --- 612,628 ---- newgroup:newsmaster@easynet.net:easynet.*:verify-easynet.news rmgroup:newsmaster@easynet.net:easynet.*:verify-easynet.news + ## EE (Estonia) + # Contact: usenet@news.ut.ee + # URL: http://news.ut.ee/ + # Key URL: http://news.ut.ee/pubkey.asc + # *PGP* See comment at top of file. + newgroup:*:ee.*:drop + rmgroup:*:ee.*:drop + checkgroups:news@news.ut.ee:ee.*:verify-ee.news + newgroup:news@news.ut.ee:ee.*:verify-ee.news + rmgroup:news@news.ut.ee:ee.*:verify-ee.news + ## EFN & EUG (Eugene Free Computer Network, Eugene/Springfield, Oregon, USA) # *PGP* See comment at top of file. newgroup:*:eug.*:drop *************** *** 622,627 **** --- 640,654 ---- rmgroup:news@cc.nias.ac.jp:ehime-u.*:doit rmgroup:news@doc.dpc.ehime-u.ac.jp:ehime-u.*:doit + ## ENGLAND + # Contact: admin@england.news-admin.org + # See: http://www.england.news-admin.org/newsadminsfaq.html + # *PGP* See comment at top of file. + # Key fingerprint = DA 3E C2 01 46 E5 61 CB A2 43 09 CA 13 6D 31 1F + newgroup:admin@england.news-admin.org:england.*:verify-england-usenet + rmgroup:admin@england.news-admin.org:england.*:verify-england-usenet + checkgroups:admin@england.news-admin.org:england.*:verify-england-usenet + ## ES (Spain) # Contact: Daniel.Diaz@rediris.es # See: http://www.rediris.es/netnews/infonews/config.es.html *************** *** 652,657 **** --- 679,692 ---- newgroup:news@noc.eu.net:eunet.*:doit rmgroup:news@noc.eu.net:eunet.*:doit + ## EUROPA (Europe) + # URL: http://www.europa.usenet.eu.org/ + # Key fingerprint = 3A 05 A8 49 FB 16 29 25 75 E3 DE BB 69 E0 1D B4 + # *PGP* See comment at top of file. + newgroup:group-admin@usenet.eu.org:europa.*:verify-group-admin@usenet.eu.org + rmgroup:group-admin@usenet.eu.org:europa.*:verify-group-admin@usenet.eu.org + checkgroups:group-admin@usenet.eu.org:europa.*:verify-group-admin@usenet.eu.org + ## EXAMPLE ( Bogus hierarchy reserved for standards documents ) newgroup:*@*:example.*:mail rmgroup:*@*:example.*:doit *************** *** 686,693 **** # rmgroup:news@wing.matsim.udmurtia.su:fido7.*:doit ## FINET (Finland and Finnish language alternative newsgroups) ! newgroup:*@*.hut.fi:finet.*:doit ! rmgroup:*@*.hut.fi:finet.*:doit ## FJ (Japan and Japanese language) # Contact: committee@fj-news.org --- 721,729 ---- # rmgroup:news@wing.matsim.udmurtia.su:fido7.*:doit ## FINET (Finland and Finnish language alternative newsgroups) ! # The alt.* of Finland ! newgroup:*@*.fi:finet.*:doit ! rmgroup:*@*.fi:finet.*:doit ## FJ (Japan and Japanese language) # Contact: committee@fj-news.org *************** *** 775,780 **** --- 811,826 ---- newgroup:news@*dcss.mcmaster.ca:hamilton.*:doit rmgroup:news@*dcss.mcmaster.ca:hamilton.*:doit + ## HAMSTER (Hamster, a Win32 news and mail proxy server) + # Contact: hamster-contact@snafu.de + # URL: http://www.nethamster.org + # Key fingerprint = 12 75 A9 42 8A D6 1F 77 6A CF B4 0C 79 15 5F 93 + # Key URL: http://www.nethamster.org/control/hamster.asc + # *PGP* See comment at top of file. + checkgroups:hamster-control@snafu.de:hamster.*:verify-hamster-control@snafu.de + newgroup:hamster-control@snafu.de:hamster.*:verify-hamster-control@snafu.de + rmgroup:hamster-control@snafu.de:hamster.*:verify-hamster-control@snafu.de + ## HAN (Korean Hangul) # Contact: newgroups-request@usenet.or.kr # PGPKEY URL: ftp://ftp.usenet.or.kr/pub/korea/usenet/pgp/PGPKEY.han *************** *** 941,947 **** newgroup:usenet@karlsruhe.org:ka.*:verify-usenet@karlsruhe.org rmgroup:usenet@karlsruhe.org:ka.*:verify-usenet@karlsruhe.org - ## KANTO # *PGP* See comment at top of file. rmgroup:*:kanto.*:drop --- 987,992 ---- *************** *** 1004,1010 **** ## MALTA ( Nation of Malta ) # Contact: cmeli@cis.um.edu.mt ! # URL: http://www.cis.um.edu.mt/news-malta/malta-news-new-site-faq.html # *PGP* See comment at top of file. newgroup:*:malta.*:drop rmgroup:*:malta.*:drop --- 1049,1056 ---- ## MALTA ( Nation of Malta ) # Contact: cmeli@cis.um.edu.mt ! # URL: http://www.malta.news-admin.org/ ! # Key fingerprint = 20 17 01 5C F0 D0 1A 42 E4 13 30 58 0B 14 48 A6 # *PGP* See comment at top of file. newgroup:*:malta.*:drop rmgroup:*:malta.*:drop *************** *** 1427,1434 **** rmgroup:*@*:rpi.*:doit ## SAAR (Saarbruecke, Germany) ! newgroup:news@alien.saar.de:saar.*:doit ! rmgroup:news@alien.saar.de:saar.*:doit ## SACHSNET (German) newgroup:root@lusatia.de:sachsnet.*:doit --- 1473,1481 ---- rmgroup:*@*:rpi.*:doit ## SAAR (Saarbruecke, Germany) ! checkgroups:thomas.rachel@gmx.de:saar.*:verify-saar-control ! newgroup:thomas.rachel@gmx.de:saar.*:verify-saar-control ! rmgroup:thomas.rachel@gmx.de:saar.*:verify-saar-control ## SACHSNET (German) newgroup:root@lusatia.de:sachsnet.*:doit *************** *** 1815,1827 **** rmgroup:kohe-t@*wakayama-u.ac.jp:wadai.*:doit ## WALES (Wales) ! # Contact: control@A470.demon.co.uk # *PGP* See comment at top of file. newgroup:*:wales.*:drop rmgroup:*:wales.*:drop ! checkgroups:control@*470.demon.co.uk:wales.*:verify-wales-usenet ! newgroup:control@*470.demon.co.uk:wales.*:verify-wales-usenet ! rmgroup:control@*470.demon.co.uk:wales.*:verify-wales-usenet ## WASH (Washington State, USA) newgroup:graham@ee.washington.edu:wash.*:doit --- 1862,1876 ---- rmgroup:kohe-t@*wakayama-u.ac.jp:wadai.*:doit ## WALES (Wales) ! # Contact: committee@wales-usenet.org ! # URL: http://www.wales-usenet.org/ ! # Key fingerprint = 2D 9E DE DF 12 DA 34 5C 49 E1 EE 28 E3 AB 0D AD # *PGP* See comment at top of file. newgroup:*:wales.*:drop rmgroup:*:wales.*:drop ! newgroup:control@wales-usenet.org:wales.*:verify-wales-usenet ! rmgroup:control@wales-usenet.org:wales.*:verify-wales-usenet ! checkgroups:control@wales-usenet.org:wales.*:verify-wales-usenet ## WASH (Washington State, USA) newgroup:graham@ee.washington.edu:wash.*:doit Index: inn/samples/cycbuff.conf diff -c inn/samples/cycbuff.conf:1.2.6.1 inn/samples/cycbuff.conf:1.2.6.2 *** inn/samples/cycbuff.conf:1.2.6.1 Mon Aug 21 07:20:58 2000 --- inn/samples/cycbuff.conf Fri Apr 27 15:38:14 2001 *************** *** 2,8 **** # Meta cnfs cyclic buffer configuration file (and assignments of newsgroups to # metacyclic buffers) # ! # The order in this items appear in this file is *important*. # 1. Cyclic buffers # Format: --- 2,9 ---- # Meta cnfs cyclic buffer configuration file (and assignments of newsgroups to # metacyclic buffers) # ! # The order of lines in this file is not important among the same item. ! # But all cycbuff item should be presented before any metacycbuff item. # 1. Cyclic buffers # Format: Index: inn/samples/innreport.conf.in diff -c inn/samples/innreport.conf.in:1.17 inn/samples/innreport.conf.in:1.17.2.1 *** inn/samples/innreport.conf.in:1.17 Mon Oct 25 07:13:38 1999 --- inn/samples/innreport.conf.in Sat Jan 13 01:59:55 2001 *************** *** 4,10 **** # Sample file for INN. # Tested with INN 2.3, 2.1, 1.7.2 and 1.5.1. # ! # (c) 1997, 1998, 1999 by Fabien Tassin # version 3.0.2 ########################################################## --- 4,10 ---- # Sample file for INN. # Tested with INN 2.3, 2.1, 1.7.2 and 1.5.1. # ! # (c) 1997, 1998, 1999 by Fabien Tassin # version 3.0.2 ########################################################## Index: inn/samples/newgroup.pl diff -c inn/samples/newgroup.pl:1.1 inn/samples/newgroup.pl:1.1.2.1 *** inn/samples/newgroup.pl:1.1 Mon Nov 15 15:40:44 1999 --- inn/samples/newgroup.pl Thu Jan 18 06:05:11 2001 *************** *** 1,4 **** ! # $Id: newgroup.pl,v 1.1 1999/11/15 06:40:44 rra Exp $ # Copyright (c)1998 G.J. Andruk # newgroup.pl - The newgroup control message. # Parameters: params sender reply-to token site action[=log] approved --- 1,4 ---- ! # $Id: newgroup.pl,v 1.1.2.1 2001/01/17 21:05:11 rra Exp $ # Copyright (c)1998 G.J. Andruk # newgroup.pl - The newgroup control message. # Parameters: params sender reply-to token site action[=log] approved *************** *** 171,177 **** } ($ngname, $ngdesc) = split(/\s+/, $ngline, 2); if ($ngdesc) { ! $ngdesc =~ s/\s+(moderated)$//i; $ngdesc .= " (Moderated)" if $modflag eq "moderated"; } if (($ngdesc) && ($ngname eq $groupname)) { --- 171,177 ---- } ($ngname, $ngdesc) = split(/\s+/, $ngline, 2); if ($ngdesc) { ! $ngdesc =~ s/\s+\(moderated\)\s*$//i; $ngdesc .= " (Moderated)" if $modflag eq "moderated"; } if (($ngdesc) && ($ngname eq $groupname)) { Index: inn/samples/newsfeeds.in diff -c inn/samples/newsfeeds.in:1.14.2.1 inn/samples/newsfeeds.in:1.14.2.2 *** inn/samples/newsfeeds.in:1.14.2.1 Fri May 26 07:26:53 2000 --- inn/samples/newsfeeds.in Wed Feb 7 09:35:15 2001 *************** *** 1,4 **** ! ## $Id: newsfeeds.in,v 1.14.2.1 2000/05/25 22:26:53 kondou Exp $ ## ## newsfeeds - determine where Usenet articles get sent ## --- 1,4 ---- ! ## $Id: newsfeeds.in,v 1.14.2.2 2001/02/07 00:35:15 rra Exp $ ## ## newsfeeds - determine where Usenet articles get sent ## *************** *** 111,117 **** # then individual feeds for every separate address that news is being # gated to. This sends all posts to rec.pets.redants.* to the address # news-software@example.com. ! #news2mail!:!*,Tc,Ac,Wn*:@prefix@/bin/news2mail #news-software@example.com:rec.pets.redants.*:Tm:news2mail! # Capture all local postings (with a distribution of "foo" and no more --- 111,117 ---- # then individual feeds for every separate address that news is being # gated to. This sends all posts to rec.pets.redants.* to the address # news-software@example.com. ! #news2mail!:!*:Tc,Ac,Wn*:@prefix@/bin/news2mail #news-software@example.com:rec.pets.redants.*:Tm:news2mail! # Capture all local postings (with a distribution of "foo" and no more Index: inn/samples/readers.conf diff -c inn/samples/readers.conf:1.4 inn/samples/readers.conf:1.4.2.1 *** inn/samples/readers.conf:1.4 Thu Apr 13 14:42:30 2000 --- inn/samples/readers.conf Wed Jan 17 00:36:37 2001 *************** *** 1,4 **** ! ## $Id: readers.conf,v 1.4 2000/04/13 05:42:30 rra Exp $ ## ## readers.conf - Access control and configuration for nnrpd ## --- 1,4 ---- ! ## $Id: readers.conf,v 1.4.2.1 2001/01/16 15:36:37 rra Exp $ ## ## readers.conf - Access control and configuration for nnrpd ## *************** *** 41,46 **** --- 41,54 ---- ## examples in readers.conf(5) include setups that require the user to ## log in with a username and password (the example in this file only ## uses simple host-based authentication). + ## + ## NOTE: Unlike in previous versions of INN, nnrpd will now refuse any + ## post from anyone to a moderated newsgroup that contains an Approved: + ## header unless their access block has an access: key containing the + ## "A" flag. This is to prevent abuse of moderated groups, but it means + ## that if you support any newsgroup moderators, you need to make sure + ## to add such a line to the access group that affects them. See the + ## access group for localhost below for an example. # The only groups enabled by default (the rest of this file is # commented-out examples). This assigns the identity of to *************** *** 51,61 **** default: "" } ! # Grant that specific identity access to read and post to any newsgroup. access "localhost" { users: "" newsgroups: "*" } --- 59,72 ---- default: "" } ! # Grant that specific identity access to read and post to any newsgroup ! # and allow it to post articles with Approved: headers to moderated ! # groups. access "localhost" { users: "" newsgroups: "*" + access: RPA } Index: inn/samples/subscriptions diff -c /dev/null inn/samples/subscriptions:1.1.2.1 *** /dev/null Fri May 4 05:29:48 2001 --- inn/samples/subscriptions Sat Feb 3 18:43:17 2001 *************** *** 0 **** --- 1,6 ---- + news.announce.newusers + news.newusers.questions + misc.test + misc.test.moderated + news.announce.newgroups + news.answers Index: inn/scripts/innreport.in diff -c inn/scripts/innreport.in:1.4.2.2 inn/scripts/innreport.in:1.4.2.3 *** inn/scripts/innreport.in:1.4.2.2 Thu Jun 22 10:31:47 2000 --- inn/scripts/innreport.in Sat Jan 13 01:59:59 2001 *************** *** 7,13 **** # # version: 3.0.2 # ! # Copyright (c) 1996-1999, Fabien Tassin (fta@oleane.net). # ########################################################################## # --- 7,13 ---- # # version: 3.0.2 # ! # Copyright (c) 1996-1999, Fabien Tassin (fta@sofaraway.org). # ########################################################################## # *************** *** 78,90 **** # Please also report unknown entries. # Be sure your are using the latest version of this script before # any report. ! # (check ) # - # You can subscribe to the innreport mailing list by sending - # a message to "listserv@oleane.net" without subject and with - # "sub innreport FirstName LastName (organization)" in the body. - # To obtain more information, send "help" to "listserv@oleane.net". - # ########################################################################## # remember to add '-w' on the first line and to uncomment the 'use strict' --- 78,85 ---- # Please also report unknown entries. # Be sure your are using the latest version of this script before # any report. ! # (check ) # ########################################################################## # remember to add '-w' on the first line and to uncomment the 'use strict' *************** *** 875,884 **** $i++; } $result .= "\n\n


"; ! $result .= "innreport"; $result .= " $version (c) 1996-1999 "; ! $result .= "by Fabien Tassin <"; ! $result .= "fta\@oleane.net>.\n"; if (defined ($output{'default'}{'footer'})) { my ($t) = $output{'default'}{'footer'} =~ m/^\"\s*(.*?)\s*\"$/o; $t =~ s/\\\"/\"/go; --- 870,879 ---- $i++; } $result .= "\n\n


"; ! $result .= "innreport"; $result .= " $version (c) 1996-1999 "; ! $result .= "by Fabien Tassin <"; ! $result .= "fta\@sofaraway.org>.\n"; if (defined ($output{'default'}{'footer'})) { my ($t) = $output{'default'}{'footer'} =~ m/^\"\s*(.*?)\s*\"$/o; $t =~ s/\\\"/\"/go; *************** *** 1817,1825 **** if ($HTML) { open (HTML, ">> $HTML_output") || die "Error: cant open $HTML_output\n"; print HTML <innreport $version (c) 1996-1999 by Fabien Tassin ! <fta\@oleane.net>. EOT if (defined $$h{'default'}{'footer'}) { my ($t) = $$h{'default'}{'footer'} =~ m/^\"\s*(.*?)\s*\"$/o; --- 1812,1820 ---- if ($HTML) { open (HTML, ">> $HTML_output") || die "Error: cant open $HTML_output\n"; print HTML <innreport $version (c) 1996-1999 by Fabien Tassin ! <fta\@sofaraway.org>. EOT if (defined $$h{'default'}{'footer'}) { my ($t) = $$h{'default'}{'footer'} =~ m/^\"\s*(.*?)\s*\"$/o; *************** *** 2550,2556 **** sub Version { print "\nThis is INNreport version $version\n\n"; ! print "Copyright 1996-1999, Fabien Tassin \n"; exit 0; } --- 2545,2551 ---- sub Version { print "\nThis is INNreport version $version\n\n"; ! print "Copyright 1996-1999, Fabien Tassin \n"; exit 0; } Index: inn/scripts/innreport_inn.pm diff -c inn/scripts/innreport_inn.pm:1.4.2.3 inn/scripts/innreport_inn.pm:1.4.2.6 *** inn/scripts/innreport_inn.pm:1.4.2.3 Wed Oct 25 16:07:20 2000 --- inn/scripts/innreport_inn.pm Wed Feb 14 18:00:19 2001 *************** *** 3,9 **** # # Sample file tested with INN 2.3, 2.2, 1.7.2 and 1.5.1 # ! # (c) 1997-1999 by Fabien Tassin # version 3.0.2 ########################################################## --- 3,9 ---- # # Sample file tested with INN 2.3, 2.2, 1.7.2 and 1.5.1 # ! # (c) 1997-1999 by Fabien Tassin # version 3.0.2 ########################################################## *************** *** 164,169 **** --- 164,173 ---- $inn_badart{$server}++; return 1; } + # Cancelling <...> + if ($left =~ /(\S+) <[^>]+> Cancelling/o) { + return 1; + } # all others are just counted as "Other" if ($left =~ /(\S+) /o) { my $server = $1; *************** *** 643,648 **** --- 647,654 ---- return 1 if $left =~ /CNFS-sm: cycbuff \S+ rollover to cycle/o; # CNFS-sm: CNFSflushallheads: flushing - possibly interesting return 1 if $left =~ /CNFS-sm: CNFSflushallheads: flushing /o; + # Cleanfeed status reports + return 1 if $left =~ /^filter: status/o; } ######## ## innfeed Index: inn/scripts/innshellvars.pl.in diff -c inn/scripts/innshellvars.pl.in:1.2.2.2 inn/scripts/innshellvars.pl.in:1.2.2.3 *** inn/scripts/innshellvars.pl.in:1.2.2.2 Mon Aug 21 07:21:53 2000 --- inn/scripts/innshellvars.pl.in Tue Jan 16 22:09:54 2001 *************** *** 3,9 **** # Start Date: Sat, 24 Aug 1996 22:08:19 +0200 # Project: INN # File: innshellvars.pl ! # RCSId: $Id: innshellvars.pl.in,v 1.2.2.2 2000/08/20 22:21:53 kondou Exp $ # Description: Set up any and all variables that an INN perl script # might need. --- 3,9 ---- # Start Date: Sat, 24 Aug 1996 22:08:19 +0200 # Project: INN # File: innshellvars.pl ! # RCSId: $Id: innshellvars.pl.in,v 1.2.2.3 2001/01/16 13:09:54 rra Exp $ # Description: Set up any and all variables that an INN perl script # might need. *************** *** 83,89 **** $z = "@LOG_COMPRESSEXT@" ; $berkeley_db_bindir = "@BERKELEY_DB_BINDIR@" ; ! if($berkeley_db_bindir ne "" && $ovmethod eq "ovdb") { $ENV{'PATH'} = "${berkeley_db_bindir}:$ENV{'PATH'}"; $ENV{'DB_HOME'} = $pathoverview; } --- 83,89 ---- $z = "@LOG_COMPRESSEXT@" ; $berkeley_db_bindir = "@BERKELEY_DB_BINDIR@" ; ! if ($berkeley_db_bindir && $ovmethod && $ovmethod eq "ovdb") { $ENV{'PATH'} = "${berkeley_db_bindir}:$ENV{'PATH'}"; $ENV{'DB_HOME'} = $pathoverview; } Index: inn/site/Makefile diff -c inn/site/Makefile:1.66 inn/site/Makefile:1.66.2.1 *** inn/site/Makefile:1.66 Mon Apr 3 08:12:38 2000 --- inn/site/Makefile Sat Feb 3 18:43:17 2001 *************** *** 1,4 **** ! ## $Revision: 1.66 $ include ../Makefile.global ## If you want to do ctlinnd pause/reload/go, uncomment these lines. --- 1,4 ---- ! ## $Revision: 1.66.2.1 $ include ../Makefile.global ## If you want to do ctlinnd pause/reload/go, uncomment these lines. *************** *** 46,51 **** --- 46,52 ---- PATH_RADIUS_CONF = ${PATHETC}/radius.conf PATH_OVDB_CONF = ${PATHETC}/ovdb.conf PATH_SASL_CONF = ${PATHETC}/sasl.conf + PATH_SUBSCRIPTIONS = ${PATHETC}/subscriptions PATH_ACTIVE = ${PATHDB}/active PATH_ACTIVE_TIMES = ${PATHDB}/active.times *************** *** 69,75 **** filter_innd.py INN.py \ startup.tcl filter.tcl nnrpd_auth.pl news2mail.cf readers.conf \ radius.conf nnrpd_auth.py ovdb.conf sasl.conf active.minimal \ ! newsgroups.minimal ALL = $(MOST) $(REST) --- 70,76 ---- filter_innd.py INN.py \ startup.tcl filter.tcl nnrpd_auth.pl news2mail.cf readers.conf \ radius.conf nnrpd_auth.py ovdb.conf sasl.conf active.minimal \ ! newsgroups.minimal subscriptions ALL = $(MOST) $(REST) *************** *** 98,104 **** $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) ALL_INSTALLED = $(MOST_INSTALLED) $(REST_INSTALLED) --- 99,105 ---- $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) ALL_INSTALLED = $(MOST_INSTALLED) $(REST_INSTALLED) *************** *** 223,228 **** --- 224,230 ---- $D$(PATH_MOTD): motd.news ; $(COPY_RPRI) $? $@ $D$(PATH_INNFEEDCTL): innfeed.conf ; $(COPY_RPRI) $? $@ $D$(PATH_SASL_CONF): sasl.conf ; $(COPY_RPRI) $? $@ + $D$(PATH_SUBSCRIPTIONS): subscriptions ; $(COPY_RPUB) $? $@ REASON = 'Installing site config files from site/Makefile' go pause: *************** *** 287,300 **** senduuname.pl: ../samples/senduuname.pl ; $(COPY) $? $@ startup.tcl: ../samples/startup.tcl ; $(COPY) $? $@ startup_innd.pl: ../samples/startup_innd.pl ; $(COPY) $? $@ version: ../samples/version ; $(COPY) $? $@ version.pl: ../samples/version.pl ; $(COPY) $? $@ sasl.conf: ../samples/sasl.conf ; $(COPY) $? $@ active.minimal: ../samples/active.minimal ; $(COPY) $? $@ newsgroups.minimal: ../samples/newsgroups.minimal ; $(COPY) $? $@ - - ## Dependencies. Default list, below, is probably good enough. - depend: Makefile $(SOURCES) - makedepend $(DEFS) $(SOURCES) - - # DO NOT DELETE THIS LINE -- make depend depends on it. --- 289,297 ---- senduuname.pl: ../samples/senduuname.pl ; $(COPY) $? $@ startup.tcl: ../samples/startup.tcl ; $(COPY) $? $@ startup_innd.pl: ../samples/startup_innd.pl ; $(COPY) $? $@ + subscriptions: ../samples/subscriptions ; $(COPY) $? $@ version: ../samples/version ; $(COPY) $? $@ version.pl: ../samples/version.pl ; $(COPY) $? $@ sasl.conf: ../samples/sasl.conf ; $(COPY) $? $@ active.minimal: ../samples/active.minimal ; $(COPY) $? $@ newsgroups.minimal: ../samples/newsgroups.minimal ; $(COPY) $? $@ Index: inn/storage/buildconfig.in diff -c inn/storage/buildconfig.in:1.7.2.1 inn/storage/buildconfig.in:1.7.2.2 *** inn/storage/buildconfig.in:1.7.2.1 Fri Aug 25 07:30:55 2000 --- inn/storage/buildconfig.in Sat Feb 3 16:26:35 2001 *************** *** 72,78 **** print DEF "\t{ \"$method\", TOKEN_", uc($method), ", \n\t "; print DEF $method, "_init, ", $method, "_store, \n\t ", $method, "_retrieve, "; print DEF $method, "_next, \n\t ", $method, "_freearticle, ", $method, "_cancel, \n\t "; ! print DEF $method, "_ctl, ", $method, "_flushcacheddata, ", $method, "_shutdown"; $first++; } --- 72,79 ---- print DEF "\t{ \"$method\", TOKEN_", uc($method), ", \n\t "; print DEF $method, "_init, ", $method, "_store, \n\t ", $method, "_retrieve, "; print DEF $method, "_next, \n\t ", $method, "_freearticle, ", $method, "_cancel, \n\t "; ! print DEF $method, "_ctl, ", $method, "_flushcacheddata, "; ! print DEF $method, "_printfiles, ", $method, "_shutdown"; $first++; } Index: inn/storage/interface.c diff -c inn/storage/interface.c:1.45.2.4 inn/storage/interface.c:1.45.2.6 *** inn/storage/interface.c:1.45.2.4 Wed Sep 6 08:24:22 2000 --- inn/storage/interface.c Tue Mar 27 07:41:43 2001 *************** *** 1,4 **** ! /* $Id: interface.c,v 1.45.2.4 2000/09/05 23:24:22 kondou Exp $ ** ** Storage Manager interface */ --- 1,4 ---- ! /* $Id: interface.c,v 1.45.2.6 2001/03/26 22:41:43 kondou Exp $ ** ** Storage Manager interface */ *************** *** 236,245 **** if (!Nocr) p = p1; /* skip pathhost */ ! for (; *q == ' '; q++); ! if ((q = strchr(q, ' ')) == NULL) ! return 0; ! for (q++; *q == ' '; q++); buff = NEW(char, p - q + 1); memcpy(buff, q, p - q); buff[p - q] = '\0'; --- 236,249 ---- if (!Nocr) p = p1; /* skip pathhost */ ! for (; (*q == ' ') && (q < p); q++); ! if (q == p) ! return NULL; ! if ((q = memchr(q, ' ', p - q)) == NULL) ! return NULL; ! for (q++; (*q == ' ') && (q < p); q++); ! if (q == p) ! return NULL; buff = NEW(char, p - q + 1); memcpy(buff, q, p - q); buff[p - q] = '\0'; *************** *** 908,913 **** --- 912,929 ---- syslog(L_ERROR, "SM can't flush cached data method '%s'", storage_methods[i].name); } return TRUE; + } + + void SMprintfiles(FILE *file, TOKEN token, char **xref, int ngroups) { + if (method_data[typetoindex[token.type]].initialized == INIT_FAIL) + return; + if (method_data[typetoindex[token.type]].initialized == INIT_NO + && !InitMethod(typetoindex[token.type])) { + SMseterror(SMERR_UNINIT, NULL); + syslog(L_ERROR, "SM can't print files for article with uninitialized method"); + return; + } + storage_methods[typetoindex[token.type]].printfiles(file, token, xref, ngroups); } void SMshutdown(void) { Index: inn/storage/interface.h diff -c inn/storage/interface.h:1.15.2.1 inn/storage/interface.h:1.15.2.2 *** inn/storage/interface.h:1.15.2.1 Wed Sep 6 08:24:23 2000 --- inn/storage/interface.h Sat Feb 3 16:27:27 2001 *************** *** 1,4 **** ! /* $Id: interface.h,v 1.15.2.1 2000/09/05 23:24:23 kondou Exp $ ** ** Storage Manager interface header */ --- 1,4 ---- ! /* $Id: interface.h,v 1.15.2.2 2001/02/03 07:27:27 rra Exp $ ** ** Storage Manager interface header */ *************** *** 8,13 **** --- 8,14 ---- #include #include + #include typedef struct { BOOL selfexpire; *************** *** 25,30 **** --- 26,32 ---- BOOL (*cancel)(TOKEN token); BOOL (*ctl)(PROBETYPE type, TOKEN *token, void *value); BOOL (*flushcacheddata)(FLUSHTYPE type); + void (*printfiles)(FILE *, TOKEN, char **xref, int ngroups); void (*shutdown)(void); } STORAGE_METHOD; Index: inn/storage/ov.c diff -c inn/storage/ov.c:1.14.2.6 inn/storage/ov.c:1.14.2.9 *** inn/storage/ov.c:1.14.2.6 Wed Sep 6 08:24:24 2000 --- inn/storage/ov.c Tue Apr 24 07:41:55 2001 *************** *** 828,836 **** bg->Name = COPY(Entry); bg->Next = EXPbadgroups; EXPbadgroups = bg; - (void)fflush(stdout); - (void)fprintf(stderr, "Group not matched (removed?) %s -- %s\n", - Entry, "Purging all articles"); } /* remove it all now. */ if (Removeit.Keep == 0) { --- 828,833 ---- *************** *** 850,864 **** NEWSGROUP *ngp; enum KRP retval = Remove; - if ((p = strchr(Entry, ':')) == NULL) { - (void)fflush(stdout); - (void)fprintf(stderr, "Bad entry, \"%s\"\n", Entry); - return Remove; - } - *p = '\0'; if ((ngp = NGfind(Entry)) == NULL) ngp = EXPnotfound(Entry); - /* '\0' is left to get newsgroup name later */ /* Bad posting date? */ if (when > OVrealnow + 86400) { --- 847,854 ---- *************** *** 886,908 **** /* ** An article can be removed. Either print a note, or actually remove it. ! ** Also fill in the article size. */ ! void OVEXPremove(TOKEN token, BOOL deletedgroups) { EXPunlinked++; if (deletedgroups) { EXPprocessed++; EXPoverindexdrop++; } ! if (EXPunlinkfile) { ! (void)fprintf(EXPunlinkfile, "%s\n", TokenToText(token)); if (!ferror(EXPunlinkfile)) return; ! (void)fprintf(stderr, "Can't write to -z file, %s\n", ! strerror(errno)); ! (void)fprintf(stderr, "(Will ignore it for rest of run.)\n"); ! (void)fclose(EXPunlinkfile); EXPunlinkfile = NULL; } if (!SMcancel(token) && SMerrno != SMERR_NOENT && SMerrno != SMERR_UNINIT) --- 876,898 ---- /* ** An article can be removed. Either print a note, or actually remove it. ! ** Takes in the Xref information so that it can pass this to the storage ! ** API callback used to generate the list of files to remove. */ ! void OVEXPremove(TOKEN token, BOOL deletedgroups, char **xref, int ngroups) { EXPunlinked++; if (deletedgroups) { EXPprocessed++; EXPoverindexdrop++; } ! if (EXPunlinkfile && xref != NULL) { ! SMprintfiles(EXPunlinkfile, token, xref, ngroups); if (!ferror(EXPunlinkfile)) return; ! fprintf(stderr, "Can't write to -z file, %s\n", strerror(errno)); ! fprintf(stderr, "(Will ignore it for rest of run.)\n"); ! fclose(EXPunlinkfile); EXPunlinkfile = NULL; } if (!SMcancel(token) && SMerrno != SMERR_NOENT && SMerrno != SMERR_UNINIT) *************** *** 1074,1079 **** --- 1064,1070 ---- BOOL poisoned; BOOL keeper; BOOL remove; + BOOL purge; ARTHANDLE *article; char *Xref; *************** *** 1102,1108 **** if (Group != NULL) { DISPOSE(Group); } ! Group = NEW(char, strlen(group) + 1); strcpy(Group, group); strcat(Group, ":"); Xref = Group; --- 1093,1099 ---- if (Group != NULL) { DISPOSE(Group); } ! Group = NEW(char, strlen(group) + 2); strcpy(Group, group); strcat(Group, ":"); Xref = Group; *************** *** 1117,1149 **** EXPoverindexdrop++; return TRUE; } /* First check all postings */ poisoned = FALSE; keeper = FALSE; remove = FALSE; for (i = 0; i < count; ++i) { if ((krps[i] = EXPkeepit(arts[i], when, expires)) == Poison) poisoned = TRUE; if (OVkeep && (krps[i] == Keep)) keeper = TRUE; ! if ((krps[i] == Remove)) remove = TRUE; } EXPprocessed++; if (OVearliest) { if (remove || poisoned || token.type == TOKEN_EMPTY) { ! if (strcmp(group, arts[0]) == 0) ! /* delete article if this is first entry */ ! OVEXPremove(token, FALSE); EXPoverindexdrop++; return TRUE; } } else { /* not earliest mode */ ! if (!keeper || token.type == TOKEN_EMPTY) { ! if (strcmp(group, arts[0]) == 0) ! /* delete article if this is first entry */ ! OVEXPremove(token, FALSE); EXPoverindexdrop++; return TRUE; } --- 1108,1166 ---- EXPoverindexdrop++; return TRUE; } + + /* arts is now an array of strings, each of which is a group name, a + colon, and an article number. EXPkeepit wants just pure group names, + so replace the colons with nuls (deleting the overview entry if it + isn't in the expected form). */ + for (i = 0; i < count; i++) { + p = strchr(arts[i], ':'); + if (p == NULL) { + fflush(stdout); + fprintf(stderr, "Bad entry, \"%s\"\n", arts[i]); + EXPoverindexdrop++; + return TRUE; + } + *p = '\0'; + } + /* First check all postings */ poisoned = FALSE; keeper = FALSE; remove = FALSE; + purge = TRUE; for (i = 0; i < count; ++i) { if ((krps[i] = EXPkeepit(arts[i], when, expires)) == Poison) poisoned = TRUE; if (OVkeep && (krps[i] == Keep)) keeper = TRUE; ! if ((krps[i] == Remove) && EQ(group, arts[i])) remove = TRUE; + if ((krps[i] == Keep)) + purge = FALSE; } EXPprocessed++; if (OVearliest) { if (remove || poisoned || token.type == TOKEN_EMPTY) { ! /* delete article if this is first entry */ ! if (EQ(group, arts[0])) { ! for (i = 0; i < count; i++) ! arts[i][strlen(arts[i])] = ':'; ! OVEXPremove(token, FALSE, arts, count); ! } EXPoverindexdrop++; return TRUE; } } else { /* not earliest mode */ ! if ((!keeper && remove) || token.type == TOKEN_EMPTY) { ! /* delete article if purge is set, indicating that it has ! expired out of every group to which it was posted */ ! if (purge) { ! for (i = 0; i < count; i++) ! arts[i][strlen(arts[i])] = ':'; ! OVEXPremove(token, FALSE, arts, count); ! } EXPoverindexdrop++; return TRUE; } Index: inn/storage/ovinterface.h diff -c inn/storage/ovinterface.h:1.9 inn/storage/ovinterface.h:1.9.2.1 *** inn/storage/ovinterface.h:1.9 Fri Jan 28 17:59:20 2000 --- inn/storage/ovinterface.h Sat Feb 3 16:30:52 2001 *************** *** 1,4 **** ! /* $Id: ovinterface.h,v 1.9 2000/01/28 08:59:20 kondou Exp $ ** ** Overview interface header */ --- 1,4 ---- ! /* $Id: ovinterface.h,v 1.9.2.1 2001/02/03 07:30:52 rra Exp $ ** ** Overview interface header */ *************** *** 31,37 **** BOOL OVgroupbasedexpire(TOKEN token, char *group, char *data, int len, time_t arrived, time_t expires); BOOL OVgroupmatch(char *group); BOOL OVhisthasmsgid(char *data); ! void OVEXPremove(TOKEN token, BOOL deletedgroups); #define DEFAULT_MAX_XREF_LEN 8192 --- 31,37 ---- BOOL OVgroupbasedexpire(TOKEN token, char *group, char *data, int len, time_t arrived, time_t expires); BOOL OVgroupmatch(char *group); BOOL OVhisthasmsgid(char *data); ! void OVEXPremove(TOKEN token, BOOL deletedgroups, char **xref, int ngroups); #define DEFAULT_MAX_XREF_LEN 8192 Index: inn/storage/buffindexed/buffindexed.c diff -c inn/storage/buffindexed/buffindexed.c:1.40.2.4 inn/storage/buffindexed/buffindexed.c:1.40.2.6 *** inn/storage/buffindexed/buffindexed.c:1.40.2.4 Fri Nov 10 10:57:28 2000 --- inn/storage/buffindexed/buffindexed.c Tue Feb 13 01:07:58 2001 *************** *** 1,4 **** ! /* $Id: buffindexed.c,v 1.40.2.4 2000/11/10 01:57:28 kondou Exp $ ** ** Overview buffer and index method. */ --- 1,4 ---- ! /* $Id: buffindexed.c,v 1.40.2.6 2001/02/12 16:07:58 kondou Exp $ ** ** Overview buffer and index method. */ *************** *** 369,378 **** return FALSE; } for (from = to = config; *from; ) { - if (ctab_free == 0) - ctab = NEW(char *, 1); - else - RENEW(ctab, char *, ctab_free+1); if (*from == '#') { /* Comment line? */ while (*from && *from != '\n') from++; /* Skip past it */ --- 369,374 ---- *************** *** 383,388 **** --- 379,388 ---- from++; continue; /* Back to top of loop */ } + if (ctab_free == 0) + ctab = NEW(char *, 1); + else + RENEW(ctab, char *, ctab_free+1); /* If we're here, we've got the beginning of a real entry */ ctab[ctab_free++] = to = from; while (1) { *************** *** 1799,1805 **** if (Gib[j].artnum == 0) continue; /* this may be duplicated, but ignore it in this case */ ! OVEXPremove(Gib[j].token, TRUE); } freegroupblock(); ovgroupunmap(); --- 1799,1805 ---- if (Gib[j].artnum == 0) continue; /* this may be duplicated, but ignore it in this case */ ! OVEXPremove(Gib[j].token, TRUE, NULL, 0); } freegroupblock(); ovgroupunmap(); Index: inn/storage/cnfs/cnfs.c diff -c inn/storage/cnfs/cnfs.c:1.73.2.3 inn/storage/cnfs/cnfs.c:1.73.2.6 *** inn/storage/cnfs/cnfs.c:1.73.2.3 Fri Dec 22 07:18:02 2000 --- inn/storage/cnfs/cnfs.c Thu Mar 29 10:04:13 2001 *************** *** 1,4 **** ! /* $Id: cnfs.c,v 1.73.2.3 2000/12/21 22:18:02 kondou Exp $ ** ** Cyclic News File System. */ --- 1,4 ---- ! /* $Id: cnfs.c,v 1.73.2.6 2001/03/29 01:04:13 kondou Exp $ ** ** Cyclic News File System. */ *************** *** 639,644 **** --- 639,645 ---- cycbuff->currentbuff = TRUE; cycbuff->order = 0; /* to indicate this is newly added cycbuff */ cycbuff->needflush = TRUE; + memset(cycbuff->metaname, '\0', CNFSLASIZ); if (!CNFSflushhead(cycbuff)) return FALSE; } *************** *** 732,741 **** return FALSE; } for (from = to = config; *from; ) { - if (ctab_free == 0) - ctab = NEW(char *, 1); - else - RENEW(ctab, char *, ctab_free+1); if (*from == '#') { /* Comment line? */ while (*from && *from != '\n') from++; /* Skip past it */ --- 733,738 ---- *************** *** 746,751 **** --- 743,752 ---- from++; continue; /* Back to top of loop */ } + if (ctab_free == 0) + ctab = NEW(char *, 1); + else + RENEW(ctab, char *, ctab_free+1); /* If we're here, we've got the beginning of a real entry */ ctab[ctab_free++] = to = from; while (1) { *************** *** 1758,1763 **** --- 1759,1768 ---- if (type == SM_ALL || type == SM_HEAD) CNFSflushallheads(); return TRUE; + } + + void cnfs_printfiles(FILE *file, TOKEN token, char **xref, int ngroups) { + fprintf(file, "%s\n", TokenToText(token)); } void cnfs_shutdown(void) { Index: inn/storage/cnfs/cnfs.h diff -c inn/storage/cnfs/cnfs.h:1.6.2.1 inn/storage/cnfs/cnfs.h:1.6.2.2 *** inn/storage/cnfs/cnfs.h:1.6.2.1 Wed Sep 6 08:23:05 2000 --- inn/storage/cnfs/cnfs.h Sat Feb 3 16:30:12 2001 *************** *** 1,4 **** ! /* $Id: cnfs.h,v 1.6.2.1 2000/09/05 23:23:05 kondou Exp $ ** ** cyclic news file system header */ --- 1,4 ---- ! /* $Id: cnfs.h,v 1.6.2.2 2001/02/03 07:30:12 rra Exp $ ** ** cyclic news file system header */ *************** *** 14,19 **** --- 14,20 ---- BOOL cnfs_cancel(TOKEN token); BOOL cnfs_ctl(PROBETYPE type, TOKEN *token, void *value); BOOL cnfs_flushcacheddata(FLUSHTYPE type); + void cnfs_printfiles(FILE *file, TOKEN token, char **xref, int ngroups); void cnfs_shutdown(void); #endif Index: inn/storage/ov3/ov3.c diff -c inn/storage/ov3/ov3.c:1.20.2.6 inn/storage/ov3/ov3.c:1.20.2.8 *** inn/storage/ov3/ov3.c:1.20.2.6 Wed Sep 6 08:24:39 2000 --- inn/storage/ov3/ov3.c Fri Feb 23 16:54:36 2001 *************** *** 1,4 **** ! /* $Id: ov3.c,v 1.20.2.6 2000/09/05 23:24:39 kondou Exp $ ** ** Indexed overview method. */ --- 1,4 ---- ! /* $Id: ov3.c,v 1.20.2.8 2001/02/23 07:54:36 kondou Exp $ ** ** Indexed overview method. */ *************** *** 809,818 **** base = ge->base; } while (ge->indexinode != oldinode); ! if (high < base || low < base) { /* return NULL if searching range is out */ ! OV3closegroup(gh, FALSE); ! return NULL; } if (!OV3mmapgroup(gh)) { OV3closegroup(gh, FALSE); --- 809,823 ---- base = ge->base; } while (ge->indexinode != oldinode); ! /* Adjust the searching range if low < base since the active file can ! be out of sync with the overview database and this is where the ! initial lowmark comes from. */ ! if (high < base) { ! OV3closegroup(gh, FALSE); ! return NULL; } + if (low < base) + low = base; if (!OV3mmapgroup(gh)) { OV3closegroup(gh, FALSE); *************** *** 992,998 **** } /* stat old index file so we know its actual size. */ ! if (fstat(fd, &sb) < 0) { syslog(L_ERROR, "tradindexed: could not stat %s: %m", newidx); close(fd); OV3closegroup(gh, FALSE); --- 997,1003 ---- } /* stat old index file so we know its actual size. */ ! if (fstat(gh->indexfd, &sb) < 0) { syslog(L_ERROR, "tradindexed: could not stat %s: %m", newidx); close(fd); OV3closegroup(gh, FALSE); *************** *** 1014,1020 **** } if (pwrite(fd, &gh->indexmem[ge->low - ge->base] , nbytes, ! sizeof(INDEXENTRY)*(ge->low - ge->base + delta)) != nbytes) { syslog(L_ERROR, "tradindexed: packgroup cant write to %s: %m", newidx); close(fd); OV3closegroup(gh, FALSE); --- 1019,1025 ---- } if (pwrite(fd, &gh->indexmem[ge->low - ge->base] , nbytes, ! sizeof(INDEXENTRY)*(ge->low - ge->base + delta - 1)) != nbytes) { syslog(L_ERROR, "tradindexed: packgroup cant write to %s: %m", newidx); close(fd); OV3closegroup(gh, FALSE); Index: inn/storage/ovdb/ovdb.c diff -c inn/storage/ovdb/ovdb.c:1.5.2.10 inn/storage/ovdb/ovdb.c:1.5.2.11 *** inn/storage/ovdb/ovdb.c:1.5.2.10 Wed Nov 29 04:21:25 2000 --- inn/storage/ovdb/ovdb.c Sat Apr 21 01:36:51 2001 *************** *** 35,40 **** --- 35,41 ---- #include #include #include + #include #include "macros.h" #include "conffile.h" #include "libinn.h" *************** *** 355,360 **** --- 356,378 ---- #endif } + /* make sure the effective uid is that of NEWSUSER */ + BOOL ovdb_check_user(void) + { + struct passwd *p; + static int result = -1; + + if(result == -1) { + p = getpwnam(NEWSUSER); + if(!p) { + syslog(L_FATAL, "OVDB: getpwnam(" NEWSUSER ") failed: %m"); + return FALSE; + } + result = (p->pw_uid == geteuid()); + } + return result; + } + static u_int32_t _db_flags = 0; static char ** _dbnames; #if DB_VERSION_MAJOR == 2 *************** *** 620,625 **** --- 638,648 ---- DB_INFO dbinfo; #endif DBT key, val; + + if(!ovdb_check_user()) { + syslog(L_FATAL, "OVDB: must be running as " NEWSUSER " to access overview."); + return -1; + } OVDBmode = mode; read_ovdb_conf(); Index: inn/storage/timecaf/timecaf.c diff -c inn/storage/timecaf/timecaf.c:1.10.2.2 inn/storage/timecaf/timecaf.c:1.10.2.3 *** inn/storage/timecaf/timecaf.c:1.10.2.2 Sun Sep 17 02:11:49 2000 --- inn/storage/timecaf/timecaf.c Sat Feb 3 16:30:12 2001 *************** *** 1,4 **** ! /* $Id: timecaf.c,v 1.10.2.2 2000/09/16 17:11:49 kondou Exp $ ** ** Like the timehash storage method (and heavily inspired by it), but uses ** the CAF library to store multiple articles in a single file. --- 1,4 ---- ! /* $Id: timecaf.c,v 1.10.2.3 2001/02/03 07:30:12 rra Exp $ ** ** Like the timehash storage method (and heavily inspired by it), but uses ** the CAF library to store multiple articles in a single file. *************** *** 852,857 **** --- 852,861 ---- if (type == SM_ALL || type == SM_CANCELEDART) DoCancels(); return TRUE; + } + + void timecaf_printfiles(FILE *file, TOKEN token, char **xref, int ngroups) { + fprintf(file, "%s\n", TokenToText(token)); } void timecaf_shutdown(void) { Index: inn/storage/timecaf/timecaf.h diff -c inn/storage/timecaf/timecaf.h:1.3.2.1 inn/storage/timecaf/timecaf.h:1.3.2.2 *** inn/storage/timecaf/timecaf.h:1.3.2.1 Wed Sep 6 08:24:57 2000 --- inn/storage/timecaf/timecaf.h Sat Feb 3 16:30:13 2001 *************** *** 1,5 **** /* ! ** $Id: timecaf.h,v 1.3.2.1 2000/09/05 23:24:57 kondou Exp $ ** timecaf -- like the timehash storage method (and heavily inspired ** by it), but uses the CAF library to store multiple articles in a ** single file. --- 1,5 ---- /* ! ** $Id: timecaf.h,v 1.3.2.2 2001/02/03 07:30:13 rra Exp $ ** timecaf -- like the timehash storage method (and heavily inspired ** by it), but uses the CAF library to store multiple articles in a ** single file. *************** *** 19,24 **** --- 19,25 ---- BOOL timecaf_cancel(TOKEN token); BOOL timecaf_ctl(PROBETYPE type, TOKEN *token, void *value); BOOL timecaf_flushcacheddata(FLUSHTYPE type); + void timecaf_printfiles(FILE *file, TOKEN token, char **xref, int ngroups); void timecaf_shutdown(void); #endif Index: inn/storage/timehash/timehash.c diff -c inn/storage/timehash/timehash.c:1.34.2.1 inn/storage/timehash/timehash.c:1.34.2.2 *** inn/storage/timehash/timehash.c:1.34.2.1 Wed Sep 6 08:25:03 2000 --- inn/storage/timehash/timehash.c Sat Feb 3 16:28:53 2001 *************** *** 1,4 **** ! /* $Id: timehash.c,v 1.34.2.1 2000/09/05 23:25:03 kondou Exp $ ** ** Timehash based storage method. */ --- 1,4 ---- ! /* $Id: timehash.c,v 1.34.2.2 2001/02/03 07:28:53 rra Exp $ ** ** Timehash based storage method. */ *************** *** 517,522 **** --- 517,531 ---- BOOL timehash_flushcacheddata(FLUSHTYPE type) { return TRUE; + } + + void timehash_printfiles(FILE *file, TOKEN token, char **xref, int ngroups) { + int time, seqnum; + char *path; + + BreakToken(token, &time, &seqnum); + path = MakePath(time, seqnum, token.class); + fprintf(file, "%s\n", path); } void timehash_shutdown(void) { Index: inn/storage/timehash/timehash.h diff -c inn/storage/timehash/timehash.h:1.8.2.1 inn/storage/timehash/timehash.h:1.8.2.2 *** inn/storage/timehash/timehash.h:1.8.2.1 Wed Sep 6 08:25:04 2000 --- inn/storage/timehash/timehash.h Sat Feb 3 16:28:53 2001 *************** *** 1,4 **** ! /* $Id: timehash.h,v 1.8.2.1 2000/09/05 23:25:04 kondou Exp $ ** ** timehash based storing method header */ --- 1,4 ---- ! /* $Id: timehash.h,v 1.8.2.2 2001/02/03 07:28:53 rra Exp $ ** ** timehash based storing method header */ *************** *** 17,22 **** --- 17,23 ---- BOOL timehash_cancel(TOKEN token); BOOL timehash_ctl(PROBETYPE type, TOKEN *token, void *value); BOOL timehash_flushcacheddata(FLUSHTYPE type); + void timehash_printfiles(FILE *file, TOKEN token, char **xref, int ngroups); void timehash_shutdown(void); #endif Index: inn/storage/tradspool/tradspool.c diff -c inn/storage/tradspool/tradspool.c:1.23.2.2 inn/storage/tradspool/tradspool.c:1.23.2.4 *** inn/storage/tradspool/tradspool.c:1.23.2.2 Wed Sep 6 08:25:12 2000 --- inn/storage/tradspool/tradspool.c Sat Feb 3 16:28:09 2001 *************** *** 1,4 **** ! /* $Id: tradspool.c,v 1.23.2.2 2000/09/05 23:25:12 kondou Exp $ ** ** Storage manager module for traditional spool format. */ --- 1,4 ---- ! /* $Id: tradspool.c,v 1.23.2.4 2001/02/03 07:28:09 rra Exp $ ** ** Storage manager module for traditional spool format. */ *************** *** 1113,1119 **** newpriv = (PRIV_TRADSPOOL *) art->private; newpriv->artbase = NULL; } else { ! /* skip linked (not symlinked) crossposted articles */ xrefhdr = (char *)HeaderFindMem(art->data, art->len, "Xref", 4); if (xrefhdr != NULL) { if ((xrefs = CrackXref(xrefhdr, &numxrefs)) == NULL || numxrefs == 0) { --- 1113,1133 ---- newpriv = (PRIV_TRADSPOOL *) art->private; newpriv->artbase = NULL; } else { ! /* Skip linked (not symlinked) crossposted articles. ! ! This algorithm is rather questionable; it only works if the first ! group/number combination listed in the Xref header is the ! canonical path. This will always be true for spools created by ! this implementation, but for traditional INN 1.x servers, ! articles are expired indepedently from each group and may expire ! out of the first listed newsgroup before other groups. This ! algorithm will orphan such articles, not adding them to history. ! ! The bit of skipping articles by setting the length of the article ! to zero is also rather suspect, and I'm not sure what ! implications that might have for the callers of SMnext. ! ! Basically, this whole area really needs to be rethought. */ xrefhdr = (char *)HeaderFindMem(art->data, art->len, "Xref", 4); if (xrefhdr != NULL) { if ((xrefs = CrackXref(xrefhdr, &numxrefs)) == NULL || numxrefs == 0) { *************** *** 1150,1157 **** if ((sub = SMgetsub(*art)) == NULL || sub->type != TOKEN_TRADSPOOL) { /* maybe storage.conf is modified, after receiving article */ token = MakeToken(priv.ngtp->ngname, artnum, 0); ! syslog(L_ERROR, "tradspool: can't determine class: %s: %s", ! TokenToText(token), SMerrorstr); } else { token = MakeToken(priv.ngtp->ngname, artnum, sub->class); } --- 1164,1176 ---- if ((sub = SMgetsub(*art)) == NULL || sub->type != TOKEN_TRADSPOOL) { /* maybe storage.conf is modified, after receiving article */ token = MakeToken(priv.ngtp->ngname, artnum, 0); ! ! /* Only log an error if art->len is non-zero, since otherwise we get ! all the ones skipped via the hard-link skipping algorithm ! commented above. */ ! if (art->len > 0) ! syslog(L_ERROR, "tradspool: can't determine class: %s: %s", ! TokenToText(token), SMerrorstr); } else { token = MakeToken(priv.ngtp->ngname, artnum, sub->class); } *************** *** 1206,1211 **** --- 1225,1244 ---- BOOL tradspool_flushcacheddata(FLUSHTYPE type) { return TRUE; + } + + void tradspool_printfiles(FILE *file, TOKEN token, char **xref, int ngroups) { + int i; + char *path, *p; + + for (i = 0; i < ngroups; i++) { + path = COPY(xref[i]); + for (p = path; *p != '\0'; p++) + if (*p == '.' || *p == ':') + *p = '/'; + fprintf(file, "%s\n", path); + free(path); + } } void Index: inn/storage/tradspool/tradspool.h diff -c inn/storage/tradspool/tradspool.h:1.3.2.1 inn/storage/tradspool/tradspool.h:1.3.2.2 *** inn/storage/tradspool/tradspool.h:1.3.2.1 Wed Sep 6 08:25:13 2000 --- inn/storage/tradspool/tradspool.h Sat Feb 3 16:28:09 2001 *************** *** 1,5 **** /* ! ** $Id: tradspool.h,v 1.3.2.1 2000/09/05 23:25:13 kondou Exp $ ** tradspool -- storage manager for traditional spool format. */ --- 1,5 ---- /* ! ** $Id: tradspool.h,v 1.3.2.2 2001/02/03 07:28:09 rra Exp $ ** tradspool -- storage manager for traditional spool format. */ *************** *** 17,22 **** --- 17,23 ---- BOOL tradspool_cancel(TOKEN token); BOOL tradspool_ctl(PROBETYPE type, TOKEN *token, void *value); BOOL tradspool_flushcacheddata(FLUSHTYPE type); + void tradspool_printfiles(FILE *file, TOKEN token, char **xref, int ngroups); void tradspool_shutdown(void); #endif Index: inn/storage/trash/trash.c diff -c inn/storage/trash/trash.c:1.10.2.1 inn/storage/trash/trash.c:1.10.2.2 *** inn/storage/trash/trash.c:1.10.2.1 Wed Sep 6 08:25:26 2000 --- inn/storage/trash/trash.c Sat Feb 3 16:29:26 2001 *************** *** 1,4 **** ! /* $Id: trash.c,v 1.10.2.1 2000/09/05 23:25:26 kondou Exp $ ** ** Trashing articles method */ --- 1,4 ---- ! /* $Id: trash.c,v 1.10.2.2 2001/02/03 07:29:26 rra Exp $ ** ** Trashing articles method */ *************** *** 58,63 **** --- 58,66 ---- BOOL trash_flushcacheddata(FLUSHTYPE type) { return TRUE; + } + + void trash_printfiles(FILE *file, TOKEN token, char **xref, int ngroups) { } ARTHANDLE *trash_next(const ARTHANDLE *article, const RETRTYPE amount) { Index: inn/storage/trash/trash.h diff -c inn/storage/trash/trash.h:1.5.2.1 inn/storage/trash/trash.h:1.5.2.2 *** inn/storage/trash/trash.h:1.5.2.1 Wed Sep 6 08:25:27 2000 --- inn/storage/trash/trash.h Sat Feb 3 16:29:26 2001 *************** *** 1,4 **** ! /* $Id: trash.h,v 1.5.2.1 2000/09/05 23:25:27 kondou Exp $ ** ** trashing articles method header */ --- 1,4 ---- ! /* $Id: trash.h,v 1.5.2.2 2001/02/03 07:29:26 rra Exp $ ** ** trashing articles method header */ *************** *** 17,22 **** --- 17,23 ---- BOOL trash_cancel(TOKEN token); BOOL trash_ctl(PROBETYPE type, TOKEN *token, void *value); BOOL trash_flushcacheddata(FLUSHTYPE type); + void trash_printfiles(FILE *file, TOKEN token, char **xref, int ngroups); void trash_shutdown(void); #endif Index: inn/support/config.guess diff -c inn/support/config.guess:1.1.2.1.2.1 inn/support/config.guess:1.1.2.1.2.2 *** inn/support/config.guess:1.1.2.1.2.1 Sat Jun 17 16:10:11 2000 --- inn/support/config.guess Sun Apr 22 15:44:55 2001 *************** *** 1,9 **** #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Free Software Foundation, Inc. ! version='2000-06-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 --- 1,9 ---- #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-04-20' # 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 *************** *** 32,61 **** # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you ! # don't specify an explicit system type (host/target name). ! # ! # Only a few systems have been added to this list; please add others ! # (but try to keep the structure clean). ! # me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] ! Output the configuration name of this system. Operation modes: ! -h, --help print this help, then exit ! -V, --version print version number, then exit" help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do ! case "$1" in ! --version | --vers* | -V ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; --- 32,72 ---- # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you ! # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] ! Output the configuration name of the system \`$me' is run on. Operation modes: ! -h, --help print this help, then exit ! -t, --time-stamp print date of last modification, then exit ! -v, --version print version number, then exit ! ! Report bugs and patches to ." ! ! version="\ ! GNU config.guess ($timestamp) ! ! Originally written by Per Bothner. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 ! Free Software Foundation, Inc. ! ! This is free software; see the source for copying conditions. There is NO ! warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do ! case $1 in ! --time-stamp | --time* | -t ) ! echo "$timestamp" ; exit 0 ;; ! --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; *************** *** 64,72 **** - ) # Use stdin as input. break ;; -* ) ! exec >&2 ! echo "$me: invalid option $1" ! echo "$help" exit 1 ;; * ) break ;; --- 75,81 ---- - ) # Use stdin as input. break ;; -* ) ! echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; *************** *** 78,96 **** exit 1 fi - # Use $HOST_CC if defined. $CC may point to a cross-compiler - if test x"$CC_FOR_BUILD" = x; then - if test x"$HOST_CC" != x; then - CC_FOR_BUILD="$HOST_CC" - else - if test x"$CC" != x; then - CC_FOR_BUILD="$CC" - else - CC_FOR_BUILD=cc - fi - fi - fi # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) --- 87,116 ---- exit 1 fi + dummy=dummy-$$ + trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + + # CC_FOR_BUILD -- compiler used by this script. + # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still + # use `HOST_CC' if defined, but it is deprecated. + + case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break + fi + done + rm -f $dummy.c $dummy.o $dummy.rel + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) *************** *** 100,111 **** UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown ! UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - dummy=dummy-$$ - trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in --- 120,128 ---- UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown ! UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *************** *** 119,125 **** # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in ! amiga) machine=m68k-cbm ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; --- 136,142 ---- # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in ! amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; *************** *** 129,144 **** ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac ! # The Operating System including object format. ! if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ ! | grep __ELF__ >/dev/null ! then ! # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). ! # Return netbsd for either. FIX? ! os=netbsd ! else ! os=netbsdelf ! fi # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: --- 146,169 ---- ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac ! # The Operating System including object format, if it has switched ! # to ELF recently, or will in the future. ! case "${UNAME_MACHINE}" in ! i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) ! if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ ! | grep __ELF__ >/dev/null ! then ! # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). ! # Return netbsd for either. FIX? ! os=netbsd ! else ! os=netbsdelf ! fi ! ;; ! *) ! os=netbsd ! ;; ! esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: *************** *** 215,221 **** echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) ! echo m68k-cbm-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} --- 240,246 ---- echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) ! echo m68k-unknown-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} *************** *** 247,253 **** arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; ! SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) --- 272,278 ---- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; ! SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) *************** *** 383,392 **** EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ ! && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; --- 408,420 ---- EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ ! && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; *************** *** 434,442 **** ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ! i?86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c --- 462,478 ---- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ! i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c *************** *** 450,456 **** exit(0); } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then --- 486,492 ---- exit(0); } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then *************** *** 459,467 **** echo rs6000-ibm-aix3.2 fi exit 0 ;; ! *:AIX:*:4) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` ! if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc --- 495,503 ---- echo rs6000-ibm-aix3.2 fi exit 0 ;; ! *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` ! if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc *************** *** 469,475 **** if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else ! IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; --- 505,511 ---- if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else ! IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *************** *** 495,504 **** --- 531,558 ---- echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) + case "${HPUX_REV}" in + 11.[0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE *************** *** 533,543 **** } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` rm -f $dummy.c $dummy esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include --- 587,602 ---- } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy + fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include *************** *** 564,570 **** exit (0); } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; --- 623,629 ---- exit (0); } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; *************** *** 583,589 **** hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; ! i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else --- 642,648 ---- hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; ! i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else *************** *** 628,654 **** CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; ! CRAY*T3E:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; ! F300:UNIX_System_V:*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ! echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; ! i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) --- 687,714 ---- CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; ! CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; ! F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) ! FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ! echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; ! i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) *************** *** 669,674 **** --- 729,737 ---- i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we *************** *** 690,747 **** i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; ! *:Linux:*:*) ! ! # The BFD linker knows what the default object file format is, so ! # first see if it will tell us. cd to the root directory to prevent ! # problems with other programs or directories called `ld' in the path. ! ld_help_string=`cd /; ld --help 2>&1` ! ld_supported_emulations=`echo $ld_help_string \ ! | sed -ne '/supported emulations:/!d ! s/[ ][ ]*/ /g ! s/.*supported emulations: *// ! s/ .*// ! p'` ! case "$ld_supported_emulations" in ! *ia64) ! echo "${UNAME_MACHINE}-unknown-linux" ! exit 0 ! ;; ! i?86linux) ! echo "${UNAME_MACHINE}-pc-linux-gnuaout" ! exit 0 ! ;; ! elf_i?86) ! echo "${UNAME_MACHINE}-pc-linux" ! exit 0 ! ;; ! i?86coff) ! echo "${UNAME_MACHINE}-pc-linux-gnucoff" ! exit 0 ! ;; ! sparclinux) ! echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ! exit 0 ! ;; ! armlinux) ! echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ! exit 0 ! ;; ! elf32arm*) ! echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" ! exit 0 ! ;; ! armelf_linux*) ! echo "${UNAME_MACHINE}-unknown-linux-gnu" ! exit 0 ! ;; ! m68klinux) ! echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ! exit 0 ! ;; ! elf32ppc | elf32ppclinux) ! # Determine Lib Version ! cat >$dummy.c < #if defined(__GLIBC__) extern char __libc_version[]; --- 753,790 ---- i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; ! arm*:Linux:*:*) ! echo ${UNAME_MACHINE}-unknown-linux-gnu ! exit 0 ;; ! ia64:Linux:*:*) ! echo ${UNAME_MACHINE}-unknown-linux ! exit 0 ;; ! m68*:Linux:*:*) ! echo ${UNAME_MACHINE}-unknown-linux-gnu ! exit 0 ;; ! mips:Linux:*:*) ! cat >$dummy.c < /* for printf() prototype */ ! int main (int argc, char *argv[]) { ! #else ! int main (argc, argv) int argc; char *argv[]; { ! #endif ! #ifdef __MIPSEB__ ! printf ("%s-unknown-linux-gnu\n", argv[1]); ! #endif ! #ifdef __MIPSEL__ ! printf ("%sel-unknown-linux-gnu\n", argv[1]); ! #endif ! return 0; ! } ! EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy ! ;; ! ppc:Linux:*:*) ! # Determine Lib Version ! cat >$dummy.c < #if defined(__GLIBC__) extern char __libc_version[]; *************** *** 754,880 **** #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else ! printf("unkown\n"); #endif return 0; } EOF ! LIBC="" ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null if test "$?" = 0 ; then ! ./$dummy | grep 1\.99 > /dev/null ! if test "$?" = 0 ; then ! LIBC="libc1" ! fi fi ! rm -f $dummy.c $dummy ! echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; ! shelf_linux) ! echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; esac ! ! if test "${UNAME_MACHINE}" = "alpha" ; then ! cat <$dummy.s ! .data ! \$Lformat: ! .byte 37,100,45,37,120,10,0 # "%d-%x\n" ! ! .text ! .globl main ! .align 4 ! .ent main ! main: ! .frame \$30,16,\$26,0 ! ldgp \$29,0(\$27) ! .prologue 1 ! .long 0x47e03d80 # implver \$0 ! lda \$2,-1 ! .long 0x47e20c21 # amask \$2,\$1 ! lda \$16,\$Lformat ! mov \$0,\$17 ! not \$1,\$18 ! jsr \$26,printf ! ldgp \$29,0(\$26) ! mov 0,\$16 ! jsr \$26,exit ! .end main ! EOF ! LIBC="" ! $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null ! if test "$?" = 0 ; then ! case `./$dummy` in ! 0-0) ! UNAME_MACHINE="alpha" ! ;; ! 1-0) ! UNAME_MACHINE="alphaev5" ! ;; ! 1-1) ! UNAME_MACHINE="alphaev56" ! ;; ! 1-101) ! UNAME_MACHINE="alphapca56" ! ;; ! 2-303) ! UNAME_MACHINE="alphaev6" ! ;; ! 2-307) ! UNAME_MACHINE="alphaev67" ! ;; ! esac ! ! objdump --private-headers $dummy | \ ! grep ld.so.1 > /dev/null ! if test "$?" = 0 ; then ! LIBC="libc1" ! fi ! fi ! rm -f $dummy.s $dummy ! echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 ! elif test "${UNAME_MACHINE}" = "mips" ; then ! cat >$dummy.c < /* for printf() prototype */ ! int main (int argc, char *argv[]) { ! #else ! int main (argc, argv) int argc; char *argv[]; { ! #endif ! #ifdef __MIPSEB__ ! printf ("%s-unknown-linux-gnu\n", argv[1]); ! #endif ! #ifdef __MIPSEL__ ! printf ("%sel-unknown-linux-gnu\n", argv[1]); ! #endif ! return 0; ! } ! EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy ! elif test "${UNAME_MACHINE}" = "s390"; then ! echo s390-ibm-linux && exit 0 ! else ! # Either a pre-BFD a.out linker (linux-gnuoldld) ! # or one that does not give us useful --help. ! # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. ! # If ld does not provide *any* "supported emulations:" ! # that means it is gnuoldld. ! echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" ! test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 ! ! case "${UNAME_MACHINE}" in ! i?86) ! VENDOR=pc; ! ;; ! *) ! VENDOR=unknown; ! ;; ! esac ! # Determine whether the default compiler is a.out or elf ! cat >$dummy.c < #ifdef __cplusplus #include /* for printf() prototype */ --- 797,923 ---- #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else ! printf("unknown\n"); #endif return 0; } + EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then LIBC="libc1" ; fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} + exit 0 ;; + alpha:Linux:*:*) + cat <$dummy.s + .data + \$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + .text + .globl main + .align 4 + .ent main + main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main EOF ! LIBC="" ! $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null ! if test "$?" = 0 ; then ! case `./$dummy` in ! 0-0) UNAME_MACHINE="alpha" ;; ! 1-0) UNAME_MACHINE="alphaev5" ;; ! 1-1) UNAME_MACHINE="alphaev56" ;; ! 1-101) UNAME_MACHINE="alphapca56" ;; ! 2-303) UNAME_MACHINE="alphaev6" ;; ! 2-307) UNAME_MACHINE="alphaev67" ;; ! esac ! objdump --private-headers $dummy | \ ! grep ld.so.1 > /dev/null if test "$?" = 0 ; then ! LIBC="libc1" fi ! fi ! rm -f $dummy.s $dummy ! echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ! exit 0 ;; ! parisc:Linux:*:* | hppa:Linux:*:*) ! # Look for CPU level ! case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in ! PA7*) echo hppa1.1-unknown-linux-gnu ;; ! PA8*) echo hppa2.0-unknown-linux-gnu ;; ! *) echo hppa-unknown-linux-gnu ;; ! esac ! exit 0 ;; ! parisc64:Linux:*:* | hppa64:Linux:*:*) ! echo hppa64-unknown-linux-gnu ! exit 0 ;; ! s390:Linux:*:* | s390x:Linux:*:*) ! echo ${UNAME_MACHINE}-ibm-linux ! exit 0 ;; ! sh*:Linux:*:*) ! echo ${UNAME_MACHINE}-unknown-linux-gnu ! exit 0 ;; ! sparc:Linux:*:* | sparc64:Linux:*:*) ! echo ${UNAME_MACHINE}-unknown-linux-gnu ! exit 0 ;; ! x86_64:Linux:*:*) ! echo x86_64-unknown-linux-gnu ! exit 0 ;; ! i*86:Linux:*:*) ! # The BFD linker knows what the default object file format is, so ! # first see if it will tell us. cd to the root directory to prevent ! # problems with other programs or directories called `ld' in the path. ! ld_supported_emulations=`cd /; ld --help 2>&1 \ ! | sed -ne '/supported emulations:/!d ! s/[ ][ ]*/ /g ! s/.*supported emulations: *// ! s/ .*// ! p'` ! case "$ld_supported_emulations" in ! i*86linux) ! echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; ! elf_i*86) ! TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ! ;; ! i*86coff) ! echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; esac ! # Either a pre-BFD a.out linker (linux-gnuoldld) ! # or one that does not give us useful --help. ! # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. ! # If ld does not provide *any* "supported emulations:" ! # that means it is gnuoldld. ! test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 ! case "${UNAME_MACHINE}" in ! i*86) ! VENDOR=pc; ! ;; ! *) ! VENDOR=unknown; ! ;; ! esac ! # Determine whether the default compiler is a.out or elf ! cat >$dummy.c < #ifdef __cplusplus #include /* for printf() prototype */ *************** *** 898,912 **** return 0; } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy ! fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. ! i?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; ! i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, --- 941,956 ---- return 0; } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy ! test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ! ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. ! i*86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; ! i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, *************** *** 914,920 **** # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; ! i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} --- 958,964 ---- # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; ! i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} *************** *** 922,928 **** echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; ! i?86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then --- 966,972 ---- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; ! i*86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then *************** *** 931,937 **** echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; ! i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; ! m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; ! i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; ! rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; --- 1032,1055 ---- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; ! m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; ! i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; ! rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; *************** *** 1036,1042 **** mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; ! news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) --- 1083,1089 ---- mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; ! news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) *************** *** 1079,1093 **** *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; ! NSR-W:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 --- 1126,1177 ---- *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; ! NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 *************** *** 1179,1189 **** #endif #if defined (vax) ! #if !defined (ultrix) ! printf ("vax-dec-bsd\n"); exit (0); ! #else ! printf ("vax-dec-ultrix\n"); exit (0); ! #endif #endif #if defined (alliant) && defined (i860) --- 1263,1286 ---- #endif #if defined (vax) ! # if !defined (ultrix) ! # include ! # if defined (BSD) ! # if BSD == 43 ! printf ("vax-dec-bsd4.3\n"); exit (0); ! # else ! # if BSD == 199006 ! printf ("vax-dec-bsd4.3reno\n"); exit (0); ! # else ! printf ("vax-dec-bsd\n"); exit (0); ! # endif ! # endif ! # else ! printf ("vax-dec-bsd\n"); exit (0); ! # endif ! # else ! printf ("vax-dec-ultrix\n"); exit (0); ! # endif #endif #if defined (alliant) && defined (i860) *************** *** 1194,1200 **** } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. --- 1291,1297 ---- } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. *************** *** 1230,1237 **** cat >&2 <&2 < in order to provide the needed information to handle your system. ! config.guess version = $version uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` --- 1338,1344 ---- pertinent to in order to provide the needed information to handle your system. ! config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` *************** *** 1267,1273 **** # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) ! # time-stamp-start: "version='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: --- 1365,1371 ---- # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) ! # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Index: inn/support/config.sub diff -c inn/support/config.sub:1.1.2.1.2.1 inn/support/config.sub:1.1.2.1.2.2 *** inn/support/config.sub:1.1.2.1.2.1 Sat Jun 17 16:10:11 2000 --- inn/support/config.sub Sun Apr 22 15:44:55 2001 *************** *** 1,9 **** #! /bin/sh ! # Configuration validation subroutine script, version 1.1. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 # Free Software Foundation, Inc. ! version='2000-06-13' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software --- 1,9 ---- #! /bin/sh ! # Configuration validation subroutine script. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-04-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software *************** *** 60,75 **** Canonicalize a configuration name. Operation modes: ! -h, --help print this help, then exit ! -V, --version print version number, then exit" help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do ! case "$1" in ! --version | --vers* | -V ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; --- 60,89 ---- Canonicalize a configuration name. Operation modes: ! -h, --help print this help, then exit ! -t, --time-stamp print date of last modification, then exit ! -v, --version print version number, then exit + Report bugs and patches to ." + + version="\ + GNU config.sub ($timestamp) + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 + Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do ! case $1 in ! --time-stamp | --time* | -t ) ! echo "$timestamp" ; exit 0 ;; ! --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; *************** *** 78,86 **** - ) # Use stdin as input. break ;; -* ) ! exec >&2 ! echo "$me: invalid option $1" ! echo "$help" exit 1 ;; *local*) --- 92,98 ---- - ) # Use stdin as input. break ;; -* ) ! echo "$me: invalid option $1$help" exit 1 ;; *local*) *************** *** 105,111 **** # 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*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; --- 117,123 ---- # 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* | storm-chaos* | os2-emx*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *************** *** 203,233 **** case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ ! | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ ! | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa64 \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alphaev6[78] \ | we32k | ns16k | clipper | i370 | sh | sh[34] \ | powerpc | powerpcle \ ! | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ ! | mips64vr5000 | miprs64vr5000el | mcore \ ! | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ ! | thumb | d10v | fr30 | avr) basic_machine=$basic_machine-unknown ;; ! m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. ! i[234567]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. --- 215,254 ---- case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ ! | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ ! | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ ! | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa64 \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alphaev6[78] \ | we32k | ns16k | clipper | i370 | sh | sh[34] \ | powerpc | powerpcle \ ! | 1750a | dsp16xx | pdp10 | pdp11 \ ! | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ ! | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \ ! | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ ! | v850 | c4x \ ! | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ ! | pj | pjl | h8500) basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none ;; ! m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. ! i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *************** *** 237,263 **** ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. ! vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ ! | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ ! | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa2.0n-* | hppa64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alphaev6[78]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ ! | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ ! | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ ! | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ ! | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ ! | bs2000-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. --- 258,287 ---- ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. ! vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ ! | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ ! | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ ! | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa2.0n-* | hppa64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alphaev6[78]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ ! | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ ! | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ ! | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ ! | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ ! | [cjt]90-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ ! | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ ! | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. *************** *** 294,307 **** os=-sysv ;; amiga | amiga-*) ! basic_machine=m68k-cbm ;; amigaos | amigados) ! basic_machine=m68k-cbm os=-amigaos ;; amigaunix | amix) ! basic_machine=m68k-cbm os=-sysv4 ;; apollo68) --- 318,331 ---- os=-sysv ;; amiga | amiga-*) ! basic_machine=m68k-unknown ;; amigaos | amigados) ! basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) ! basic_machine=m68k-unknown os=-sysv4 ;; apollo68) *************** *** 348,355 **** basic_machine=cray2-cray os=-unicos ;; ! [ctj]90-cray) ! basic_machine=c90-cray os=-unicos ;; crds | unos) --- 372,379 ---- basic_machine=cray2-cray os=-unicos ;; ! [cjt]90) ! basic_machine=${basic_machine}-cray os=-unicos ;; crds | unos) *************** *** 405,410 **** --- 429,438 ---- basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 *************** *** 480,498 **** basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? ! i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; ! i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; ! i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; ! i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; --- 508,526 ---- basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? ! i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; ! i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; ! i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; ! i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; *************** *** 504,517 **** basic_machine=i386-unknown os=-vsta ;; - i386-go32 | go32) - basic_machine=i386-unknown - os=-go32 - ;; - i386-mingw32 | mingw32) - basic_machine=i386-unknown - os=-mingw32 - ;; iris | iris4d) basic_machine=mips-sgi case $os in --- 532,537 ---- *************** *** 537,542 **** --- 557,566 ---- basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; miniframe) basic_machine=m68000-convergent ;; *************** *** 567,573 **** os=-coff ;; msdos) ! basic_machine=i386-unknown os=-msdos ;; mvs) --- 591,597 ---- os=-coff ;; msdos) ! basic_machine=i386-pc os=-msdos ;; mvs) *************** *** 631,636 **** --- 655,664 ---- basic_machine=i960-intel os=-mon960 ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; np1) basic_machine=np1-gould ;; *************** *** 666,693 **** pc532 | pc532-*) basic_machine=ns32k-pc532 ;; ! pentium | p5 | k5 | k6 | nexen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) ! basic_machine=i786-pc ;; ! pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) ! basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; ! power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown ;; --- 694,721 ---- pc532 | pc532-*) basic_machine=ns32k-pc532 ;; ! pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) ! basic_machine=i686-pc ;; ! pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) ! basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; ! power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; *************** *** 702,707 **** --- 730,739 ---- ps2) basic_machine=i386-ibm ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; rom68k) basic_machine=m68k-rom68k os=-coff *************** *** 793,798 **** --- 825,834 ---- basic_machine=t3e-cray os=-unicos ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; tx39) basic_machine=mipstx39-unknown ;; *************** *** 888,893 **** --- 924,933 ---- vax) basic_machine=vax-dec ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; pdp11) basic_machine=pdp11-dec ;; *************** *** 895,903 **** basic_machine=we32k-att ;; sh3 | sh4) ! base_machine=sh-unknown ;; ! sparc | sparcv9) basic_machine=sparc-sun ;; cydra) --- 935,943 ---- basic_machine=we32k-att ;; sh3 | sh4) ! basic_machine=sh-unknown ;; ! sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) *************** *** 919,924 **** --- 959,967 ---- basic_machine=c4x-none os=-coff ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 *************** *** 978,989 **** | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ ! | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in ! x86-* | i[34567]86-*) ;; *) os=-nto$os --- 1021,1033 ---- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ ! | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ ! | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in ! x86-* | i*86-*) ;; *) os=-nto$os *************** *** 1039,1045 **** -ns2 ) os=-nextstep2 ;; ! -nsk) os=-nsk ;; # Preserve the version number of sinix5. --- 1083,1089 ---- -ns2 ) os=-nextstep2 ;; ! -nsk*) os=-nsk ;; # Preserve the version number of sinix5. *************** *** 1076,1082 **** -xenix) os=-xenix ;; ! -*mint | -*MiNT) os=-mint ;; -none) --- 1120,1126 ---- -xenix) os=-xenix ;; ! -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) *************** *** 1110,1115 **** --- 1154,1162 ---- arm*-semi) os=-aout ;; + pdp10-*) + os=-tops20 + ;; pdp11-*) os=-none ;; *************** *** 1218,1224 **** *-masscomp) os=-rtu ;; ! f301-fujitsu) os=-uxpv ;; *-rom68k) --- 1265,1271 ---- *-masscomp) os=-rtu ;; ! f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) *************** *** 1296,1302 **** -mpw* | -macos*) vendor=apple ;; ! -*mint | -*MiNT) vendor=atari ;; esac --- 1343,1349 ---- -mpw* | -macos*) vendor=apple ;; ! -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; esac *************** *** 1309,1315 **** # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) ! # time-stamp-start: "version='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: --- 1356,1362 ---- # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) ! # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: