diff -cr sendmail-8.9.2/BuildTools/OS/AIX.4.2 sendmail-8.9.3/BuildTools/OS/AIX.4.2 *** sendmail-8.9.2/BuildTools/OS/AIX.4.2 Tue Dec 29 09:39:49 1998 --- sendmail-8.9.3/BuildTools/OS/AIX.4.2 Fri Jan 22 15:16:21 1999 *************** *** 1,8 **** ! # @(#)AIX.4.2 8.6 (Berkeley) 8/6/1998 define(`confMAPDEF', `-DNDBM -DNIS -DMAP_REGEX') define(`confENVDEF', `-D_AIX4=40200 ') define(`confOPTIMIZE', `-O3 -qstrict') define(`confLIBS', `-ldbm') define(`confSTDIR', `/etc') define(`confHFDIR', `/usr/lib') define(`confINSTALL', `/usr/ucb/install') --- 1,9 ---- ! # @(#)AIX.4.2 8.7 (Berkeley) 1/22/1999 define(`confMAPDEF', `-DNDBM -DNIS -DMAP_REGEX') define(`confENVDEF', `-D_AIX4=40200 ') define(`confOPTIMIZE', `-O3 -qstrict') define(`confLIBS', `-ldbm') + define(`confLIBSEARCH', `db resolv 44bsd') define(`confSTDIR', `/etc') define(`confHFDIR', `/usr/lib') define(`confINSTALL', `/usr/ucb/install') Only in sendmail-8.9.3/BuildTools/OS: CRAYTS.10.0.x Only in sendmail-8.9.3/BuildTools/OS: ReliantUNIX Only in sendmail-8.9.3/BuildTools/OS: SunOS.5.8 diff -cr sendmail-8.9.2/BuildTools/bin/Build sendmail-8.9.3/BuildTools/bin/Build *** sendmail-8.9.2/BuildTools/bin/Build Tue Dec 29 09:40:09 1998 --- sendmail-8.9.3/BuildTools/bin/Build Sat Jan 23 15:53:26 1999 *************** *** 10,16 **** # the sendmail distribution. # # ! # @(#)Build 8.93 (Berkeley) 6/24/1998 # # --- 10,16 ---- # the sendmail distribution. # # ! # @(#)Build 8.94 (Berkeley) 1/23/1999 # # *************** *** 190,195 **** --- 190,199 ---- NILE*) arch=NILE os=`uname -v`;; + + CRAYT3E|CRAYTS) + os=$arch;; + esac # tweak operating system type and release diff -cr sendmail-8.9.2/KNOWNBUGS sendmail-8.9.3/KNOWNBUGS *** sendmail-8.9.2/KNOWNBUGS Tue Dec 29 09:39:08 1998 --- sendmail-8.9.3/KNOWNBUGS Thu Feb 4 16:33:49 1999 *************** *** 149,153 **** long for ruleset parsing. This can have an adverse effect on the relay_based_on_MX feature. ! (Version 8.34, last updated 12/17/1998) --- 149,185 ---- long for ruleset parsing. This can have an adverse effect on the relay_based_on_MX feature. + * Saving to ~sender/dead.letter fails if su'ed to root ! If ErrorMode is set to print and an error in sending mail occurs, ! the normal action is to print a message to the screen and append ! the message to a dead.letter file in the sender's home directory. ! In the case where the sender is using su to act as root, the file ! safety checks prevent sendmail from saving the dead.letter file ! because the sender's uid and the current real uid do not match. ! ! * Berkeley DB 2.X race condition with fcntl() locking ! ! There is a race condition for Berkeley DB 2.X databases on ! operating systems which use fcntl() style locking, such as ! Solaris. Sendmail locks the map before calling db_open() to ! prevent others from modifying the map while it is being opened. ! Unfortunately, Berkeley DB opens the map, closes it, and then ! reopens it. fcntl() locking drops the lock when any file ! descriptor pointing to the file is closed, even if it is a ! different file descriptor than the one used to initially lock ! the file. As a result there is a possibility that entries in a ! map might not be found during a map rebuild. As a workaround, ! you can use makemap to build a map with a new name and then ! "mv" the new db file to replace the old one. ! ! * File open timeouts not available on hard mounted NFS file systems ! ! Since SIGALRM does not interrupt an RPC call for hard mounted ! NFS file systems, it is impossible to implement a timeout on a file ! open operation. Therefore, while the NFS server is not responding, ! attempts to open a file on that server will hang. Systems with ! local mail delivery and NFS hard mounted home directories should be ! avoided, as attempts to open the forward files could hang. ! ! (Version 8.36, last updated 2/4/1999) diff -cr sendmail-8.9.2/README sendmail-8.9.3/README *** sendmail-8.9.2/README Tue Dec 29 09:39:10 1998 --- sendmail-8.9.3/README Sat Jan 30 12:22:25 1999 *************** *** 1,5 **** /*- ! * @(#)README 8.50 (Berkeley) 12/17/1998 */ SENDMAIL RELEASE 8 --- 1,5 ---- /*- ! * @(#)README 8.51 (Berkeley) 1/25/1999 */ SENDMAIL RELEASE 8 *************** *** 341,346 **** --- 341,357 ---- If you want to run an IDENT server, I suggest getting a copy from one of those sites. Versions are available for several different systems, including Apollo, BSD, NeXT, AIX, TOPS20, and VMS. + + + +-------------------------+ + | INTEROPERATION PROBLEMS | + +-------------------------+ + + Microsoft Exchange Server 5.0 + We have had a report that ``about 7% of messages from Sendmail + to Exchange were not being delivered with status messages of + "connection reset" and "I/O error".'' Upgrading Exchange from + Version 5.0 to Version 5.5 Service Pack 2 solved this problem. +---------------------+ diff -cr sendmail-8.9.2/RELEASE_NOTES sendmail-8.9.3/RELEASE_NOTES *** sendmail-8.9.2/RELEASE_NOTES Tue Dec 29 10:34:13 1998 --- sendmail-8.9.3/RELEASE_NOTES Thu Feb 4 16:55:29 1999 *************** *** 1,11 **** SENDMAIL RELEASE NOTES ! @(#)RELEASE_NOTES 8.9.2.4 (Berkeley) 12/29/1998 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.9.2/8.9.2 98/12/30 SECURITY: Remove five second sleep on accepting daemon connections due to an accept() failure. This sleep could be used --- 1,97 ---- SENDMAIL RELEASE NOTES ! @(#)RELEASE_NOTES 8.9.3.1 (Berkeley) 2/4/1999 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.9.3/8.9.3 99/02/04 + SECURITY: Limit message headers to a maximum of 32K bytes (total + of all headers in a single message) to prevent a denial of + service attack. This limit will be configurable in 8.10. + Problem noted by Michal Zalewski of the "Internet for + Schools" project (IdS). + Prevent segmentation fault on an LDAP lookup if the LDAP map + was closed due to an earlier failure. Problem noted by + Jeff Wasilko of smoe.org. Fix from Booker Bense of + Stanford University and Per Hedeland of Ericsson. + Preserve the order of the MIME headers in multipart messages + when performing the MIME header length check. This + will allow PGP signatures to function properly. Problem + noted by Lars Hecking of University College, Cork, Ireland. + If ruleset 5 rewrote the local address to an :include: directive, + the delivery would fail with an "aliasing/forwarding loop + broken" error. Problem noted by Eric C Hagberg of Morgan + Stanley. Fix from Per Hedeland of Ericsson. + Allow -T to work for bestmx maps. Fix from Aaron Schrab of + ExecPC Internet Systems. + During the transfer of a message in an SMTP transaction, if a + TCP timeout occurs, the message would be properly queued + for later retry but the failure would be logged as + "Illegal Seek" instead of a timeout. Problem noted by + Piotr Kucharski of the Warsaw School of Economics (SGH) + and Carles Xavier Munyoz Baldo of CTV Internet. + Prevent multiple deliveries on a self-referencing alias if the + F=w mailer flag is not set. Problem noted by Murray S. + Kucherawy of Concentric Network Corporation and Per + Hedeland of Ericsson. + Do not strip empty headers but if there is no value and a + default is defined in sendmail.cf, use the default. + Problem noted by Philip Guenther of Gustavus Adolphus + College and Christopher McCrory of Netus, Inc. + Don't inherit information about the sender (notably the full name) + in SMTP (-bs) mode, since this might be called from inetd. + Accept any 3xx reply code in response to DATA command instead of + requiring 354. This change will match the wording to be + published in the updated SMTP specification from the DRUMS + group of the IETF. + Portability: + AIX 4.2.0.2 ships with a /usr/lib/libbind.a which should + not be used. It conflicts with the resolver + built into libc.a. "bind" has been removed + from the confLIBSEARCH BuildTools variable. + Users who have installed BIND 8.X will have + to add it back in their site.config.m4 file. + Problem noted by Ole Holm Nielsen of the + Technical University of Denmark. + CRAY TS 10.0.x from Sven Nielsen of San Diego + Supercomputer Center. + Improved LDAP version 3 integration based on input + from Kurt D. Zeilenga of the OpenLDAP Foundation, + John Beck of Sun Microsystems, and Booker Bense + of Stanford University. + Linux doesn't have a standard way to get the timezone + between different releases. Back out the + change in 8.9.2 and don't attempt to derive + a timezone. Problem reported by Igor S. Livshits + of the University of Illinois at Urbana-Champaign + and Michael Dickens of Tetranet Communications. + Reliant UNIX, the new name for SINIX, from Gert-Jan Looy + of Siemens/SNI. + SunOS 5.8 from John Beck of Sun Microsystems. + CONFIG: SCO UnixWare 2.1 and 7.0 need TZ to get the proper + timezone. Problem noted by Petr Lampa of Technical + University of Brno. + CONFIG: Handle <@bestmx-host:user@otherhost> addressing properly + when using FEATURE(bestmx_is_local). Patch from Neil W. + Rickert of Northern Illinois University. + CONFIG: Properly handle source routed and %-hack addresses on + hosts which the mailertable remaps to local:. Patch from + Neil W. Rickert of Northern Illinois University. + CONFIG: Internal fixup of mailertable local: map value. Patch from + Larry Parmelee of Cornell University. + CONFIG: Only add back +detail from host portion of mailer triplet + on local mailer triplets if it was originally +detail. + Patch from Neil W. Rickert of Northern Illinois University. + CONFIG: The bestmx_is_local checking done in check_rcpt would + cause later checks to fail. Patch from Paul J Murphy of + MIDS Europe. + New files: + BuildTools/OS/CRAYTS.10.0.x + BuildTools/OS/ReliantUNIX + BuildTools/OS/SunOS.5.8 + 8.9.2/8.9.2 98/12/30 SECURITY: Remove five second sleep on accepting daemon connections due to an accept() failure. This sleep could be used *************** *** 19,25 **** Problem noted by Andreas Schott of the Max Planck Society. Missing columns in a text map could cause a segmentation fault. Fix from David Lee of the University of Durham. ! Note that for 8.9.X, PrivacyFlags=goaway also includes the noetrn flag. This is scheduled to change in a future version of sendmail. Problem noted by Theo Van Dinter of Chrysalis Symbolic Designa and Alan Brown of Manawatu --- 105,111 ---- Problem noted by Andreas Schott of the Max Planck Society. Missing columns in a text map could cause a segmentation fault. Fix from David Lee of the University of Durham. ! Note that for 8.9.X, PrivacyOptions=goaway also includes the noetrn flag. This is scheduled to change in a future version of sendmail. Problem noted by Theo Van Dinter of Chrysalis Symbolic Designa and Alan Brown of Manawatu *************** *** 80,93 **** Avoid bogus reporting of "LMTP tobuf overflow" when the buffer has enough space for the additional address. Problem noted by Steve Cliffe of the University of Wollongong. ! Fix DontBlameSendmail=FileDeliveryToSymlinks behavior. Problem noted by Alex Vorobiev of Swarthmore College. If the check_compat ruleset resolves to the $#discard mailer, discard the current recipient. Unlike check_relay, check_mail, and check_rcpt, the entire envelope is not discarded. Problem noted by RZ D. Rahlfs. Fix from Claus Assmann of Christian-Albrechts-University of Kiel. ! Avoid segmentation fault when reading ServiceSwitch files with bogus formatting. Patch from Kari Hurtta of the Finnish Meteorological Institute. Support Berkeley DB 2.6.4 API change. --- 166,179 ---- Avoid bogus reporting of "LMTP tobuf overflow" when the buffer has enough space for the additional address. Problem noted by Steve Cliffe of the University of Wollongong. ! Fix DontBlameSendmail=FileDeliveryToSymlink behavior. Problem noted by Alex Vorobiev of Swarthmore College. If the check_compat ruleset resolves to the $#discard mailer, discard the current recipient. Unlike check_relay, check_mail, and check_rcpt, the entire envelope is not discarded. Problem noted by RZ D. Rahlfs. Fix from Claus Assmann of Christian-Albrechts-University of Kiel. ! Avoid segmentation fault when reading ServiceSwitchFile files with bogus formatting. Patch from Kari Hurtta of the Finnish Meteorological Institute. Support Berkeley DB 2.6.4 API change. *************** *** 122,128 **** Tom J. Moore of NCR. NeXT 4.x correction to man page path. From J. P. McCann of E I A. ! System V Rel 5.x (a.k.a Unixware7 w/o BSD-Compatibility Libs) from Paul Gampe of the Asia Pacific Network Information Center. ULTRIX now requires an optimization limit of 970 from --- 208,214 ---- Tom J. Moore of NCR. NeXT 4.x correction to man page path. From J. P. McCann of E I A. ! System V Rel 5.x (a.k.a UnixWare7 w/o BSD-Compatibility Libs) from Paul Gampe of the Asia Pacific Network Information Center. ULTRIX now requires an optimization limit of 970 from *************** *** 210,216 **** and then back. Problem noted by Michael Miller of the University of Natal, Pietermaritzburg. Do not advertise ETRN support in ESTMP EHLO reply if noetrn is ! set in the PrivacyFlags option. Fix from Ted Rule of Flextech TV. Log invalid persistent host status file lines instead of bouncing the message. Problem noted by David Lindes of --- 296,302 ---- and then back. Problem noted by Michael Miller of the University of Natal, Pietermaritzburg. Do not advertise ETRN support in ESTMP EHLO reply if noetrn is ! set in the PrivacyOptions option. Fix from Ted Rule of Flextech TV. Log invalid persistent host status file lines instead of bouncing the message. Problem noted by David Lindes of *************** *** 972,978 **** If the AllowBogusHELO option were set and an EHLO with a bad or missing parameter were issued, the EHLO behaved like a HELO. Load limiting never kicked in for incoming SMTP transactions if the ! DeliverMode=background and any recipient was an alias or had a .forward file. From Nik Conwell of Boston University. On some non-Posix systems, the decision of whether chown(2) permits file giveaway was undefined. From Tetsu Ushijima of the --- 1058,1064 ---- If the AllowBogusHELO option were set and an EHLO with a bad or missing parameter were issued, the EHLO behaved like a HELO. Load limiting never kicked in for incoming SMTP transactions if the ! DeliveryMode=background and any recipient was an alias or had a .forward file. From Nik Conwell of Boston University. On some non-Posix systems, the decision of whether chown(2) permits file giveaway was undefined. From Tetsu Ushijima of the *************** *** 1463,1469 **** first" error message. Problem pointed out by Chris Thomas of UCLA; patch from John Beck of SunSoft. Handle "sendmail -bp -qSfoobar" properly if restrictqrun is set ! in PrivacyFlags. The -q shouldn't turn this command off. Problem noted by Murray Kucherawy of Pacific Bell Internet; based on a patch from Gregory Neil Shapiro of WPI. Don't consider SMTP reply codes 452 or 552 (exceeded storage allocation) --- 1549,1555 ---- first" error message. Problem pointed out by Chris Thomas of UCLA; patch from John Beck of SunSoft. Handle "sendmail -bp -qSfoobar" properly if restrictqrun is set ! in PrivacyOptions. The -q shouldn't turn this command off. Problem noted by Murray Kucherawy of Pacific Bell Internet; based on a patch from Gregory Neil Shapiro of WPI. Don't consider SMTP reply codes 452 or 552 (exceeded storage allocation) *************** *** 2113,2119 **** on a suggestion by Motonori Nakamura. Add new value "time" for QueueSortOrder option; this causes the queue to be sorted strictly by the time of submission. Note that ! this can cause very bad behaviour over slow lines (because large jobs will tend to delay small jobs) and on nodes with heavy traffic (because old things in the queue for hosts that are down delay processing of new jobs). Also, this does not --- 2199,2205 ---- on a suggestion by Motonori Nakamura. Add new value "time" for QueueSortOrder option; this causes the queue to be sorted strictly by the time of submission. Note that ! this can cause very bad behavior over slow lines (because large jobs will tend to delay small jobs) and on nodes with heavy traffic (because old things in the queue for hosts that are down delay processing of new jobs). Also, this does not *************** *** 2236,2242 **** The Timeout.* options are not safe -- they can be used to create a denial-of-service attack. Problem noted by Christophe Wolfhugel. ! Don't send PostMasterCopy messages in the event of a "delayed" notification. Suggested by Barry Bouwsma. Don't advertise "VERB" ESMTP extension if the "noexpn" privacy option is set, since this disables VERB mode. Suggested --- 2322,2328 ---- The Timeout.* options are not safe -- they can be used to create a denial-of-service attack. Problem noted by Christophe Wolfhugel. ! Don't send PostmasterCopy messages in the event of a "delayed" notification. Suggested by Barry Bouwsma. Don't advertise "VERB" ESMTP extension if the "noexpn" privacy option is set, since this disables VERB mode. Suggested *************** *** 2244,2250 **** Complain if the QueueDirectory (Q) option is not set. Problem noted by Motonori Nakamura of Kyoto University. Only queue messages on transient .forward open failures if there ! were no successful opens. The previous behaviour caused it to queue even if a "fall back" .forward was found. Problem noted by Ann-Kian Yeo of the Dept. of Information Systems and Computer Science (DISCS), NUS, Singapore. --- 2330,2336 ---- Complain if the QueueDirectory (Q) option is not set. Problem noted by Motonori Nakamura of Kyoto University. Only queue messages on transient .forward open failures if there ! were no successful opens. The previous behavior caused it to queue even if a "fall back" .forward was found. Problem noted by Ann-Kian Yeo of the Dept. of Information Systems and Computer Science (DISCS), NUS, Singapore. *************** *** 2497,2503 **** valid recipient headers (To:, Cc: or Apparently-To:, the last being a historic botch, of course). If Bcc: is the only recipient header in the message, its value is tossed, ! but the header name is kept. The old behaviour (always keep the header name and toss the value) allowed primary recipients to see that a Bcc: went to _someone_. Include queue id on ``Authentication-Warning: : set --- 2583,2589 ---- valid recipient headers (To:, Cc: or Apparently-To:, the last being a historic botch, of course). If Bcc: is the only recipient header in the message, its value is tossed, ! but the header name is kept. The old behavior (always keep the header name and toss the value) allowed primary recipients to see that a Bcc: went to _someone_. Include queue id on ``Authentication-Warning: : set *************** *** 2518,2524 **** John Hawkinson of Panix. An SMTP RCPT command referencing a host that gave a nameserver timeout would return a 451 command (8.6 accepted it and ! queued it locally). Revert to the 8.6 behaviour in order to simplify queue management for clustered systems. Suggested by Gregory Neil Shapiro of WPI. The same problem could break MH, which assumes that the SMTP session will succeed (tsk, tsk --- 2604,2610 ---- John Hawkinson of Panix. An SMTP RCPT command referencing a host that gave a nameserver timeout would return a 451 command (8.6 accepted it and ! queued it locally). Revert to the 8.6 behavior in order to simplify queue management for clustered systems. Suggested by Gregory Neil Shapiro of WPI. The same problem could break MH, which assumes that the SMTP session will succeed (tsk, tsk *************** *** 2531,2537 **** Hawkinson and Sam Hartman of MIT. ``452 Out of disk space for temp file'' messages weren't being printed. Fix from David Perlin of Nanosoft. ! Don't advertise the ESMTP DSN extension if the SendMIMEErrors option is not set, since this is required to get the actual DSNs created. Problem pointed out by John Gardiner Myers of CMU. Log permission problems that cause .forward and :include: files to --- 2617,2623 ---- Hawkinson and Sam Hartman of MIT. ``452 Out of disk space for temp file'' messages weren't being printed. Fix from David Perlin of Nanosoft. ! Don't advertise the ESMTP DSN extension if the SendMimeErrors option is not set, since this is required to get the actual DSNs created. Problem pointed out by John Gardiner Myers of CMU. Log permission problems that cause .forward and :include: files to *************** *** 2872,2878 **** t TimeZoneSpec u DefaultUser U UserDatabaseSpec ! V FallbackMXhost v Verbose w TryNullMXList x QueueLA --- 2958,2964 ---- t TimeZoneSpec u DefaultUser U UserDatabaseSpec ! V FallbackMXHost v Verbose w TryNullMXList x QueueLA *************** *** 3037,3043 **** or the sequence "\t" or "\n" for tab or newline. These are for use by NIS+ and similar access methods. Change maps to always strip quotes before lookups; the -q flag ! turns off this behaviour. Suggested by Motonori Nakamura. Add "nisplus" map class. Takes -k and -v flags to choose the key and value field names respectively. Code donated by Sun Microsystems. --- 3123,3129 ---- or the sequence "\t" or "\n" for tab or newline. These are for use by NIS+ and similar access methods. Change maps to always strip quotes before lookups; the -q flag ! turns off this behavior. Suggested by Motonori Nakamura. Add "nisplus" map class. Takes -k and -v flags to choose the key and value field names respectively. Code donated by Sun Microsystems. *************** *** 3581,3589 **** deals with 32 bit or 16 bit fields, such as IP addresses or nameserver fields.'' DG/UX 5.4.3 from Mark T. Robinson . To ! get the old behaviour, use -DDGUX_5_4_2. DG/UX hack: add _FORCE_MAIL_LOCAL_=yes environment ! variable to fix bogus /bin/mail behaviour. Tandem NonStop-UX from Rick McCarty . This also cleans up some System V Release 4 compile problems. --- 3667,3675 ---- deals with 32 bit or 16 bit fields, such as IP addresses or nameserver fields.'' DG/UX 5.4.3 from Mark T. Robinson . To ! get the old behavior, use -DDGUX_5_4_2. DG/UX hack: add _FORCE_MAIL_LOCAL_=yes environment ! variable to fix bogus /bin/mail behavior. Tandem NonStop-UX from Rick McCarty . This also cleans up some System V Release 4 compile problems. *************** *** 3727,3733 **** Received: header inserted into all messages. Suggested by Gary Mills of the University of Manitoba. CONFIG: Make "notsticky" the default; use FEATURE(stickyhost) ! to get the old behaviour. I did this upon observing that almost everyone needed this feature, and that the concept I was trying to make happen didn't work with some user agents anyway. FEATURE(notsticky) still works, --- 3813,3819 ---- Received: header inserted into all messages. Suggested by Gary Mills of the University of Manitoba. CONFIG: Make "notsticky" the default; use FEATURE(stickyhost) ! to get the old behavior. I did this upon observing that almost everyone needed this feature, and that the concept I was trying to make happen didn't work with some user agents anyway. FEATURE(notsticky) still works, *************** *** 3801,3807 **** would only work when locally addressed. Fix from Edvard Tuinder of Cistron Internet Services. CONFIG: use ${opMode} to avoid error on .REDIRECT addresses if option ! "n" (CheckAlaises) is set when rebuilding alias database. Based on code contributed by Claude Marinier. CONFIG: Allow mailertable to have values of the form ``error:code message''. The ``code'' is a status code --- 3887,3893 ---- would only work when locally addressed. Fix from Edvard Tuinder of Cistron Internet Services. CONFIG: use ${opMode} to avoid error on .REDIRECT addresses if option ! "n" (CheckAliases) is set when rebuilding alias database. Based on code contributed by Claude Marinier. CONFIG: Allow mailertable to have values of the form ``error:code message''. The ``code'' is a status code *************** *** 4108,4114 **** this could in turn cause the sendmail.pid file to be incorrect. A better approach might be to accept the connection and give a 421 code, but that could break ! other mailers in mysterious ways and have paging behaviour implications. Fix a glitch in TCP-level debugging that caused flag 16.101 to set debugging on the wrong socket. From Eric Wassenaar. --- 4194,4200 ---- this could in turn cause the sendmail.pid file to be incorrect. A better approach might be to accept the connection and give a 421 code, but that could break ! other mailers in mysterious ways and have paging behavior implications. Fix a glitch in TCP-level debugging that caused flag 16.101 to set debugging on the wrong socket. From Eric Wassenaar. *************** *** 4413,4419 **** this by putting "*" in /etc/shells. It also won't permit world-writable :include: files to reference programs or files (there's no way to disable this). ! These behaviours are only one level deep -- for example, it is legal for a world-writable :include: file to reference an alias that writes a file, on the assumption that the alias file is well controlled. --- 4499,4505 ---- this by putting "*" in /etc/shells. It also won't permit world-writable :include: files to reference programs or files (there's no way to disable this). ! These behaviors are only one level deep -- for example, it is legal for a world-writable :include: file to reference an alias that writes a file, on the assumption that the alias file is well controlled. *************** *** 4756,4762 **** Non-root use of -C flag, dangerous -f flags, and use of -oQ by non-root users were not put into X-Authentication-Warning:s as intended because the ! config file hadn't set the PrivacyFlags yet. Fix from Sven-Ove Westberg of the University of Lulea. Under very odd circumstances, the alias file rebuild code could get confused as to whether a database was --- 4842,4848 ---- Non-root use of -C flag, dangerous -f flags, and use of -oQ by non-root users were not put into X-Authentication-Warning:s as intended because the ! config file hadn't set the PrivacyOptions yet. Fix from Sven-Ove Westberg of the University of Lulea. Under very odd circumstances, the alias file rebuild code could get confused as to whether a database was *************** *** 4834,4840 **** term bug. Fix a nasty bug causing core dumps when returning the "warning: cannot deliver for N hours -- will keep trying" message; ! it only occurred if you had PostMasterCopy set and only on some architectures. Although sendmail would keep trying, it would send error messages on each queue interval. This is an important fix. --- 4920,4926 ---- term bug. Fix a nasty bug causing core dumps when returning the "warning: cannot deliver for N hours -- will keep trying" message; ! it only occurred if you had PostmasterCopy set and only on some architectures. Although sendmail would keep trying, it would send error messages on each queue interval. This is an important fix. *************** *** 4923,4929 **** Fix a bug that can cause qf files to be left around even after an SMTP RSET command. Problem and fix from Michael Corrigan. ! Don't send a PostMasterCopy to errors when the Precedence: is negative. Error reports still go to the envelope sender address. Add LA_SHORT for load averages. --- 5009,5015 ---- Fix a bug that can cause qf files to be left around even after an SMTP RSET command. Problem and fix from Michael Corrigan. ! Don't send a PostmasterCopy to errors when the Precedence: is negative. Error reports still go to the envelope sender address. Add LA_SHORT for load averages. *************** *** 5146,5152 **** Support -M as equivalent to -oM on Ultrix -- apparently DECnet calls sendmail with -MrDECnet -Ms -bs instead of using standard flags. Oh joy. This ! behaviour reported by Jon Giltner of University of Colorado. SGI IRIX -- this includes several changes that should help other strict ANSI compilers. --- 5232,5238 ---- Support -M as equivalent to -oM on Ultrix -- apparently DECnet calls sendmail with -MrDECnet -Ms -bs instead of using standard flags. Oh joy. This ! behavior reported by Jon Giltner of University of Colorado. SGI IRIX -- this includes several changes that should help other strict ANSI compilers. *************** *** 5692,5698 **** Fix compilation problem in getauthinfo() if IDENTPROTO is off. Turn off DEFNAMES and DNSRCH when getting the hostsignature (i.e., MX records) in level 1 configuration files; this ! matches the old behaviour. From Motonori Nakamura of Kyoto University. Improve error message printing -- if sent through an alias, error messages include the name of the alias in the --- 5778,5784 ---- Fix compilation problem in getauthinfo() if IDENTPROTO is off. Turn off DEFNAMES and DNSRCH when getting the hostsignature (i.e., MX records) in level 1 configuration files; this ! matches the old behavior. From Motonori Nakamura of Kyoto University. Improve error message printing -- if sent through an alias, error messages include the name of the alias in the *************** *** 5736,5742 **** IDENT port (113). Thus, no email can be received from such hosts. There is some evidence that versions of Ultrix before 4.3 do not have this problem. Thanks to Tom Ivar Helbekkmo ! for pointing out this behaviour to me and to Michael Corrigan of U.C. San Diego for informing me about the HPUX problem. Allow IPC mailers to return a colon-separated list of hosts in the $@ clause; these are searched in order as though they were --- 5822,5828 ---- IDENT port (113). Thus, no email can be received from such hosts. There is some evidence that versions of Ultrix before 4.3 do not have this problem. Thanks to Tom Ivar Helbekkmo ! for pointing out this behavior to me and to Michael Corrigan of U.C. San Diego for informing me about the HPUX problem. Allow IPC mailers to return a colon-separated list of hosts in the $@ clause; these are searched in order as though they were *************** *** 6293,6299 **** Add the "c" mailer flag -- this suppresses all comment parts of addresses (requested by John Curran of NEARnet). Have -v print prompts in -bt mode even if stdin is not a terminal ! (default behaviour is to be silent if not reading from a terminal). Suggested by Bryan Costales, ICSI. Move the metacharacters from C0 space (\001-\037) into C1 space (\201-\237). This also fixes a bunch of potential bugs --- 6379,6385 ---- Add the "c" mailer flag -- this suppresses all comment parts of addresses (requested by John Curran of NEARnet). Have -v print prompts in -bt mode even if stdin is not a terminal ! (default behavior is to be silent if not reading from a terminal). Suggested by Bryan Costales, ICSI. Move the metacharacters from C0 space (\001-\037) into C1 space (\201-\237). This also fixes a bunch of potential bugs *************** *** 6322,6328 **** was suggested by Eric Wassenaar. Use initgroups() in hpux, even though it's System-V based. The HASINITGROUPS compile flag can set this on other systems. ! This HPUX behaviour was pointed out by Eric Wassenaar. 6.23/6.6 93/02/16 Clean up handling of LogLevel to make it easier to figure out --- 6408,6414 ---- was suggested by Eric Wassenaar. Use initgroups() in hpux, even though it's System-V based. The HASINITGROUPS compile flag can set this on other systems. ! This HPUX behavior was pointed out by Eric Wassenaar. 6.23/6.6 93/02/16 Clean up handling of LogLevel to make it easier to figure out *************** *** 6343,6349 **** definition lines. Note that rulesets 1 and 2 are still used for both addresses as before. Bruce Lilly gave a convincing argument that RFC976 insists on ! this behaviour. Added some time zones to arpatounix -- they may not be in the standards, but they are in use. However, I may delete arpatounix entirely -- there appears to be no reason --- 6429,6435 ---- definition lines. Note that rulesets 1 and 2 are still used for both addresses as before. Bruce Lilly gave a convincing argument that RFC976 insists on ! this behavior. Added some time zones to arpatounix -- they may not be in the standards, but they are in use. However, I may delete arpatounix entirely -- there appears to be no reason *************** *** 6464,6470 **** 6.9/6.1 93/01/13 Environment handling simplification/bug fix -- child processes get a minimal, fixed environment. This avoids different ! behaviour in queue runs. Handle commas inside comments properly. Properly limit large messages submitted in -obq mode. --- 6550,6556 ---- 6.9/6.1 93/01/13 Environment handling simplification/bug fix -- child processes get a minimal, fixed environment. This avoids different ! behavior in queue runs. Handle commas inside comments properly. Properly limit large messages submitted in -obq mode. diff -cr sendmail-8.9.2/cf/README sendmail-8.9.3/cf/README *** sendmail-8.9.2/cf/README Tue Dec 29 09:53:55 1998 --- sendmail-8.9.3/cf/README Wed Feb 3 14:06:38 1999 *************** *** 4,10 **** Eric Allman ! @(#)README 8.184 (Berkeley) 12/29/1998 This document describes the sendmail configuration files being used --- 4,10 ---- Eric Allman ! @(#)README 8.186 (Berkeley) 2/3/1999 This document describes the sendmail configuration files being used *************** *** 293,306 **** are always added. POP_MAILER_ARGS [pop $u] The arguments passed to the POP mailer. PROCMAIL_MAILER_PATH [/usr/local/bin/procmail] The path to the procmail ! program. This is also used by FEATURE(local_procmail). PROCMAIL_MAILER_FLAGS [SPhnu9] Flags added to Procmail mailer. Flags ``DFM'' are always set. This is NOT used by ! FEATURE(local_procmail); tweak LOCAL_MAILER_FLAGS instead. PROCMAIL_MAILER_ARGS [procmail -Y -m $h $f $u] The arguments passed to the Procmail mailer. This is NOT used by ! FEATURE(local_procmail); tweak LOCAL_MAILER_ARGS instead. PROCMAIL_MAILER_MAX [undefined] If set, the maximum size message that will be accepted by the procmail mailer. --- 293,307 ---- are always added. POP_MAILER_ARGS [pop $u] The arguments passed to the POP mailer. PROCMAIL_MAILER_PATH [/usr/local/bin/procmail] The path to the procmail ! program. This is also used by ! FEATURE(`local_procmail'). PROCMAIL_MAILER_FLAGS [SPhnu9] Flags added to Procmail mailer. Flags ``DFM'' are always set. This is NOT used by ! FEATURE(`local_procmail'); tweak LOCAL_MAILER_FLAGS instead. PROCMAIL_MAILER_ARGS [procmail -Y -m $h $f $u] The arguments passed to the Procmail mailer. This is NOT used by ! FEATURE(`local_procmail'); tweak LOCAL_MAILER_ARGS instead. PROCMAIL_MAILER_MAX [undefined] If set, the maximum size message that will be accepted by the procmail mailer. *************** *** 327,334 **** CYRUS_BB_MAILER_ARGS [deliver -e -m $u] The arguments passed to deliver cyrusbb mail. confEBINDIR [/usr/libexec] The directory for executables. ! Currently used for FEATURE(local_lmtp) and ! FEATURE(smrsh). --- 328,335 ---- CYRUS_BB_MAILER_ARGS [deliver -e -m $u] The arguments passed to deliver cyrusbb mail. confEBINDIR [/usr/libexec] The directory for executables. ! Currently used for FEATURE(`local_lmtp') and ! FEATURE(`smrsh'). *************** *** 454,460 **** This would arrange for (anything)@host.com to be sent to person@other.host. Within the procmail script, $1 is the name of the sender and $2 is the name of the recipient. ! If you use this with FEATURE(local_procmail), the FEATURE should be listed first. mail11 The DECnet mail11 mailer, useful only if you have the mail11 --- 455,461 ---- This would arrange for (anything)@host.com to be sent to person@other.host. Within the procmail script, $1 is the name of the sender and $2 is the name of the recipient. ! If you use this with FEATURE(`local_procmail'), the FEATURE should be listed first. mail11 The DECnet mail11 mailer, useful only if you have the mail11 *************** *** 478,487 **** The local mailer accepts addresses of the form "user+detail", where the "+detail" is not used for mailbox matching but is available ! to certain local mail programs (in particular, see FEATURE(local_procmail)). ! For example, "eric", "eric+sendmail", and "eric+sww" all indicate ! the same user, but additional arguments , "sendmail", and "sww" ! may be provided for use in sorting mail. +----------+ --- 479,488 ---- The local mailer accepts addresses of the form "user+detail", where the "+detail" is not used for mailbox matching but is available ! to certain local mail programs (in particular, see ! FEATURE(`local_procmail')). For example, "eric", "eric+sendmail", and ! "eric+sww" all indicate the same user, but additional arguments , ! "sendmail", and "sww" may be provided for use in sorting mail. +----------+ *************** *** 491,503 **** Special features can be requested using the "FEATURE" macro. For example, the .mc line: ! FEATURE(use_cw_file) tells sendmail that you want to have it read an /etc/sendmail.cw file to get values for class $=w. The FEATURE may contain a single optional parameter -- for example: ! FEATURE(mailertable, dbm /usr/lib/mailertable) The default database map type for the table features can be set with --- 492,504 ---- Special features can be requested using the "FEATURE" macro. For example, the .mc line: ! FEATURE(`use_cw_file') tells sendmail that you want to have it read an /etc/sendmail.cw file to get values for class $=w. The FEATURE may contain a single optional parameter -- for example: ! FEATURE(`mailertable', `dbm /usr/lib/mailertable') The default database map type for the table features can be set with *************** *** 554,560 **** --- 555,563 ---- routing for particular domains. The argument of the FEATURE may be the key definition. If none is specified, the definition used is: + hash -o /etc/mailertable + Keys in this database are fully qualified domain names or partial domains preceded by a dot -- for example, "vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU". *************** *** 580,586 **** --- 583,591 ---- oldname.com to newname.com). The argument of the FEATURE may be the key definition. If none is specified, the definition used is: + hash -o /etc/domaintable + The key in this table is the domain name; the value is the new (fully qualified) domain. Anything in the domaintable is reflected into headers; that is, this *************** *** 591,603 **** --- 596,612 ---- bitdomain program contributed by John Gardiner Myers. The argument of the FEATURE may be the key definition; if none is specified, the definition used is: + hash -o /etc/bitdomain.db + Keys are the bitnet hostname; values are the corresponding internet hostname. uucpdomain Similar feature for UUCP hosts. The default map definition is: + hash -o /etc/uudomain.db + At the moment there is no automagic tool to build this database. *************** *** 659,665 **** (analogously to MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE, see below). ! The argument of FEATURE(genericstable) may be the map definition; the default map definition is: hash -o /etc/genericstable --- 668,674 ---- (analogously to MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE, see below). ! The argument of FEATURE(`genericstable') may be the map definition; the default map definition is: hash -o /etc/genericstable *************** *** 670,677 **** not include a domain, it will be qualified in the standard manner, i.e. using $j or the masquerade name. Note that the address being looked up must be fully qualified. For local ! mail, it is necessary to use FEATURE(always_add_domain) for ! the addresses to be qualified. virtusertable A domain-specific form of aliasing, allowing multiple virtual domains to be hosted on one machine. For example, --- 679,686 ---- not include a domain, it will be qualified in the standard manner, i.e. using $j or the masquerade name. Note that the address being looked up must be fully qualified. For local ! mail, it is necessary to use FEATURE(`always_add_domain') ! for the addresses to be qualified. virtusertable A domain-specific form of aliasing, allowing multiple virtual domains to be hosted on one machine. For example, *************** *** 699,705 **** A new definition can be specified as the second argument of the FEATURE macro, such as ! FEATURE(virtusertable, dbm -o /etc/mail/virtusers) nodns We aren't running DNS at our site (for example, we are UUCP-only connected). It's hard to consider --- 708,714 ---- A new definition can be specified as the second argument of the FEATURE macro, such as ! FEATURE(`virtusertable', `dbm -o /etc/mail/virtusers') nodns We aren't running DNS at our site (for example, we are UUCP-only connected). It's hard to consider *************** *** 793,803 **** feature. Also, see the KNOWNBUGS entry regarding bestmx map lookups. ! FEATURE(relay_based_on_MX) does not necessarily allow routing of these messages which you expect to be allowed, if route address syntax (or %-hack syntax) is used. If this is a problem, add entries to the access-table or use ! FEATURE(loose_relay_check). relay_local_from Allows relaying if the domain portion of the mail sender --- 802,812 ---- feature. Also, see the KNOWNBUGS entry regarding bestmx map lookups. ! FEATURE(`relay_based_on_MX') does not necessarily allow routing of these messages which you expect to be allowed, if route address syntax (or %-hack syntax) is used. If this is a problem, add entries to the access-table or use ! FEATURE(`loose_relay_check'). relay_local_from Allows relaying if the domain portion of the mail sender *************** *** 828,836 **** access_db Turns on the access database feature. The access db gives you the ability to allow or refuse to accept mail from specified domains for administrative reasons. By default, ! the access database specification is ! ``hash -o /etc/mail/access''. The format of the ! database is described below. blacklist_recipients Turns on the ability to block incoming mail for certain --- 837,847 ---- access_db Turns on the access database feature. The access db gives you the ability to allow or refuse to accept mail from specified domains for administrative reasons. By default, ! the access database specification is: ! ! hash -o /etc/mail/access ! ! The format of the database is described below. blacklist_recipients Turns on the ability to block incoming mail for certain *************** *** 888,894 **** anything sent to an address using a host name in this list will be treated as local mail. You can do this in two ways: either create the file /etc/sendmail.cw containing a list of your aliases (one per ! line), and use ``FEATURE(use_cw_file)'' in the .mc file, or add the line: Cw alias.host.name --- 899,905 ---- anything sent to an address using a host name in this list will be treated as local mail. You can do this in two ways: either create the file /etc/sendmail.cw containing a list of your aliases (one per ! line), and use ``FEATURE(`use_cw_file')'' in the .mc file, or add the line: Cw alias.host.name *************** *** 1114,1120 **** Normally only header addresses are masqueraded. If you want to masquerade the envelope as well, use ! FEATURE(masquerade_envelope) There are always users that need to be "exposed" -- that is, their internal site name should be displayed instead of the masquerade name. --- 1125,1131 ---- Normally only header addresses are masqueraded. If you want to masquerade the envelope as well, use ! FEATURE(`masquerade_envelope') There are always users that need to be "exposed" -- that is, their internal site name should be displayed instead of the masquerade name. *************** *** 1131,1137 **** email server, you might relay to that host so that users don't have to have .forward files or aliases. You can do this using ! define(`LOCAL_RELAY', mailer:hostname) The ``mailer:'' can be omitted, in which case the mailer defaults to "relay". There are some user names that you don't want relayed, perhaps --- 1142,1148 ---- email server, you might relay to that host so that users don't have to have .forward files or aliases. You can do this using ! define(`LOCAL_RELAY', `mailer:hostname') The ``mailer:'' can be omitted, in which case the mailer defaults to "relay". There are some user names that you don't want relayed, perhaps *************** *** 1147,1162 **** If you want all incoming mail sent to a centralized hub, as for a shared /var/spool/mail scheme, use ! define(`MAIL_HUB', mailer:hostname) Again, ``mailer:'' defaults to "relay". If you define both LOCAL_RELAY ! and MAIL_HUB _AND_ you have FEATURE(stickyhost), unqualified names will be sent to the LOCAL_RELAY and other local names will be sent to MAIL_HUB. Names in $=L will be delivered locally, so you MUST have aliases or .forward files for them. For example, if you are on machine mastodon.CS.Berkeley.EDU and you have ! FEATURE(stickyhost), the following combinations of settings will have the indicated effects: email sent to.... eric eric@mastodon.CS.Berkeley.EDU --- 1158,1173 ---- If you want all incoming mail sent to a centralized hub, as for a shared /var/spool/mail scheme, use ! define(`MAIL_HUB', `mailer:hostname') Again, ``mailer:'' defaults to "relay". If you define both LOCAL_RELAY ! and MAIL_HUB _AND_ you have FEATURE(`stickyhost'), unqualified names will be sent to the LOCAL_RELAY and other local names will be sent to MAIL_HUB. Names in $=L will be delivered locally, so you MUST have aliases or .forward files for them. For example, if you are on machine mastodon.CS.Berkeley.EDU and you have ! FEATURE(`stickyhost'), the following combinations of settings will have the indicated effects: email sent to.... eric eric@mastodon.CS.Berkeley.EDU *************** *** 1170,1176 **** Both LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU MAIL_HUB set as above (no local aliasing) (aliasing done) ! If you do not have FEATURE(stickyhost) set, then LOCAL_RELAY and MAIL_HUB act identically, with MAIL_HUB taking precedence. If you want all outgoing mail to go to a central relay site, define --- 1181,1187 ---- Both LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU MAIL_HUB set as above (no local aliasing) (aliasing done) ! If you do not have FEATURE(`stickyhost') set, then LOCAL_RELAY and MAIL_HUB act identically, with MAIL_HUB taking precedence. If you want all outgoing mail to go to a central relay site, define *************** *** 1209,1222 **** another site outside your domain) is denied by default. Note that this changed in sendmail 8.9; previous versions allowed relaying by default. If you want to revert to the old behaviour, you will need ! to use FEATURE(promiscuous_relay). You can allow certain domains to relay through your server by adding their domain name or IP address to class 'R' ($=R) using RELAY_DOMAIN() and RELAY_DOMAIN_FILE() or via the access database (described below). If you use ! FEATURE(relay_entire_domain) then any host in any of your local domains (that is, the $=m class) will be relayed (that is, you will accept mail either to or from any --- 1220,1233 ---- another site outside your domain) is denied by default. Note that this changed in sendmail 8.9; previous versions allowed relaying by default. If you want to revert to the old behaviour, you will need ! to use FEATURE(`promiscuous_relay'). You can allow certain domains to relay through your server by adding their domain name or IP address to class 'R' ($=R) using RELAY_DOMAIN() and RELAY_DOMAIN_FILE() or via the access database (described below). If you use ! FEATURE(`relay_entire_domain') then any host in any of your local domains (that is, the $=m class) will be relayed (that is, you will accept mail either to or from any *************** *** 1225,1231 **** You can also allow relaying based on the MX records of the host portion of an incoming recipient address by using ! FEATURE(relay_based_on_MX) For example, if your server receives a recipient of user@domain.com and domain.com lists your server in its MX records, the mail will be --- 1236,1242 ---- You can also allow relaying based on the MX records of the host portion of an incoming recipient address by using ! FEATURE(`relay_based_on_MX') For example, if your server receives a recipient of user@domain.com and domain.com lists your server in its MX records, the mail will be *************** *** 1235,1241 **** MX record pointing to your mail server, and you will relay mail addressed to them without any prior arrangement). Along the same lines, ! FEATURE(relay_local_from) will allow relaying if the sender specifies a return path (i.e. MAIL FROM: ) domain which is a local domain. This a --- 1246,1252 ---- MX record pointing to your mail server, and you will relay mail addressed to them without any prior arrangement). Along the same lines, ! FEATURE(`relay_local_from') will allow relaying if the sender specifies a return path (i.e. MAIL FROM: ) domain which is a local domain. This a *************** *** 1246,1256 **** If source routing is used in the recipient address (i.e. RCPT TO: ), sendmail will check user@site.com for relaying if othersite.com is an allowed relay host ! in either class 'R', class 'm' if FEATURE(relay_entire_domain) is used, ! or the access database if FEATURE(access_db) is used. To prevent the address from being stripped down, use: ! FEATURE(loose_relay_check) If you think you need to use this feature, you probably do not. This should only be used for sites which have no control over the addresses --- 1257,1267 ---- If source routing is used in the recipient address (i.e. RCPT TO: ), sendmail will check user@site.com for relaying if othersite.com is an allowed relay host ! in either class 'R', class 'm' if FEATURE(`relay_entire_domain') is used, ! or the access database if FEATURE(`access_db') is used. To prevent the address from being stripped down, use: ! FEATURE(`loose_relay_check') If you think you need to use this feature, you probably do not. This should only be used for sites which have no control over the addresses *************** *** 1265,1294 **** (note that you will not be able to return mail to them unless you have some "smart host" forwarder), use ! FEATURE(accept_unresolvable_domains) sendmail will also refuse mail if the MAIL FROM: parameter is not fully qualified (i.e., contains a domain as well as a user). If you want to continue to accept such senders, use ! FEATURE(accept_unqualified_senders) An ``access'' database can be created to accept or reject mail from selected domains. For example, you may choose to reject all mail originating from known spammers. To enable such a database, use ! FEATURE(access_db) The FEATURE macro can accept a second parameter giving the key file definition for the database; for example ! FEATURE(access_db, hash -o /etc/mail/access) Remember, since /etc/mail/access is a database, after creating the text file as described below, you must use makemap to create the database map. For example: ! makemap hash /etc/mail/access < /etc/mail/access The table itself uses e-mail addresses, domain names, and network numbers as keys. For example, --- 1276,1305 ---- (note that you will not be able to return mail to them unless you have some "smart host" forwarder), use ! FEATURE(`accept_unresolvable_domains') sendmail will also refuse mail if the MAIL FROM: parameter is not fully qualified (i.e., contains a domain as well as a user). If you want to continue to accept such senders, use ! FEATURE(`accept_unqualified_senders') An ``access'' database can be created to accept or reject mail from selected domains. For example, you may choose to reject all mail originating from known spammers. To enable such a database, use ! FEATURE(`access_db') The FEATURE macro can accept a second parameter giving the key file definition for the database; for example ! FEATURE(`access_db', `hash -o /etc/mail/access') Remember, since /etc/mail/access is a database, after creating the text file as described below, you must use makemap to create the database map. For example: ! makemap hash /etc/mail/access < /etc/mail/access The table itself uses e-mail addresses, domain names, and network numbers as keys. For example, *************** *** 1335,1341 **** need to add hostname.UUCP to the access database or class 'R' ($=R). If you also use: ! FEATURE(relay_hosts_only) then the above example will allow relaying for sendmail.org, but not hosts within the sendmail.org domain. Note that this will also require --- 1346,1352 ---- need to add hostname.UUCP to the access database or class 'R' ($=R). If you also use: ! FEATURE(`relay_hosts_only') then the above example will allow relaying for sendmail.org, but not hosts within the sendmail.org domain. Note that this will also require *************** *** 1352,1358 **** If you use: ! FEATURE(blacklist_recipients) then you can add entries to the map for local users, hosts in your domains, or addresses in your domain which should not receive mail: --- 1363,1369 ---- If you use: ! FEATURE(`blacklist_recipients') then you can add entries to the map for local users, hosts in your domains, or addresses in your domain which should not receive mail: *************** *** 1377,1383 **** at http://maps.vix.com/. This is a database maintained in DNS of spammers. To use this database, use ! FEATURE(rbl) This will cause sendmail to reject mail from any site in the Realtime Blackhole List database. You can specify an alternative --- 1388,1394 ---- at http://maps.vix.com/. This is a database maintained in DNS of spammers. To use this database, use ! FEATURE(`rbl') This will cause sendmail to reject mail from any site in the Realtime Blackhole List database. You can specify an alternative *************** *** 1420,1427 **** R< $+ @ $+ > $@ OK R$* $#error $: 553 Header Error ! Users of FEATURE(nullclient) who desire to use the anti-spam and ! anti-relaying capabilities should replace FEATURE(nullclient, mailhub) with: undefine(`ALIAS_FILE') --- 1431,1438 ---- R< $+ @ $+ > $@ OK R$* $#error $: 553 Header Error ! Users of FEATURE(`nullclient') who desire to use the anti-spam and ! anti-relaying capabilities should replace FEATURE(`nullclient', `mailhub') with: undefine(`ALIAS_FILE') *************** *** 1430,1435 **** --- 1441,1454 ---- define(`confFORWARD_PATH', `') where mailhub is the fully qualified hostname for their mail server. + The above rules will provide the relaying to the mailhub without local + alias and forward file expansion. To match the other behavior of + FEATURE(`nullclient'), you should also add these lines along with those + listed above: + + MASQUERADE_AS(`mailhub') + FEATURE(`allmasquerade') + FEATURE(`masquerade_envelope') +--------------------------------+ *************** *** 1462,1468 **** You can define a ``smart host'' that understands a richer address syntax using: ! define(`SMART_HOST', mailer:hostname) In this case, the ``mailer:'' defaults to "relay". Any messages that can't be handled using the usual UUCP rules are passed to this host. --- 1481,1487 ---- You can define a ``smart host'' that understands a richer address syntax using: ! define(`SMART_HOST', `mailer:hostname') In this case, the ``mailer:'' defaults to "relay". Any messages that can't be handled using the usual UUCP rules are passed to this host. *************** *** 1471,1488 **** world via UUCP, you can use LOCAL_NET_CONFIG to add appropriate rules. For example: ! define(`SMART_HOST', suucp:uunet) LOCAL_NET_CONFIG R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 This will cause all names that end in your domain name ($m) via SMTP; anything else will be sent via suucp (smart UUCP) to uunet. ! If you have FEATURE(nocanonify), you may need to omit the dots after the $m. If you are running a local DNS inside your domain which is not otherwise connected to the outside world, you probably want to use: ! define(`SMART_HOST', smtp:fire.wall.com) LOCAL_NET_CONFIG R$* < @ $* . > $* $#smtp $@ $2. $: $1 < @ $2. > $3 --- 1490,1507 ---- world via UUCP, you can use LOCAL_NET_CONFIG to add appropriate rules. For example: ! define(`SMART_HOST', `suucp:uunet') LOCAL_NET_CONFIG R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 This will cause all names that end in your domain name ($m) via SMTP; anything else will be sent via suucp (smart UUCP) to uunet. ! If you have FEATURE(`nocanonify'), you may need to omit the dots after the $m. If you are running a local DNS inside your domain which is not otherwise connected to the outside world, you probably want to use: ! define(`SMART_HOST', `smtp:fire.wall.com') LOCAL_NET_CONFIG R$* < @ $* . > $* $#smtp $@ $2. $: $1 < @ $2. > $3 *************** *** 1490,1497 **** anything else goes through SMART_HOST. You may need to turn off the anti-spam rules in order to accept ! UUCP mail with FEATURE(promiscuous_relay) and ! FEATURE(accept_unresolvable_domains). +-----------+ --- 1509,1516 ---- anything else goes through SMART_HOST. You may need to turn off the anti-spam rules in order to accept ! UUCP mail with FEATURE(`promiscuous_relay') and ! FEATURE(`accept_unresolvable_domains'). +-----------+ *************** *** 1516,1522 **** | USING MAILERTABLES | +--------------------+ ! To use FEATURE(mailertable), you will have to create an external database containing the routing information for various domains. For example, a mailertable file in text format might be: --- 1535,1541 ---- | USING MAILERTABLES | +--------------------+ ! To use FEATURE(`mailertable'), you will have to create an external database containing the routing information for various domains. For example, a mailertable file in text format might be: *************** *** 1575,1581 **** a site, but allow you to override this by sending to a specific host. If you decide to set up the user database in this fashion, it is ! imperative that you not use FEATURE(stickyhost) -- otherwise, e-mail sent to Full.Name@local.host.name will be rejected. To build the internal form of the user database, use: --- 1594,1600 ---- a site, but allow you to override this by sending to a specific host. If you decide to set up the user database in this fashion, it is ! imperative that you not use FEATURE(`stickyhost') -- otherwise, e-mail sent to Full.Name@local.host.name will be rejected. To build the internal form of the user database, use: *************** *** 1715,1721 **** confTRUSTED_USERS Ct class [no default] Names of users to add to the list of trusted users. This list always includes root, uucp, and daemon. ! See also FEATURE(use_ct_file). confSMTP_MAILER - [esmtp] The mailer name used when SMTP connectivity is required. One of "smtp", "smtp8", or "esmtp". --- 1734,1740 ---- confTRUSTED_USERS Ct class [no default] Names of users to add to the list of trusted users. This list always includes root, uucp, and daemon. ! See also FEATURE(`use_ct_file'). confSMTP_MAILER - [esmtp] The mailer name used when SMTP connectivity is required. One of "smtp", "smtp8", or "esmtp". Only in sendmail-8.9.3/cf/cf: generic-bsd4.4.cf Only in sendmail-8.9.3/cf/cf: generic-hpux10.cf Only in sendmail-8.9.3/cf/cf: generic-hpux9.cf Only in sendmail-8.9.3/cf/cf: generic-osf1.cf Only in sendmail-8.9.3/cf/cf: generic-solaris2.cf Only in sendmail-8.9.3/cf/cf: generic-sunos4.1.cf Only in sendmail-8.9.3/cf/cf: generic-ultrix4.cf diff -cr sendmail-8.9.2/cf/cf/knecht.mc sendmail-8.9.3/cf/cf/knecht.mc *** sendmail-8.9.2/cf/cf/knecht.mc Tue Dec 29 09:42:05 1998 --- sendmail-8.9.3/cf/cf/knecht.mc Sat Jan 30 10:34:48 1999 *************** *** 16,22 **** # divert(0)dnl ! VERSIONID(`@(#)knecht.mc 8.30 (Berkeley) 6/11/1998') OSTYPE(bsd4.4)dnl DOMAIN(generic)dnl define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward+$h:$z/.forward')dnl --- 16,22 ---- # divert(0)dnl ! VERSIONID(`@(#)knecht.mc 8.31 (Berkeley) 1/30/1999') OSTYPE(bsd4.4)dnl DOMAIN(generic)dnl define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward+$h:$z/.forward')dnl *************** *** 27,36 **** define(`confTO_QUEUEWARN', `8h')dnl define(`confTRUSTED_USERS', `www')dnl define(`confPRIVACY_FLAGS', ``authwarnings,noexpn,novrfy'')dnl ! FEATURE(virtusertable)dnl FEATURE(access_db)dnl FEATURE(local_lmtp)dnl ! define(`LOCAL_MAILER_FLAGS', LOCAL_MAILER_FLAGS`'P)dnl MAILER(local)dnl MAILER(smtp)dnl --- 27,36 ---- define(`confTO_QUEUEWARN', `8h')dnl define(`confTRUSTED_USERS', `www')dnl define(`confPRIVACY_FLAGS', ``authwarnings,noexpn,novrfy'')dnl ! FEATURE(virtusertable, `hash /etc/mail/virtusertable')dnl FEATURE(access_db)dnl FEATURE(local_lmtp)dnl ! define(`LOCAL_MAILER_FLAGS', CONCAT(LOCAL_MAILER_FLAGS,P))dnl MAILER(local)dnl MAILER(smtp)dnl diff -cr sendmail-8.9.2/cf/feature/bestmx_is_local.m4 sendmail-8.9.3/cf/feature/bestmx_is_local.m4 *** sendmail-8.9.2/cf/feature/bestmx_is_local.m4 Tue Dec 29 09:42:12 1998 --- sendmail-8.9.3/cf/feature/bestmx_is_local.m4 Mon Jan 25 21:46:01 1999 *************** *** 12,18 **** # divert(0) ! VERSIONID(`@(#)bestmx_is_local.m4 8.13 (Berkeley) 8/13/1998') divert(-1) define(_BESTMX_IS_LOCAL_, _ARG_) --- 12,18 ---- # divert(0) ! VERSIONID(`@(#)bestmx_is_local.m4 8.14 (Berkeley) 1/25/1999') divert(-1) define(_BESTMX_IS_LOCAL_, _ARG_) *************** *** 44,48 **** --- 44,49 ---- # limit bestmx to $=B R$* < @ $* $=B . > $* $: $1 < @ $2 $3 . @@ $(bestmx $2 $3 . $) > $4') R$* $=O $* < @ $* @@ $=w . > $* $@ $>97 $1 $2 $3 + R< @ $* @@ $=w . > : $* $@ $>97 $3 R$* < @ $* @@ $=w . > $* $#local $: $1 R$* < @ $* @@ $* > $* $: $1 < @ $2 > $4 diff -cr sendmail-8.9.2/cf/m4/proto.m4 sendmail-8.9.3/cf/m4/proto.m4 *** sendmail-8.9.2/cf/m4/proto.m4 Tue Dec 29 09:42:07 1998 --- sendmail-8.9.3/cf/m4/proto.m4 Tue Feb 2 15:21:30 1999 *************** *** 12,18 **** # divert(0) ! VERSIONID(`@(#)proto.m4 8.237 (Berkeley) 12/17/1998') MAILER(local)dnl --- 12,18 ---- # divert(0) ! VERSIONID(`@(#)proto.m4 8.243 (Berkeley) 2/2/1999') MAILER(local)dnl *************** *** 478,483 **** --- 478,487 ---- `# Maximum MIME header length to protect MUAs O MaxMimeHeaderLength=confMAX_MIME_HEADER_LENGTH ') + ifdef(`confMAX_HEADERS_LENGTH', + `# Maximum length of the sum of all headers + O MaxHeadersLength=confMAX_HEADERS_LENGTH + ') ########################### # Message precedences # *************** *** 785,791 **** R$* <@ $+ > $* $: < $2 > $1 < @ $2 > $3 extract host name R< $+ . > $* $: < $1 > $2 strip trailing dot R< $+ > $* $: < $(mailertable $1 $) > $2 lookup ! R< $~[ : $+ > $* $>95 < $1 : $2 > $3 check -- resolved? R< $+ > $* $: $>90 <$1> $2 try domain', `dnl') undivert(4)dnl --- 789,795 ---- R$* <@ $+ > $* $: < $2 > $1 < @ $2 > $3 extract host name R< $+ . > $* $: < $1 > $2 strip trailing dot R< $+ > $* $: < $(mailertable $1 $) > $2 lookup ! R< $~[ : $* > $* $>95 < $1 : $2 > $3 check -- resolved? R< $+ > $* $: $>90 <$1> $2 try domain', `dnl') undivert(4)dnl *************** *** 873,879 **** R< > < $+ + $* > $* < > < $1 > + $2 $3 find the user part R< > < $+ > + $* $#_LOCAL_ $@ $2 $: @ $1 strip the extra + R< > < $+ > $@ $1 no +detail ! R$+ $: $1 $&h add +detail back in R< local : $* > $* $: $>95 < local : $1 > $2 no host extension R< error : $* > $* $: $>95 < error : $1 > $2 no host extension R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 > --- 877,885 ---- R< > < $+ + $* > $* < > < $1 > + $2 $3 find the user part R< > < $+ > + $* $#_LOCAL_ $@ $2 $: @ $1 strip the extra + R< > < $+ > $@ $1 no +detail ! R$+ $: $1 <> $&h add +detail back in ! R$+ <> + $* $: $1 + $2 check whether +detail ! R$+ <> $* $: $1 else discard R< local : $* > $* $: $>95 < local : $1 > $2 no host extension R< error : $* > $* $: $>95 < error : $1 > $2 no host extension R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 > *************** *** 886,895 **** S90 R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4 ! R$* <$~[ : $+ > $* $>95 < $2 : $3 > $4 check -- resolved? R$* < . $+ > $* $@ $>90 $1 . <$2> $3 no -- strip & try again R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 try "." ! R< $~[ : $+ > $* $>95 < $1 : $2 > $3 "." found? R< $* > $* $@ $2 no mailertable match', `dnl') --- 892,901 ---- S90 R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4 ! R$* <$~[ : $* > $* $>95 < $2 : $3 > $4 check -- resolved? R$* < . $+ > $* $@ $>90 $1 . <$2> $3 no -- strip & try again R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 try "." ! R< $~[ : $* > $* $>95 < $1 : $2 > $3 "." found? R< $* > $* $@ $2 no mailertable match', `dnl') *************** *** 911,916 **** --- 917,926 ---- ################################################################### SCanonLocal + # strip local host from routed addresses + R< $* > < @ $+ > : $+ $@ $>97 $3 + R< $* > $+ $=O $+ < @ $+ > $@ $>97 $2 $3 $4 + # strip trailing dot from any host name that may appear R< $* > $* < @ $* . > $: < $1 > $2 < @ $3 > *************** *** 1208,1214 **** R$* < @ $* > $* $: $1 < @ $2 @@ $(bestmx $2 $) > $3', `dnl # limit bestmx to $=B ! R$* < @ $* $=B > $* $: $1 < @ $2 $3 . @@ $(bestmx $2 $3 $) > $4') R$* $=O $* < @ $* @@ $=w . > $* $@ $>Basic_check_rcpt $1 $2 $3 R$* < @ $* @@ $=w . > $* $: $1 < @ $3 > $4 R$* < @ $* @@ $* > $* $: $1 < @ $2 > $4') --- 1218,1224 ---- R$* < @ $* > $* $: $1 < @ $2 @@ $(bestmx $2 $) > $3', `dnl # limit bestmx to $=B ! R$* < @ $* $=B > $* $: $1 < @ $2 $3 @@ $(bestmx $2 $3 $) > $4') R$* $=O $* < @ $* @@ $=w . > $* $@ $>Basic_check_rcpt $1 $2 $3 R$* < @ $* @@ $=w . > $* $: $1 < @ $3 > $4 R$* < @ $* @@ $* > $* $: $1 < @ $2 > $4') diff -cr sendmail-8.9.2/cf/m4/version.m4 sendmail-8.9.3/cf/m4/version.m4 *** sendmail-8.9.2/cf/m4/version.m4 Tue Dec 29 09:58:11 1998 --- sendmail-8.9.3/cf/m4/version.m4 Thu Feb 4 16:39:05 1999 *************** *** 10,17 **** # the sendmail distribution. # # ! VERSIONID(`@(#)version.m4 8.9.2.1 (Berkeley) 12/29/1998') # divert(0) # Configuration version number ! DZ8.9.2`'ifdef(`confCF_VERSION', `/confCF_VERSION') --- 10,17 ---- # the sendmail distribution. # # ! VERSIONID(`@(#)version.m4 8.9.3.1 (Berkeley) 2/4/1999') # divert(0) # Configuration version number ! DZ8.9.3`'ifdef(`confCF_VERSION', `/confCF_VERSION') diff -cr sendmail-8.9.2/cf/ostype/sco-uw-2.1.m4 sendmail-8.9.3/cf/ostype/sco-uw-2.1.m4 *** sendmail-8.9.2/cf/ostype/sco-uw-2.1.m4 Tue Dec 29 09:42:10 1998 --- sendmail-8.9.3/cf/ostype/sco-uw-2.1.m4 Mon Jan 25 21:29:25 1999 *************** *** 12,18 **** # Contributed by Christopher Durham of SCO. # divert(0) ! VERSIONID(`@(#)sco-uw-2.1.m4 8.7 (Berkeley) 10/6/1998') define(`ALIAS_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/aliases', `/usr/lib/mail/aliases'))dnl ifdef(`HELP_FILE',,`define(`HELP_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/helpfile', `/usr/ucblib/sendmail.hf'))')dnl --- 12,18 ---- # Contributed by Christopher Durham of SCO. # divert(0) ! VERSIONID(`@(#)sco-uw-2.1.m4 8.8 (Berkeley) 1/25/1999') define(`ALIAS_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/aliases', `/usr/lib/mail/aliases'))dnl ifdef(`HELP_FILE',,`define(`HELP_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/helpfile', `/usr/ucblib/sendmail.hf'))')dnl *************** *** 23,25 **** --- 23,26 ---- define(`UUCP_MAILER_ARGS', `uux - -r -a$g -gmedium $h!rmail ($u)')dnl define(`LOCAL_MAILER_ARGS',`rmail $u')dnl define(`confEBINDIR', `/usr/lib')dnl + define(`confTIME_ZONE', `USE_TZ')dnl diff -cr sendmail-8.9.2/cf/ostype/unixware7.m4 sendmail-8.9.3/cf/ostype/unixware7.m4 *** sendmail-8.9.2/cf/ostype/unixware7.m4 Tue Dec 29 09:42:10 1998 --- sendmail-8.9.3/cf/ostype/unixware7.m4 Mon Jan 25 21:29:25 1999 *************** *** 9,16 **** # divert(0) ! VERSIONID(`@(#)unixware7.m4 8.1 (Berkeley) 10/13/1998') define(`ALIAS_FILE', `/etc/mail/aliases')dnl ifdef(`QUEUE_DIR',, `define(`QUEUE_DIR', /usr/spool/mqueue)')dnl ifdef(`STATUS_FILE',, `define(`STATUS_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/statistics', `/etc/mailer/sendmail.st'))')dnl define(`confEBINDIR', `/usr/lib')dnl --- 9,17 ---- # divert(0) ! VERSIONID(`@(#)unixware7.m4 8.2 (Berkeley) 1/25/1999') define(`ALIAS_FILE', `/etc/mail/aliases')dnl ifdef(`QUEUE_DIR',, `define(`QUEUE_DIR', /usr/spool/mqueue)')dnl ifdef(`STATUS_FILE',, `define(`STATUS_FILE', ifdef(`_USE_ETC_MAIL_', `/etc/mail/statistics', `/etc/mailer/sendmail.st'))')dnl define(`confEBINDIR', `/usr/lib')dnl + define(`confTIME_ZONE', `USE_TZ')dnl diff -cr sendmail-8.9.2/doc/op/op.me sendmail-8.9.3/doc/op/op.me *** sendmail-8.9.2/doc/op/op.me Tue Dec 29 09:42:02 1998 --- sendmail-8.9.3/doc/op/op.me Fri Jan 22 15:58:30 1999 *************** *** 8,14 **** .\" the sendmail distribution. .\" .\" ! .\" @(#)op.me 8.134 (Berkeley) 9/16/1998 .\" .\" eqn op.me | pic | troff -me .eh 'SMM:08-%''Sendmail Installation and Operation Guide' --- 8,14 ---- .\" the sendmail distribution. .\" .\" ! .\" @(#)op.me 8.135 (Berkeley) 1/16/1999 .\" .\" eqn op.me | pic | troff -me .eh 'SMM:08-%''Sendmail Installation and Operation Guide' *************** *** 46,52 **** Sendmail, Inc. eric@Sendmail.COM .sp ! Version 8.134 .sp For Sendmail Version 8.9 .)l --- 46,52 ---- Sendmail, Inc. eric@Sendmail.COM .sp ! Version 8.135 .sp For Sendmail Version 8.9 .)l *************** *** 812,818 **** .q /etc/sendmail.st : .(b cp /dev/null /etc/sendmail.st ! chmod 666 /etc/sendmail.st .)b This file does not grow. It is printed with the program --- 812,818 ---- .q /etc/sendmail.st : .(b cp /dev/null /etc/sendmail.st ! chmod 644 /etc/sendmail.st .)b This file does not grow. It is printed with the program *************** *** 2870,2875 **** --- 2870,2886 ---- flags with the DontBlameSendmail option to allow forward files in a world writable directory. + This might also be used as a + denial of service + attack (users could create forward files for other users); + a better approach might be to create + /var/forward + mode 755 + and create empty files for each user, + owned by that user, + mode 644. + If you do this, you don't have to set the DontBlameSendmail options + indicated above. .sh 2 "Free Space" .pp On systems that have one of the system calls in the *************** *** 8213,8219 **** .\".sz 10 .\"Eric Allman .\".sp ! .\"Version 8.134 .\".ce 0 .bp 3 .ce --- 8224,8230 ---- .\".sz 10 .\"Eric Allman .\".sp ! .\"Version 8.135 .\".ce 0 .bp 3 .ce Only in sendmail-8.9.3/mail.local: Build Only in sendmail-8.9.3/mailstats: Build diff -cr sendmail-8.9.2/mailstats/mailstats.c sendmail-8.9.3/mailstats/mailstats.c *** sendmail-8.9.2/mailstats/mailstats.c Tue Dec 29 09:42:01 1998 --- sendmail-8.9.3/mailstats/mailstats.c Mon Jan 25 10:01:28 1999 *************** *** 18,24 **** #endif /* not lint */ #ifndef lint ! static char sccsid[] = "@(#)mailstats.c 8.28 (Berkeley) 9/14/1998"; #endif /* not lint */ #ifndef NOT_SENDMAIL --- 18,24 ---- #endif /* not lint */ #ifndef lint ! static char sccsid[] = "@(#)mailstats.c 8.29 (Berkeley) 1/25/1999"; #endif /* not lint */ #ifndef NOT_SENDMAIL *************** *** 283,289 **** frmsgs, frbytes, tomsgs, tobytes, rejmsgs, dismsgs); close(fd); fd = open(sfile, O_RDWR | O_TRUNC); ! if (fd > 0) close(fd); } else --- 283,289 ---- frmsgs, frbytes, tomsgs, tobytes, rejmsgs, dismsgs); close(fd); fd = open(sfile, O_RDWR | O_TRUNC); ! if (fd >= 0) close(fd); } else Only in sendmail-8.9.3/makemap: Build Only in sendmail-8.9.3/praliases: Build Only in sendmail-8.9.3/rmail: Build Only in sendmail-8.9.3/smrsh: Build diff -cr sendmail-8.9.2/src/Build sendmail-8.9.3/src/Build *** sendmail-8.9.2/src/Build Tue Dec 29 09:40:09 1998 --- sendmail-8.9.3/src/Build Sat Jan 23 15:53:26 1999 *************** *** 10,16 **** # the sendmail distribution. # # ! # @(#)Build 8.93 (Berkeley) 6/24/1998 # # --- 10,16 ---- # the sendmail distribution. # # ! # @(#)Build 8.94 (Berkeley) 1/23/1999 # # *************** *** 190,195 **** --- 190,199 ---- NILE*) arch=NILE os=`uname -v`;; + + CRAYT3E|CRAYTS) + os=$arch;; + esac # tweak operating system type and release diff -cr sendmail-8.9.2/src/Makefile.m4 sendmail-8.9.3/src/Makefile.m4 *** sendmail-8.9.2/src/Makefile.m4 Tue Dec 29 09:42:27 1998 --- sendmail-8.9.3/src/Makefile.m4 Sat Jan 23 15:51:41 1999 *************** *** 2,8 **** # This Makefile is designed to work on any reasonably current version of # "make" program. # ! # @(#)Makefile.m4 8.25 (Berkeley) 10/5/1998 # # C compiler --- 2,8 ---- # This Makefile is designed to work on any reasonably current version of # "make" program. # ! # @(#)Makefile.m4 8.26 (Berkeley) 1/23/1999 # # C compiler *************** *** 103,117 **** MAN8EXT=ifdef(`confMAN8EXT', `confMAN8EXT', `8') MAN8SRC=ifdef(`confMAN8SRC', `confMAN8SRC', `0') ! ALL= sendmail aliases.${MAN5SRC} mailq.${MAN1SRC} newaliases.${MAN1SRC} sendmail.${MAN8SRC} all: ${ALL} sendmail: ${BEFORE} ${OBJS} ${CC} -o sendmail ${LDOPTS} ${LIBDIRS} ${OBJS} ${LIBS} - cp /dev/null sendmail.st undivert(3) aliases.${MAN5SRC}: aliases.5 ${NROFF} ${MANDOC} aliases.5 > aliases.${MAN5SRC} --- 103,119 ---- MAN8EXT=ifdef(`confMAN8EXT', `confMAN8EXT', `8') MAN8SRC=ifdef(`confMAN8SRC', `confMAN8SRC', `0') ! ALL= sendmail sendmail.st aliases.${MAN5SRC} mailq.${MAN1SRC} newaliases.${MAN1SRC} sendmail.${MAN8SRC} all: ${ALL} sendmail: ${BEFORE} ${OBJS} ${CC} -o sendmail ${LDOPTS} ${LIBDIRS} ${OBJS} ${LIBS} undivert(3) + + sendmail.st: + cp /dev/null sendmail.st aliases.${MAN5SRC}: aliases.5 ${NROFF} ${MANDOC} aliases.5 > aliases.${MAN5SRC} diff -cr sendmail-8.9.2/src/README sendmail-8.9.3/src/README *** sendmail-8.9.2/src/README Tue Dec 29 09:42:13 1998 --- sendmail-8.9.3/src/README Thu Feb 4 16:25:04 1999 *************** *** 8,14 **** # the sendmail distribution. # # ! # @(#)README 8.209 (Berkeley) 10/6/1998 # This directory contains the source files for sendmail(TM). --- 8,14 ---- # the sendmail distribution. # # ! # @(#)README 8.211 (Berkeley) 2/2/1999 # This directory contains the source files for sendmail(TM). *************** *** 115,122 **** work. You may be able to get this to work with the MIT/Athena version of Hesiod, but that's likely to be a lot of work. LDAPMAP Lightweight Directory Lookup Protocol support. You will ! have to install the UMich ldap and lber libraries to use ! this flag. MAP_REGEX Regular Expression support. You will need to use an operating system which comes with the POSIX regex() routines or install a regexp library such as libregex from --- 115,122 ---- work. You may be able to get this to work with the MIT/Athena version of Hesiod, but that's likely to be a lot of work. LDAPMAP Lightweight Directory Lookup Protocol support. You will ! have to install the UMich or OpenLDAP ldap and lber ! libraries to use this flag. MAP_REGEX Regular Expression support. You will need to use an operating system which comes with the POSIX regex() routines or install a regexp library such as libregex from *************** *** 1078,1083 **** --- 1078,1089 ---- to LIBS. Data structures may change and you'd be asking for a core dump. + A number of problems have been reported regarding the Linux 2.2.0 + kernel. So far, these problems have been tracked down to syslog() + and DNS resolution. We believe the problem is with the poll() + implementation in the Linux 2.2.0 kernel and poll()-aware versions + of glib (at least up to 2.0.111). + AIX 4.2 The AIX m4 implements a different mechanism for ifdef which is inconsistent with other versions of m4. Therefore, it will not *************** *** 1315,1320 **** --- 1321,1329 ---- The software has been in production on Solaris.2.5.1 at Stanford for over 2 years. + The LDAP map supports both the UMich LDAP 3.2 and 3.3 libraries as + well as the OpenLDAP (http://www.openldap.org/) libraries. + TCP Wrappers If you are using -DTCPWRAPPERS to get TCP Wrappers support you will also need to install libwrap.a and modify your site.config.m4 file *************** *** 1452,1455 **** Eric Allman ! (Version 8.209, last update 10/6/1998 17:10:21) --- 1461,1464 ---- Eric Allman ! (Version 8.211, last update 2/2/1999 15:28:18) diff -cr sendmail-8.9.2/src/arpadate.c sendmail-8.9.3/src/arpadate.c *** sendmail-8.9.2/src/arpadate.c Tue Dec 29 09:42:17 1998 --- sendmail-8.9.3/src/arpadate.c Tue Feb 2 15:16:46 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)arpadate.c 8.12 (Berkeley) 5/19/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)arpadate.c 8.14 (Berkeley) 2/2/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 73,79 **** ** to resolve the timezone. */ ! (void) time(&t); if (ud == NULL) ud = ctime(&t); --- 73,79 ---- ** to resolve the timezone. */ ! t = curtime(); if (ud == NULL) ud = ctime(&t); *************** *** 156,162 **** { extern char *tzname[]; ! tz = tzname[lt->tm_isdst]; } #endif #if TZ_TYPE == TZ_TIMEZONE --- 156,167 ---- { extern char *tzname[]; ! if (lt->tm_isdst > 0) ! tz = tzname[1]; ! else if (lt->tm_isdst == 0) ! tz = tzname[0]; ! else ! tz = NULL; } #endif #if TZ_TYPE == TZ_TIMEZONE diff -cr sendmail-8.9.2/src/clock.c sendmail-8.9.3/src/clock.c *** sendmail-8.9.2/src/clock.c Tue Dec 29 09:42:21 1998 --- sendmail-8.9.3/src/clock.c Tue Feb 2 15:16:46 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)clock.c 8.34 (Berkeley) 6/4/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)clock.c 8.35 (Berkeley) 2/2/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 60,66 **** } wasblocked = blocksignal(SIGALRM); ! (void) time(&now); /* search event queue for correct position */ for (evp = &EventQueue; (ev = *evp) != NULL; evp = &ev->ev_link) --- 60,66 ---- } wasblocked = blocksignal(SIGALRM); ! now = curtime(); /* search event queue for correct position */ for (evp = &EventQueue; (ev = *evp) != NULL; evp = &ev->ev_link) diff -cr sendmail-8.9.2/src/collect.c sendmail-8.9.3/src/collect.c *** sendmail-8.9.2/src/collect.c Tue Dec 29 09:42:18 1998 --- sendmail-8.9.3/src/collect.c Tue Jan 26 16:15:52 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)collect.c 8.91 (Berkeley) 8/19/1998"; #endif /* not lint */ # include --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)collect.c 8.93 (Berkeley) 1/26/1999"; #endif /* not lint */ # include *************** *** 57,62 **** --- 57,63 ---- #define MS_UFROM 0 /* reading Unix from line */ #define MS_HEADER 1 /* reading message header */ #define MS_BODY 2 /* reading message body */ + #define MS_DISCARD 3 /* discarding rest of message */ void collect(fp, smtpmode, hdrp, e) *************** *** 77,82 **** --- 78,84 ---- volatile int istate; volatile int mstate; u_char *volatile pbp; + int hdrslen = 0; u_char peekbuf[8]; char dfname[MAXQFNAME]; char bufbuf[MAXLINE]; *************** *** 262,273 **** bufferchar: if (!headeronly) e->e_msgsize++; ! if (mstate == MS_BODY) { /* just put the character out */ if (MaxMessageSize <= 0 || e->e_msgsize <= MaxMessageSize) putc(c, tf); continue; } --- 264,280 ---- bufferchar: if (!headeronly) e->e_msgsize++; ! switch (mstate) { + case MS_BODY: /* just put the character out */ if (MaxMessageSize <= 0 || e->e_msgsize <= MaxMessageSize) putc(c, tf); + + /* fall through */ + + case MS_DISCARD: continue; } *************** *** 298,304 **** --- 305,327 ---- #endif } else if (c != '\0') + { *bp++ = c; + if (MaxHeadersLength > 0 && + ++hdrslen > MaxHeadersLength) + { + sm_syslog(LOG_NOTICE, e->e_id, + "headers too large (%d max) from %s during message collect", + MaxHeadersLength, + CurHostName != NULL ? CurHostName : "localhost"); + errno = 0; + e->e_flags |= EF_CLRQUEUE; + e->e_status = "5.6.0"; + usrerr("552 Headers too large (%d max)", + MaxHeadersLength); + mstate = MS_DISCARD; + } + } if (istate == IS_BOL) break; } *************** *** 350,355 **** --- 373,379 ---- if (*--bp != '\n' || *--bp != '\r') bp++; *bp = '\0'; + if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e))) { mstate = MS_BODY; diff -cr sendmail-8.9.2/src/conf.c sendmail-8.9.3/src/conf.c *** sendmail-8.9.2/src/conf.c Tue Dec 29 09:42:24 1998 --- sendmail-8.9.3/src/conf.c Tue Jan 26 16:15:52 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)conf.c 8.450 (Berkeley) 12/17/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)conf.c 8.452 (Berkeley) 1/26/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 284,289 **** --- 284,290 ---- ColonOkInAddr = TRUE; DontLockReadFiles = TRUE; DoubleBounceAddr = "postmaster"; + MaxHeadersLength = MAXHDRSLEN; snprintf(buf, sizeof buf, "%s%sdead.letter", _PATH_VARTMP, _PATH_VARTMP[sizeof _PATH_VARTMP - 2] == '/' ? "" : "/"); diff -cr sendmail-8.9.2/src/conf.h sendmail-8.9.3/src/conf.h *** sendmail-8.9.2/src/conf.h Tue Dec 29 09:42:16 1998 --- sendmail-8.9.3/src/conf.h Thu Jan 28 15:28:34 1999 *************** *** 9,15 **** * the sendmail distribution. * * ! * @(#)conf.h 8.380 (Berkeley) 11/9/1998 */ /* --- 9,15 ---- * the sendmail distribution. * * ! * @(#)conf.h 8.385 (Berkeley) 1/28/1999 */ /* *************** *** 69,74 **** --- 69,77 ---- # else # define MAXMACNAMELEN 20 /* max macro name length */ # endif + # ifndef MAXHDRSLEN + # define MAXHDRSLEN (32 * 1024) /* max size of message headers */ + # endif /********************************************************************** ** Compilation options. *************** *** 1296,1305 **** # endif # define SFS_TYPE SFS_VFS /* use statfs() impl */ # define SPT_PADCHAR '\0' /* pad process title with nulls */ # ifndef _PATH_SENDMAILPID # define _PATH_SENDMAILPID "/var/run/sendmail.pid" # endif - # define TZ_TYPE TZ_TZNAME # include # undef atol /* wounded in */ #endif --- 1299,1310 ---- # endif # define SFS_TYPE SFS_VFS /* use statfs() impl */ # define SPT_PADCHAR '\0' /* pad process title with nulls */ + # ifndef TZ_TYPE + # define TZ_TYPE TZ_NONE /* no standard for Linux */ + # endif # ifndef _PATH_SENDMAILPID # define _PATH_SENDMAILPID "/var/run/sendmail.pid" # endif # include # undef atol /* wounded in */ #endif diff -cr sendmail-8.9.2/src/control.c sendmail-8.9.3/src/control.c *** sendmail-8.9.2/src/control.c Tue Dec 29 09:42:26 1998 --- sendmail-8.9.3/src/control.c Sun Jan 17 14:57:33 1999 *************** *** 8,14 **** */ #ifndef lint ! static char sccsid[] = "@(#)control.c 8.17 (Berkeley) 12/1/1998"; #endif /* not lint */ #include "sendmail.h" --- 8,14 ---- */ #ifndef lint ! static char sccsid[] = "@(#)control.c 8.18 (Berkeley) 1/17/1999"; #endif /* not lint */ #include "sendmail.h" *************** *** 70,77 **** { int save_errno = errno; ! (void) close(ControlSocket); ! ControlSocket = -1; errno = save_errno; return -1; } --- 70,76 ---- { int save_errno = errno; ! clrcontrol(); errno = save_errno; return -1; } *************** *** 88,93 **** --- 87,93 ---- ControlSocketName, errstring(save_errno)); message("050 ownership change on %s failed: %s", ControlSocketName, errstring(save_errno)); + closecontrolsocket(TRUE); errno = save_errno; return -1; } diff -cr sendmail-8.9.2/src/daemon.c sendmail-8.9.3/src/daemon.c *** sendmail-8.9.2/src/daemon.c Tue Dec 29 09:42:20 1998 --- sendmail-8.9.3/src/daemon.c Mon Jan 25 20:00:16 1999 *************** *** 15,23 **** #ifndef lint #ifdef DAEMON ! static char sccsid[] = "@(#)daemon.c 8.234 (Berkeley) 12/17/1998 (with daemon mode)"; #else ! static char sccsid[] = "@(#)daemon.c 8.234 (Berkeley) 12/17/1998 (without daemon mode)"; #endif #endif /* not lint */ --- 15,23 ---- #ifndef lint #ifdef DAEMON ! static char sccsid[] = "@(#)daemon.c 8.236 (Berkeley) 1/25/1999 (with daemon mode)"; #else ! static char sccsid[] = "@(#)daemon.c 8.236 (Berkeley) 1/25/1999 (without daemon mode)"; #endif #endif /* not lint */ *************** *** 178,185 **** if (opencontrolsocket() < 0) sm_syslog(LOG_WARNING, NOQID, ! "daemon could not open control socket: %s", ! errstring(errno)); (void) setsignal(SIGCHLD, reapchild); --- 178,185 ---- if (opencontrolsocket() < 0) sm_syslog(LOG_WARNING, NOQID, ! "daemon could not open control socket %s: %s", ! ControlSocketName, errstring(errno)); (void) setsignal(SIGCHLD, reapchild); *************** *** 503,509 **** } /* parent -- keep track of children */ ! snprintf(status, MAXLINE, "SMTP server child for %s", anynet_ntoa(&RealHostAddr)); proc_list_add(pid, status); (void) releasesignal(SIGCHLD); --- 503,509 ---- } /* parent -- keep track of children */ ! snprintf(status, sizeof status, "SMTP server child for %s", anynet_ntoa(&RealHostAddr)); proc_list_add(pid, status); (void) releasesignal(SIGCHLD); diff -cr sendmail-8.9.2/src/deliver.c sendmail-8.9.3/src/deliver.c *** sendmail-8.9.2/src/deliver.c Tue Dec 29 09:42:23 1998 --- sendmail-8.9.3/src/deliver.c Mon Jan 18 16:35:11 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)deliver.c 8.366 (Berkeley) 12/18/1998"; #endif /* not lint */ #include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)deliver.c 8.367 (Berkeley) 1/18/1999"; #endif /* not lint */ #include "sendmail.h" *************** *** 2003,2009 **** mci->mci_contentlen = 0; putfromline(mci, e); ! (*e->e_puthdr)(mci, e->e_header, e); (*e->e_putbody)(mci, e, NULL); /* get the exit status */ --- 2003,2009 ---- mci->mci_contentlen = 0; putfromline(mci, e); ! (*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER); (*e->e_putbody)(mci, e, NULL); /* get the exit status */ *************** *** 3569,3575 **** #endif putfromline(&mcibuf, e); ! (*e->e_puthdr)(&mcibuf, e->e_header, e); (*e->e_putbody)(&mcibuf, e, NULL); putline("\n", &mcibuf); if (fflush(f) < 0 || ferror(f)) --- 3569,3575 ---- #endif putfromline(&mcibuf, e); ! (*e->e_puthdr)(&mcibuf, e->e_header, e, M87F_OUTER); (*e->e_putbody)(&mcibuf, e, NULL); putline("\n", &mcibuf); if (fflush(f) < 0 || ferror(f)) diff -cr sendmail-8.9.2/src/domain.c sendmail-8.9.3/src/domain.c *** sendmail-8.9.2/src/domain.c Tue Dec 29 09:42:17 1998 --- sendmail-8.9.3/src/domain.c Thu Jan 21 22:15:50 1999 *************** *** 14,22 **** #ifndef lint #if NAMED_BIND ! static char sccsid[] = "@(#)domain.c 8.80 (Berkeley) 12/17/1998 (with name server)"; #else ! static char sccsid[] = "@(#)domain.c 8.80 (Berkeley) 12/17/1998 (without name server)"; #endif #endif /* not lint */ --- 14,22 ---- #ifndef lint #if NAMED_BIND ! static char sccsid[] = "@(#)domain.c 8.81 (Berkeley) 1/21/1999 (with name server)"; #else ! static char sccsid[] = "@(#)domain.c 8.81 (Berkeley) 1/21/1999 (without name server)"; #endif #endif /* not lint */ *************** *** 446,452 **** int *statp; { int nmx; - auto int rcode; int saveopts = _res.options; int i, len = 0; char *p; --- 446,451 ---- *************** *** 454,460 **** char buf[PSBUFSIZE / 2]; _res.options &= ~(RES_DNSRCH|RES_DEFNAMES); ! nmx = getmxrr(name, mxhosts, FALSE, &rcode); _res.options = saveopts; if (nmx <= 0) return NULL; --- 453,459 ---- char buf[PSBUFSIZE / 2]; _res.options &= ~(RES_DNSRCH|RES_DEFNAMES); ! nmx = getmxrr(name, mxhosts, FALSE, statp); _res.options = saveopts; if (nmx <= 0) return NULL; diff -cr sendmail-8.9.2/src/envelope.c sendmail-8.9.3/src/envelope.c *** sendmail-8.9.2/src/envelope.c Tue Dec 29 09:42:16 1998 --- sendmail-8.9.3/src/envelope.c Mon Jan 25 16:52:43 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)envelope.c 8.121 (Berkeley) 12/18/1998"; #endif /* not lint */ #include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)envelope.c 8.122 (Berkeley) 1/25/1999"; #endif /* not lint */ #include "sendmail.h" *************** *** 800,806 **** if (FullName != NULL && !internal) define('x', FullName, e); } ! else if (!internal && OpMode != MD_DAEMON) { if (e->e_from.q_home == NULL) { --- 800,806 ---- if (FullName != NULL && !internal) define('x', FullName, e); } ! else if (!internal && OpMode != MD_DAEMON && OpMode != MD_SMTP) { if (e->e_from.q_home == NULL) { diff -cr sendmail-8.9.2/src/headers.c sendmail-8.9.3/src/headers.c *** sendmail-8.9.2/src/headers.c Tue Dec 29 09:42:15 1998 --- sendmail-8.9.3/src/headers.c Tue Jan 26 06:54:50 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)headers.c 8.134 (Berkeley) 11/29/1998"; #endif /* not lint */ # include --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)headers.c 8.136 (Berkeley) 1/26/1999"; #endif /* not lint */ # include *************** *** 77,82 **** --- 77,83 ---- bool headeronly; STAB *s; struct hdrinfo *hi; + bool nullheader = FALSE; BITMAP mopts; if (tTd(31, 6)) *************** *** 123,133 **** return 0; } *fvalue = '\0'; - fvalue = p; /* strip field value on front */ ! if (*fvalue == ' ') ! fvalue++; /* security scan: long field names are end-of-header */ if (strlen(fname) > 100) --- 124,140 ---- return 0; } *fvalue = '\0'; /* strip field value on front */ ! if (*p == ' ') ! p++; ! fvalue = p; ! ! /* if the field is null, go ahead and use the default */ ! while (isascii(*p) && isspace(*p)) ! p++; ! if (*p == '\0') ! nullheader = TRUE; /* security scan: long field names are end-of-header */ if (strlen(fname) > 100) *************** *** 236,241 **** --- 243,253 ---- bitset(H_DEFAULT, h->h_flags) && !bitset(H_FORCE, h->h_flags)) { + if (nullheader) + { + /* user-supplied value was null */ + return 0; + } h->h_value = NULL; if (!cond) { *************** *** 1149,1154 **** --- 1161,1167 ---- ** mci -- the connection information. ** h -- the header to put. ** e -- envelope to use. + ** flags -- MIME conversion flags. ** ** Returns: ** none. *************** *** 1165,1174 **** #endif void ! putheader(mci, hdr, e) register MCI *mci; HDR *hdr; register ENVELOPE *e; { register HDR *h; char buf[MAX(MAXLINE,BUFSIZ)]; --- 1178,1188 ---- #endif void ! putheader(mci, hdr, e, flags) register MCI *mci; HDR *hdr; register ENVELOPE *e; + int flags; { register HDR *h; char buf[MAX(MAXLINE,BUFSIZ)]; *************** *** 1251,1259 **** } #endif ! /* suppress Content-Transfer-Encoding: if we are MIMEing */ if (bitset(H_CTE, h->h_flags) && ! bitset(MCIF_CVT8TO7|MCIF_CVT7TO8|MCIF_INMIME, mci->mci_flags)) { if (tTd(34, 11)) printf(" (skipped (content-transfer-encoding))\n"); --- 1265,1280 ---- } #endif ! /* ! ** Suppress Content-Transfer-Encoding: if we are MIMEing ! ** and we are potentially converting from 8 bit to 7 bit ! ** MIME. If converting, add a new CTE header in ! ** mime8to7(). ! */ if (bitset(H_CTE, h->h_flags) && ! bitset(MCIF_CVT8TO7|MCIF_CVT7TO8|MCIF_INMIME, ! mci->mci_flags) && ! !bitset(M87F_NO8TO7, flags)) { if (tTd(34, 11)) printf(" (skipped (content-transfer-encoding))\n"); diff -cr sendmail-8.9.2/src/ldap_map.h sendmail-8.9.3/src/ldap_map.h *** sendmail-8.9.2/src/ldap_map.h Tue Dec 29 09:42:27 1998 --- sendmail-8.9.3/src/ldap_map.h Tue Feb 2 12:10:21 1999 *************** *** 14,20 **** ** Please go to him for support -- since I (Eric) don't run LDAP, I ** can't help you at all. ** ! ** @(#)ldap_map.h 8.10 (Berkeley) 9/14/1998 */ #ifndef _LDAP_MAP_H --- 14,20 ---- ** Please go to him for support -- since I (Eric) don't run LDAP, I ** can't help you at all. ** ! ** @(#)ldap_map.h 8.12 (Berkeley) 2/2/1999 */ #ifndef _LDAP_MAP_H *************** *** 67,71 **** --- 67,91 ---- #else /* LDAP_REFERRALS */ # define DEFAULT_LDAP_MAP_LDAP_OPTIONS 0 #endif /* LDAP_REFERRALS */ + + /* + ** ldap_init(3) is broken in Umich 3.x and OpenLDAP 1.0/1.1. + ** Use the lack of LDAP_OPT_SIZELIMIT to detect old API implementations + ** and assume (falsely) that all old API implementations are broken. + ** (OpenLDAP 1.2 and later have a working ldap_init(), add -DUSE_LDAP_INIT) + */ + + #if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT) + # define USE_LDAP_INIT 1 + #endif + + /* + ** LDAP_OPT_SIZELIMIT is not defined under Umich 3.x nor OpenLDAP 1.x, + ** hence ldap_set_option() must not exist. + */ + + #if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION) + # define USE_LDAP_SET_OPTION 1 + #endif #endif /* _LDAP_MAP_H */ Only in sendmail-8.9.3/src: makesendmail diff -cr sendmail-8.9.2/src/map.c sendmail-8.9.3/src/map.c *** sendmail-8.9.2/src/map.c Tue Dec 29 09:42:26 1998 --- sendmail-8.9.3/src/map.c Tue Feb 2 12:10:21 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)map.c 8.256 (Berkeley) 11/15/1998"; #endif /* not lint */ #include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)map.c 8.261 (Berkeley) 2/2/1999"; #endif /* not lint */ #include "sendmail.h" *************** *** 1877,1885 **** ** opened by another process will interfere ** with the shared memory and locks of the parent ** process leaving things in a bad state. ! ** ** If this map was not opened by the current ! ** process, do not close it here but recover ** the file descriptor. */ if (map->map_pid != getpid()) --- 1877,1887 ---- ** opened by another process will interfere ** with the shared memory and locks of the parent ** process leaving things in a bad state. ! */ ! ! /* ** If this map was not opened by the current ! ** process, do not close the map but recover ** the file descriptor. */ if (map->map_pid != getpid()) *************** *** 2670,2676 **** ev = setevent(lmap->timeout.tv_sec, ldaptimeout, 0); } ! #ifdef LDAP_VERSION3 ld = ldap_init(lmap->ldaphost,lmap->ldapport); #else ld = ldap_open(lmap->ldaphost,lmap->ldapport); --- 2672,2678 ---- ev = setevent(lmap->timeout.tv_sec, ldaptimeout, 0); } ! #ifdef USE_LDAP_INIT ld = ldap_init(lmap->ldaphost,lmap->ldapport); #else ld = ldap_open(lmap->ldaphost,lmap->ldapport); *************** *** 2691,2713 **** return FALSE; } ! #ifdef LDAP_VERSION3 ldap_set_option(ld, LDAP_OPT_DEREF, &lmap->deref); ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->timelimit); ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->sizelimit); ! ldap_set_option(ld, LDAP_OPT_REFERRALS, &lmap->ldap_options); ! ! /* ld needs to be cast into the map struct */ ! lmap->ld = ld; ! return TRUE; #else - /* From here on in we can use ldap internal timelimits */ ld->ld_deref = lmap->deref; ld->ld_timelimit = lmap->timelimit; ld->ld_sizelimit = lmap->sizelimit; ld->ld_options = lmap->ldap_options; if (ldap_bind_s(ld, lmap->binddn,lmap->passwd,lmap->method) != LDAP_SUCCESS) { if (!bitset(MF_OPTIONAL, map->map_mflags)) --- 2693,2718 ---- return FALSE; } ! #ifdef USE_LDAP_SET_OPTION ldap_set_option(ld, LDAP_OPT_DEREF, &lmap->deref); ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->timelimit); ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->sizelimit); ! ldap_set_option(ld, LDAP_OPT_REFERRALS, ! bitset(LDAP_OPT_REFERRALS, lmap->ldap_options) ? ! LDAP_OPT_ON : LDAP_OPT_OFF); #else /* From here on in we can use ldap internal timelimits */ ld->ld_deref = lmap->deref; ld->ld_timelimit = lmap->timelimit; ld->ld_sizelimit = lmap->sizelimit; ld->ld_options = lmap->ldap_options; + #endif + #ifdef USE_LDAP_INIT + /* ld needs to be cast into the map struct */ + lmap->ld = ld; + return TRUE; + #else if (ldap_bind_s(ld, lmap->binddn,lmap->passwd,lmap->method) != LDAP_SUCCESS) { if (!bitset(MF_OPTIONAL, map->map_mflags)) *************** *** 2729,2747 **** /* ! ** LDAP_MAP_CLOSE -- close ldap map */ void ! ldap_map_close(map) MAP *map; { ! LDAP_MAP_STRUCT *lmap ; lmap = (LDAP_MAP_STRUCT *) map->map_db1; if (lmap->ld != NULL) ldap_unbind(lmap->ld); } #ifdef SUNET_ID /* --- 2734,2766 ---- /* ! ** LDAP_MAP_STOP -- close the ldap connection */ void ! ldap_map_stop(map) MAP *map; { ! LDAP_MAP_STRUCT *lmap; ! lmap = (LDAP_MAP_STRUCT *) map->map_db1; if (lmap->ld != NULL) + { ldap_unbind(lmap->ld); + lmap->ld = NULL; + } } + /* + ** LDAP_MAP_CLOSE -- close ldap map + */ + + void + ldap_map_close(map) + MAP *map; + { + ldap_map_stop(map); + } #ifdef SUNET_ID /* *************** *** 2855,2862 **** lmap->attr, lmap->attrsonly, &(lmap->timeout), &(lmap->res)) != LDAP_SUCCESS) { ! /* try close/opening map */ ! ldap_map_close(map); if (!ldap_map_start(map)) { result = NULL; --- 2874,2881 ---- lmap->attr, lmap->attrsonly, &(lmap->timeout), &(lmap->res)) != LDAP_SUCCESS) { ! /* try stopping/starting map */ ! ldap_map_stop(map); if (!ldap_map_start(map)) { result = NULL; *************** *** 2918,2924 **** ldap_value_free(attr_values); if (lmap != NULL) ldap_msgfree(lmap->res); ! ldap_map_close(map); return result ; } --- 2937,2943 ---- ldap_value_free(attr_values); if (lmap != NULL) ldap_msgfree(lmap->res); ! ldap_map_stop(map); return result ; } diff -cr sendmail-8.9.2/src/mime.c sendmail-8.9.3/src/mime.c *** sendmail-8.9.2/src/mime.c Tue Dec 29 09:42:27 1998 --- sendmail-8.9.3/src/mime.c Mon Jan 18 16:35:11 1999 *************** *** 14,20 **** # include #ifndef lint ! static char sccsid[] = "@(#)mime.c 8.70 (Berkeley) 11/10/1998"; #endif /* not lint */ /* --- 14,20 ---- # include #ifndef lint ! static char sccsid[] = "@(#)mime.c 8.71 (Berkeley) 1/18/1999"; #endif /* not lint */ /* *************** *** 308,314 **** collect(e->e_dfp, FALSE, &hdr, e); if (tTd(43, 101)) putline("+++after collect", mci); ! putheader(mci, hdr, e); if (tTd(43, 101)) putline("+++after putheader", mci); bt = mime8to7(mci, hdr, e, boundaries, flags); --- 308,314 ---- collect(e->e_dfp, FALSE, &hdr, e); if (tTd(43, 101)) putline("+++after collect", mci); ! putheader(mci, hdr, e, flags); if (tTd(43, 101)) putline("+++after putheader", mci); bt = mime8to7(mci, hdr, e, boundaries, flags); *************** *** 360,366 **** collect(e->e_dfp, FALSE, &hdr, e); if (tTd(43, 101)) putline("+++after collect", mci); ! putheader(mci, hdr, e); if (tTd(43, 101)) putline("+++after putheader", mci); if (hvalue("MIME-Version", hdr) == NULL) --- 360,366 ---- collect(e->e_dfp, FALSE, &hdr, e); if (tTd(43, 101)) putline("+++after collect", mci); ! putheader(mci, hdr, e, flags); if (tTd(43, 101)) putline("+++after putheader", mci); if (hvalue("MIME-Version", hdr) == NULL) *************** *** 442,452 **** if (sectionhighbits == 0) { /* no encoding necessary */ ! if (cte != NULL && bitset(MCIF_INMIME, mci->mci_flags)) { /* ! ** Skip _unless_ in MIME mode; see putheader() for the ! ** counterpart where this is skipped _if_ in MIME mode. */ snprintf(buf, sizeof buf, --- 442,457 ---- if (sectionhighbits == 0) { /* no encoding necessary */ ! if (cte != NULL && ! bitset(MCIF_INMIME, mci->mci_flags) && ! !bitset(M87F_NO8TO7, flags)) { /* ! ** Skip _unless_ in MIME mode and potentially ! ** converting from 8 bit to 7 bit MIME. See ! ** putheader() for the counterpart where the ! ** CTE header is skipped in the opposite ! ** situation. */ snprintf(buf, sizeof buf, Only in sendmail-8.9.2/src: obj.BSD-OS.4.0.i386 diff -cr sendmail-8.9.2/src/queue.c sendmail-8.9.3/src/queue.c *** sendmail-8.9.2/src/queue.c Tue Dec 29 09:42:23 1998 --- sendmail-8.9.3/src/queue.c Mon Jan 25 15:26:33 1999 *************** *** 14,22 **** #ifndef lint #if QUEUE ! static char sccsid[] = "@(#)queue.c 8.210 (Berkeley) 10/15/1998 (with queueing)"; #else ! static char sccsid[] = "@(#)queue.c 8.210 (Berkeley) 10/15/1998 (without queueing)"; #endif #endif /* not lint */ --- 14,22 ---- #ifndef lint #if QUEUE ! static char sccsid[] = "@(#)queue.c 8.211 (Berkeley) 1/25/1999 (with queueing)"; #else ! static char sccsid[] = "@(#)queue.c 8.211 (Berkeley) 1/25/1999 (without queueing)"; #endif #endif /* not lint */ *************** *** 348,355 **** { extern bool bitzerop __P((BITMAP)); ! /* don't output null headers */ ! if (h->h_value == NULL || h->h_value[0] == '\0') continue; /* don't output resent headers on non-resent messages */ --- 348,354 ---- { extern bool bitzerop __P((BITMAP)); ! if (h->h_value == NULL) continue; /* don't output resent headers on non-resent messages */ diff -cr sendmail-8.9.2/src/readcf.c sendmail-8.9.3/src/readcf.c *** sendmail-8.9.2/src/readcf.c Tue Dec 29 09:42:22 1998 --- sendmail-8.9.3/src/readcf.c Thu Jan 28 15:28:53 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)readcf.c 8.235 (Berkeley) 8/18/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)readcf.c 8.238 (Berkeley) 1/28/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 1527,1532 **** --- 1527,1536 ---- #define O_CONTROLSOCKET 0xa9 { "ControlSocketName", O_CONTROLSOCKET, FALSE }, #endif + #if _FFR_MAX_HEADERS_LENGTH + #define O_MAXHDRSLEN 0xaa + { "MaxHeadersLength", O_MAXHDRSLEN, FALSE }, + #endif { NULL, '\0', FALSE } }; *************** *** 2463,2468 **** --- 2467,2482 ---- if (ControlSocketName != NULL) free(ControlSocketName); ControlSocketName = newstr(val); + break; + #endif + + #if _FFR_MAX_HEADERS_LENGTH + case O_MAXHDRSLEN: + MaxHeadersLength = atoi(val); + + if (MaxHeadersLength > 0 && + MaxHeadersLength < (MAXHDRSLEN / 2)) + printf("Warning: MaxHeadersLength: headers length limit set lower than %d\n", MAXHDRSLEN); break; #endif diff -cr sendmail-8.9.2/src/recipient.c sendmail-8.9.3/src/recipient.c *** sendmail-8.9.2/src/recipient.c Tue Dec 29 09:42:15 1998 --- sendmail-8.9.3/src/recipient.c Sat Jan 23 16:34:33 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)recipient.c 8.161 (Berkeley) 12/18/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)recipient.c 8.163 (Berkeley) 1/23/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 1195,1200 **** --- 1195,1201 ---- { /* don't do any more now */ ctladdr->q_flags |= QVERIFIED; + ctladdr->q_flags &= ~QDONTSEND; e->e_nrcpts++; xfclose(fp, "include", fname); return rval; *************** *** 1409,1414 **** --- 1410,1417 ---- c = a; while (c != NULL) { + if (tTd(27, 10)) + printf(" %s", c->q_user); if (bitnset(M_HASPWENT, c->q_mailer->m_flags)) { if (tTd(27, 2)) *************** *** 1427,1432 **** --- 1430,1451 ---- if (tTd(27, 2)) printf("failed\n"); } + else + { + /* if local delivery, compare usernames */ + if (bitnset(M_LOCALMAILER, c->q_mailer->m_flags) && + b->q_mailer == c->q_mailer) + { + if (tTd(27, 2)) + printf("\t... local match (%s)\n", c->q_user); + if (sameaddr(b, c)) + return b; + else + return c; + } + } + if (tTd(27, 10)) + printf("\n"); c = c->q_alias; } diff -cr sendmail-8.9.2/src/savemail.c sendmail-8.9.3/src/savemail.c *** sendmail-8.9.2/src/savemail.c Tue Dec 29 09:42:20 1998 --- sendmail-8.9.3/src/savemail.c Mon Jan 18 16:35:11 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)savemail.c 8.139 (Berkeley) 8/5/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)savemail.c 8.140 (Berkeley) 1/18/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 395,401 **** mcibuf.mci_contentlen = 0; putfromline(&mcibuf, e); ! (*e->e_puthdr)(&mcibuf, e->e_header, e); (*e->e_putbody)(&mcibuf, e, NULL); putline("\n", &mcibuf); (void) fflush(fp); --- 395,401 ---- mcibuf.mci_contentlen = 0; putfromline(&mcibuf, e); ! (*e->e_puthdr)(&mcibuf, e->e_header, e, M87F_OUTER); (*e->e_putbody)(&mcibuf, e, NULL); putline("\n", &mcibuf); (void) fflush(fp); *************** *** 1139,1145 **** } } putline("", mci); ! putheader(mci, e->e_parent->e_header, e->e_parent); if (sendbody) putbody(mci, e->e_parent, e->e_msgboundary); else if (e->e_msgboundary == NULL) --- 1139,1145 ---- } } putline("", mci); ! putheader(mci, e->e_parent->e_header, e->e_parent, M87F_OUTER); if (sendbody) putbody(mci, e->e_parent, e->e_msgboundary); else if (e->e_msgboundary == NULL) diff -cr sendmail-8.9.2/src/sendmail.h sendmail-8.9.3/src/sendmail.h *** sendmail-8.9.2/src/sendmail.h Tue Dec 29 09:42:19 1998 --- sendmail-8.9.3/src/sendmail.h Tue Jan 26 16:15:52 1999 *************** *** 9,15 **** * the sendmail distribution. * * ! * @(#)sendmail.h 8.292 (Berkeley) 11/21/1998 */ /* --- 9,15 ---- * the sendmail distribution. * * ! * @(#)sendmail.h 8.295 (Berkeley) 1/26/1999 */ /* *************** *** 19,25 **** # ifdef _DEFINE # define EXTERN # ifndef lint ! static char SmailSccsId[] = "@(#)sendmail.h 8.292 11/21/1998"; # endif # else /* _DEFINE */ # define EXTERN extern --- 19,25 ---- # ifdef _DEFINE # define EXTERN # ifndef lint ! static char SmailSccsId[] = "@(#)sendmail.h 8.295 1/26/1999"; # endif # else /* _DEFINE */ # define EXTERN extern *************** *** 464,470 **** short e_sendmode; /* message send mode */ short e_errormode; /* error return mode */ short e_timeoutclass; /* message timeout class */ ! void (*e_puthdr)__P((MCI *, HDR *, ENVELOPE *)); /* function to put header of message */ void (*e_putbody)__P((MCI *, ENVELOPE *, char *)); /* function to put body of message */ --- 464,470 ---- short e_sendmode; /* message send mode */ short e_errormode; /* error return mode */ short e_timeoutclass; /* message timeout class */ ! void (*e_puthdr)__P((MCI *, HDR *, ENVELOPE *, int)); /* function to put header of message */ void (*e_putbody)__P((MCI *, ENVELOPE *, char *)); /* function to put body of message */ *************** *** 522,528 **** extern void dropenvelope __P((ENVELOPE *, bool)); extern void clearenvelope __P((ENVELOPE *, bool)); ! extern void putheader __P((MCI *, HDR *, ENVELOPE *)); extern void putbody __P((MCI *, ENVELOPE *, char *)); /* ** Message priority classes. --- 522,528 ---- extern void dropenvelope __P((ENVELOPE *, bool)); extern void clearenvelope __P((ENVELOPE *, bool)); ! extern void putheader __P((MCI *, HDR *, ENVELOPE *, int)); extern void putbody __P((MCI *, ENVELOPE *, char *)); /* ** Message priority classes. *************** *** 1258,1263 **** --- 1258,1264 ---- EXTERN int MaxRcptPerMsg; /* max recipients per SMTP message */ EXTERN bool DoQueueRun; /* non-interrupt time queue run needed */ EXTERN u_long ConnectOnlyTo; /* override connection address (for testing) */ + EXTERN int MaxHeadersLength; /* max length of headers */ #if _FFR_DSN_RRT_OPTION EXTERN bool RrtImpliesDsn; /* turn Return-Receipt-To: into DSN */ #endif diff -cr sendmail-8.9.2/src/udb.c sendmail-8.9.3/src/udb.c *** sendmail-8.9.2/src/udb.c Tue Dec 29 09:42:25 1998 --- sendmail-8.9.3/src/udb.c Sun Jan 17 14:57:30 1999 *************** *** 14,22 **** #ifndef lint #if USERDB ! static char sccsid [] = "@(#)udb.c 8.70 (Berkeley) 12/21/1998 (with USERDB)"; #else ! static char sccsid [] = "@(#)udb.c 8.70 (Berkeley) 12/21/1998 (without USERDB)"; #endif #endif --- 14,22 ---- #ifndef lint #if USERDB ! static char sccsid [] = "@(#)udb.c 8.71 (Berkeley) 1/17/1999 (with USERDB)"; #else ! static char sccsid [] = "@(#)udb.c 8.71 (Berkeley) 1/17/1999 (without USERDB)"; #endif #endif *************** *** 1164,1174 **** #endif if (tTd(28, 1)) { - #if DB_VERSION_MAJOR < 2 - printf("_udbx_init: db->close(%s)\n", - #else printf("_udbx_init: db->close(%s)\n", - #endif up->udb_dbname); } } --- 1164,1170 ---- *************** *** 1242,1252 **** } if (tTd(28, 1)) { - #if DB_VERSION_MAJOR < 2 - printf("_udbx_init: db->close(%s)\n", - #else printf("_udbx_init: db->close(%s)\n", - #endif up->udb_dbname); } #endif --- 1238,1244 ---- diff -cr sendmail-8.9.2/src/usersmtp.c sendmail-8.9.3/src/usersmtp.c *** sendmail-8.9.2/src/usersmtp.c Tue Dec 29 09:42:14 1998 --- sendmail-8.9.3/src/usersmtp.c Wed Feb 3 14:15:13 1999 *************** *** 14,22 **** #ifndef lint #if SMTP ! static char sccsid[] = "@(#)usersmtp.c 8.108 (Berkeley) 10/6/1998 (with SMTP)"; #else ! static char sccsid[] = "@(#)usersmtp.c 8.108 (Berkeley) 10/6/1998 (without SMTP)"; #endif #endif /* not lint */ --- 14,22 ---- #ifndef lint #if SMTP ! static char sccsid[] = "@(#)usersmtp.c 8.111 (Berkeley) 2/3/1999 (with SMTP)"; #else ! static char sccsid[] = "@(#)usersmtp.c 8.111 (Berkeley) 2/3/1999 (without SMTP)"; #endif #endif /* not lint */ *************** *** 327,333 **** ENVELOPE *e; { int r; - int l; char *bufp; char *bodytype; char buf[MAXNAME + 1]; --- 327,332 ---- *************** *** 337,347 **** printf("smtpmailfrom: CurHost=%s\n", CurHostName); /* set up appropriate options to include */ if (bitset(MCIF_SIZE, mci->mci_flags) && e->e_msgsize > 0) snprintf(optbuf, sizeof optbuf, " SIZE=%ld", e->e_msgsize); else strcpy(optbuf, ""); ! l = sizeof optbuf - strlen(optbuf) - 1; bodytype = e->e_bodytype; if (bitset(MCIF_8BITMIME, mci->mci_flags)) --- 336,347 ---- printf("smtpmailfrom: CurHost=%s\n", CurHostName); /* set up appropriate options to include */ + bufp = optbuf; if (bitset(MCIF_SIZE, mci->mci_flags) && e->e_msgsize > 0) snprintf(optbuf, sizeof optbuf, " SIZE=%ld", e->e_msgsize); else strcpy(optbuf, ""); ! bufp = &optbuf[strlen(optbuf)]; bodytype = e->e_bodytype; if (bitset(MCIF_8BITMIME, mci->mci_flags)) *************** *** 352,362 **** !bitset(EF_DONT_MIME, e->e_flags) && !bitnset(M_8BITS, m->m_flags)) bodytype = "8BITMIME"; ! if (bodytype != NULL && strlen(bodytype) + 7 < l) { ! strcat(optbuf, " BODY="); ! strcat(optbuf, bodytype); ! l -= strlen(optbuf); } } else if (bitnset(M_8BITS, m->m_flags) || --- 352,363 ---- !bitset(EF_DONT_MIME, e->e_flags) && !bitnset(M_8BITS, m->m_flags)) bodytype = "8BITMIME"; ! if (bodytype != NULL && ! SPACELEFT(optbuf, bufp) > strlen(bodytype) + 7) { ! snprintf(bufp, SPACELEFT(optbuf, bufp), ! " BODY=%s", bodytype); ! bufp += strlen(bufp); } } else if (bitnset(M_8BITS, m->m_flags) || *************** *** 387,408 **** if (bitset(MCIF_DSN, mci->mci_flags)) { ! if (e->e_envid != NULL && strlen(e->e_envid) < (SIZE_T) (l - 7)) { ! strcat(optbuf, " ENVID="); ! strcat(optbuf, e->e_envid); ! l -= strlen(optbuf); } /* RET= parameter */ ! if (bitset(EF_RET_PARAM, e->e_flags) && l >= 9) { ! strcat(optbuf, " RET="); ! if (bitset(EF_NO_BODY_RETN, e->e_flags)) ! strcat(optbuf, "HDRS"); ! else ! strcat(optbuf, "FULL"); ! l -= 9; } } --- 388,410 ---- if (bitset(MCIF_DSN, mci->mci_flags)) { ! if (e->e_envid != NULL && ! SPACELEFT(optbuf, bufp) > strlen(e->e_envid) + 7) { ! snprintf(bufp, SPACELEFT(optbuf, bufp), ! " ENVID=%s", e->e_envid); ! bufp += strlen(bufp); } /* RET= parameter */ ! if (bitset(EF_RET_PARAM, e->e_flags) && ! SPACELEFT(optbuf, bufp) > 9) { ! snprintf(bufp, SPACELEFT(optbuf, bufp), ! " RET=%s", ! bitset(EF_NO_BODY_RETN, e->e_flags) ? ! "HDRS" : "FULL"); ! bufp += strlen(bufp); } } *************** *** 529,539 **** ENVELOPE *e; { register int r; ! int l; char optbuf[MAXLINE]; strcpy(optbuf, ""); ! l = sizeof optbuf - 1; if (bitset(MCIF_DSN, mci->mci_flags)) { /* NOTIFY= parameter */ --- 531,541 ---- ENVELOPE *e; { register int r; ! char *bufp; char optbuf[MAXLINE]; strcpy(optbuf, ""); ! bufp = &optbuf[strlen(optbuf)]; if (bitset(MCIF_DSN, mci->mci_flags)) { /* NOTIFY= parameter */ *************** *** 543,579 **** { bool firstone = TRUE; ! strcat(optbuf, " NOTIFY="); if (bitset(QPINGONSUCCESS, to->q_flags)) { ! strcat(optbuf, "SUCCESS"); firstone = FALSE; } if (bitset(QPINGONFAILURE, to->q_flags)) { if (!firstone) ! strcat(optbuf, ","); ! strcat(optbuf, "FAILURE"); firstone = FALSE; } if (bitset(QPINGONDELAY, to->q_flags)) { if (!firstone) ! strcat(optbuf, ","); ! strcat(optbuf, "DELAY"); firstone = FALSE; } if (firstone) ! strcat(optbuf, "NEVER"); ! l -= strlen(optbuf); } /* ORCPT= parameter */ ! if (to->q_orcpt != NULL && strlen(to->q_orcpt) + 7 < l) { ! strcat(optbuf, " ORCPT="); ! strcat(optbuf, to->q_orcpt); ! l -= strlen(optbuf); } } --- 545,582 ---- { bool firstone = TRUE; ! strcat(bufp, " NOTIFY="); if (bitset(QPINGONSUCCESS, to->q_flags)) { ! strcat(bufp, "SUCCESS"); firstone = FALSE; } if (bitset(QPINGONFAILURE, to->q_flags)) { if (!firstone) ! strcat(bufp, ","); ! strcat(bufp, "FAILURE"); firstone = FALSE; } if (bitset(QPINGONDELAY, to->q_flags)) { if (!firstone) ! strcat(bufp, ","); ! strcat(bufp, "DELAY"); firstone = FALSE; } if (firstone) ! strcat(bufp, "NEVER"); ! bufp += strlen(bufp); } /* ORCPT= parameter */ ! if (to->q_orcpt != NULL && ! SPACELEFT(optbuf, bufp) > strlen(to->q_orcpt) + 7) { ! snprintf(bufp, SPACELEFT(optbuf, bufp), ! " ORCPT=%s", to->q_orcpt); ! bufp += strlen(bufp); } } *************** *** 673,679 **** smtprset(m, mci, e); return EX_UNAVAILABLE; } ! else if (r != 354) { if (LogLevel > 1) { --- 676,682 ---- smtprset(m, mci, e); return EX_UNAVAILABLE; } ! else if (REPLYTYPE(r) != 3) { if (LogLevel > 1) { *************** *** 713,719 **** ** Output the actual message. */ ! (*e->e_puthdr)(mci, e->e_header, e); (*e->e_putbody)(mci, e, NULL); /* --- 716,722 ---- ** Output the actual message. */ ! (*e->e_puthdr)(mci, e->e_header, e, M87F_OUTER); (*e->e_putbody)(mci, e, NULL); /* diff -cr sendmail-8.9.2/src/util.c sendmail-8.9.3/src/util.c *** sendmail-8.9.2/src/util.c Tue Dec 29 09:42:21 1998 --- sendmail-8.9.3/src/util.c Thu Jan 21 22:18:40 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)util.c 8.167 (Berkeley) 12/1/1998"; #endif /* not lint */ # include "sendmail.h" --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)util.c 8.168 (Berkeley) 1/21/1999"; #endif /* not lint */ # include "sendmail.h" *************** *** 1026,1031 **** --- 1026,1032 ---- { register EVENT *ev = NULL; register char *p; + int save_errno; if (fp == NULL) { *************** *** 1043,1049 **** "timeout waiting for input from %.100s during %s", CurHostName ? CurHostName : "local", during); - errno = 0; buf[0] = '\0'; #if XDEBUG checkfd012(during); --- 1044,1049 ---- *************** *** 1051,1056 **** --- 1051,1057 ---- if (TrafficLogFile != NULL) fprintf(TrafficLogFile, "%05d <<< [TIMEOUT]\n", (int) getpid()); + errno = 0; return (NULL); } ev = setevent(timeout, readtimeout, 0); *************** *** 1058,1063 **** --- 1059,1065 ---- /* try to read */ p = NULL; + errno = 0; while (!feof(fp) && !ferror(fp)) { errno = 0; *************** *** 1066,1071 **** --- 1068,1074 ---- break; clearerr(fp); } + save_errno = errno; /* clear the event if it has not sprung */ clrevent(ev); *************** *** 1077,1082 **** --- 1080,1086 ---- buf[0] = '\0'; if (TrafficLogFile != NULL) fprintf(TrafficLogFile, "%05d <<< [EOF]\n", (int) getpid()); + errno = save_errno; return (NULL); } if (TrafficLogFile != NULL) diff -cr sendmail-8.9.2/src/version.c sendmail-8.9.3/src/version.c *** sendmail-8.9.2/src/version.c Tue Dec 29 09:57:32 1998 --- sendmail-8.9.3/src/version.c Thu Feb 4 16:38:46 1999 *************** *** 11,17 **** */ #ifndef lint ! static char sccsid[] = "@(#)version.c 8.9.2.1 (Berkeley) 12/29/1998"; #endif /* not lint */ ! char Version[] = "8.9.2"; --- 11,17 ---- */ #ifndef lint ! static char sccsid[] = "@(#)version.c 8.9.3.1 (Berkeley) 2/4/1999"; #endif /* not lint */ ! char Version[] = "8.9.3";