diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2001-08-01 01:01:42 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2001-08-01 01:01:42 +0000 |
commit | 4a708c64cc0677e84c4b8e77b54d0199042254c4 (patch) | |
tree | bbcf5f1289fd8feb0ba87851c79d7eb67dfdf7e6 | |
parent | 8879a3e7434a6e93c5f42406c82b3dce8d9f277c (diff) |
update to sendmail 8.11.5
39 files changed, 667 insertions, 276 deletions
diff --git a/gnu/usr.sbin/sendmail/KNOWNBUGS b/gnu/usr.sbin/sendmail/KNOWNBUGS index 0fac6255b2b..a923cf827d9 100644 --- a/gnu/usr.sbin/sendmail/KNOWNBUGS +++ b/gnu/usr.sbin/sendmail/KNOWNBUGS @@ -35,6 +35,13 @@ This list is not guaranteed to be complete. restructuring of the code -- for example, almost no C library support could be used to handle strings. +* Header checks are not called if header value is too long. + + If the value of a header is longer than 1250 (MAXNAME + MAXATOM - 6) + characters or it contains a single word longer than 256 (MAXNAME) + characters then no header check is done even if one is configured for + the header. + * Duplicate error messages. Sometimes identical, duplicate error messages can be generated. As @@ -193,10 +200,10 @@ This list is not guaranteed to be complete. local mail delivery and NFS hard mounted home directories should be avoided, as attempts to open the forward files could hang. -* Race condition for delivery to setuid files +* Race condition for delivery to set-user-id files Sendmail will deliver to a fail if the file is owned by the DefaultUser - or has the setuid bit set. Unfortunately, some systems clear that bit + or has the set-user-id bit set. Unfortunately, some systems clear that bit when a file is modified. Sendmail compensates by resetting the file mode back to it's original settings. Unfortunately, there's still a permission failure race as sendmail checks the permissions before locking @@ -211,4 +218,4 @@ This list is not guaranteed to be complete. state. This option and it's use is deprecated and will be removed from a future version of sendmail. -$Revision: 1.3 $, Last updated $Date: 2001/01/15 21:08:50 $ +$Revision: 1.4 $, Last updated $Date: 2001/08/01 01:01:40 $ diff --git a/gnu/usr.sbin/sendmail/README b/gnu/usr.sbin/sendmail/README index dcd78e8e311..138eaa9bc20 100644 --- a/gnu/usr.sbin/sendmail/README +++ b/gnu/usr.sbin/sendmail/README @@ -18,7 +18,9 @@ the latest updates. 1. Read this README file, especially this introduction, and the DIRECTORY PERMISSIONS sections. -2. Read sendmail/README, especially: +2. Read the INSTALL file in this directory. + +3. Read sendmail/README, especially: a. the introduction b. the BUILDING SENDMAIL section c. the relevant part(s) of the OPERATING SYSTEM AND COMPILE QUIRKS section @@ -27,8 +29,10 @@ the latest updates. d. devtools/README e. devtools/Site/README + f. mail.local/README + g. smrsh/README -3. Read cf/README. +4. Read cf/README. Sendmail is a trademark of Sendmail, Inc. @@ -107,7 +111,10 @@ each directory in the file's path. There are other files you should read. Rooted in this directory are: FAQ - Answers to Frequently Asked Questions. + The FAQ (frequently answered questions) is no longer maintained + with the sendmail release. It is available at + http://www.sendmail.org/faq/ . The file FAQ is a reminder of + this and a pointer to the web page. INSTALL Installation instructions for building and installing sendmail. KNOWNBUGS @@ -385,4 +392,4 @@ sendmail Source for the sendmail program itself. test Some test scripts (currently only for compilation aids). vacation Source for the vacation program. NOT PART OF SENDMAIL! -$Revision: 1.4 $, Last updated $Date: 2001/01/15 21:08:50 $ +$Revision: 1.5 $, Last updated $Date: 2001/08/01 01:01:40 $ diff --git a/gnu/usr.sbin/sendmail/RELEASE_NOTES b/gnu/usr.sbin/sendmail/RELEASE_NOTES index 254a1e524e6..55683387541 100644 --- a/gnu/usr.sbin/sendmail/RELEASE_NOTES +++ b/gnu/usr.sbin/sendmail/RELEASE_NOTES @@ -1,11 +1,53 @@ SENDMAIL RELEASE NOTES - $Sendmail: RELEASE_NOTES,v 8.561.2.5.2.235 2001/05/27 21:39:16 gshapiro Exp $ + $Sendmail: RELEASE_NOTES,v 8.561.2.5.2.254 2001/07/31 22:42:46 gshapiro Exp $ This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. +8.11.5/8.11.5 2001/07/31 + Fix a possible race condition when sending a HUP signal to restart + the daemon. This could terminate the current process without + starting a new daemon. Problem reported by Wolfgang Breyha + of SE Netway Communications. + Only apply MaxHeadersLength when receiving a message via SMTP or + the command line. Problem noted by Andrey J. Melnikoff. + When finding the system's local hostname on an IPv6-enabled system + which doesn't have any IPv6 interface addresses, fall back + to looking up only IPv4 addresses. Problem noted by Tim + Bosserman of EarthLink. + When commands were being rejected due to check_relay or TCP + Wrappers, the ETRN command was not giving a response. + Incoming IPv4 connections on a Family=inet6 daemon (using + IPv4-mapped addresses) were incorrectly labeled as "may be + forged". Problem noted by Per Steinar Iversen of Oslo + University College. + Shutdown address test mode cleanly on SIGTERM. Problem noted by + Greg King of the OAO Corporation. + Restore the original real uid (changed in main() to prevent + out of band signals) before invoking a delivery agent. + Some delivery agents use this for the "From " envelope + "header". Problem noted by Leslie Carroll of the + University at Albany. + Mark closed file descriptors properly to avoid reuse. Problem + noted by Jeff Bronson of J.D. Bronson, Inc. + Setting Timeout options on the command line will also override + their sub-suboptions in the .cf file, e.g., -O + Timeout.queuereturn=2d will set all queuereturn timeouts + to 2 days. Problem noted by Roger B.A. Klorese. + Portability: + BSD/OS has a broken setreuid() implementation. Problem + noted by Vernon Schryver of Rhyolite Software. + BSD/OS has /dev/urandom(4) (as of version 4.1/199910 ?). + Noted by Vernon Schryver of Rhyolite Software. + BSD/OS has fchown(2). Noted by Dave Yadallee of Netline + 2000 Internet Solutions Inc. + Solaris 2.X and later have strerror(3). From Sebastian + Hagedorn of Cologne University. + CONFIG: Fix parsing for IPv6 domain literals in addresses + (user@[IPv6:address]). Problem noted by Liyuan Zhou. + 8.11.4/8.11.4 2001/05/28 Clean up signal handling routines to reduce the chances of heap corruption and other potential race conditions. @@ -730,18 +772,18 @@ summary of the changes in that release. 8.10.0/8.10.0 2000/03/01 ************************************************************* - * The engineering department at Sendmail, Inc. has suffered * - * the tragic loss of a key member of our engineering team. * - * Julie Van Bourg was the Vice President of Engineering * - * at Sendmail, Inc. during the development and deployment * - * of this release. It was her vision, dedication, and * - * support that has made this release a success. Julie died * - * on October 26, 1999 of cancer. We have lost a leader, a * - * coach, and a friend. * - * * - * This release is dedicated to her memory and to the joy, * - * strength, ideals, and hope that she brought to all of us. * - * Julie, we miss you! * + * The engineering department at Sendmail, Inc. has suffered * + * the tragic loss of a key member of our engineering team. * + * Julie Van Bourg was the Vice President of Engineering * + * at Sendmail, Inc. during the development and deployment * + * of this release. It was her vision, dedication, and * + * support that has made this release a success. Julie died * + * on October 26, 1999 of cancer. We have lost a leader, a * + * coach, and a friend. * + * * + * This release is dedicated to her memory and to the joy, * + * strength, ideals, and hope that she brought to all of us. * + * Julie, we miss you! * ************************************************************* SECURITY: The safe file checks now back track through symbolic links to make sure the files can't be compromised due @@ -1586,7 +1628,7 @@ summary of the changes in that release. CONFIG: OSTYPE(`bsdi1.0') and OSTYPE(`bsdi2.0') have been deprecated and may be removed from a future release. BSD/OS users should begin using OSTYPE(`bsdi'). - CONFIG: OpenBSD 2.4 installs mail.local non-setuid root. This + CONFIG: OpenBSD 2.4 installs mail.local non-set-user-id root. This requires a new OSTYPE(`openbsd'). From Todd C. Miller of Courtesan Consulting. CONFIG: New OSTYPE(`hpux11') for HP/UX 11.X. @@ -1846,7 +1888,7 @@ summary of the changes in that release. the others (if it exists). DEVTOOLS: Change order of LIBS: first product specific libraries then the default ones. - MAIL.LOCAL: Will not be installed setuid root. To use mail.local + MAIL.LOCAL: Will not be installed set-user-id root. To use mail.local as local delivery agent without LMTP mode, use MODIFY_MAILER_FLAGS(`LOCAL', `+S') to set the S flag. @@ -2401,7 +2443,7 @@ summary of the changes in that release. uid and gid for user bin instead of daemon. If DefaultUser is set in the configuration file, that value overrides this default. - SECURITY: Since 8.8.7, the check for non-setuid binaries + SECURITY: Since 8.8.7, the check for non-set-user-id binaries interfered with setting an alternate group id for the RunAsUser option. Problem noted by Randall Winchester of the University of Maryland. @@ -3069,7 +3111,7 @@ summary of the changes in that release. In some cases, errors during an SMTP session could leave files open or locked. Better handling of missing file descriptors (0, 1, 2) on startup. - Better handling of non-setuid binaries -- avoids certain obnoxious + Better handling of non-set-user-id binaries -- avoids certain obnoxious errors during testing. Errors in file locking of NEWDB maps had the incorrect file name printed in the error message. @@ -3461,7 +3503,7 @@ summary of the changes in that release. change to the sendmail map code was made in 8.8.3. Problem noted by Gregory Neil Shapiro. MAKEMAP: Give warnings on file problems such as map files that are - symbolic links; although makemap is not setuid root, it is + symbolic links; although makemap is not set-user-id root, it is often run as root and hence has the potential for the same sorts of problems as alias rebuilds. MAKEMAP: Change compilation so that it will link properly on @@ -4247,9 +4289,9 @@ summary of the changes in that release. Fix problem finding network interface addresses. Patch from Motonori Nakamura. Don't reject qf entries that are not owned by your effective uid if - you are not running setuid; this makes management of certain - kinds of firewall setups difficult. Patch suggested by - Eamonn Coleman of Qualcomm. + you are not running set-user-id; this makes management of + certain kinds of firewall setups difficult. Patch + suggested by Eamonn Coleman of Qualcomm. Add persistent host status. This keeps the information normally maintained within a single queue run in disk files that are shared between sendmail instances. The HostStatusDirectory @@ -4617,7 +4659,7 @@ summary of the changes in that release. failure in the hosts.files map. This error caused hard bounces when it should have requeued. Aliases to files such as /users/bar/foo/inbox, with /users/bar/foo - owned by bar mode 700 and inbox being setuid bar stopped + owned by bar mode 700 and inbox being set-user-id bar stopped working properly due to excessive paranoia. Pointed out by John Hawkinson of Panix. An SMTP RCPT command referencing a host that gave a nameserver @@ -5291,7 +5333,7 @@ summary of the changes in that release. the aliases file: use the default uid/gid instead of the real uid/gid. This allows you to create a file owned by and writable only by the default uid/gid that will work - all the time (without having the setuid bit set). Change + all the time (without having the set-user-id bit set). Change suggested by Shau-Ping Lo and Andrew Cheng of Sun Microsystems. Add "DialDelay" option (no short name) to provide an "extra" diff --git a/gnu/usr.sbin/sendmail/cf/README b/gnu/usr.sbin/sendmail/cf/README index 83d2b3dc7cc..a953a6845e2 100644 --- a/gnu/usr.sbin/sendmail/cf/README +++ b/gnu/usr.sbin/sendmail/cf/README @@ -221,6 +221,11 @@ to create the pathnames. The default value of this variable is `/etc/mail/'. If you set this macro to a different value, you MUST include a trailing slash. +Notice: all filenames used in a .mc (or .cf) file should be absolute +(starting at the root, i.e., with '/'). Relative filenames most +likely cause surprises during operations (unless otherwise noted). + + +--------+ | OSTYPE | +--------+ @@ -1087,9 +1092,9 @@ delay_checks The rulesets check_mail and check_relay will not be called rbl This feature is deprecated! Please use dnsbl instead. Turns on rejection of hosts found in the Realtime Blackhole List. If an argument is provided it is used as the domain - in which blocked hosts are listed; otherwise, the main - RBL domain rbl.maps.vix.com is used. For details, see - http://maps.vix.com/rbl/. + in which blocked hosts are listed; otherwise, the main RBL + domain rbl.maps.vix.com is used (see NOTE below). For + details, see http://maps.vix.com/rbl/. dnsbl Turns on rejection of hosts found in an DNS based rejection list. If an argument is provided it is used as the domain @@ -1102,6 +1107,13 @@ dnsbl Turns on rejection of hosts found in an DNS based rejection feature can be included several times to query different DNS based rejection lists. + NOTE: The default DNS blacklist, blackholes.mail-abuse.org, + is a service offered by the Mail Abuse Prevention System + (MAPS). As of July 31, 2001, MAPS is a subscription + service, so using that network address won't work if you + haven't subscribed. Contact MAPS to subscribe + (http://mail-abuse.org/). + loose_relay_check Normally, if % addressing is used for a recipient, e.g. user%site@othersite, and othersite is in class {R}, the @@ -1819,9 +1831,17 @@ spammers. To use this database, use FEATURE(`dnsbl') This will cause sendmail to reject mail from any site in the -Realtime Blackhole List database. You can specify an alternative -RBL domain to check by specifying an argument to the FEATURE. -The default error message is +Realtime Blackhole List database. This default DNS blacklist, +blackholes.mail-abuse.org, is a service offered by the Mail Abuse +Prevention System (MAPS). As of July 31, 2001, MAPS is a subscription +service, so using that network address won't work if you haven't +subscribed. Contact MAPS to subscribe (http://mail-abuse.org/). + +You can specify an alternative RBL server to check by specifying an +argument to the FEATURE. The default error message is + +You can specify an alternative RBL domain to check by specifying an +argument to the FEATURE. The default error message is Mail from $&{client_addr} refused by blackhole site DOMAIN @@ -2013,6 +2033,21 @@ probably not be used in production. In this text, cert will be used as an abreviation for X.509 certificate, DN is the distinguished name of a cert, and CA is a certification authority. +For STARTTLS to be offered by sendmail you need to set at least +this variables (the file names and paths are just examples): + + define(`confCACERT_PATH', `/etc/mail/certs/') + define(`confCACERT', `/etc/mail/certs/CA.cert.pem') + define(`confSERVER_CERT', `/etc/mail/certs/my.cert.pem') + define(`confSERVER_KEY', `/etc/mail/certs/my.key.pem') + +On systems which do not have the compile flag HASURANDOM set (see +sendmail/README) you also must set confRAND_FILE. + +See doc/op/op.{me,ps} for more information about these options, +esp. the sections ``Certificates for STARTTLS'' and ``PRNG for +STARTTLS''. + Macros related to STARTTLS are: ${cert_issuer} holds the DN of the CA (the cert issuer). @@ -3278,4 +3313,4 @@ M4 DIVERSIONS 8 DNS based blacklists 9 special local rulesets (1 and 2) -$Revision: 1.6 $, Last updated $Date: 2001/05/29 01:31:10 $ +$Revision: 1.7 $, Last updated $Date: 2001/08/01 01:01:40 $ diff --git a/gnu/usr.sbin/sendmail/cf/cf/courtesan-lists.mc b/gnu/usr.sbin/sendmail/cf/cf/courtesan-lists.mc index dbb86e07af9..5934c9e3c0a 100644 --- a/gnu/usr.sbin/sendmail/cf/cf/courtesan-lists.mc +++ b/gnu/usr.sbin/sendmail/cf/cf/courtesan-lists.mc @@ -6,7 +6,7 @@ divert(-1) # divert(0)dnl -VERSIONID(`$OpenBSD: courtesan-lists.mc,v 1.2 2000/05/15 03:38:25 millert Exp $') +VERSIONID(`$OpenBSD: courtesan-lists.mc,v 1.3 2001/08/01 01:01:40 millert Exp $') OSTYPE(openbsd)dnl dnl dnl Advertise ourselves as ``lists.courtesan.com'' @@ -42,10 +42,9 @@ dnl dnl Spam blocking features FEATURE(access_db)dnl FEATURE(blacklist_recipients)dnl -FEATURE(dnsbl, `rbl.maps.vix.com', `Rejected - see http://www.mail-abuse.org/rbl/')dnl -FEATURE(dnsbl, `dul.maps.vix.com', `Dialup - see http://www.mail-abuse.org/dul/')dnl -FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl -dnl FEATURE(dnsbl, `relays.orbs.org', `Open spam relay - see http://www.orbs.org/')dnl +dnl FEATURE(dnsbl, `rbl.maps.vix.com', `Rejected - see http://www.mail-abuse.org/rbl/')dnl +dnl FEATURE(dnsbl, `dul.maps.vix.com', `Dialup - see http://www.mail-abuse.org/dul/')dnl +dnl FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl dnl dnl List the mailers we support MAILER(local)dnl diff --git a/gnu/usr.sbin/sendmail/cf/cf/courtesan.mc b/gnu/usr.sbin/sendmail/cf/cf/courtesan.mc index 53e36870c9b..b91f5d3ad56 100644 --- a/gnu/usr.sbin/sendmail/cf/cf/courtesan.mc +++ b/gnu/usr.sbin/sendmail/cf/cf/courtesan.mc @@ -4,7 +4,7 @@ divert(-1) # divert(0)dnl -VERSIONID(`$OpenBSD: courtesan.mc,v 1.5 2001/07/26 04:00:35 millert Exp $') +VERSIONID(`$OpenBSD: courtesan.mc,v 1.6 2001/08/01 01:01:40 millert Exp $') OSTYPE(openbsd) dnl dnl First, we override some default values @@ -31,9 +31,9 @@ dnl dnl Spam blocking features FEATURE(access_db)dnl FEATURE(blacklist_recipients)dnl -FEATURE(dnsbl, `rbl.maps.vix.com', `Rejected - see http://www.mail-abuse.org/rbl/')dnl -FEATURE(dnsbl, `dul.maps.vix.com', `Dialup - see http://www.mail-abuse.org/dul/')dnl -FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl +dnl FEATURE(dnsbl, `rbl.maps.vix.com', `Rejected - see http://www.mail-abuse.org/rbl/')dnl +dnl FEATURE(dnsbl, `dul.maps.vix.com', `Dialup - see http://www.mail-abuse.org/dul/')dnl +dnl FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl dnl dnl Then, we enumerate which mailers we support MAILER(local) diff --git a/gnu/usr.sbin/sendmail/cf/cf/generic-hpux10.mc b/gnu/usr.sbin/sendmail/cf/cf/generic-hpux10.mc index 073240f5ee5..0fe393e14a6 100644 --- a/gnu/usr.sbin/sendmail/cf/cf/generic-hpux10.mc +++ b/gnu/usr.sbin/sendmail/cf/cf/generic-hpux10.mc @@ -1,6 +1,6 @@ divert(-1) # -# Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -13,14 +13,14 @@ divert(-1) # # -# This is a generic configuration file for HP-UX 9.x. +# This is a generic configuration file for HP-UX 10.x. # It has support for local and SMTP mail only. If you want to # customize it, copy it to a name appropriate for your environment # and do the modifications there. # divert(0)dnl -VERSIONID(`$Sendmail: generic-hpux10.mc,v 8.11 1999/02/07 07:26:02 gshapiro Exp $') +VERSIONID(`$Sendmail: generic-hpux10.mc,v 8.11.22.2 2001/05/29 17:30:18 ca Exp $') OSTYPE(hpux10)dnl DOMAIN(generic)dnl MAILER(local)dnl diff --git a/gnu/usr.sbin/sendmail/cf/cf/openbsd-lists.mc b/gnu/usr.sbin/sendmail/cf/cf/openbsd-lists.mc index bb522c7f4b1..27706ad7fe6 100644 --- a/gnu/usr.sbin/sendmail/cf/cf/openbsd-lists.mc +++ b/gnu/usr.sbin/sendmail/cf/cf/openbsd-lists.mc @@ -6,7 +6,7 @@ divert(-1) # divert(0)dnl -VERSIONID(`$OpenBSD: openbsd-lists.mc,v 1.4 2001/01/15 21:08:53 millert Exp $') +VERSIONID(`$OpenBSD: openbsd-lists.mc,v 1.5 2001/08/01 01:01:40 millert Exp $') OSTYPE(openbsd)dnl dnl dnl Advertise ourselves as ``openbsd.org'' @@ -21,7 +21,10 @@ dnl Override some default values define(`confPRIVACY_FLAGS', `authwarnings, nobodyreturn')dnl define(`confTRY_NULL_MX_LIST', `True')dnl define(`confMAX_HOP', `30')dnl -define(`confMAX_MIME_HEADER_LENGTH', `256/128')dnl +dnl +dnl Keep host status on disk between sendmail runs in the .hoststat dir +define(`confHOST_STATUS_DIRECTORY', `.hoststat')dnl +define(`confTO_HOSTSTATUS', `1h')dnl dnl dnl Always use fully qualified domains FEATURE(always_add_domain) @@ -49,7 +52,6 @@ FEATURE(blacklist_recipients)dnl dnl FEATURE(dnsbl, `rbl.maps.vix.com', `Rejected - see http://www.mail-abuse.org/rbl/')dnl dnl FEATURE(dnsbl, `dul.maps.vix.com', `Dialup - see http://www.mail-abuse.org/dul/')dnl dnl FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl -dnl FEATURE(dnsbl, `relays.orbs.org', `Open spam relay - see http://www.orbs.org/')dnl dnl dnl List the mailers we support MAILER(local)dnl diff --git a/gnu/usr.sbin/sendmail/cf/m4/proto.m4 b/gnu/usr.sbin/sendmail/cf/m4/proto.m4 index 1389b37e429..cf721de8d37 100644 --- a/gnu/usr.sbin/sendmail/cf/m4/proto.m4 +++ b/gnu/usr.sbin/sendmail/cf/m4/proto.m4 @@ -13,7 +13,7 @@ divert(-1) # divert(0) -VERSIONID(`$Sendmail: proto.m4,v 8.446.2.5.2.41 2001/05/23 21:32:16 ca Exp $') +VERSIONID(`$Sendmail: proto.m4,v 8.446.2.5.2.44 2001/07/31 22:25:49 gshapiro Exp $') MAILER(local)dnl @@ -161,8 +161,10 @@ ifdef(`_ACCEPT_UNRESOLVABLE_DOMAINS_',`dnl',`dnl # Resolve map (to check if a host exists in check_mail) Kresolve host -a<OK> -T<TEMP>') -ifdef(`_FFR_5_', `# macro storage map -Kmacro macro') +ifdef(`_NEED_MACRO_MAP_', `dnl +ifdef(`_MACRO_MAP_', `', `# macro storage map +define(`_MACRO_MAP_', `1')dnl +Kmacro macro')', `dnl') ifdef(`confCR_FILE', `dnl # Hosts for which relaying is permitted ($=R) @@ -631,7 +633,7 @@ R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr> R@ $* <@> $: @ $1 unmark @host:... R$* :: $* <@> $: $1 :: $2 unmark node::addr R:`include': $* <@> $: :`include': $1 unmark :`include':... -R$* [ IPv6 $- ] <@> $: $1 [ IPv6 $2 ] unmark IPv6 addr +R$* [ IPv6 : $+ ] <@> $: $1 [ IPv6 : $2 ] unmark IPv6 addr R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if leading colon R$* : $* <@> $: $2 strip colon if marked R$* <@> $: $1 unmark @@ -707,9 +709,9 @@ ifdef(`_NO_UUCP_', `dnl', `R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domain') # check for IPv6 domain literal (save quoted form) -R$* < @ [ IPv6 $- ] > $* $: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3 mark IPv6 addr -R$- $| $* < @@ $=w > $* $: $2 < @ $j . > $4 self-literal -R$- $| $* < @@ [ $+ ] > $* $@ $2 < @ [ IPv6 $1 ] > $4 canon IP addr +R$* < @ [ IPv6 : $+ ] > $* $: $2 $| $1 < @@ [ $(dequote $2 $) ] > $3 mark IPv6 addr +R$+ $| $* < @@ $=w > $* $: $2 < @ $j . > $4 self-literal +R$+ $| $* < @@ [ $+ ] > $* $@ $2 < @ [ IPv6 : $1 ] > $4 canon IP addr # check for IPv4 domain literal R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d] @@ -907,8 +909,8 @@ ifdef(`_MAILER_smtp_', dnl there is no check whether this is really an IP number R$* < @ [ $+ ] > $* $: $>ParseLocal $1 < @ [ $2 ] > $3 numeric internet spec R$* < @ [ $+ ] > $* $1 < @ [ $2 ] : $S > $3 Add smart host to path -R$* < @ [ IPv6 $- ] : > $* - $#_SMTP_ $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 $2 ] > $3 no smarthost: send +R$* < @ [ IPv6 : $+ ] : > $* + $#_SMTP_ $@ [ $(dequote $2 $) ] $: $1 < @ [IPv6 : $2 ] > $3 no smarthost: send R$* < @ [ $+ ] : > $* $#_SMTP_ $@ [$2] $: $1 < @ [$2] > $3 no smarthost: send R$* < @ [ $+ ] : $- : $*> $* $#$3 $@ $4 $: $1 < @ [$2] > $5 smarthost with mailer R$* < @ [ $+ ] : $+ > $* $#_SMTP_ $@ $3 $: $1 < @ [$2] > $4 smarthost without mailer', @@ -936,6 +938,8 @@ R<@> $+ $: $1 R<!> $+ $: $1 R< error : $-.$-.$- : $+ > $* $#error $@ $1.$2.$3 $: $4 R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2 +dnl this is not a documented option +dnl it performs no looping at all for virtusertable ifdef(`_NO_VIRTUSER_RECURSION_', `R< $+ > $+ < @ $+ > $: $>ParseLocal $>Parse0 $>canonify $1', `R< $+ > $+ < @ $+ > $: $>Recurse $1') @@ -1104,7 +1108,7 @@ dnl <error:text> -> error dnl <mailer:user@host> lp<@domain>rest -> mailer host user dnl <mailer:host> address -> mailer host address dnl <localdomain> address -> address -dnl <[IPv6 number]> address -> relay number address +dnl <[IPv6:number]> address -> relay number address dnl <host> address -> relay host address ################################################################### @@ -1116,7 +1120,7 @@ R< local : $* > $* $>CanonLocal < $1 > $2 R< $- : $+ @ $+ > $*<$*>$* $# $1 $@ $3 $: $2<@$3> use literal user R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailer R< $=w > $* $@ $2 delete local host -R< [ IPv6 $+ ] > $* $#_RELAY_ $@ $(dequote $1 $) $: $2 use unqualified mailer +R< [ IPv6 : $+ ] > $* $#_RELAY_ $@ $(dequote $1 $) $: $2 use unqualified mailer R< $+ > $* $#_RELAY_ $@ $1 $: $2 use unqualified mailer ################################################################### @@ -1280,7 +1284,7 @@ dnl <result> <passthru> SLookUpDomain dnl remove IPv6 mark and dequote address dnl it is a bit ugly because it is checked on each "iteration" -R<[IPv6 $-]> <$+> <$*> <$*> $: <[$(dequote $1 $)]> <$2> <$3> <$4> +R<[IPv6 : $+]> <$+> <$*> <$*> $: <[$(dequote $1 $)]> <$2> <$3> <$4> dnl workspace <key> <default> <passthru> <mark> dnl lookup with tag (in front, no delimiter here) R<$*> <$+> <$*> <$- $-> $: < $(access $5`'_TAG_DELIM_`'$1 $: ? $) > <$1> <$2> <$3> <$4 $5> diff --git a/gnu/usr.sbin/sendmail/cf/m4/version.m4 b/gnu/usr.sbin/sendmail/cf/m4/version.m4 index 8b330c0b271..56cdc2b1ceb 100644 --- a/gnu/usr.sbin/sendmail/cf/m4/version.m4 +++ b/gnu/usr.sbin/sendmail/cf/m4/version.m4 @@ -11,8 +11,8 @@ divert(-1) # the sendmail distribution. # # -VERSIONID(`$Sendmail: version.m4,v 8.39.4.29 2001/05/27 21:39:20 gshapiro Exp $') +VERSIONID(`$Sendmail: version.m4,v 8.39.4.33 2001/07/31 22:34:17 gshapiro Exp $') # divert(0) # Configuration version number -DZ8.11.4`'ifdef(`confCF_VERSION', `/confCF_VERSION') +DZ8.11.5`'ifdef(`confCF_VERSION', `/confCF_VERSION') diff --git a/gnu/usr.sbin/sendmail/doc/op/op.me b/gnu/usr.sbin/sendmail/doc/op/op.me index 446bcc86770..4b4faa88ef5 100644 --- a/gnu/usr.sbin/sendmail/doc/op/op.me +++ b/gnu/usr.sbin/sendmail/doc/op/op.me @@ -9,9 +9,43 @@ .\" the sendmail distribution. .\" .\" -.\" $Sendmail: op.me,v 8.317.4.64 2001/05/24 16:45:49 ca Exp $ +.\" $Sendmail: op.me,v 8.317.4.70 2001/07/24 04:08:25 ca Exp $ .\" .\" eqn op.me | pic | troff -me +.\" +.\" Define \(sc if not defined (for text output) +.\" +.if !c \(sc .char \(sc S +.\" +.\" Define \(dg as "*" for text output and create a new .DG macro +.\" which describes the symbol. +.\" +.ie !c \(dg \{\ +.char \(dg * +.de DG +an asterick +.. +.\} +.el \{\ +.de DG +a dagger +.. +.\} +.\" +.\" Define \(dd as "#" for text output and create a new .DD macro +.\" which describes the symbol. +.\" +.ie !c \(dd \{\ +.char \(dd # +.de DD +a pound sign +.. +.\} +.el \{\ +.de DD +a double dagger +.. +.\} .eh 'SMM:08-%''Sendmail Installation and Operation Guide' .oh 'Sendmail Installation and Operation Guide''SMM:08-%' .\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin @@ -53,7 +87,7 @@ eric@Sendmail.COM .de Ve Version \\$2 .. -.Ve $Revision: 1.6 $ +.Ve $Revision: 1.7 $ .rm Ve .sp For Sendmail Version 8.11 @@ -2189,8 +2223,12 @@ For compatibility with old configuration files, if no .i suboption is specified, -all the timeouts marked with a dagger (\(dg) are set to the indicated value. -All but those marked with a double dagger (\(dd) apply to client SMTP. +all the timeouts marked with +.DG +(\(dg) are set to the indicated value. +All but those marked with +.DD +(\(dd) apply to client SMTP. .pp Many of the RFC 1123 minimum values may well be too short. @@ -6444,7 +6482,15 @@ Defaults to 600000. .ip QueueLA=\fILA\fP [x] When the system load average exceeds -.i LA , +.i LA +and the +.b QueueFactor +(\c +.b q ) +option divided by the difference in the current load average and the +.b QueueLA +option plus one +is less than the priority of the message, just queue messages (i.e., don't try to send them). Defaults to 8 multiplied by @@ -6766,7 +6812,10 @@ This should really be set. .ip TempFileMode=\fImode\fP [F] -The file mode for queue files. +The file mode for queue files, files to which +.i sendmail +delivers directly, and files in the +.b HostStatusDirectory . It is interpreted in octal by default. Defaults to 0600. .ip Timeout.\fItype\fP=\|\fItimeout\fP @@ -8704,7 +8753,8 @@ has been compiled with support for STARTTLS. When acting as a server, .i sendmail requires X.509 certificates to support STARTTLS: -one as certificate for the server (ServerCertFile) +one as certificate for the server (ServerCertFile and corresponding +private ServerKeyFile) at least one root CA (CACERTFile), i.e., a certificate that is used to sign other certificates, and a path to a directory which contains other CAs (CACERTPath). @@ -8723,7 +8773,7 @@ C=FileName_of_CA_Certificate ln -s $C `openssl x509 -noout -hash < $C`.0 .)b An X.509 certificate is also required for authentication in client mode -(ClientCertFile), however, +(ClientCertFile and corresponding private ClientKeyFile), however, .i sendmail will always use STARTTLS when offered by a server. The client and server certificates can be identical. @@ -9425,7 +9475,7 @@ replace it with a blank sheet for double-sided output. .\".sz 10 .\"Eric Allman .\".sp -.\"Version $Revision: 1.6 $ +.\"Version $Revision: 1.7 $ .\".ce 0 .bp 3 .ce diff --git a/gnu/usr.sbin/sendmail/include/libmilter/milter.h b/gnu/usr.sbin/sendmail/include/libmilter/milter.h index cf8ab8ed948..6da5b9364ed 100644 --- a/gnu/usr.sbin/sendmail/include/libmilter/milter.h +++ b/gnu/usr.sbin/sendmail/include/libmilter/milter.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -7,7 +7,7 @@ * the sendmail distribution. * * - * $Sendmail: milter.h,v 8.24.16.9 2001/03/02 21:22:48 geir Exp $ + * $Sendmail: milter.h,v 8.24.16.10 2001/07/20 04:19:35 gshapiro Exp $ */ /* diff --git a/gnu/usr.sbin/sendmail/include/sendmail/sendmail.h b/gnu/usr.sbin/sendmail/include/sendmail/sendmail.h index a42953448a2..adea3597b1c 100644 --- a/gnu/usr.sbin/sendmail/include/sendmail/sendmail.h +++ b/gnu/usr.sbin/sendmail/include/sendmail/sendmail.h @@ -10,7 +10,7 @@ * the sendmail distribution. * * - * $Sendmail: sendmail.h,v 8.34.4.7 2000/10/09 16:15:26 gshapiro Exp $ + * $Sendmail: sendmail.h,v 8.34.4.8 2001/06/01 05:06:51 gshapiro Exp $ */ /* @@ -108,7 +108,6 @@ typedef unsigned int BITMAP256[BITMAPBYTES / sizeof (int)]; extern int safefile __P((char *, UID_T, GID_T, char *, long, int, struct stat *)); extern int safedirpath __P((char *, UID_T, GID_T, char *, long, int, int)); extern int safeopen __P((char *, int, int, long)); -extern FILE *safefopen __P((char *, int, int, long)); extern int dfopen __P((char *, int, int, long)); extern bool filechanged __P((char *, int, struct stat *)); diff --git a/gnu/usr.sbin/sendmail/libmilter/README b/gnu/usr.sbin/sendmail/libmilter/README index 2e7c69de064..aacaadfa5bf 100644 --- a/gnu/usr.sbin/sendmail/libmilter/README +++ b/gnu/usr.sbin/sendmail/libmilter/README @@ -59,14 +59,14 @@ Filters are specified with a key letter ``X'' (for ``eXternal''). For example: Xfilter1, S=local:/var/run/f1.sock, F=R - Xfilter2, S=inet6:999@localhost, F=T, T=S:1s;R:1s;E:5m + Xfilter2, S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m Xfilter3, S=inet:3333@localhost specifies three filters. Filters can be specified in your .mc file using the following: INPUT_MAIL_FILTER(`filter1', `S=local:/var/run/f1.sock, F=R') - INPUT_MAIL_FILTER(`filter2', `S=inet6:999@localhost, F=T, T=S:1s;R:1s;E:5m') + INPUT_MAIL_FILTER(`filter2', `S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m') INPUT_MAIL_FILTER(`filter3', `S=inet:3333@localhost') The first attaches to a Unix-domain socket in the /var/run directory; the @@ -80,19 +80,21 @@ If neither F=R nor F=T is specified, the message is passed through sendmail as if the filter were not present. Finally, you can override the default timeouts used by sendmail when -talking to the filters using the T= equate. There are three fields inside +talking to the filters using the T= equate. There are four fields inside of the T= equate: Letter Meaning - S Timeout for sending information from the MTA to a filter - R Timeout for reading reply from the filter - E Overall timeout between sending end-of-message to filter - and waiting for the final acknowledgment + C Timeout for connecting to a filter (if 0, use system timeout) + S Timeout for sending information from the MTA to a filter + R Timeout for reading reply from the filter + E Overall timeout between sending end-of-message to filter + and waiting for the final acknowledgment Note the separator between each is a ';' as a ',' already separates equates -and therefore can't separate timeouts. The default values (if not set in the config) are: +and therefore can't separate timeouts. The default values (if not set in +the config) are: -T=S:10s;R:10s;E:5m +T=C:0m;S:10s;R:10s;E:5m where 's' is seconds and 'm' is minutes. @@ -424,4 +426,4 @@ main(argc, argv) /* eof */ -$Revision: 1.6 $, Last updated $Date: 2001/05/29 01:31:12 $ +$Revision: 1.7 $, Last updated $Date: 2001/08/01 01:01:40 $ diff --git a/gnu/usr.sbin/sendmail/libmilter/libmilter.h b/gnu/usr.sbin/sendmail/libmilter/libmilter.h index 9109051adff..d826f972368 100644 --- a/gnu/usr.sbin/sendmail/libmilter/libmilter.h +++ b/gnu/usr.sbin/sendmail/libmilter/libmilter.h @@ -17,7 +17,7 @@ # define EXTERN # define INIT(x) = x # ifndef lint -static char MilterlId[] = "@(#)$Sendmail: libmilter.h,v 8.3.6.14 2001/05/27 14:31:12 ca Exp $"; +static char MilterlId[] = "@(#)$Sendmail: libmilter.h,v 8.3.6.16 2001/06/07 23:21:35 geir Exp $"; # endif /* ! lint */ #else /* _DEFINE */ # define EXTERN extern diff --git a/gnu/usr.sbin/sendmail/libmilter/sm_gethost.c b/gnu/usr.sbin/sendmail/libmilter/sm_gethost.c index 246b1947202..57b102f236d 100644 --- a/gnu/usr.sbin/sendmail/libmilter/sm_gethost.c +++ b/gnu/usr.sbin/sendmail/libmilter/sm_gethost.c @@ -9,7 +9,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: sm_gethost.c,v 8.7.8.10 2001/05/09 20:57:12 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: sm_gethost.c,v 8.7.8.11 2001/07/21 00:10:23 gshapiro Exp $"; #endif /* ! lint */ #if _FFR_MILTER @@ -31,12 +31,15 @@ static char id[] = "@(#)$Sendmail: sm_gethost.c,v 8.7.8.10 2001/05/09 20:57:12 g #if NETINET6 && NEEDSGETIPNODE -# ifndef AI_V4MAPPED -# define AI_V4MAPPED 0 /* dummy */ -# endif /* ! AI_V4MAPPED */ +# ifndef AI_ADDRCONFIG +# define AI_ADDRCONFIG 0 /* dummy */ +# endif /* ! AI_ADDRCONFIG */ # ifndef AI_ALL # define AI_ALL 0 /* dummy */ # endif /* ! AI_ALL */ +# ifndef AI_DEFAULT +# define AI_DEFAULT 0 /* dummy */ +# endif /* ! AI_DEFAULT */ static struct hostent * getipnodebyname(name, family, flags, err) @@ -97,11 +100,15 @@ mi_gethostbyname(name, family) # endif /* SOLARIS == 20300 || SOLARIS == 203 */ #else /* (SOLARIS > 10000 && SOLARIS < 20400) || (defined(SOLARIS) && SOLARIS < 204) || (defined(sony_news) && defined(__svr4)) */ # if NETINET6 + int flags = AI_DEFAULT|AI_ALL; int err; # endif /* NETINET6 */ # if NETINET6 - h = getipnodebyname(name, family, AI_V4MAPPED|AI_ALL, &err); +# if ADDRCONFIG_IS_BROKEN + flags &= ~AI_ADDRCONFIG; +# endif /* ADDRCONFIG_IS_BROKEN */ + h = getipnodebyname(name, family, flags, &err); SM_SET_H_ERRNO(err); # else /* NETINET6 */ h = gethostbyname(name); diff --git a/gnu/usr.sbin/sendmail/libsmutil/safefile.c b/gnu/usr.sbin/sendmail/libsmutil/safefile.c index 531a0eed610..de2b155653c 100644 --- a/gnu/usr.sbin/sendmail/libsmutil/safefile.c +++ b/gnu/usr.sbin/sendmail/libsmutil/safefile.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: safefile.c,v 8.81.4.7 2000/09/01 21:09:23 ca Exp $"; +static char id[] = "@(#)$Sendmail: safefile.c,v 8.81.4.10 2001/07/20 04:19:36 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -660,10 +660,6 @@ safedirpath(fn, uid, gid, user, flags, level, offset) ** Same as open. */ -#ifndef O_ACCMODE -# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) -#endif /* ! O_ACCMODE */ - int safeopen(fn, omode, cmode, sff) char *fn; @@ -735,81 +731,6 @@ safeopen(fn, omode, cmode, sff) return fd; } /* -** SAFEFOPEN -- do a file open with extra checking -** -** Parameters: -** fn -- the file name to open. -** omode -- the open-style mode flags. -** cmode -- the create-style mode flags. -** sff -- safefile flags. -** -** Returns: -** Same as fopen. -*/ - -FILE * -safefopen(fn, omode, cmode, sff) - char *fn; - int omode; - int cmode; - long sff; -{ - int fd; - int save_errno; - FILE *fp; - char *fmode; - - switch (omode & O_ACCMODE) - { - case O_RDONLY: - fmode = "r"; - break; - - case O_WRONLY: - if (bitset(O_APPEND, omode)) - fmode = "a"; - else - fmode = "w"; - break; - - case O_RDWR: - if (bitset(O_TRUNC, omode)) - fmode = "w+"; - else if (bitset(O_APPEND, omode)) - fmode = "a+"; - else - fmode = "r+"; - break; - - default: - syserr("554 5.3.5 safefopen: unknown omode %o", omode); - fmode = "x"; - } - fd = safeopen(fn, omode, cmode, sff); - if (fd < 0) - { - save_errno = errno; - if (tTd(44, 10)) - dprintf("safefopen: safeopen failed: %s\n", - errstring(errno)); - errno = save_errno; - return NULL; - } - fp = fdopen(fd, fmode); - if (fp != NULL) - return fp; - - save_errno = errno; - if (tTd(44, 10)) - { - dprintf("safefopen: fdopen(%s, %s) failed: omode=%x, sff=%lx, err=%s\n", - fn, fmode, omode, sff, errstring(errno)); - } - (void) close(fd); - errno = save_errno; - return NULL; -} -/* ** FILECHANGED -- check to see if file changed after being opened ** ** Parameters: diff --git a/gnu/usr.sbin/sendmail/libsmutil/snprintf.c b/gnu/usr.sbin/sendmail/libsmutil/snprintf.c index e62c4a83e25..0aaeb668ff2 100644 --- a/gnu/usr.sbin/sendmail/libsmutil/snprintf.c +++ b/gnu/usr.sbin/sendmail/libsmutil/snprintf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: snprintf.c,v 8.27.16.2 2000/09/17 17:04:24 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: snprintf.c,v 8.27.16.4 2001/07/20 04:19:37 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -86,10 +86,10 @@ sm_vsnprintf(str, count, fmt, args) sm_dopr( str, fmt, args ); if (count > 0) DoprEnd[0] = 0; - if (SnprfOverflow && tTd(57, 2)) + if (SnprfOverflow > 0 && tTd(57, 2)) dprintf("\nvsnprintf overflow, len = %ld, str = %s", (long) count, shortenstring(str, MAXSHORTSTR)); - return strlen(str); + return strlen(str) + SnprfOverflow; } /* diff --git a/gnu/usr.sbin/sendmail/mail.local/mail.local.c b/gnu/usr.sbin/sendmail/mail.local/mail.local.c index ddef32d18fd..5b346d565d3 100644 --- a/gnu/usr.sbin/sendmail/mail.local/mail.local.c +++ b/gnu/usr.sbin/sendmail/mail.local/mail.local.c @@ -19,7 +19,7 @@ static char copyright[] = #endif /* ! lint */ #ifndef lint -static char id[] = "@(#)$Sendmail: mail.local.c,v 8.143.4.57 2001/02/11 20:08:20 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: mail.local.c,v 8.143.4.58 2001/06/01 05:33:31 gshapiro Exp $"; #endif /* ! lint */ /* diff --git a/gnu/usr.sbin/sendmail/sendmail/README b/gnu/usr.sbin/sendmail/sendmail/README index 0e4a697988d..533826c02be 100644 --- a/gnu/usr.sbin/sendmail/sendmail/README +++ b/gnu/usr.sbin/sendmail/sendmail/README @@ -9,7 +9,7 @@ # the sendmail distribution. # # -# $Sendmail: README,v 8.263.2.1.2.35 2001/05/09 20:58:32 gshapiro Exp $ +# $Sendmail: README,v 8.263.2.1.2.37 2001/06/03 03:41:12 ca Exp $ # This directory contains the source files for sendmail(TM). @@ -82,7 +82,6 @@ Porting to a new Unix-based system should be a matter of creating an appropriate configuration file in the devtools/OS/ directory. - +----------------------+ | DATABASE DEFINITIONS | +----------------------+ @@ -178,6 +177,7 @@ addresses, so "^[0-9]+$" would match this. By using such a map in a check_* rule-set, you can block a certain range of addresses that would otherwise be considered valid. + +---------------+ | COMPILE FLAGS | +---------------+ @@ -463,6 +463,7 @@ NEEDSGETIPNODE Set this if your system supports IPv6 but doesn't include the getipnodeby{name,addr}() functions. Set automatically for Linux's glibc. + +-----------------------+ | COMPILE-TIME FEATURES | +-----------------------+ @@ -600,6 +601,13 @@ SFIO Uses sfio instead of stdio. sfio is available from AT&T OPERATING SYSTEM AND COMPILE QUIRKS. +Generic notice: If you enable a compile time option that needs +libraries or include files that don't come with sendmail or are +installed in a location that your C compiler doesn't use by default +you should set confINCDIRS and confLIBDIRS as explained in the +first section: BUILDING SENDMAIL. + + +---------------------+ | DNS/RESOLVER ISSUES | +---------------------+ @@ -639,6 +647,7 @@ ResolverOptions setting. However, instead, we recommend catching the problem and reporting it to the name server administrator so we can rid the world of broken name servers. + +----------------------------------------+ | STARTTLS COMPILATION AND CONFIGURATION | +----------------------------------------+ @@ -649,11 +658,16 @@ sendmail. See devtools/README how to set the correct compile time parameters; you should at least set the following variables: define(`confSTDIO_TYPE', `portable') -APPENDDEF(`confENVDEF', `-DSFIO') -APPENDDEF(`confLIBS', `-lsfio') +APPENDDEF(`conf_sendmail_ENVDEF', `-DSFIO') +APPENDDEF(`conf_sendmail_LIBS', `-lsfio') APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS') APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto') +If you have installed the OpenSSL libraries and include files in +a location that your C compiler doesn't use by default you should +set confINCDIRS and confLIBDIRS as explained in the first section: +BUILDING SENDMAIL. + Configuration information can be found in doc/op/op.me (required certificates) and cf/README (how to tell sendmail about certificates). @@ -667,10 +681,8 @@ there are any problems listed about permissions (unsafe files) or the validity of X.509 certificates. Note: sfio must be used in all libraries with which sendmail exchanges -file pointers. That is, libsmutil must be compiled with sfio, which -is accomplished by the above config parameters. Another example is -PH map support. This does not apply to the usual libraries, e.g., -OpenSSL, Berkeley DB, Cyrus SASL. +file pointers. An example is PH map support. This does not apply to the +usual libraries, e.g., OpenSSL, Berkeley DB, Cyrus SASL. Further information can be found via: http://www.sendmail.org/tips/ @@ -682,7 +694,17 @@ http://www.sendmail.org/tips/ Please read the docs accompanying the library (INSTALL and README). If you use Berkeley DB for Cyrus SASL then you must compile sendmail -with the same version of Berkeley DB. +with the same version of Berkeley DB. See devtools/README how to +set the correct compile time parameters; you should at least set +the following variables: + +APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL') +APPENDDEF(`conf_sendmail_LIBS', `-lsasl') + +If you have installed the Cyrus SASL library and include files in +a location that your C compiler doesn't use by default you should +set confINCDIRS and confLIBDIRS as explained in the first section: +BUILDING SENDMAIL. You have to select and install authentication mechanisms and tell sendmail where to find the sasl library and the include files (see @@ -1599,6 +1621,7 @@ Regular Expressions (MAP_REGEX) The manual pages have been written against the -man macros, and should format correctly with any reasonable *roff. + +-----------------+ | DEBUGGING HOOKS | +-----------------+ @@ -1706,4 +1729,4 @@ util.c Some general purpose routines used by sendmail. version.c The version number and information about this version of sendmail. -(Version $Revision: 1.6 $, last update $Date: 2001/05/29 01:31:13 $ ) +(Version $Revision: 1.7 $, last update $Date: 2001/08/01 01:01:41 $ ) diff --git a/gnu/usr.sbin/sendmail/sendmail/clock.c b/gnu/usr.sbin/sendmail/sendmail/clock.c index 2d0df71c3d1..55ea90675f6 100644 --- a/gnu/usr.sbin/sendmail/sendmail/clock.c +++ b/gnu/usr.sbin/sendmail/sendmail/clock.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: clock.c,v 8.52.18.14 2001/05/17 18:12:28 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: clock.c,v 8.52.18.17 2001/07/31 23:04:59 ca Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -21,8 +21,8 @@ static char id[] = "@(#)$Sendmail: clock.c,v 8.52.18.14 2001/05/17 18:12:28 gsha # define sigmask(s) (1 << ((s) - 1)) #endif /* ! sigmask */ -static SIGFUNC_DECL tick __P((int)); -static void endsleep __P((void)); +static SIGFUNC_DECL sm_tick __P((int)); +static void endsleep __P((void)); /* @@ -119,7 +119,7 @@ sigsafe_setevent(intvl, func, arg) ** This shouldn't happen. If called from setevent(), ** we have just malloced a FreeEventList entry. If ** called from a signal handler, it should have been - ** from an existing event which tick() just added to the + ** from an existing event which sm_tick() just added to the ** FreeEventList. */ @@ -143,7 +143,7 @@ sigsafe_setevent(intvl, func, arg) *evp = ev; LEAVE_CRITICAL(); - (void) setsignal(SIGALRM, tick); + (void) setsignal(SIGALRM, sm_tick); intvl = EventQueue->ev_time - now; (void) alarm((unsigned) intvl < 1 ? 1 : intvl); if (wasblocked == 0) @@ -247,7 +247,7 @@ clear_events() (void) releasesignal(SIGALRM); } /* -** TICK -- take a clock tick +** SM_TICK -- take a clock sm_tick ** ** Called by the alarm clock. This routine runs events as needed. ** Always called as a signal handler, so we assume that SIGALRM @@ -268,8 +268,8 @@ clear_events() */ /* ARGSUSED */ -SIGFUNC_DECL -tick(sig) +static SIGFUNC_DECL +sm_tick(sig) int sig; { register time_t now; @@ -279,7 +279,7 @@ tick(sig) (void) alarm(0); - FIX_SYSV_SIGNAL(sig, tick); + FIX_SYSV_SIGNAL(sig, sm_tick); errno = save_errno; CHECK_CRITICAL(sig); @@ -287,8 +287,8 @@ tick(sig) mypid = getpid(); while (PendingSignal != 0) { - int sigbit; - int sig; + int sigbit = 0; + int sig = 0; if (bitset(PEND_SIGHUP, PendingSignal)) { @@ -321,7 +321,7 @@ tick(sig) now = curtime(); if (tTd(5, 4)) - dprintf("tick: now=%ld\n", (long) now); + dprintf("sm_tick: now=%ld\n", (long) now); while ((ev = EventQueue) != NULL && (ev->ev_time <= now || ev->ev_pid != mypid)) @@ -336,7 +336,7 @@ tick(sig) EventQueue = EventQueue->ev_link; LEAVE_CRITICAL(); if (tTd(5, 6)) - dprintf("tick: ev=%lx, func=%lx, arg=%d, pid=%d\n", + dprintf("sm_tick: ev=%lx, func=%lx, arg=%d, pid=%d\n", (u_long) ev, (u_long) ev->ev_func, ev->ev_arg, ev->ev_pid); @@ -431,11 +431,32 @@ pend_signal(sig) if (sigbit != 0) PendingSignal |= sigbit; - (void) setsignal(SIGALRM, tick); + (void) setsignal(SIGALRM, sm_tick); (void) alarm(1); errno = save_errno; } /* +** SM_SIGNAL_NOOP -- A signal no-op function +** +** Parameters: +** sig -- signal received +** +** Returns: +** SIGFUNC_RETURN +*/ + +/* ARGSUSED */ +SIGFUNC_DECL +sm_signal_noop(sig) + int sig; +{ + int save_errno = errno; + + FIX_SYSV_SIGNAL(sig, sm_signal_noop); + errno = save_errno; + return SIGFUNC_RETURN; +} +/* ** SLEEP -- a version of sleep that works with this stuff ** ** Because sleep uses the alarm facility, I must reimplement diff --git a/gnu/usr.sbin/sendmail/sendmail/collect.c b/gnu/usr.sbin/sendmail/sendmail/collect.c index 2bb5f6fdacd..27c8c4636a8 100644 --- a/gnu/usr.sbin/sendmail/sendmail/collect.c +++ b/gnu/usr.sbin/sendmail/sendmail/collect.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: collect.c,v 8.136.4.21 2001/05/17 18:10:14 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: collect.c,v 8.136.4.22 2001/06/07 21:01:02 ca Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -352,7 +352,8 @@ bufferchar: { *bp++ = c; hdrslen++; - if (MaxHeadersLength > 0 && + if (!headeronly && + MaxHeadersLength > 0 && hdrslen > MaxHeadersLength) { sm_syslog(LOG_NOTICE, e->e_id, diff --git a/gnu/usr.sbin/sendmail/sendmail/conf.c b/gnu/usr.sbin/sendmail/sendmail/conf.c index 6c612af1b11..9369500d4f3 100644 --- a/gnu/usr.sbin/sendmail/sendmail/conf.c +++ b/gnu/usr.sbin/sendmail/sendmail/conf.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: conf.c,v 8.646.2.2.2.86 2001/05/17 18:18:40 ca Exp $"; +static char id[] = "@(#)$Sendmail: conf.c,v 8.646.2.2.2.87 2001/07/20 23:56:52 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -4542,9 +4542,7 @@ sm_gethostbyname(name, family) hbuf, family); # if NETINET6 - h = getipnodebyname(hbuf, family, - AI_V4MAPPED|AI_ALL, - &err); + h = getipnodebyname(hbuf, family, flags, &err); SM_SET_H_ERRNO(err); save_errno = errno; # else /* NETINET6 */ diff --git a/gnu/usr.sbin/sendmail/sendmail/conf.h b/gnu/usr.sbin/sendmail/sendmail/conf.h index 05271852421..f3432060bd8 100644 --- a/gnu/usr.sbin/sendmail/sendmail/conf.h +++ b/gnu/usr.sbin/sendmail/sendmail/conf.h @@ -10,7 +10,7 @@ * the sendmail distribution. * * - * $Sendmail: conf.h,v 8.496.4.43 2001/05/20 22:29:59 gshapiro Exp $ + * $Sendmail: conf.h,v 8.496.4.54 2001/07/31 22:30:24 gshapiro Exp $ */ /* @@ -488,6 +488,7 @@ typedef int pid_t; # endif /* ! __svr4__ */ # define GIDSET_T gid_t # define USE_SA_SIGACTION 1 /* use sa_sigaction field */ +# define HASSTRERROR 1 /* has strerror(3) */ # if _FFR_MILTER # define BROKEN_PTHREAD_SLEEP 1 /* sleep after pthread_create() fails */ # endif /* _FFR_MILTER */ @@ -867,9 +868,11 @@ typedef int pid_t; #ifdef __bsdi__ # include <paths.h> # define HASUNSETENV 1 /* has the unsetenv(3) call */ +# define HASSETREUID 0 /* BSD-OS has broken setreuid(2) emulation */ # define HASSETSID 1 /* has the setsid(2) POSIX syscall */ # define USESETEUID 1 /* has usable seteuid(2) call */ # define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFCHOWN 1 /* has fchown(2) syscall */ # define HASSETLOGIN 1 /* has setlogin(2) */ # define HASSNPRINTF 1 /* has snprintf(3) and vsnprintf(3) */ # define HASUNAME 1 /* has uname(2) syscall */ @@ -896,6 +899,9 @@ typedef int pid_t; # if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 /* on 3.x */ # define HASSETUSERCONTEXT 1 /* has setusercontext */ # endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 */ +# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 /* on 4.x */ +# define HASURANDOMDEV 1 /* has /dev/urandom(4) */ +# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 */ #endif /* __bsdi__ */ @@ -1718,6 +1724,7 @@ typedef int pid_t; # include <sys/mkdev.h> # define __svr4__ # define SYS5SIGNALS 1 +# define HASFCHOWN 1 /* has fchown(2) call */ # define HASSETSID 1 # define HASSNPRINTF 1 # define HASSETREUID 1 @@ -2517,6 +2524,10 @@ typedef struct msgb mblk_t; # define S_IWOTH 0002 #endif /* ! S_IWOTH */ +#ifndef O_ACCMODE +# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) +#endif /* ! O_ACCMODE */ + /* close-on-exec flag */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 diff --git a/gnu/usr.sbin/sendmail/sendmail/daemon.c b/gnu/usr.sbin/sendmail/sendmail/daemon.c index 223033168d2..db27326e0c2 100644 --- a/gnu/usr.sbin/sendmail/sendmail/daemon.c +++ b/gnu/usr.sbin/sendmail/sendmail/daemon.c @@ -16,9 +16,9 @@ #ifndef lint # ifdef DAEMON -static char id[] = "@(#)$Sendmail: daemon.c,v 8.401.4.61 2001/05/27 22:14:40 gshapiro Exp $ (with daemon mode)"; +static char id[] = "@(#)$Sendmail: daemon.c,v 8.401.4.68 2001/07/20 18:45:58 gshapiro Exp $ (with daemon mode)"; # else /* DAEMON */ -static char id[] = "@(#)$Sendmail: daemon.c,v 8.401.4.61 2001/05/27 22:14:40 gshapiro Exp $ (without daemon mode)"; +static char id[] = "@(#)$Sendmail: daemon.c,v 8.401.4.68 2001/07/20 18:45:58 gshapiro Exp $ (without daemon mode)"; # endif /* DAEMON */ #endif /* ! lint */ @@ -704,7 +704,6 @@ getrequests(e) (void) setsignal(SIGHUP, SIG_DFL); (void) setsignal(SIGTERM, intsig); - if (!control) { define(macid("{daemon_addr}", NULL), @@ -720,6 +719,7 @@ getrequests(e) { if (Daemons[idx].d_socket >= 0) (void) close(Daemons[idx].d_socket); + Daemons[idx].d_socket = -1; } clrcontrol(); @@ -2491,15 +2491,26 @@ sighup(sig) ** restarts the daemon or exits if restart fails. */ +/* Make a non-DFL/IGN signal a noop */ +#define SM_NOOP_SIGNAL(sig, old) \ +do \ +{ \ + (old) = setsignal((sig), sm_signal_noop); \ + if ((old) == SIG_IGN || (old) == SIG_DFL) \ + (void) setsignal((sig), (old)); \ +} while (0) + static void restart_daemon() { int i; int save_errno; char *reason; - sigfunc_t oalrm, ochld, ohup, oint, opipe, oterm, ousr1; + sigfunc_t ignore, oalrm, ousr1; extern int DtableSize; + /* clear the events to turn off SIGALRMs */ + clear_events(); allsignals(TRUE); reason = RestartRequest; @@ -2537,28 +2548,37 @@ restart_daemon() (void) fcntl(i, F_SETFD, j | FD_CLOEXEC); } - /* need to allow signals before execve() so make them harmless */ - oalrm = setsignal(SIGALRM, SIG_DFL); - ochld = setsignal(SIGCHLD, SIG_DFL); - ohup = setsignal(SIGHUP, SIG_DFL); - oint = setsignal(SIGINT, SIG_DFL); - opipe = setsignal(SIGPIPE, SIG_DFL); - oterm = setsignal(SIGTERM, SIG_DFL); - ousr1 = setsignal(SIGUSR1, SIG_DFL); + /* + ** Need to allow signals before execve() to make them "harmless". + ** However, the default action can be "terminate", so it isn't + ** really harmless. Setting signals to IGN will cause them to be + ** ignored in the new process to, so that isn't a good alternative. + */ + + SM_NOOP_SIGNAL(SIGALRM, oalrm); + SM_NOOP_SIGNAL(SIGCHLD, ignore); + SM_NOOP_SIGNAL(SIGHUP, ignore); + SM_NOOP_SIGNAL(SIGINT, ignore); + SM_NOOP_SIGNAL(SIGPIPE, ignore); + SM_NOOP_SIGNAL(SIGTERM, ignore); +#ifdef SIGUSR1 + SM_NOOP_SIGNAL(SIGUSR1, ousr1); +#endif /* SIGUSR1 */ allsignals(FALSE); (void) execve(SaveArgv[0], (ARGV_T) SaveArgv, (ARGV_T) ExternalEnviron); save_errno = errno; - /* restore signals */ + /* block signals again and restore needed signals */ allsignals(TRUE); + + /* For finis() events */ (void) setsignal(SIGALRM, oalrm); - (void) setsignal(SIGCHLD, ochld); - (void) setsignal(SIGHUP, ohup); - (void) setsignal(SIGINT, oint); - (void) setsignal(SIGPIPE, opipe); - (void) setsignal(SIGTERM, oterm); + +#ifdef SIGUSR1 + /* For debugging finis() */ (void) setsignal(SIGUSR1, ousr1); +#endif /* SIGUSR1 */ errno = save_errno; if (LogLevel > 0) @@ -2590,6 +2610,19 @@ myhostname(hostbuf, size) if (gethostname(hostbuf, size) < 0 || hostbuf[0] == '\0') (void) strlcpy(hostbuf, "localhost", size); hp = sm_gethostbyname(hostbuf, InetMode); +# if NETINET && NETINET6 + if (hp == NULL && InetMode == AF_INET6) + { + /* + ** It's possible that this IPv6 enabled machine doesn't + ** actually have any IPv6 interfaces and, therefore, no + ** IPv6 addresses. Fall back to AF_INET. + */ + + hp = sm_gethostbyname(hostbuf, AF_INET); + } +# endif /* NETINET && NETINET6 */ + if (hp == NULL) return NULL; if (strchr(hp->h_name, '.') != NULL || strchr(hostbuf, '.') == NULL) @@ -2803,10 +2836,30 @@ getauthinfo(fd, may_be_forged) } else { - /* try to match the reverse against the forward lookup */ - hp = sm_gethostbyname(RealHostName, - RealHostAddr.sa.sa_family); + int family; + + family = RealHostAddr.sa.sa_family; +# if NETINET6 && NEEDSGETIPNODE + /* + ** If RealHostAddr is an IPv6 connection with an + ** IPv4-mapped address, we need RealHostName's IPv4 + ** address(es) for addrcmp() to compare against + ** RealHostAddr. + ** + ** Actually, we only need to do this for systems + ** which NEEDSGETIPNODE since the real getipnodebyname() + ** already does V4MAPPED address via the AI_V4MAPPEDCFG + ** flag. A better fix to this problem is to add this + ** functionality to our stub getipnodebyname(). + */ + if (family == AF_INET6 && + IN6_IS_ADDR_V4MAPPED(&RealHostAddr.sin6.sin6_addr)) + family = AF_INET; +# endif /* NETINET6 && NEEDSGETIPNODE */ + + /* try to match the reverse against the forward lookup */ + hp = sm_gethostbyname(RealHostName, family); if (hp == NULL) *may_be_forged = TRUE; else diff --git a/gnu/usr.sbin/sendmail/sendmail/deliver.c b/gnu/usr.sbin/sendmail/sendmail/deliver.c index 8bed8663cc4..02f6ad747d5 100644 --- a/gnu/usr.sbin/sendmail/sendmail/deliver.c +++ b/gnu/usr.sbin/sendmail/sendmail/deliver.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: deliver.c,v 8.600.2.1.2.81 2001/05/23 02:15:42 ca Exp $"; +static char id[] = "@(#)$Sendmail: deliver.c,v 8.600.2.1.2.86 2001/07/20 21:52:55 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -1927,6 +1927,9 @@ tryhost: struct stat stb; extern int DtableSize; + /* clear the events to turn off SIGALRMs */ + clear_events(); + /* Reset global flags */ RestartRequest = NULL; ShutdownRequest = NULL; @@ -1936,9 +1939,14 @@ tryhost: (void) close(fileno(e->e_lockfp)); /* child -- set up input & exec mailer */ - (void) setsignal(SIGINT, SIG_IGN); + (void) setsignal(SIGALRM, sm_signal_noop); + (void) setsignal(SIGCHLD, SIG_DFL); (void) setsignal(SIGHUP, SIG_IGN); + (void) setsignal(SIGINT, SIG_IGN); (void) setsignal(SIGTERM, SIG_DFL); +# ifdef SIGUSR1 + (void) setsignal(SIGUSR1, sm_signal_noop); +# endif /* SIGUSR1 */ if (m != FileMailer || stat(tochain->q_user, &stb) < 0) stb.st_mode = 0; @@ -2071,7 +2079,19 @@ tryhost: /* reset user id */ endpwent(); if (bitnset(M_SPECIFIC_UID, m->m_flags)) + { new_euid = m->m_uid; + + /* + ** Undo the effects of the uid change in main + ** for signal handling. The real uid may + ** be used by mailer in adding a "From " + ** line. + */ + + if (RealUid != 0 && RealUid != getuid()) + new_ruid = RealUid; + } else if (bitset(S_ISUID, stb.st_mode)) new_ruid = stb.st_uid; else if (ctladdr != NULL && ctladdr->q_uid != 0) @@ -2091,6 +2111,22 @@ tryhost: vendor_set_uid(new_euid); # if MAILER_SETUID_METHOD == USE_SETEUID +# if HASSETREUID + /* + ** Undo the effects of the uid change in main + ** for signal handling. The real uid may + ** be used by mailer in adding a "From " + ** line. + */ + + if (new_ruid != NO_UID && + setreuid(RealUid, geteuid()) < 0) + { + syserr("openmailer: setreuid(%d, %d) failed", + (int) new_ruid, (int) geteuid()); + exit(EX_OSERR); + } +# endif /* HASSETREUID */ if (seteuid(new_euid) < 0 && suidwarn) { syserr("openmailer: seteuid(%ld) failed", @@ -3045,7 +3081,7 @@ markfailure(e, q, mci, rcode, ovr) ** and if it represents an error, we print it. ** ** Parameters: -** pid -- pid of mailer. +** mci -- the mailer connection info. ** e -- the current envelope. ** pv -- the parameter vector that invoked the mailer ** (for error messages). @@ -4925,11 +4961,13 @@ hostsignature(m, host) nmx = getmxrr(hp, mxhosts, mxprefs, TRUE, &rcode); if (nmx <= 0) { + int save_errno; register MCI *mci; /* update the connection info for this host */ + save_errno = errno; mci = mci_get(hp, m); - mci->mci_errno = errno; + mci->mci_errno = save_errno; mci->mci_herrno = h_errno; mci->mci_lastuse = now; if (rcode == EX_NOHOST) diff --git a/gnu/usr.sbin/sendmail/sendmail/err.c b/gnu/usr.sbin/sendmail/sendmail/err.c index 250cf27cd18..05d17b79616 100644 --- a/gnu/usr.sbin/sendmail/sendmail/err.c +++ b/gnu/usr.sbin/sendmail/sendmail/err.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: err.c,v 8.120.4.2 2001/05/03 17:24:06 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: err.c,v 8.120.4.3 2001/05/30 00:22:26 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -157,8 +157,6 @@ syserr(fmt, va_alist) #ifdef ESTALE case ESTALE: #endif /* ESTALE */ - - printopenfds(TRUE); mci_dump_all(TRUE); break; diff --git a/gnu/usr.sbin/sendmail/sendmail/main.c b/gnu/usr.sbin/sendmail/sendmail/main.c index db67e2066e4..49d2ae7420f 100644 --- a/gnu/usr.sbin/sendmail/sendmail/main.c +++ b/gnu/usr.sbin/sendmail/sendmail/main.c @@ -21,7 +21,7 @@ static char copyright[] = #endif /* ! lint */ #ifndef lint -static char id[] = "@(#)$Sendmail: main.c,v 8.485.4.60 2001/05/27 22:00:26 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: main.c,v 8.485.4.65 2001/07/20 00:53:00 gshapiro Exp $"; #endif /* ! lint */ #define _DEFINE @@ -35,7 +35,9 @@ static char id[] = "@(#)$Sendmail: main.c,v 8.485.4.60 2001/05/27 22:00:26 gshap static SIGFUNC_DECL intindebug __P((int)); static SIGFUNC_DECL quiesce __P((int)); +#ifdef SIGUSR1 static SIGFUNC_DECL sigusr1 __P((int)); +# endif /* SIGUSR1 */ static SIGFUNC_DECL term_daemon __P((int)); static void dump_class __P((STAB *, int)); static void obsolete __P((char **)); @@ -2156,7 +2158,7 @@ finis(drop, exitstat) { /* Still want to process new timeouts added below */ clear_events(); - releasesignal(SIGALRM); + (void) releasesignal(SIGALRM); if (tTd(2, 1)) { @@ -2272,7 +2274,8 @@ shutdown_daemon() PendingSignal = 0; if (LogLevel > 79) - sm_syslog(LOG_DEBUG, CurEnv->e_id, "interrupt"); + sm_syslog(LOG_DEBUG, CurEnv->e_id, "interrupt (%s)", + reason == NULL ? "implicit call" : reason); FileName = NULL; closecontrolsocket(TRUE); @@ -2347,7 +2350,7 @@ intsig(sig) drop = TRUE; } - else + else if (OpMode != MD_TEST) unlockqueue(CurEnv); finis(drop, EX_OK); @@ -2758,6 +2761,7 @@ dumpstate(when) } sm_syslog(LOG_DEBUG, CurEnv->e_id, "--- end of state dump ---"); } +#ifdef SIGUSR1 /* ** SIGUSR1 -- Signal a request to dump state. ** @@ -2788,6 +2792,7 @@ sigusr1(sig) errno = save_errno; return SIGFUNC_RETURN; } +# endif /* SIGUSR1 */ /* ** DROP_PRIVILEGES -- reduce privileges to those of the RunAsUser option ** diff --git a/gnu/usr.sbin/sendmail/sendmail/map.c b/gnu/usr.sbin/sendmail/sendmail/map.c index 2e1e924d6f0..bef91900a7d 100644 --- a/gnu/usr.sbin/sendmail/sendmail/map.c +++ b/gnu/usr.sbin/sendmail/sendmail/map.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: map.c,v 8.414.4.53 2001/05/04 01:29:00 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: map.c,v 8.414.4.54 2001/06/01 08:23:24 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -126,9 +126,6 @@ static bool text_getcanonname __P((char *, int, int *)); # define LOCK_ON_OPEN 0 /* no such luck -- bend over backwards */ #endif /* O_EXLOCK && HASFLOCK && !BOGUS_O_EXCL */ -#ifndef O_ACCMODE -# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) -#endif /* ! O_ACCMODE */ /* ** MAP_PARSEARGS -- parse config line arguments for database lookup ** diff --git a/gnu/usr.sbin/sendmail/sendmail/milter.c b/gnu/usr.sbin/sendmail/sendmail/milter.c index 8e185691dfc..85ab27fc52a 100644 --- a/gnu/usr.sbin/sendmail/sendmail/milter.c +++ b/gnu/usr.sbin/sendmail/sendmail/milter.c @@ -9,7 +9,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: milter.c,v 8.50.4.46 2001/05/11 18:11:36 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: milter.c,v 8.50.4.51 2001/07/20 00:53:01 gshapiro Exp $"; #endif /* ! lint */ #if _FFR_MILTER @@ -26,6 +26,7 @@ static char id[] = "@(#)$Sendmail: milter.c,v 8.50.4.46 2001/05/11 18:11:36 gsha # define SM_FD_ISSET FD_ISSET # define SM_FD_SETSIZE FD_SETSIZE +static void milter_connect_timeout __P((void)); static void milter_error __P((struct milter *)); static int milter_open __P((struct milter *, bool, ENVELOPE *)); static void milter_parse_timeouts __P((char *, struct milter *)); @@ -511,6 +512,8 @@ milter_write(m, cmd, buf, len, to, e) ** -1 otherwise. */ +static jmp_buf MilterConnectTimeout; + static int milter_open(m, parseonly, e) struct milter *m; @@ -950,8 +953,23 @@ milter_open(m, parseonly, e) return -1; } - if (connect(sock, (struct sockaddr *) &addr, addrlen) >= 0) - break; + if (setjmp(MilterConnectTimeout) == 0) + { + EVENT *ev = NULL; + int i; + + if (m->mf_timeout[SMFTO_CONNECT] > 0) + ev = setevent(m->mf_timeout[SMFTO_CONNECT], + milter_connect_timeout, 0); + + i = connect(sock, (struct sockaddr *) &addr, addrlen); + save_errno = errno; + if (ev != NULL) + clrevent(ev); + errno = save_errno; + if (i >= 0) + break; + } /* couldn't connect.... try next address */ save_errno = errno; @@ -1006,6 +1024,8 @@ milter_open(m, parseonly, e) } continue; } + p = CurHostName; + CurHostName = at; if (tTd(64, 5)) dprintf("X%s: error connecting to filter: %s\n", m->mf_name, errstring(save_errno)); @@ -1013,6 +1033,7 @@ milter_open(m, parseonly, e) sm_syslog(LOG_ERR, e->e_id, "X%s: error connecting to filter: %s", m->mf_name, errstring(save_errno)); + CurHostName = p; milter_error(m); # if _FFR_FREEHOSTENT && NETINET6 if (hp != NULL) @@ -1030,6 +1051,19 @@ milter_open(m, parseonly, e) # endif /* _FFR_FREEHOSTENT && NETINET6 */ return sock; } + +static void +milter_connect_timeout() +{ + /* + ** NOTE: THIS CAN BE CALLED FROM A SIGNAL HANDLER. DO NOT ADD + ** ANYTHING TO THIS ROUTINE UNLESS YOU KNOW WHAT YOU ARE + ** DOING. + */ + + errno = ETIMEDOUT; + longjmp(MilterConnectTimeout, 1); +} /* ** MILTER_SETUP -- setup structure for a mail filter ** @@ -1066,6 +1100,7 @@ milter_setup(line) m->mf_name = newstr(line); m->mf_state = SMFS_READY; m->mf_sock = -1; + m->mf_timeout[SMFTO_CONNECT] = (time_t) 0; m->mf_timeout[SMFTO_WRITE] = (time_t) 10; m->mf_timeout[SMFTO_READ] = (time_t) 10; m->mf_timeout[SMFTO_EOM] = (time_t) 300; @@ -1097,6 +1132,10 @@ milter_setup(line) /* install the field into the filter struct */ switch (fcode) { + case 'C': + m->mf_timeout[SMFTO_CONNECT] = convtime(p, 's'); + break; + case 'S': /* socket */ if (p == NULL) m->mf_conn = NULL; @@ -2851,7 +2890,10 @@ milter_connect(hostname, addr, e, state) # if NETINET6 case AF_INET6: - family = SMFIA_INET6; + if (IN6_IS_ADDR_V4MAPPED(&addr.sin6.sin6_addr)) + family = SMFIA_INET; + else + family = SMFIA_INET6; port = htons(addr.sin6.sin6_port); sockinfo = anynet_ntop(&addr.sin6.sin6_addr, buf6, sizeof buf6); diff --git a/gnu/usr.sbin/sendmail/sendmail/queue.c b/gnu/usr.sbin/sendmail/sendmail/queue.c index 538429bd455..23ec59c3bac 100644 --- a/gnu/usr.sbin/sendmail/sendmail/queue.c +++ b/gnu/usr.sbin/sendmail/sendmail/queue.c @@ -16,9 +16,9 @@ #ifndef lint # if QUEUE -static char id[] = "@(#)$Sendmail: queue.c,v 8.343.4.55 2001/05/03 23:37:11 gshapiro Exp $ (with queueing)"; +static char id[] = "@(#)$Sendmail: queue.c,v 8.343.4.62 2001/07/20 00:53:01 gshapiro Exp $ (with queueing)"; # else /* QUEUE */ -static char id[] = "@(#)$Sendmail: queue.c,v 8.343.4.55 2001/05/03 23:37:11 gshapiro Exp $ (without queueing)"; +static char id[] = "@(#)$Sendmail: queue.c,v 8.343.4.62 2001/07/20 00:53:01 gshapiro Exp $ (without queueing)"; # endif /* QUEUE */ #endif /* ! lint */ @@ -68,6 +68,35 @@ static int workcmpf2(); static int workcmpf3(); static int workcmpf4(); +/* +** Current qf file field assignments: +** +** A AUTH= parameter +** B body type +** C controlling user +** D data file name +** E error recipient +** F flag bits +** G queue delay algorithm +** H header +** I data file's inode number +** K time of last delivery attempt +** L Solaris Content-Length: header (obsolete) +** M message (obsolete) +** N number of delivery attempts +** P message priority +** Q original recipient (ORCPT=) +** R recipient +** S sender +** T init time +** V queue file version +** X character set (_FFR_SAVE_CHARSET) +** Y current delay +** Z original envelope id from ESMTP +** $ define macro +** . terminate file +*/ + /* ** QUEUEUP -- queue a message up for future transmission. ** @@ -374,6 +403,7 @@ queueup(e, announce) if (q->q_orcpt != NULL) fprintf(tfp, "Q%s\n", denlstring(q->q_orcpt, TRUE, FALSE)); + (void) putc('R', tfp); if (bitset(QPRIMARY, q->q_flags)) (void) putc('P', tfp); @@ -2151,15 +2181,15 @@ readqf(e) /* regenerated below */ break; - case 'K': /* time of last delivery attempt */ + case 'K': /* time of last delivery attempt */ e->e_dtime = atol(&buf[1]); break; # if _FFR_QUEUEDELAY - case 'G': /* queue delay algorithm */ + case 'G': /* queue delay algorithm */ e->e_queuealg = atoi(&buf[1]); break; - case 'Y': /* current delay */ + case 'Y': /* current delay */ e->e_queuedelay = (time_t) atol(&buf[1]); break; # endif /* _FFR_QUEUEDELAY */ @@ -2933,7 +2963,15 @@ setctluser(user, qfver) if ((p = strtok(NULL, ":")) != NULL) a->q_gid = atoi(p); if ((p = strtok(NULL, ":")) != NULL) + { + char *o; + a->q_flags |= QGOODUID; + + /* if there is another ':': restore it */ + if ((o = strtok(NULL, ":")) != NULL && o > p) + o[-1] = ':'; + } } else if ((pw = sm_getpwnam(user)) != NULL) { @@ -3086,7 +3124,7 @@ setnewqueue(e) return; } - if (NumQueues == 1) + if (NumQueues <= 1) idx = 0; else { diff --git a/gnu/usr.sbin/sendmail/sendmail/readcf.c b/gnu/usr.sbin/sendmail/sendmail/readcf.c index 531887715e2..c6b7327e6f0 100644 --- a/gnu/usr.sbin/sendmail/sendmail/readcf.c +++ b/gnu/usr.sbin/sendmail/sendmail/readcf.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: readcf.c,v 8.382.4.40 2001/05/03 17:24:13 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: readcf.c,v 8.382.4.42 2001/07/31 22:30:24 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -3380,6 +3380,7 @@ settimeout(name, val, sticky) { register struct timeoutinfo *to; int i; + int addopts; time_t toval; if (tTd(37, 2)) @@ -3413,6 +3414,7 @@ settimeout(name, val, sticky) dprintf("\n"); toval = convtime(val, 'm'); + addopts = 0; switch (to->to_code) { @@ -3481,6 +3483,7 @@ settimeout(name, val, sticky) TimeOuts.to_q_warning[TOC_NORMAL] = toval; TimeOuts.to_q_warning[TOC_URGENT] = toval; TimeOuts.to_q_warning[TOC_NONURGENT] = toval; + addopts = 2; break; case TO_QUEUEWARN_NORMAL: @@ -3503,6 +3506,7 @@ settimeout(name, val, sticky) TimeOuts.to_q_return[TOC_NORMAL] = toval; TimeOuts.to_q_return[TOC_URGENT] = toval; TimeOuts.to_q_return[TOC_NONURGENT] = toval; + addopts = 2; break; case TO_QUEUERETURN_NORMAL: @@ -3530,6 +3534,7 @@ settimeout(name, val, sticky) TimeOuts.res_retrans[RES_TO_DEFAULT] = toval; TimeOuts.res_retrans[RES_TO_FIRST] = toval; TimeOuts.res_retrans[RES_TO_NORMAL] = toval; + addopts = 2; break; case TO_RESOLVER_RETRY: @@ -3537,6 +3542,7 @@ settimeout(name, val, sticky) TimeOuts.res_retry[RES_TO_DEFAULT] = i; TimeOuts.res_retry[RES_TO_FIRST] = i; TimeOuts.res_retry[RES_TO_NORMAL] = i; + addopts = 2; break; case TO_RESOLVER_RETRANS_NORMAL: @@ -3565,7 +3571,10 @@ settimeout(name, val, sticky) } if (sticky) - setbitn(to->to_code, StickyTimeoutOpt); + { + for (i = 0; i <= addopts; i++) + setbitn(to->to_code + i, StickyTimeoutOpt); + } } /* ** INITTIMEOUTS -- parse and set timeout values diff --git a/gnu/usr.sbin/sendmail/sendmail/sendmail.h b/gnu/usr.sbin/sendmail/sendmail/sendmail.h index 4d056313a83..92e2c361322 100644 --- a/gnu/usr.sbin/sendmail/sendmail/sendmail.h +++ b/gnu/usr.sbin/sendmail/sendmail/sendmail.h @@ -20,7 +20,7 @@ #ifdef _DEFINE # define EXTERN # ifndef lint -static char SmailId[] = "@(#)$Sendmail: sendmail.h,v 8.517.4.64 2001/05/23 17:49:13 ca Exp $"; +static char SmailId[] = "@(#)$Sendmail: sendmail.h,v 8.517.4.69 2001/07/20 18:46:01 gshapiro Exp $"; # endif /* ! lint */ #else /* _DEFINE */ # define EXTERN extern @@ -1360,8 +1360,9 @@ extern char *validate_connection __P((SOCKADDR *, char *, ENVELOPE *)); #define SMFTO_WRITE 0 /* Timeout for sending information */ #define SMFTO_READ 1 /* Timeout waiting for a response */ #define SMFTO_EOM 2 /* Timeout for ACK/NAK to EOM */ +#define SMFTO_CONNECT 3 /* Timeout for connect() */ -#define SMFTO_NUM_TO 3 /* Total number of timeouts */ +#define SMFTO_NUM_TO 4 /* Total number of timeouts */ struct milter { @@ -1651,13 +1652,14 @@ do \ } while (0) #define CHECK_CRITICAL(sig) \ +do \ { \ if (InCriticalSection > 0 && (sig) != 0) \ { \ pend_signal((sig)); \ return SIGFUNC_RETURN; \ } \ -} +} while (0) /* reset signal in case System V semantics */ #ifdef SYS5SIGNALS @@ -2116,6 +2118,7 @@ extern SIGFUNC_DECL reapchild __P((int)); extern int releasesignal __P((int)); extern void resetlimits __P((void)); extern bool rfc822_string __P((char *)); +extern FILE *safefopen __P((char *, int, int, long)); extern void savemail __P((ENVELOPE *, bool)); extern void seed_random __P((void)); extern void sendtoargv __P((char **, ENVELOPE *)); @@ -2141,6 +2144,7 @@ extern int sm_getla __P((ENVELOPE *)); extern struct passwd *sm_getpwnam __P((char *)); extern struct passwd *sm_getpwuid __P((UID_T)); extern void sm_setproctitle __P((bool, ENVELOPE *, const char *, ...)); +extern SIGFUNC_DECL sm_signal_noop __P((int)); extern int sm_strcasecmp __P((const char *, const char *)); extern void stop_sendmail __P((void)); extern bool strcontainedin __P((char *, char *)); diff --git a/gnu/usr.sbin/sendmail/sendmail/sfsasl.c b/gnu/usr.sbin/sendmail/sendmail/sfsasl.c index 214d5536cee..de922e34b06 100644 --- a/gnu/usr.sbin/sendmail/sendmail/sfsasl.c +++ b/gnu/usr.sbin/sendmail/sendmail/sfsasl.c @@ -9,7 +9,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: sfsasl.c,v 8.17.4.14 2001/05/03 17:24:16 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: sfsasl.c,v 8.17.4.15 2001/07/11 17:37:07 gshapiro Exp $"; #endif /* ! lint */ #if SFIO diff --git a/gnu/usr.sbin/sendmail/sendmail/srvrsmtp.c b/gnu/usr.sbin/sendmail/sendmail/srvrsmtp.c index c4466767516..6f475909ea3 100644 --- a/gnu/usr.sbin/sendmail/sendmail/srvrsmtp.c +++ b/gnu/usr.sbin/sendmail/sendmail/srvrsmtp.c @@ -16,9 +16,9 @@ #ifndef lint # if SMTP -static char id[] = "@(#)$Sendmail: srvrsmtp.c,v 8.471.2.2.2.77 2001/05/27 22:20:30 gshapiro Exp $ (with SMTP)"; +static char id[] = "@(#)$Sendmail: srvrsmtp.c,v 8.471.2.2.2.78 2001/06/26 18:52:21 gshapiro Exp $ (with SMTP)"; # else /* SMTP */ -static char id[] = "@(#)$Sendmail: srvrsmtp.c,v 8.471.2.2.2.77 2001/05/27 22:20:30 gshapiro Exp $ (without SMTP)"; +static char id[] = "@(#)$Sendmail: srvrsmtp.c,v 8.471.2.2.2.78 2001/06/26 18:52:21 gshapiro Exp $ (without SMTP)"; # endif /* SMTP */ #endif /* ! lint */ @@ -768,7 +768,7 @@ smtp(nullserver, d_flags, e) if (bitnset(D_ETRNONLY, d_flags) && nullserver == NULL) break; - continue; + /* FALLTHROUGH */ default: if (++badcommands > MAXBADCOMMANDS) diff --git a/gnu/usr.sbin/sendmail/sendmail/usersmtp.c b/gnu/usr.sbin/sendmail/sendmail/usersmtp.c index 1dd6ea9bee3..f79e324724d 100644 --- a/gnu/usr.sbin/sendmail/sendmail/usersmtp.c +++ b/gnu/usr.sbin/sendmail/sendmail/usersmtp.c @@ -15,9 +15,9 @@ #ifndef lint # if SMTP -static char id[] = "@(#)$Sendmail: usersmtp.c,v 8.245.4.33 2001/05/23 18:53:09 ca Exp $ (with SMTP)"; +static char id[] = "@(#)$Sendmail: usersmtp.c,v 8.245.4.34 2001/06/26 21:55:23 gshapiro Exp $ (with SMTP)"; # else /* SMTP */ -static char id[] = "@(#)$Sendmail: usersmtp.c,v 8.245.4.33 2001/05/23 18:53:09 ca Exp $ (without SMTP)"; +static char id[] = "@(#)$Sendmail: usersmtp.c,v 8.245.4.34 2001/06/26 21:55:23 gshapiro Exp $ (without SMTP)"; # endif /* SMTP */ #endif /* ! lint */ @@ -1873,6 +1873,9 @@ smtpdata(m, mci, e) if (Verbose) nmessage(">>> ."); + sm_syslog(LOG_CRIT, e->e_id, + "%.100s: SMTP DATA-1 protocol error: remote server returned response before final dot", + CurHostName); mci->mci_errno = EIO; mci->mci_state = MCIS_ERROR; mci_setstat(mci, EX_PROTOCOL, "5.5.0", NULL); diff --git a/gnu/usr.sbin/sendmail/sendmail/util.c b/gnu/usr.sbin/sendmail/sendmail/util.c index 895d3f87d96..fa4814961a2 100644 --- a/gnu/usr.sbin/sendmail/sendmail/util.c +++ b/gnu/usr.sbin/sendmail/sendmail/util.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: util.c,v 8.225.2.1.2.23 2001/05/17 18:10:18 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: util.c,v 8.225.2.1.2.26 2001/06/01 08:23:25 gshapiro Exp $"; #endif /* ! lint */ #include <sendmail.h> @@ -2529,6 +2529,81 @@ proc_list_display(out) } } /* +** SAFEFOPEN -- do a file open with extra checking +** +** Parameters: +** fn -- the file name to open. +** omode -- the open-style mode flags. +** cmode -- the create-style mode flags. +** sff -- safefile flags. +** +** Returns: +** Same as fopen. +*/ + +FILE * +safefopen(fn, omode, cmode, sff) + char *fn; + int omode; + int cmode; + long sff; +{ + int fd; + int save_errno; + FILE *fp; + char *fmode; + + switch (omode & O_ACCMODE) + { + case O_RDONLY: + fmode = "r"; + break; + + case O_WRONLY: + if (bitset(O_APPEND, omode)) + fmode = "a"; + else + fmode = "w"; + break; + + case O_RDWR: + if (bitset(O_TRUNC, omode)) + fmode = "w+"; + else if (bitset(O_APPEND, omode)) + fmode = "a+"; + else + fmode = "r+"; + break; + + default: + syserr("554 5.3.5 safefopen: unknown omode %o", omode); + fmode = "x"; + } + fd = safeopen(fn, omode, cmode, sff); + if (fd < 0) + { + save_errno = errno; + if (tTd(44, 10)) + dprintf("safefopen: safeopen failed: %s\n", + errstring(errno)); + errno = save_errno; + return NULL; + } + fp = fdopen(fd, fmode); + if (fp != NULL) + return fp; + + save_errno = errno; + if (tTd(44, 10)) + { + dprintf("safefopen: fdopen(%s, %s) failed: omode=%x, sff=%lx, err=%s\n", + fn, fmode, omode, sff, errstring(errno)); + } + (void) close(fd); + errno = save_errno; + return NULL; +} +/* ** SM_STRCASECMP -- 8-bit clean version of strcasecmp ** ** Thank you, vendors, for making this all necessary. diff --git a/gnu/usr.sbin/sendmail/sendmail/version.c b/gnu/usr.sbin/sendmail/sendmail/version.c index a61e0205d91..bda076b275e 100644 --- a/gnu/usr.sbin/sendmail/sendmail/version.c +++ b/gnu/usr.sbin/sendmail/sendmail/version.c @@ -12,7 +12,7 @@ */ #ifndef lint -static char id[] = "@(#)$Sendmail: version.c,v 8.43.4.33 2001/05/27 21:39:21 gshapiro Exp $"; +static char id[] = "@(#)$Sendmail: version.c,v 8.43.4.37 2001/07/31 22:34:20 gshapiro Exp $"; #endif /* ! lint */ -char Version[] = "8.11.4"; +char Version[] = "8.11.5"; diff --git a/gnu/usr.sbin/sendmail/vacation/vacation.1 b/gnu/usr.sbin/sendmail/vacation/vacation.1 index 15566af8338..17b5c9d4855 100644 --- a/gnu/usr.sbin/sendmail/vacation/vacation.1 +++ b/gnu/usr.sbin/sendmail/vacation/vacation.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 1999-2000 Sendmail, Inc. and its suppliers. +.\" Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers. .\" All rights reserved. .\" Copyright (c) 1985, 1987, 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -9,9 +9,9 @@ .\" the sendmail distribution. .\" .\" -.\" $Sendmail: vacation.1,v 8.11.4.6 2000/12/29 18:12:23 gshapiro Exp $ +.\" $Sendmail: vacation.1,v 8.11.4.8 2001/07/20 04:19:38 gshapiro Exp $ .\" -.TH VACATION 1 "$Date: 2001/01/15 21:09:12 $" +.TH VACATION 1 "$Date: 2001/08/01 01:01:41 $" .SH NAME vacation \- return ``I am not here'' indication @@ -55,7 +55,7 @@ Available options: .TP .BI \-a " alias" Handle messages for -.Ar alias +.I alias in the same manner as those received for the user's login name. .TP |