SENDMAIL RELEASE NOTES $Id: RELEASE_NOTES,v 8.1909 2007/10/31 16:04:13 ca Exp $ This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. 8.14.2/8.14.2 2007/11/01 If a message was queued and it contained 8 bit characters in a From: or To: header, then those characters could be "mistaken" for internal control characters during a queue run and trigger various consistency checks. Problem noted by Neil Rickert of Northern Illinois University. If MaxMimeHeaderLength is set to a value greater than 0 (which it is by default) then even if the Linelimit parameter is 0, sendmail corrupted in the non-transfer-encoding case every MAXLINE-1 characters. Patch from John Gardiner Myers of Proofpoint. Setting the suboption DeliveryMode for DaemonPortOptions did not work in earlier 8.14 versions. Note: DeliveryMode=interactive is silently converted to background if a milter can reject or delete a recipient. Prior to 8.14 this happened only if milter could delete recipients. ClientRate should trigger when the limit was exceeded (as documented), not when it was reached. Patch from John Beck of Sun Microsystems. Force a queue run for -qGqueuegroup even if no runners are specified (R=0) and forking (F=f) is requested. When multiple results are requested for a DNS map lookup (-z and -Z), return only those that are relevant for the query (not also those in the "additional section".) If the message transfer time to sendmail (when acting as server) exceeds Timeout.queuewarn or Timeout.queuereturn and the message is refused (by a milter), sendmail previously created a delivery status notification (DSN). Patch from Doug Heath of The Hertz Corporation. A code change in Cyrus-SASL 2.1.22 for sasl_decode64() requires the MTA to deal with some input (i.e., "=") itself. Problem noted by Eliot Lear. sendmail counted a delivery as successful if PIPELINING is compiled in but not offered by the server and the delivery failed temporarily. Patch from Werner Wiethege. If getting the result of an LDAP query times out then close the map so it will be reopened on the next lookup. This should help "failover" configurations that specify more than one LDAP server. If check_compat returns $#discard then a "savemail panic" could be triggered under some circumstances (e.g., requiring a system which does not have the compile time flag HASFLOCK set). Based on patch by Motonori Nakamura of National Institute of Informatics, Japan. If a milter rejected a recipient, the count for nrcpts= in the logfile entry might have been wrong. Problem found by Petra Humann of TU Dresden. If a milter invoked smfi_chgfrom() where ESMTP arguments are not NULL, the message body was lost. Patch from Motonori Nakamura of National Institute of Informatics, Japan. sendmail(8) had a bogus space in -qGname. Patch from Peng Haitao. CONTRIB: buildvirtuser: Preserve ownership and permissions when replacing files. CONTRIB: buildvirtuser: Skip dot-files (e.g., .cvsignore) when reading the /etc/mail/virtusers/ directory. CONTRIB: buildvirtuser: Emit warnings instead of exiting where appropriate. LIBMILTER: Fix ABI backwards compatibility so milters compiled against an older libmilter.so shared library can use an 8.14 libmilter.so shared library. LIBMILTER: smfi_version() did not properly extract the patchlevel from the version number, however, the returned value was correct for the current libmilter version. 8.14.1/8.14.1 2007/04/03 Even though a milter rejects a recipient the MTA will still keep it in its list of recipients and deliver to it if the transaction is accepted. This is a regression introduced in 8.14.0 due to the change for SMFIP_RCPT_REJ. Bug found by Andy Fiddaman. The new DaemonPortOptions which begin with a lower case character could not be set in 8.14.0. If a server shut down the connection in response to a STARTTLS command, sendmail would log a misleading error message due to an internal inconsistency. Problem found by Werner Wiethege. Document how some sendmail.cf options change the behavior of mailq. Noted by Paul Menchini of the North Carolina School of Science and Mathematics. CONFIG: Add confSOFT_BOUNCE m4 option for setting SoftBounce. CONFIG: 8.14.0's RELEASE_NOTES failed to mention the addition of the confMAX_NOOP_COMMANDS and confSHARED_MEMORY_KEY_FILE m4 options for setting MaxNOOPCommands and SharedMemoryKeyFile. CONFIG: Add confMILTER_MACROS_EOH and confMILTER_MACROS_DATA m4 options for setting Milter.macros.eoh and Milter.macros.data. CONTRIB: Use flock() and fcntl() in qtool.pl if necessary. Patch from Daniel Carroll of Mesa State College. LIBMILTER: Make sure an unknown command does not affect the currently available macros. Problem found by Andy Fiddaman. LIBMILTER: The MTA did not offer SMFIF_SETSYMLIST during option negotiation. Problem reported by Bryan Costales. LIBMILTER: Fix several minor errors in the documentation. Patches from Bryan Costales. PORTABILITY FIXES: AIX 5.{1,2}: libsm/util.c failed to compile due to redefinition of several macros, e.g., SIG_ERR. Patch from Jim Pirzyk with assistance by Bob Booth, University of Illinois at Urbana-Champaign. Add support for QNX.6. Patch from Sean Boudreau of QNX Software Systems. New Files: devtools/M4/depend/QNX6.m4 devtools/OS/QNX.6.x include/sm/os/sm_os_qnx.h New Files added in 8.14.0, but not shown in the release notes entry: libmilter/docs/smfi_chgfrom.html libmilter/docs/smfi_version.html 8.14.0/8.14.0 2007/01/31 Header field values are now 8 bit clean. Notes: - header field names are still restricted to 7 bit. - RFC 2822 allows only 7 bit (US-ASCII) characters in headers. Preserve spaces after the colon in a header. Previously, any number of spaces after the colon would be changed to exactly one space. In some cases of deeply nested aliases/forwarding, mail can be silently lost. Moreover, the MaxAliasRecursion limit may be reached too early, e.g., the counter may be off by a factor of 4 in case of a sequence of .forward files that refer to others. Patch from Motonori Nakamura of Kyoto University. Fix a regression in 8.13.8: if InputMailFilters is set then "sendmail -bs" can trigger an assertion because the hostname of the client is undefined. It is now set to "localhost" for the xxfi_connect() callback. Avoid referencing a freed variable during cleanup when terminating. Problem reported and diagnosed by Joe Maimon. New option HeloName to set the name for the HELO/EHLO command. Patch from Nik Clayton. New option SoftBounce to issue temporary errors (4xy) instead of permanent errors (5xy). This can be useful for testing. New suboptions for DaemonPortOptions to set them individually per daemon socket: DeliveryMode DeliveryMode refuseLA RefuseLA delayLA DelayLA queueLA QueueLA children MaxDaemonChildren New option -K for LDAP maps to replace %1 through %9 in the lookup key with the LDAP escaped contents of the arguments specified in the map lookup. Loosely based on patch from Wolfgang Hottgenroth. Log the time after which a greet_pause delay triggered. Patch from Nik Clayton. If a client is rejected via TCP wrapper or some other check performed by validate_connection() (in conf.c) then do not also invoke greet_pause. Problem noted by Jim Pirzyk of the University of Illinois at Urbana-Champaign. If a client terminates the SMTP connection during a pause introduced by greet_pause, then a misleading message was logged previously. Problem noted by Vernon Schryver et.al., patch from Matej Vela. New command "mstat" for control socket to provide "machine readable" status. New named config file rule check_eom which is called at the end of a message, its parameter is the size of the message. If the macro {addr_type} indicates that the current address is a header address it also distinguishes between recipient and sender addresses (as it is done for envelope addresses). When a macro is set in check_relay, then its value is accessible by all transactions in the same SMTP session. Increase size of key for ldap lookups to 1024 (MAXKEY). New option MaxNOOPCommands to override default of 20 for the number of "useless" commands before the SMTP server will slow down responding. New option SharedMemoryKeyFile: if shared memory support is enabled, the MTA can be asked to select a shared memory key itself by setting SharedMemoryKey to -1 and specifying a file where to store the selected key. Try to deal with open HTTP proxies that are used to send spam by recognizing some commands from them. If the first command from the client is GET, POST, CONNECT, or USER, then the connection is terminated immediately. New PrivacyOptions noactualrecipient to avoid putting X-Actual-Recipient lines in DSNs revealing the actual account that addresses map to. Patch from Dan Harkless. New options B, z, and Z for DNS maps: -B: specify a domain that is always appended to queries. -z: specify the delimiter at which to cut off the result of a query if it is too long. -Z: specify the maximum number of entries to be concatenated to form the result of a lookup. New target "check" in the Makefile of libsm: instead of running tests implicitly while building libsm, they must be explicitly started by using "make check". Fixed some inconsistent checks for NULL pointers that have been reported by the SATURN tool which has been developed by Isil Dillig and Thomas Dillig of Stanford University. Fix a potential race condition caused by a signal handler for terminated child processes. Problem noted by David F. Skoll. When a milter deleted a recipient, that recipient could cause a queue group selection. This has been disabled as it was not intended. New operator 'r' for the arith map to return a random number. Patch from Motonori Nakamura of Kyoto University. New compile time option MILTER_NO_NAGLE to turn off the Nagle algorithm for communication with libmilter ("cork" on Linux), which may improve the communication performance on some operating systems. Patch from John Gardiner Myers of Proofpoint. If sendmail received input that contained a CR without subsequent LF (thus violating RFC 2821 (2.3.7)), it could previously generate an additional blank line in the output as the last line. Restarting persistent queue runners by sending a HUP signal to the "queue control process" (QCP) works now. Increase the length of an input line to 12288 to deal with really long lines during SMTP AUTH negotiations. Problem noted by Werner Wiethege. If ARPANET mode (-ba) was selected STARTTLS would fail (due to a missing initialization call for that case). Problem noted by Neil Rickert of Northern Illinois University. If sendmail is linked against a library that initializes Cyrus-SASL before sendmail did it (such as libnss-ldap), then SMTP AUTH could fail for the sendmail client. A patch by Moritz Both works around the API design flaw of Cyrus-SASLv2. CONFIG: Make it possible to unset the StatusFile option by undefining STATUS_FILE. By not setting StatusFile, the MTA will not attempt to open a statistics file on each delivery. CONFIG: New FEATURE(`require_rdns') to reject messages from SMTP clients whose IP address does not have proper reverse DNS. Contributed by Neil Rickert of Northern Illinois University and John Beck of Sun Microsystems. CONFIG: New FEATURE(`block_bad_helo') to reject messages from SMTP clients which provide a HELO/EHLO argument which is either unqualified, or is one of our own names (i.e., the server name instead of the client name). Contributed by Neil Rickert of Northern Illinois University and John Beck of Sun Microsystems. CONFIG: New FEATURE(`badmx') to reject envelope sender addresses (MAIL) whose domain part resolves to a "bad" MX record. Based on contribution from William Dell Wisner. CONFIG: New macros SMTP_MAILER_LL and RELAY_MAILER_LL to override the maximum line length of the smtp mailers. CONFIG: New option `relaytofulladdress' for FEATURE(`access_db') to allow entries in the access map to be of the form To:user@example.com RELAY CONFIG: New subsuboptions eoh and data to specify the list of macros a milter should receive at those stages in the SMTP dialogue. CONFIG: New option confHELO_NAME for HeloName to set the name for the HELO/EHLO command. CONFIG: dnsbl and enhdnsbl can now also discard or quarantine messages by using those values as second argument. Patches from Nelson Fung. CONTRIB: cidrexpand uses a hash symbol as comment character and ignores everything after it unless it is in quotes or preceeded by a backslash. DEVTOOLS: New macro confMKDIR: if set to a program that creates directories, then it used for "make install" to create the required installation directories. DEVTOOLS: New macro confCCLINK to specify the linker to use for executables (defaults to confCC). LIBMILTER: A new version of the milter API has been created that has several changes which are listed below and documented in the webpages reachable via libmilter/docs/index.html. LIBMILTER: The meaning of the version macro SMFI_VERSION has been changed. It now refers only to the version of libmilter, not to the protocol version (which is used only internally, it is not user/milter-programmer visible). Additionally, a version function smfi_version() has been introduced such that a milter program can check the libmilter version also at runtime which is useful if a shared library is used. LIBMILTER: A new callback xxfi_negotiate() can be used to dynamically (i.e., at runtime) determine the available protocol actions and features of the MTA and also to specify which of these a milter wants to use. This allows for more flexibility than hardcoding these flags in the xxfi_flags field of the smfiDesc structure. LIBMILTER: A new callback xxfi_data() is available so milters can act on the DATA command. LIBMILTER: A new callback xxfi_unknown() is available so milters can receive also unknown SMTP commands. LIBMILTER: A new return code SMFIS_NOREPLY has been added which can be used by the xxfi_header() callback provided the milter requested the SMFIP_NOHREPL protocol action. LIBMILTER: The new return code SMFIS_SKIP can be used in the xxfi_body() callback to skip over further body chunks and directly advance to the xxfi_eom() callback. This is useful if a milter can make a decision based on the body chunks it already received without reading the entire rest of the body and the milter wants to invoke functions that are only available from the xxfi_eom() callback. LIBMILTER: A new function smfi_addrcpt_par() can be used to add new recipients including ESMTP parameters. LIBMILTER: A new function smfi_chgfrom() can be used to change the envelope sender including ESMTP parameters. LIBMILTER: A milter can now request to be informed about rejected recipients (RCPT) too. This requires to set the protocol flag SMFIP_RCPT_REJ during option negotiation. Whether a RCPT has been rejected can be checked by comparing the value of the macro {rcpt_mailer} with "error". LIBMILTER: A milter can now override the list of macros that it wants to receive from the MTA for each protocol step by invoking the function smfi_setsymlist() during option negotiation. LIBMILTER: A milter can receive header field values with all leading spaces by requesting the SMFIP_HDR_LEADSPC protocol action. Also, if the flag is set then the MTA does not add a leading space to headers that are added, inserted, or replaced. LIBMILTER: If a milter sets the reply code to "421" for the HELO callback, the SMTP server will terminate the SMTP session with that error to match the behavior of all other callbacks. New Files: cf/feature/badmx.m4 cf/feature/block_bad_helo.m4 cf/feature/require_rdns.m4 devtools/M4/UNIX/check.m4 include/sm/misc.h include/sm/sendmail.h include/sm/tailq.h libmilter/docs/smfi_addrcpt_par.html libmilter/docs/smfi_setsymlist.html libmilter/docs/xxfi_data.html libmilter/docs/xxfi_negotiate.html libmilter/docs/xxfi_unknown.html libmilter/example.c libmilter/monitor.c libmilter/worker.c libsm/memstat.c libsm/t-memstat.c libsm/t-qic.c libsm/util.c sendmail/daemon.h sendmail/map.h 8.13.8/8.13.8 2006/08/09 Fix a regression in 8.13.7: if shared memory is activated, then the server can erroneously report that there is insufficient disk space. Additionally make sure that an internal variable is set properly to avoid those misleading errors. Based on patch from Steve Hubert of University of Washington. Fix a regression in 8.13.7: the PidFile could be removed after the process that forks the daemon exited, i.e., if sendmail -bd is invoked. Problem reported by Kan Sasaki of Fusion Communications Corp. and Werner Wiethege. Avoid opening qf files if QueueSortOrder is "none". Patch from David F. Skoll. Avoid a crash when finishing due to referencing a freed variable. Problem reported and diagnosed by Moritz Jodeit. CONTRIB: cidrexpand now deals with /0 by issuing the entire IPv4 range (0..255). LIBMILTER: The "hostname" argument of the xxfi_connect() callback previously was the equivalent of {client_ptr}. However, this did not match the documentation of the function, hence it has been changed to {client_name}. See doc/op/op.* about these macros. 8.13.7/8.13.7 2006/06/14 A malformed MIME structure with many parts can cause sendmail to crash while trying to send a mail due to a stack overflow, e.g., if the stack size is limited (ulimit -s). This happens because the recursion of the function mime8to7() was not restricted. The function is called for MIME 8 to 7 bit conversion and also to enforce MaxMimeHeaderLength. To work around this problem, recursive calls are limited to a depth of MAXMIMENESTING (20); message content after this limit is treated as opaque and is not checked further. Problem noted by Frank Sheiness. The changes to the I/O layer in 8.13.6 caused a regression for SASL mechanisms that use the security layer, e.g., DIGEST-MD5. Problem noted by Robert Stampfli. If a timeout occurs while reading a message (during the DATA phase) a df file might have been left behind in the queue. This was another side effect of the changes to the I/O layer made in 8.13.6. Several minor problems have been fixed that were found by a Coverity scan of sendmail 8 as part of the NetBSD distribution. See http://scan.coverity.com/ Note: the scan generated also a lot of "false positives", e.g., "error" reports about situations that cannot happen. Most of those code places are marked with lint(1) comments like NOTREACHED, but Coverity does not understand those. Hence an explicit assertion has been added in some cases to avoid those false positives. If the start of the sendmail daemon fails due to a configuration error then in some cases shared memory segments or pid files were not removed. If DSN support is disabled via access_db, then related ESMTP parameters for MAIL and RCPT should be rejected. Problem reported by Akihiro Sagawa. Enabling zlib compression in OpenSSL 0.9.8[ab] breaks the padding bug work-around. Hence if sendmail is linked against either of these versions and compression is available, the padding bug work-around is turned off. Based on patch from Victor Duchovni of Morgan Stanley. CONFIG: FEATURE(`dnsbl') and FEATURE(`enhdnsbl') used blackholes.mail-abuse.org as default domain for lookups, however, that list is no longer available. To avoid further problems, no default value is available anymore, but an argument must be specified. Portability: Fix compilation on OSF/1 for sfsasl.c. Patch from Pieter Bowman of the University of Utah. 8.13.6/8.13.6 2006/03/22 SECURITY: Replace unsafe use of setjmp(3)/longjmp(3) in the server and client side of sendmail with timeouts in the libsm I/O layer and fix problems in that code. Also fix handling of a buffer in sm_syslog() which could have been used as an attack vector to exploit the unsafe handling of setjmp(3)/longjmp(3) in combination with signals. Problem detected by Mark Dowd of ISS X-Force. Handle theoretical integer overflows that could triggered if the server accepted headers larger than the maximum (signed) integer value. This is prevented in the default configuration by restricting the size of a header, and on most machines memory allocations would fail before reaching those values. Problems found by Phil Brass of ISS. If a server returns 421 for an RSET command when trying to start another transaction in a session while sending mail, do not trigger an internal consistency check. Problem found by Allan E Johannesen of Worcester Polytechnic Institute. If a server returns a 5xy error code (other than 501) in response to a STARTTLS command despite the fact that it advertised STARTTLS and that the code is not valid according to RFC 2487 treat it nevertheless as a permanent failure instead of a protocol error (which has been changed to a temporary error in 8.13.5). Problem reported by Jeff A. Earickson of Colby College. Clear SMTP state after a HELO/EHLO command. Patch from John Myers of Proofpoint. Observe MinQueueAge option when gathering entries from the queue for sorting etc instead of waiting until the entries are processed. Patch from Brian Fundakowski Feldman. Set up TLS session cache to properly handle clients that try to resume a stored TLS session. Properly count the number of (direct) child processes such that a configured value (MaxDaemonChildren) is not exceeded. Based on patch from Attila Bruncsak. LIBMILTER: Remove superfluous backslash in macro definition (libmilter.h). Based on patch from Mike Kupfer of Sun Microsystems. LIBMILTER: Don't try to set SO_REUSEADDR on UNIX domain sockets. This generates an error message from libmilter on Solaris, though other systems appear to just discard the request silently. LIBMILTER: Deal with sigwait(2) implementations that return -1 and set errno instead of returning an error code directly. Patch from Chris Adams of HiWAAY Informations Services. Portability: Fix compilation checks for closefrom(3) and statvfs(2) in NetBSD. Problem noted by S. Moonesamy, patch from Andrew Brown. 8.13.5/8.13.5 2005/09/16 Store the filesystem identifier of the df/ subdirectory (if it exists) in an internal structure instead of the base directory. This structure is used decide whether there is enough free disk space when selecting a queue, hence without this change queue selection could fail if a df/ subdirectory exists and is on a different filesystem than the base directory. Use the queue index of the df file (instead of the qf file) for checking whether a link(2) operation can be used to split an envelope across queue groups. Problem found by Werner Wiethege. If the list of items in the queue is larger than the maximum number of items to process, sort the queue first and then cut the list off instead of the other way around. Patch from Matej Vela of Rudjer Boskovic Institute. Fix helpfile to show full entry for ETRN. Problem noted by Penelope Fudd, patch from Neil Rickert of Northern Illinois University. FallbackSmartHost should also be tried on temporary errors. From John Beck of Sun Microsystems. When a server responds with 421 to the STARTTLS command then treat it as a temporary error, not as protocol error. Problem noted by Andrey J. Melnikoff. Properly define two functions in libsm as static because their prototype used static too. Patch from Peter Klein. Fix syntax errors in helpfile for MAIL and RCPT commands. LIBMILTER: When smfi_replacebody() is called with bodylen equals zero then do not silently ignore that call. Patch from Gurusamy Sarathy of Active State. LIBMILTER: Recognize "421" also in a multi-line reply to terminate the SMTP session with that error. Fix from Brian Kantor. Portability: New option HASSNPRINTF which can be set if the OS has a properly working snprintf(3) to get rid of the last two (safe) sprintf(3) calls in the source code. Add support for AIX 5.3. Add support for SunOS 5.11 (aka Solaris 11). Add support for Darwin 8.x. Patch from Lyndon Nerenberg. OpenBSD 3.7 has removed support for NETISO. CONFIG: Add OSTYPE(freebsd6) for FreeBSD 6.X. Set DontBlameSendmail to AssumeSafeChown and GroupWritableDirPathSafe for OSTYPE(darwin). Patch from Lyndon Nerenberg. Some features still used 4.7.1 as enhanced status code which was supposed to be eliminated in 8.13.0 because some broken systems misinterpret it as a permanent error. Patch from Matej Vela of Rudjer Boskovic Institute. Some default values in a generated cf file did not match the defaults in the sendmail binary. Problem noted by Mike Pechkin. New Files: cf/ostype/freebsd6.m4 devtools/OS/AIX.5.3 devtools/OS/Darwin.8.x devtools/OS/SunOS.5.11 include/sm/time.h 8.13.4/8.13.4 2005/03/27 The bug fixes in 8.13.3 for connection handling uncovered a different error which could result in connections that stay in CLOSE_WAIT state due to a variable that was not properly initialized. Problem noted by Michael Sims. Deal with empty hostnames in hostsignature(). This bug could lead to an endless loop when doing LMTP deliveries to another host. Problem first reported by Martin Lathoud and tracked down by Gael Roualland. Make sure return parameters are initialized in getmxrr(). Problem found by Gael Roualland using valgrind. If shared memory is used and the RunAsUser option is set, then the owner and group of the shared memory segment is set to the ids specified RunAsUser and the access mode is set to 0660 to allow for updates by sendmail processes. The number of queue entries that is (optionally) kept in shared memory was wrong in some cases, e.g., envelope splitting and bounce generation. Undo a change made in 8.13.0 to silently truncate long strings in address rewriting because the message can be triggered for header checks where long strings are legitimate. Problem reported by Mary Verge DeSisto, and tracked down with the help of John Beck of Sun Microsystems. The internal stab map did not obey the -m flag. Patch from Rob McMahon of Warwick University, England. The socket map did not obey the -f flag. Problem noted by Dan Ringdahl, forwarded by Andrzej Filip. The addition of LDAP recursion in 8.13.0 broke enforcement of the LDAP map -1 argument which tells the MTA to only return success if and only if a single LDAP match is found. Add additional error checks in the MTA for milter communication to avoid a possible segmentation fault. Based on patch by Joe Maimon. Do not trigger an assertion if X509_digest() returns success but does not assign a value to its output parameter. Based on patch by Brian Kantor. Add more checks when resetting internal AUTH data (applies only to Cyrus SASL version 2). Otherwise an SMTP session might be dropped after an AUTH failure. Portability: Add LA_LONGLONG as valid LA_TYPE type for systems that use "long long" to read load average data, e.g., AIX 5.1 in 32 bit mode. Note: this has to be set "by hand", it is not (yet) automatically detected. Problem noted by Burak Bilen. Use socklen_t for accept(), etc. on AIX 5.x. This should fix problems when compiling in 64 bit mode. Problem first reported by Harry Meiert of University of Bremen. New Files: include/sm/sem.h libsm/sem.c libsm/t-sem.c 8.13.3/8.13.3 2005/01/11 Enhance handling of I/O errors, especially EOF, when STARTTLS is active. Make sure a connection is not reused after it has been closed due to a 421 error. Problem found by Allan E Johannesen of Worcester Polytechnic Institute. Avoid triggering an assertion when sendmail is interrupted while closing a connection. Problem found by Allan E Johannesen of Worcester Polytechnic Institute. Regression: a change in 8.13.2 caused sendmail not to try the next MX host (or FallbackMXhost if configured) when, at connection open, the current server returns a 4xy or 5xy SMTP reply code. Problem noted by Mark Tranchant. 8.13.2/8.13.2 2004/12/15 Do not split the first header even if it exceeds the internal buffer size. Previously a part of such a header would end up in the body of the message. Problem noted by Simple Nomad of BindView. Do not complain about "cataddr: string too long" when checking headers that do not contain RFC 2822 addresses. Problem noted by Rich Graves of Brandeis University. If a server returns a 421 reply to the RSET command between message deliveries, do not attempt to deliver any more messages on that connection. This prevents bogus "Bad file number" recipient status. Problem noted by Allan E Johannesen of Worcester Polytechnic Institute. Allow trailing white space in EHLO command as recommended by RFC 2821. Problem noted by Ralph Santagato of SBC Services. Deal with clients which use AUTH but negotiate a smaller buffer size for data exchanges than the value used by sendmail, e.g., Cyrus IMAP lmtp server. Based on patch by Jamie Clark. When passing ESMTP arguments for RCPT to a milter, do not cut them off at a comma. Problem noted by Krzysztof Oledzki. Add more logging to milter change header functions to complement existing logging. Based on patch from Gurusamy Sarathy of Active State. Include in include/sm/config.h when LDAPMAP is defined. Patch from Edgar Hoch of the University of Stuttgart. Fix DNS lookup if IPv6 is enabled when converting an IP address to a hostname for use with SASL. Problem noted by Ken Jones; patch from Hajimu UMEMOTO. CONFIG: For consistency enable MODIFY_MAILER_FLAGS for the prog mailer. Patch from John Beck of Sun Microsystems. LIBMILTER: It was possible that xxfi_abort() was called after xxfi_eom() for a message if some timeouts were triggered. Patch from Alexey Kravchuk. LIBMILTER: Slightly rearrange mutex use in listener.c to allow different threads to call smfi_opensocket() and smfi_main(). Patch from Jordan Ritter of Cloudmark. MAIL.LOCAL: Properly terminate MBDB before exiting. Problem noted by Nelson Fung. MAIL.LOCAL: make strip-mail.local used a wrong path to access mail.local. Problem noted by William Park. VACATION: Properly terminate MBDB before exiting. Problem noted by Nelson Fung. Portability: Add support for DragonFly BSD. New Files: cf/ostype/dragonfly.m4 devtools/OS/DragonFly include/sm/os/sm_os_dragonfly.h Deleted Files: libsm/vsscanf.c 8.13.1/8.13.1 2004/07/30 Using the default AliasFile ldap: specification would cause the objectClasses of the LDAP response to be included in the alias expansion. Problem noted by Brenden Conte of Rensselaer Polytechnic Institute. Fix support for a fallback smart host for system where DNS is (partially) available. From John Beck of Sun Microsystems. Fix SuperSafe=PostMilter behavior when a milter replaces a body but the data file is not yet stored on disk because it is smaller than the size of the memory buffer. Problem noted by David Russell. Fix certificate revocation list support; if a CRL was specified but the other side presented a cert that was signed by a different (trusted) CA than the one which issued the CRL, verification would always fail. Problem noted by Al Smith. Run mailer programs as the RunAsUser when RunAsUser is set and the F=S mailer flag is set without a U= mailer equate. Problem noted by John Gardiner Myers of Proofpoint. ${nbadrcpts} was off by one if BadRcptThrottle is zero. Patch from Sung-hoon Choi of DreamWiz Inc. CONFIG: Emit a warning if FEATURE(`access_db') is used after FEATURE(`greet_pause') because then the latter will not use the access map. Note: if no default value is given for FEATURE(`greet_pause') then it issues an error if FEATURE(`access_db') is not specified before it. Problem noted by Alexander Dalloz of University of Bielefeld. CONFIG: Invoke ruleset Local_greet_pause if FEATURE(`greet_pause') is used to give more flexibility for local changes. Portability: Fix a 64 bit problem in the socket map code. Problem noted by Geoff Adams. NetBSD 2.0F has closefrom(3). Patch from Andrew Brown. NetBSD can use sysctl(3) to get the number of CPUs in a system. Patch from Andrew Brown. Add a README file in doc/op/ to explain potential incompatibilities with various *roff related tools. Problem tracked down by Per Hedeland. New Files: doc/op/README 8.13.0/8.13.0 2004/06/20 Do not include AUTH data in a bounce to avoid leaking confidential information. See also cf/README about MSP and the section "Providing SMTP AUTH Data when sendmail acts as Client". Problem noted by Neil Rickert of Northern Illinois University. Fix compilation error in libsm/clock.c for -D_FFR_SLEEP_USE_SELECT=n and -DSM_CONF_SETITIMER=0. Problem noted by Juergen Georgi of RUS University of Stuttgart. Fix bug in conversion from 8bit to quoted-printable. Problem found by Christof Haerens, patch from Per Hedeland. Add support for LDAP recursion based on types given to attribute specifications in an LDAP map definition. This allows LDAP queries to return a new query, a DN, or an LDAP URL which will in turn be queried. See the ``LDAP Recursion'' section of doc/op/op.me for more information. Based on patch from Andrew Baucom. Extend the default LDAP specifications for AliasFile (O AliasFile=ldap:) and file classes (F{X}@LDAP) to include support for LDAP recursion via new attributes. See ``USING LDAP FOR ALIASES, MAPS, and CLASSES'' section of cf/README for more information. New option for LDAP maps: the -w option allows you to specify the LDAP API/protocol version to use. The default depends on the LDAP library. New option for LDAP maps: the -H option allows you to specify an LDAP URI instead of specifying the LDAP server via -h host and -p port. This also allows for the use of LDAP over SSL and connections via named sockets if your LDAP library supports it. New compile time flag SM_CONF_LDAP_INITIALIZE: set this if ldap_initialize(3) is available (and LDAPMAP is set). If MaxDaemonChildren is set and a command is repeated too often during a SMTP session then terminate it just like it is done for too many bad SMTP commands. Basic connection rate control support has been added: the daemon maintains the number of incoming connections per client IP address and total in the macros {client_rate} and {total_rate}, respectively. These macros can be used in the cf file to impose connection rate limits. A new option ConnectionRateWindowSize (default: 60s) determines the length of the interval for which the number of connections is stored. Based on patch from Jose Marcio Martins da Cruz, Ecole des Mines de Paris. Add optional protection from open proxies and SMTP slammers which send SMTP traffic without waiting for the SMTP greeting. If enabled by the new ruleset greet_pause (see FEATURE(`greet_pause')), sendmail will wait the specified amount of time before sending the initial 220 SMTP greeting. If any traffic is received before then, a 554 SMTP response is sent and all SMTP commands are rejected during that connection. If 32 NOOP (or unknown/bad) commands are issued by a client the SMTP server could sleep for a very long time. Fix based on patch from Tadashi Kobayashi of IIJ. Fix a potential memory leak in persistent queue runners if the number of entries in the queue exceeds the limit of jobs. Problem noted by Steve Hubert of University of Washington. Do not use 4.7.1 as enhanced status code because some broken systems misinterpret it as a permanent error. New value for SuperSafe: PostMilter which will delay fsync() until all milters accepted the mail. This can increase performance if many mails are rejected by milters due to body scans. Based on patch from David F. Skoll. New macro {msg_id} which contains the value of the Message-Id: header, whether provided by the client or generated by sendmail. New macro {client_connections} which contains the number of open connections in the SMTP server for the client IP address. Based on patch from Jose Marcio Martins da Cruz, Ecole des Mines de Paris. sendmail will now remove its pidfile when it exits. This was done to prevent confusion caused by running sendmail stop scripts two or more times, where the second and subsequent runs would report misleading error messages about sendmail's pid no longer existing. See section 1.3.15 of doc/op/op.me for a discussion of the implications of this, including how to correct broken scripts which may have depended on the old behavior. From John Beck of Sun Microsystems. Support per-daemon input filter lists which override the default filter list specified in InputMailFilters. The filters can be listed in the I= equate of DaemonPortOptions. Do not add all domain prefixes of the hostname to class 'w'. If your configuration relies on this behavior, you have to add those names to class 'w' yourself. Problem noted by Sander Eerkes. Support message quarantining in the mail queue. Quarantined messages are not run on normal queue displays or runs unless specifically requested with -qQ. Quarantined queue files are named with an hf prefix instead of a qf prefix. The -q command line option now can specify which queue to display or run. -qQ operates on quarantined queue items. -qL operates on lost queue items. Restricted mail queue runs and displays can be done based on the quarantined reason using -qQtext to run or display quarantined items if the quarantine reason contains the given text. Similarly, -q!Qtext will run or display quarantined items which do not have the given text in the quarantine reason. Items in the queue can be quarantined or unquarantined using the new -Q option. See doc/op/op.me for more information. When displaying the quarantine mailq with 'mailq -qQ', the quarantine reason is shown in a new line prefixed by "QUARANTINE:". A new error code for the $#error mailer, $@ quarantine, can be used to quarantine messages in check_* (except check_compat) and header check rulesets. The $: of the mailer triplet will be used for the quarantine reason. Add a new quarantine count to the mailstats collected. Add a new macro ${quarantine} which is the quarantine reason for a message if it is quarantined. New map type "socket" for a trivial query protocol over UNIX domain or TCP sockets (requires compile time option SOCKETMAP). See sendmail/README and doc/op/op.me for details as well as socketmapServer.pl and socketmapClient.pl in contrib. Code donated by Bastiaan Bakker of LifeLine Networks. Define new macro ${client_ptr} which holds the result of the PTR lookup for the client IP address. Note: this is the same as ${client_name} if and only if ${client_resolve} is OK. Add a new macro ${nbadrcpts} which contains the number of bad recipients received so far in a transaction. Call check_relay with the value of ${client_name} to deal with bogus DNS entries. See also FEATURE(`use_client_ptr'). Problem noted by Kai Schlichting. Treat Delivery-Receipt-To: headers the same as Return-Receipt-To: headers (turn them into DSNs). Delivery-Receipt-To: is apparently used by SIMS (Sun Internet Mail System). Enable connection caching for LPC mailers. Patch from Christophe Wolfhugel of France Telecom Oleane. Do not silently truncate long strings in address rewriting. Add support for Cyrus SASL version 2. From Kenneth Murchison of Oceana Matrix Ltd. Add a new AuthOption=m flag to require the use of mechanisms which support mutual authentication. From Kenneth Murchison of Oceana Matrix Ltd. Fix logging of TLS related problems (introduced in 8.12.11). The macros {auth_author} and {auth_authen} are stored in xtext format just like the STARTTLS related macros to avoid problems with parsing them. Problem noted by Pierangelo Masarati of SysNet s.n.c. New option AuthRealm to set the authentication realm that is passed to the Cyrus SASL library. Patch from Gary Mills of the University of Manitoba. Enable AUTH mechanism EXTERNAL if STARTTLS verification was successful, otherwise relaying would be allowed if EXTERNAL is listed in TRUST_AUTH_MECH() and STARTTLS is active. Add basic support for certificate revocation lists. Note: if a CRLFile is specified but the file is unusable, STARTTLS is disabled. Based on patch by Ralf Hornik. Enable workaround for inconsistent Cyrus SASLv1 API for mechanisms DIGEST-MD5 and LOGIN. Write pid to file also if sendmail only acts as persistent queue runner. Proposed by Gary Mills of the University of Manitoba. Keep daemon pid file(s) locked so other daemons don't try to overwrite each other's pid files. Increase maximum length of logfile fields for {cert_subject} and {cert_issuer} from 128 to 256. Requested by Christophe Wolfhugel of France Telecom. Log the TLS verification message on the STARTTLS= log line at LogLevel 12 or higher. If the MSP is invoked with the verbose option (-v) then it will try to use the SMTP command VERB to propagate this option to the MTA which in turn will show the delivery just like it was done before the default 8.12 separation of MSP and MTA. Based on patch by Per Hedeland. If a daemon is refusing connections for longer than the time specified by the new option RejectLogInterval (default: 3 hours) due to high load, log this information. Patch from John Beck of Sun Microsystems. Remove the ability for non-trusted users to raise the value of CheckpointInterval on the command line. New mailer flag 'B' to strip leading backslashes, which is a subset of the functionality of the 's' flag. New mailer flag 'W' to ignore long term host status information. Patch from Juergen Georgi of RUS University of Stuttgart. Enable generic mail filter API (milter) by default. To turn it off, add -DMILTER=0 to the compile time options. An internal SMTP session discard flag was lost after an RSET/HELO/EHLO causing subsequent messages to be sent instead of being discarded. This also caused milter callbacks to be called out of order after the SMTP session was reset. New option RequiresDirfsync to turn off the compile time flag REQUIRES_DIR_FSYNC at runtime. See sendmail/README for further information. New command line option -D logfile to send debug output to the indicated log file instead of stdout. Add Timeout.queuereturn.dsn and Timeout.queuewarn.dsn to control queue return and warning times for delivery status notifications. New queue sort order option: 'n'one for not sorting the queue entries at all. Several more return values for ruleset srv_features have been added to enable/disable certain features in the server per connection. See doc/op/op.me for details. Support for SMTP over SSL (smtps), activated by Modifier=s for DaemonPortOptions. Continue with DNS lookups on ECONNREFUSED and TRY_AGAIN when trying to canonify hostnames. Suggested by Neil Rickert of Northern Illinois University. Add support for a fallback smart host (option FallbackSmartHost) to be tried as a last resort after all other fallbacks. This is designed for sites with partial DNS (e.g., an accurate view of inside the company, but an incomplete view of outside). From John Beck of Sun Microsystems. Enable timeout for STARTTLS even if client does not start the TLS handshake. Based on patch by Andrey J. Melnikoff. Remove deprecated -v option for PH map, use -k instead. Patch from Mark Roth of the University of Illinois at Urbana-Champaign. libphclient is version 1.2.x by default, if version 1.1.x is required then compile with -DNPH_VERSION=10100. Patch from Mark Roth of the University of Illinois at Urbana-Champaign. Add Milter.macros.eom, allowing macros to be sent to milter applications for use in the xxfi_eom() callback. New macro {time} which contains the output of the time(3) function, i.e., the number of seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time (UTC). If check_relay sets the reply code to "421" the SMTP server will terminate the SMTP session with a 421 error message. Get rid of dead code that tried to access the environment variable HOSTALIASES. Deprecate the use of ErrorMode=write. To enable this in 8.13 compile with -DUSE_TTYPATH=1. Header check rulesets using $>+ (do not strip comments) will get the header value passed in without balancing quotes, parentheses, and angle brackets. Based on patch from Oleg Bulyzhin. Do not complain and fix up unbalanced quotes, parentheses, and angle brackets when reading in rulesets. This allows rules to be written for header checks to catch strings that contain quotes, parentheses, and/or angle brackets. Based on patch from Oleg Bulyzhin. Do not close socket when accept(2) in the daemon encounters some temporary errors like ECONNABORTED. Added list of CA certificates that are used by members of the sendmail consortium, see CACerts. Portability: Two new compile options have been added: HASCLOSEFROM System has closefrom(3). HASFDWALK System has fdwalk(3). Based on patch from John Beck of Sun Microsystems. The Linux kernel version 2.4 series has a broken flock() so change to using fcntl() locking until they can fix it. Be sure to update other sendmail related programs to match locking techniques. New compile time option NEEDINTERRNO which should be set if does not declare errno itself. Support for UNICOS/mk and UNICOS/mp added, some changes for UNICOS. Patches contributed by Aaron Davis and Brian Ginsbach, Cray Inc., and Manu Mahonen of Center for Scientific Computing. Add support for Darwin 7.0/Mac OS X 10.3 (a.k.a. Panther). Extend support to Darwin 7.x/Mac OS X 10.3 (a.k.a. Panther). Remove path from compiler definition for Interix because Interix 3.0 and 3.5 put gcc in different locations. Also use to get the correct major()/minor() definitions. Based on feedback from Mark Funkenhauser. CONFIG: Add support for LDAP recursion to the default LDAP searches for maps via new attributes. See the ``USING LDAP FOR ALIASES, MAPS, and CLASSES'' section of cf/README and cf/sendmail.schema for more information. CONFIG: Make sure confTRUSTED_USER is valid even if confRUN_AS_USER is of the form "user:group" when used for submit.mc. Problem noted by Carsten P. Gehrke, patch from Neil Rickert of Northern Illinois University. CONFIG: Add a new access DB value of QUARANTINE:reason which instructs the check_* (except check_compat) to quarantine the message using the given reason. CONFIG: Use "dns -R A" as map type for dnsbl (just as for enhdnsbl) instead of "host" to avoid problem with looking up other DNS records than just A. CONFIG: New option confCONNECTION_RATE_WINDOW_SIZE to define the length of the interval for which the number of incoming connections is maintained. CONFIG: New FEATURE(`ratecontrol') to set the limits for connection rate control for individual hosts or nets. CONFIG: New FEATURE(`conncontrol') to set the limits for the number of open SMTP connections for individual hosts or nets. CONFIG: New FEATURE(`greet_pause') enables open proxy and SMTP slamming protection described above. The feature can take an argument specifying the milliseconds to wait and/or use the access database to look the pause time based on client hostname, domain, IP address, or subnet. CONFIG: New FEATURE(`use_client_ptr') to have check_relay use $&{client_ptr} as its first argument. This is useful for rejections based on the unverified hostname of client, which turns on the same behavior as in earlier sendmail versions when delay_checks was not in use. See also entry above about check_relay being invoked with ${client_name}. CONFIG: New option confREJECT_LOG_INTERVAL to specify the log interval when refusing connections for this long. CONFIG: Remove quotes around usage of confREJECT_MSG; in some cases this requires a change in a mc file. Requested by Ted Roberts of Electronic Data Systems. CONFIG: New option confAUTH_REALM to set the authentication realm that is passed to the Cyrus SASL library. Patch from Gary Mills of the University of Manitoba. CONFIG: Rename the (internal) classes {tls}/{src} to {Tls}/{Src} to follow the naming conventions. CONFIG: Add a third optional argument to local_lmtp to specify the A= argument. CONFIG: Remove the f flag from the default mailer flags of local_lmtp. CONFIG: New option confREQUIRES_DIR_FSYNC to turn off the compile time flag REQUIRES_DIR_FSYNC at runtime. CONFIG: New LOCAL_UUCP macro to insert rules into the generated cf file at the same place where MAILER(`uucp') inserts its rules. CONFIG: New options confTO_QUEUERETURN_DSN and confTO_QUEUEWARN_DSN to control queue return and warning times for delivery status notifications. CONFIG: New option confFALLBACK_SMARTHOST to define FallbackSmartHost. CONFIG: Add the mc file which has been used to create the cf file to the end of the cf file when using make in cf/cf/. Patch from Richard Rognlie. CONFIG: FEATURE(nodns) has been removed, it was a no-op since 8.9. Use ServiceSwitchFile to turn off DNS lookups, see doc/op/op.me. CONFIG: New option confMILTER_MACROS_EOM (sendmail Milter.macros.eom option) defines macros to be sent to milter applications for use in the xxfi_eom() callback. CONFIG: New option confCRL to specify file which contains certificate revocations lists. CONFIG: Add a new value (sendertoo) for the third argument to FEATURE(`ldap_routing') which will reject the SMTP MAIL From: command if the sender address doesn't exist in LDAP. See cf/README for more information. CONFIG: Add a fifth argument to FEATURE(`ldap_routing') which instructs the rulesets on whether or not to do a domain lookup if a full address lookup doesn't match. See cf/README for more information. CONFIG: Add a sixth argument to FEATURE(`ldap_routing') which instructs the rulesets on whether or not to queue the mail or give an SMTP temporary error if the LDAP server can't be reached. See cf/README for more information. Based on patch from Billy Ray Miller of Caterpillar. CONFIG: Experimental support for MTAMark, see cf/README for details. CONFIG: New option confMESSAGEID_HEADER to define a different Message-Id: header format. Patch from Bastiaan Bakker of LifeLine Networks. CONTRIB: New version of cidrexpand which uses Net::CIDR. From Derek J. Balling. CONTRIB: oldbind.compat.c has been removed due to security problems. Found by code inspection done by Reasoning, Inc. DEVTOOLS: Add an example file for devtools/Site/, contributed by Neil Rickert of Northern Illinois University. LIBMILTER: Add new function smfi_quarantine() which allows the filter's EOM routine to quarantine the current message. Filters which use this function must include the SMFIF_QUARANTINE flag in the registered smfiDesc structure. LIBMILTER: If a milter sets the reply code to "421", the SMTP server will terminate the SMTP session with that error. LIBMILTER: Upon filter shutdown, libmilter will not remove a named socket in the file system if it is running as root. LIBMILTER: Add new function smfi_progress() which allows the filter to notify the MTA that an EOM operation is still in progress, resetting the timeout. LIBMILTER: Add new function smfi_opensocket() which allows the filter to attempt to establish the interface socket, and detect failure to do so before calling smfi_main(). LIBMILTER: Add new function smfi_setmlreply() which allows the filter to return a multi-line SMTP reply. LIBMILTER: Deal with more temporary errors in accept() by ignoring them instead of stopping after too many occurred. Suggested by James Carlson of Sun Microsystems. LIBMILTER: Fix a descriptor leak in the sample program found in docs/sample.html. Reported by Dmitry Adamushko. LIBMILTER: The sample program also needs to use SMFIF_ADDRCPT. Reported by Carl Byington of 510 Software Group. LIBMILTER: Document smfi_stop() and smfi_setdbg(). Patches from Bryan Costales. LIBMILTER: New compile time option SM_CONF_POLL; define this if poll(2) should be used instead of select(2). LIBMILTER: New function smfi_insheader() and related protocol amendments to support header insertion operations. MAIL.LOCAL: Add support for hashed mail directories, see mail.local/README. Contributed by Chris Adams of HiWAAY Informations Services. MAILSTATS: Display quarantine message counts. MAKEMAP: Add new flag -D to specify the comment character to use instead of '#'. VACATION: Add new flag -j to auto-respond to messages regardless of whether or not the recipient is listed in the To: or Cc: headers. VACATION: Add new flag -R to specify the envelope sender address for the auto-response message. New Files: CACerts cf/feature/conncontrol.m4 cf/feature/greet_pause.m4 cf/feature/mtamark.m4 cf/feature/ratecontrol.m4 cf/feature/use_client_ptr.m4 cf/ostype/unicos.m4 cf/ostype/unicosmk.m4 cf/ostype/unicosmp.m4 contrib/socketmapClient.pl contrib/socketmapServer.pl devtools/OS/Darwin.7.0 devtools/OS/UNICOS-mk devtools/OS/UNICOS-mp devtools/Site/site.config.m4.sample include/sm/os/sm_os_unicos.h include/sm/os/sm_os_unicosmk.h include/sm/os/sm_os_unicosmp.h libmilter/docs/smfi_insheader.html libmilter/docs/smfi_progress.html libmilter/docs/smfi_quarantine.html libmilter/docs/smfi_setdbg.html libmilter/docs/smfi_setmlreply.html libmilter/docs/smfi_stop.html sendmail/ratectrl.c Deleted Files: cf/feature/nodns.m4 contrib/oldbind.compat.c devtools/OS/CRAYT3E.2.0.x devtools/OS/CRAYTS.10.0.x libsm/vsprintf.c Renamed Files: devtools/OS/Darwin.7.0 => devtools/OS/Darwin.7.x 8.12.11/8.12.11 2004/01/18 Use QueueFileMode when opening qf files. This error was a regression in 8.12.10. Problem detected and diagnosed Lech Szychowski of the Polish Power Grid Company. Properly count the number of queue runners in a work group and make sure the total limit of MaxQueueChildren is not exceeded. Based on patch from Takayuki Yoshizawa of Techfirm, Inc. Take care of systems that can generate time values where the seconds can exceed the usual range of 0 to 59. Problem noted by Randy Diffenderfer of EDS. Avoid regeneration of identical queue identifiers by processes whose process id is the same as that of the initial sendmail process that was used to start the daemon. Problem noted by Randy Diffenderfer of EDS. When a milter invokes smfi_delrcpt() compare the supplied recipient address also against the printable addresses of the current list to deal with rewritten addresses. Based on patch from Sean Hanson of The Asylum. BadRcptThrottle now also works for addresses which return the error mailer, e.g., virtusertable entries with the right hand side error:. Patch from Per Hedeland. Fix printing of 8 bit characters as octals in log messages. Based on patch by Andrey J. Melnikoff. Undo change of algorithm for MIME 7-bit base64 encoding to 8-bit text that has been introduced in 8.12.3. There are some examples where the new code fails, but the old code works. To get the 8.12.3-8.12.10 version, compile sendmail with -DMIME7TO8_OLD=0. If you have an example of improper 7 to 8 bit conversion please send it to us. Return normal error code for unknown SMTP commands instead of the one specified by check_relay or a milter for a connection. Problem noted by Andrzej Filip. Some ident responses contain data after the terminating CRLF which causes sendmail to log "POSSIBLE ATTACK...newline in string". To avoid this everything after LF is ignored. If the operating system supports O_EXLOCK and HASFLOCK is set then a possible race condition for creating qf files can be avoided. Note: the race condition does not exist within sendmail, but between sendmail and an external application that accesses qf files. Log the proper options name for TLS related mising files for the CACertPath, CACertFile, and DHParameters options. Do not split an envelope if it will be discarded, otherwise df files could be left behind. Problem found by Wolfgang Breyha. The use of the environment variables HOME and HOSTALIASES has been deprecated and will be removed in version 8.13. This only effects configuration which preserve those variable via the 'E' command in the cf file as sendmail clears out its entire environment. Portability: Add support for Darwin 7.0/Mac OS X 10.3 (a.k.a. Panther). Solaris 10 has unsetenv(), patch from Craig Mohrman of Sun Microsystems. LIBMILTER: Add extra checks in case a broken MTA sends bogus data to libmilter. Based on code review by Rob Grzywinski. SMRSH: Properly assemble commands that contain '&&' or '||'. Problem noted by Eric Lee of Talking Heads. New Files: devtools/OS/Darwin.7.0 8.12.10/8.12.10 2003/09/24 (Released: 2003/09/17) SECURITY: Fix a buffer overflow in address parsing. Problem detected by Michal Zalewski, patch from Todd C. Miller of Courtesan Consulting. Fix a potential buffer overflow in ruleset parsing. This problem is not exploitable in the default sendmail configuration; only if non-standard rulesets recipient (2), final (4), or mailer-specific envelope recipients rulesets are used then a problem may occur. Problem noted by Timo Sirainen. Accept 0 (and 0/0) as valid input for set MaxMimeHeaderLength. Problem noted by Thomas Schulz. Add several checks to avoid (theoretical) buffer over/underflows. Properly count message size when performing 7->8 or 8->7 bit MIME conversions. Problem noted by Werner Wiethege. Properly compute message priority based on size of entire message, not just header. Problem noted by Axel Holscher. Reset SevenBitInput to its configured value between SMTP transactions for broken clients which do not properly announce 8 bit data. Problem noted by Stefan Roehrich. Set {addr_type} during queue runs when processing recipients. Based on patch from Arne Jansen. Better error handling in case of (very unlikely) queue-id conflicts. Perform better error recovery for address parsing, e.g., when encountering a comment that is too long. Problem noted by Tanel Kokk, Union Bank of Estonia. Add ':' to the allowed character list for bogus HELO/EHLO checking. It is used for IPv6 domain literals. Patch from Iwaizako Takahiro of FreeBit Co., Ltd. Reset SASL connection context after a failed authentication attempt. Based on patch from Rob Siemborski of CMU. Check Berkeley DB compile time version against run time version to make sure they match. Do not attempt AAAA (IPv6) DNS lookups if IPv6 is not enabled in the kernel. When a milter adds recipients and one of them causes an error, do not ignore the other recipients. Problem noted by Bart Duchesne. CONFIG: Use specified SMTP error code in mailertable entries which lack a DSN, i.e., "error:### Text". Problem noted by Craig Hunt. CONFIG: Call Local_trust_auth with the correct argument. Patch from Jerome Borsboom. CONTRIB: Better handling of temporary filenames for doublebounce.pl and expn.pl to avoid file overwrites, etc. Patches from Richard A. Nelson of Debian and Paul Szabo. MAIL.LOCAL: Fix obscure race condition that could lead to an improper mailbox truncation if close() fails after the mailbox is fsync()'ed and a new message is delivered after the close() and before the truncate(). MAIL.LOCAL: If mail delivery fails, do not leave behind a stale lockfile (which is ignored after the lock timeout). Patch from Oleg Bulyzhin of Cronyx Plus LLC. Portability: Port for AIX 5.2. Thanks to Steve Hubert of University of Washington for providing access to a computer with AIX 5.2. setreuid(2) works on OpenBSD 3.3. Patch from Todd C. Miller of Courtesan Consulting. Allow for custom definition of SMRSH_CMDDIR and SMRSH_PATH on all operating systems. Patch from Robert Harker of Harker Systems. Use strerror(3) on Linux. If this causes a problem on your Linux distribution, compile with -DHASSTRERROR=0 and tell sendmail.org about it. Added Files: devtools/OS/AIX.5.2 8.12.9/8.12.9 2003/03/29 SECURITY: Fix a buffer overflow in address parsing due to a char to int conversion problem which is potentially remotely exploitable. Problem found by Michal Zalewski. Note: an MTA that is not patched might be vulnerable to data that it receives from untrusted sources, which includes DNS. To provide partial protection to internal, unpatched sendmail MTAs, 8.12.9 changes by default (char)0xff to (char)0x7f in headers etc. To turn off this conversion compile with -DALLOW_255 or use the command line option -d82.101. To provide partial protection for internal, unpatched MTAs that may be performing 7->8 or 8->7 bit MIME conversions, the default for MaxMimeHeaderLength has been changed to 2048/1024. Note: this does have a performance impact, and it only protects against frontal attacks from the outside. To disable the checks and return to pre-8.12.9 defaults, set MaxMimeHeaderLength to 0/0. Do not complain about -ba when submitting mail. Problem noted by Derek Wueppelmann. Fix compilation with Berkeley DB 1.85 on systems that do not have flock(2). Problem noted by Andy Harper of Kings College London. Properly initialize data structure for dns maps to avoid various errors, e.g., looping processes. Problem noted by Maurice Makaay of InterNLnet B.V. CONFIG: Prevent multiple application of rule to add smart host. Patch from Andrzej Filip. CONFIG: Fix queue group declaration in MAILER(`usenet'). CONTRIB: buildvirtuser: New option -t builds the virtusertable text file instead of the database map. Portability: Revert wrong change made in 8.12.7 and actually use the builtin getopt() version in sendmail on Linux. This can be overridden by using -DSM_CONF_GETOPT=0 in which case the OS supplied version will be used. 8.12.8/8.12.8 2003/02/11 SECURITY: Fix a remote buffer overflow in header parsing by dropping sender and recipient header comments if the comments are too long. Problem noted by Mark Dowd of ISS X-Force. Fix a potential non-exploitable buffer overflow in parsing the .cf queue settings and potential buffer underflow in parsing ident responses. Problem noted by Yichen Xie of Stanford University Compilation Group. Fix ETRN #queuegroup command: actually start a queue run for the selected queue group. Problem noted by Jos Vos. If MaxMimeHeaderLength is set and a malformed MIME header is fixed, log the fixup as "Fixed MIME header" instead of "Truncated MIME header". Problem noted by Ian J Hart. CONFIG: Fix regression bug in proto.m4 that caused a bogus error message: "FEATURE() should be before MAILER()". MAIL.LOCAL: Be more explicit in some error cases, i.e., whether a mailbox has more than one link or whether it is not a regular file. Patch from John Beck of Sun Microsystems. 8.12.7/8.12.7 2002/12/29 Properly clean up macros to avoid persistence of session data across various connections. This could cause session oriented restrictions, e.g., STARTTLS requirements, to erroneously allow a connection. Problem noted by Tim Maletic of Priority Health. Do not lookup MX records when sorting the MSP queue. The MSP only needs to relay all mail to the MTA. Problem found by Gary Mills of the University of Manitoba. Do not restrict the length of connection information to 100 characters in some logging statements. Problem noted by Erik Parker. When converting an enhanced status code to an exit status, use EX_CONFIG if the first digit is not 2, 4, or 5 or if *.1.5 is used. Reset macro $x when receiving another MAIL command. Problem noted by Vlado Potisk of Wigro s.r.o. Don't bother setting the permissions on the build area statistics file, the proper permissions will be put on the file at install time. This fixes installation over NFS for some users. Problem noted by Martin J. Dellwo of 3-Dimensional Pharmaceuticals, Inc. Fix problem of decoding SASLv2 encrypted data. Problem noted by Alex Deiter of Mobile TeleSystems, Komi Republic. Log milter socket open errors at MilterLogLevel 1 or higher instead of 11 or higher. Print early system errors to the console instead of silently exiting. Problem noted by James Jong of IBM. Do not process a queue group if Runners is set to 0, regardless of whether F=f or sendmail is run in verbose mode (-v). The use of -qGname will still force queue group "name" to be run even if Runners=0. Change the level for logging the fact that a daemon is refusing connections due to high load from LOG_INFO to LOG_NOTICE. Patch from John Beck of Sun Microsystems. Use location information for submit.cf from NetInfo (/locations/sendmail/submit.cf) if available. Re-enable ForkEachJob which was lost in 8.12.0. Problem noted by Neil Rickert of Northern Illinois University. Make behavior of /canon in debug mode consistent with usage in rulesets. Patch from Shigeno Kazutaka of IIJ. Fix a potential memory leak in envelope splitting. Problem noted by John Majikes of IBM. Do not try to share an mailbox database LDAP connection across different processes. Problem noted by Randy Kunkee. Fix logging for undelivered recipients when the SMTP connection times out during message collection. Problem noted by Neil Rickert of Northern Illinois University. Avoid problems with QueueSortOrder=random due to problems with qsort() on Solaris (and maybe some other operating systems). Problem noted by Stephan Schulz of Gruner+Jahr.. If -f "" is specified, set the sender address to "<>". Problem noted by Matthias Andree. Fix formatting problem of footnotes for plain text output on some versions of tmac. Patch from Per Hedeland. Portability: Berkeley DB 4.1 support (requires at least 4.1.25). Some getopt(3) implementations in GNU/Linux are broken and pass a NULL pointer to an option which requires an argument, hence the builtin version of sendmail is used instead. This can be overridden by using -DSM_CONF_GETOPT=0. Problem noted by Vlado Potisk of Wigro s.r.o. Support for nph-1.2.0 from Mark D. Roth of the University of Illinois at Urbana-Champaign. Support for FreeBSD 5.0's MAC labeling from Robert Watson of the TrustedBSD Project. Support for reading the number of processors on an IRIX system from Michel Bourget of SGI. Support for UnixWare 7.1 based on input from Larry Rosenman. Interix support from Nedelcho Stanev of Atlantic Sky Corporation. Update Mac OS X/Darwin portability from Wilfredo Sanchez. CONFIG: Enforce tls_client restrictions even if delay_checks is used. Problem noted by Malte Starostik. CONFIG: Deal with an empty hostname created via bogus DNS entries to get around access restrictions. Problem noted by Kai Schlichting. CONFIG: Use FEATURE(`msp', `[127.0.0.1]') in submit.mc by default to avoid problems with hostname resolution for localhost which on many systems does not resolve to 127.0.0.1 (or ::1 for IPv6). If you do not use IPv4 but only IPv6 then you need to change submit.mc accordingly, see the comment in the file itself. CONFIG: Set confDONT_INIT_GROUPS to True in submit.mc to avoid error messages from initgroups(3) on AIX 4.3 when sending mail to non-existing users. Problem noted by Mark Roth of the University of Illinois at Urbana-Champaign. CONFIG: Allow local_procmail to override local_lmtp settings. CONFIG: Always allow connections from 127.0.0.1 or IPv6:::1 to relay. CONTRIB: cidrexpand: Deal with the prefix tags that may be included in access_db. CONTRIB: New version of doublebounce.pl contributed by Leo Bicknell. LIBMILTER: On Solaris libmilter may get into an endless loop if an error in the communication from/to the MTA occurs. Patch from Gurusamy Sarathy of Active State. LIBMILTER: Ignore EINTR from sigwait(3) which may happen on Tru64. Patch from from Jose Marcio Martins da Cruz of Ecole Nationale Superieure des Mines de Paris. MAIL.LOCAL: Fix a truncation race condition if the close() on the mailbox fails. Problem noted by Tomoko Fukuzawa of Sun Microsystems. MAIL.LOCAL: Fix a potential file descriptor leak if mkstemp(3) fails. Patch from John Beck of Sun Microsystems. SMRSH: SECURITY: Only allow regular files or symbolic links to be used for a command. Problem noted by David Endler of iDEFENSE, Inc. New Files: devtools/OS/Interix include/sm/bdb.h 8.12.6/8.12.6 2002/08/26 Do not add the FallbackMXhost (or its MX records) to the list returned by the bestmx map when -z is used as option. Otherwise sendmail may act as an open relay if FallbackMXhost and FEATURE(`relay_based_on_MX') are used together. Problem noted by Alexander Ignatyev. Properly split owner- mailing list messages when SuperSafe is set to interactive. Problem noted by Todd C. Miller of Courtesan Consulting. Make sure that an envelope is queued in the selected queue group even if some recipients are deleted or invalid. Problem found by Chris Adams of HiWAAY Informations Services. Do not send a bounce message if a message is completely collected from the SMTP client. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Provide an 'install-submit-st' target for sendmail/Makefile to install the MSP statistics file using the file named in the confMSP_STFILE devtools variable. Requested by Jeff Earickson of Colby College. Queue up mail with a temporary error if setusercontext() fails during a delivery attempt. Patch from Todd C. Miller of Courtesan Consulting. Fix handling of base64 encoded client authentication data for SMTP AUTH. Patch from Elena Slobodnik of life medien GmbH. Set the OpenLDAP option LDAP_OPT_RESTART so the client libraries restart interrupted system calls. Problem noted by Luiz Henrique Duma of BSIOne. Prevent a segmentation fault if a program passed a NULL envp using execve(). Document a problem with the counting of queue runners that may cause delays if MaxQueueChildren is set too low. Problem noted by Ian Duplisse of Cable Television Laboratories, Inc. If discarding a message based on a recipient, don't try to look up the recipient in the mailbox database if F=w is set. This allows users to discard bogus recipients when dealing with spammers without tipping them off. Problem noted by Neil Rickert of Northern Illinois University. If applying a header check to a header with unstructured data, e.g., Subject:, then do not run syntax checks that are supposed for addresses on the header content. Count messages rejected/discarded via the check_data ruleset. Portability: Fix compilation on systems which do not allow simple copying of the variable argument va_list. Based on fix from Scott Walters. Fix NSD map open bug. From Michel Bourget of SGI. Add some additional IRIX shells to the default shell list. From Michel Bourget of SGI. Fix compilation issues on Mac OS X 10.2 (Darwin 6.0). NETISO support has been dropped. CONFIG: There was a seemingly minor change in 8.12.4 with respect to handling entries of IP nets/addresses with RHS REJECT. These would be rejected in check_rcpt instead of only being activated in check_relay. This change has been made to avoid potential bogus temporary rejection of relay attempts "450 4.7.1 Relaying temporarily denied. Cannot resolve PTR record for ..." if delay_checks is enabled. However, this modification causes a change of behavior if an IP net/address is listed in the access map with REJECT and a host/domain name is listed with OK or RELAY, hence it has been reversed such that the behavior of 8.12.3 is restored. The original change was made on request of Neil Rickert of Northern Illinois University, the side effect has been found by Stefaan Van Hoornick. CONFIG: Make sure delay_checks works even for sender addresses using the local hostname ($j) or domains in class {P}. Based on patch from Neil Rickert of Northern Illinois University. CONFIG: Fix temporary error handling for LDAP Routing lookups. Fix from Andrzej Filip. CONTRIB: New version of etrn.pl script and external man page (etrn.0) from John Beck of Sun Microsystems. LIBMILTER: Protect a free(3) operation from being called with a NULL pointer. Problem noted by Andrey J. Melnikoff. LIBMILTER: Protect against more interrupted select() calls. Based on patch from Jose Marcio Martins da Cruz of Ecole Nationale Superieure des Mines de Paris. New Files: contrib/etrn.0 8.12.5/8.12.5 2002/06/25 SECURITY: The DNS map can cause a buffer overflow if the user specifies a dns map using TXT records in the configuration file and a rogue DNS server is queried. None of the sendmail supplied configuration files use this option hence they are not vulnerable. Problem noted independently by Joost Pol of PINE Internet and Anton Rang of Sun Microsystems. Unprintable characters in responses from DNS servers for the DNS map type are changed to 'X' to avoid potential problems with rogue DNS servers. Require a suboption when setting the Milter option. Problem noted by Bryan Costales. Do not silently overwrite command line settings for DirectSubmissionModifiers. Problem noted by Bryan Costales. Prevent a segmentation fault when clearing the event list by turning off alarms before checking if event list is empty. Problem noted by Allan E Johannesen of Worcester Polytechnic Institute. Close a potential race condition in transitioning a memory buffered file onto disk. From Janani Devarajan of Sun Microsystems. Portability: Include paths.h on Linux systems running glibc 2.0 or later to get the definition for _PATH_SENDMAIL, used by rmail and vacation. Problem noted by Kevin A. McGrail of Peregrine Hardware. NOTE: Linux appears to have broken flock() again. Unless the bug is fixed before sendmail 8.13 is shipped, 8.13 will change the default locking method to fcntl() for Linux kernel 2.4 and later. You may want to do this in 8.12 by compiling with -DHASFLOCK=0. Be sure to update other sendmail related programs to match locking techniques. 8.12.4/8.12.4 2002/06/03 SECURITY: Inherent limitations in the UNIX file locking model can leave systems open to a local denial of service attack. Be sure to read the "FILE AND MAP PERMISSIONS" section of the top level README for more information. Problem noted by lumpy. Use TempFileMode (defaults to 0600) for the permissions of PidFile instead of 0644. Change the default file permissions for new alias database files from 0644 to 0640. This can be overridden at compile time by setting the DBMMODE macro. Fix a potential core dump problem if the environment variable NAME is set. Problem noted by Beth A. Chaney of Purdue University. Expand macros before passing them to libmilter. Problem noted by Jose Marcio Martins da Cruz of Ecole Nationale Superieure des Mines de Paris. Rewind the df (message body) before truncating it when libmilter replaces the body of a message. Problem noted by Gisle Aas of Active State. Change SMTP reply code for AUTH failure from 500 to 535 and the initial zero-length response to "=" per RFC 2554. Patches from Kenneth Murchison of Oceana Matrix Ltd. Do not try to fix broken message/rfc822 MIME attachments by inserting a MIME-Version: header when MaxMimeHeaderLength is set and no 8 to 7 bit conversion is needed. Based on patch from Rehor Petr of ICZ (Czech Republic). Do not log "did not issue MAIL/EXPN/VRFY/ETRN" if the connection is rejected anyway. Noted by Chris Loelke. Mention the submission mail queue in the mailq man page. Requested by Bill Fenner of AT&T. Set ${msg_size} macro when reading a message from the command line or the queue. Detach from shared memory before dropping privileges back to user who started sendmail. If AllowBogusHELO is set to false (default) then also complain if the argument to HELO/EHLO contains white space. Suggested by Seva Gluschenko of Cronyx Plus. Allow symbolicly linked forward files in writable directory paths if both ForwardFileInUnsafeDirPath and LinkedForwardFileInWritableDir DontBlameSendmail options are set. Problem noted by Werner Spirk of Leibniz-Rechenzentrum Munich. Portability: Operating systems that lack the ftruncate() call will not be able to use Milter's body replacement feature. This only affects Altos, Maxion, and MPE/iX. Digital UNIX 5.0 has changed flock() semantics to be non-compliant. Problem noted by Martin Mokrejs of Charles University in Prague. The sparc64 port of FreeBSD 5.0 now supports shared memory. CONFIG: FEATURE(`preserve_luser_host') needs the macro map. Problem noted by Andrzej Filip. CONFIG: Using 'local:' as a mailertable value with FEATURE(`preserve_luser_host') and LUSER_RELAY caused mail to be misaddressed. Problem noted by Andrzej Filip. CONFIG: Provide a workaround for DNS based rejection lists that fail for AAAA queries. Problem noted by Chris Boyd. CONFIG: Accept the machine's hostname as resolvable when checking the sender address. This allows locally submitted mail to be accepted if the machine isn't connected to a nameserver and doesn't have an /etc/hosts entry for itself. Problem noted by Robert Watson of the TrustedBSD Project. CONFIG: Use deferred expansion for checking the ${deliveryMode} macro in case the SMTP VERB command is used. Problem noted by Bryan Costales. CONFIG: Avoid a duplicate '@domain' virtusertable lookup if no matches are found. Fix from Andrzej Filip. CONFIG: Fix wording in default dnsbl rejection message. Suggested by Lou Katz of Metron Computerware, Ltd. CONFIG: Add mailer cyrusv2 for Cyrus V2. Contributed by Kenneth Murchison of Oceana Matrix Ltd. CONTRIB: Fix wording in default dnsblaccess rejection message to match dnsbl change. DEVTOOLS: Add new option for access mode of statistics file, confSTMODE, which specifies the permissions when initially installing the sendmail statistics file. LIBMILTER: Mark the listening socket as close-on-exec in case a user's filter starts other applications. LIBSM: Allow the MBDB initialize, lookup, and/or terminate functions in SmMbdbTypes to be set to NULL. MAKEMAP: Change the default file permissions for new databases from 0644 to 0640. This can be overridden at compile time by setting the DBMMODE macro. SMRSH: Fix man page bug: replace SMRSH_CMDBIN with SMRSH_CMDDIR. Problem noted by Dave Alden of Ohio State University. VACATION: When listing the vacation database (-l), don't show bogus timestamps for excluded (-x) addresses. Problem noted by Bryan Costales. New Files: cf/mailer/cyrusv2.m4 8.12.3/8.12.3 2002/04/05 NOTICE: In general queue files should not be moved if queue groups are used. In previous versions this could cause mail not to be delivered if a queue file is repeatedly moved by an external process whenever sendmail moved it back into the right place. Some precautions have been taken to avoid moving queue files if not really necessary. sendmail may use links to refer to queue files and it may store the path of data files in queue files. Hence queue files should not be moved unless those internals are understood and the integrity of the files is not compromised. Problem noted by Anne Bennett of Concordia University. If an error mail is created, and the mail is split across different queue directories, and SuperSafe is off, then write the mail to disk before splitting it, otherwise an assertion is triggered. Problem tracked down by Henning Schmiedehausen of INTERMETA. Fix possible race condition that could cause sendmail to forget running queues. Problem noted by Jeff Wasilko of smoe.org. Handle bogus qf files better without triggering assertions. Problem noted by Guy Feltin. Protect against interrupted select() call when enforcing Milter read and write timeouts. Patch from Gurusamy Sarathy of ActiveState. Matching queue IDs with -qI should be case sensitive. Problem noted by Anne Bennett of Concordia University. If privileges have been dropped, don't try to change group ID to the RunAsUser group. Problem noted by Neil Rickert of Northern Illinois University. Fix SafeFileEnvironment path munging when the specified path contains a trailing slash. Based on patch from Dirk Meyer of Dinoex. Do not limit sendmail command line length to SM_ARG_MAX (usually 4096). Problem noted by Allan E Johannesen of Worcester Polytechnic Institute. Clear full name of sender for each new envelope to avoid bogus data if several mails are sent in one session and some of them do not have a From: header. Problem noted by Bas Haakman. Change timeout check such that cached information about a connection will be immediately invalid if ConnectionCacheTimeout is zero. Based on patch from David Burns of Portland State University. Properly count message size for mailstats during mail collection. Problem noted by Werner Wiethege. Log complete response from LMTP delivery agent on failure. Based on patch from Motonori Nakamura of Kyoto University. Provide workaround for getopt() implementations that do not catch missing arguments. Fix the message size calculation if the message body is replaced by a milter filter and buffered file I/O is being used. Problem noted by Sergey Akhapkin of Dr.Web. Do not honor SIGUSR1 requests if running with extra privileges. Problem noted by Werner Wiethege. Prevent a file descriptor leak on mail delivery if the initial connect fails and DialDelay is set. Patch from Servaas Vandenberghe of Katholieke Universiteit Leuven. Properly deal with a case where sendmail is called by root running a set-user-ID (non-root) program. Problem noted by Jon Lusky of ISS Atlanta. Avoid leaving behind stray transcript (xf) files if multiple queue directories are used and mail is sent to a mailing list which has an owner- alias. Problem noted by Anne Bennett of Concordia University. Fix class map parsing code if optional key is specified. Problem found by Mario Nigrovic. The SMTP daemon no longer tries to fix up improperly dot-stuffed incoming messages. A leading dot is always stripped by the SMTP receiver regardless of whether or not it is followed by another dot. Problem noted by Jordan Ritter of darkridge.com. Fix corruption when doing automatic MIME 7-bit quoted-printable or base64 encoding to 8-bit text. Problem noted by Mark Elvers. Correct the statistics gathered for total number of connections. Instead of being the exact same number as the total number of messages (T line in mailstats) it now represents the total number of TCP connections. Be more explicit about syntax errors in addresses, especially non-ASCII characters, and properly create DSNs if necessary. Problem noted by Leena Heino of the University of Tampere. Prevent small timeouts from being lost on slow machines if itimers are used. Problem noted by Suresh Ramasubramanian. Prevent a race condition on child cleanup for delivery to files. Problem noted by Fletcher Mattox of the University of Texas. Change the SMTP error code for temporary map failures from 421 to 451. Do not assume that realloc(NULL, size) works on all OS (this was only done in one place: queue group creation). Based on patch by Bryan Costales. Initialize Timeout.iconnect in the code to prevent randomly short timeouts. Problem noted by Bradley Watts of AT&T Canada. Do not try to send a second SMTP QUIT command if the remote responds to a MAIL command with a 421 reply or on I/O errors. By doing so, the host was marked as having a temporary problem and other mail destined for that host was queued for the next queue run. Problem noted by Fletcher Mattox of the University of Texas, Allan E Johannesen of Worcester Polytechnic Institute, Larry Greenfield of CMU, and Neil Rickert of Northern Illinois University. Ignore error replies from the SMTP QUIT command (including servers which drop the connection instead of responding to the command). Portability: Check LDAP_API_VERSION to determine if ldap_memfree() is available. Define HPUX10 when building on HP-UX 10.X. That platform now gets the proper _PATH_SENDMAIL and SMRSH_CMDDIR settings. Patch from Elias Halldor Agustsson of Skyrr. Fix dependency building on Mac OS X and Darwin. Problem noted by John Beck. Preliminary support for the sparc64 port of FreeBSD 5.0. Add /sbin/sh as an acceptable user shell on HP-UX. From Rajesh Somasund of Hewlett-Packard. CONFIG: Add FEATURE(`authinfo') to allow a separate database for SMTP AUTH information. This feature was actually added in 8.12.0 but a release note was not included. CONFIG: Do not bounce mail if FEATURE(`ldap_routing')'s bounce parameter is set and the LDAP lookup returns a temporary error. CONFIG: Honor FEATURE(`relay_hosts_only') when using FEATURE(`relay_mail_from', `domain'). Problem noted by Krzysztof Oledzki. CONFIG: FEATURE(`msp') now disables any type of alias initialization as aliases are not needed for the MSP. CONFIG: Allow users to override RELAY_MAILER_ARGS when FEATURE(`msp') is in use. Patch from Andrzej Filip. CONFIG: FEATURE(`msp') uses `[localhost]' as default instead of `localhost' and turns on MX lookups for the SMTP mailers. This will only have an effect if a parameter is specified, i.e., an MX lookup will be performed on the hostname unless it is embedded in square brackets. Problem noted by Theo Van Dinter of Collective Technologies. CONFIG: Set confTIME_ZONE to USE_TZ in submit.mc (TimeZoneSpec= in submit.cf) to use $TZ for time stamps. This is a compromise to allow for the proper time zone on systems where the default results in misleading time stamps. That is, syslog time stamps and Date headers on submitted mail will use the user's $TZ setting. Problem noted by Mark Roth of the University of Illinois at Urbana-Champaign, solution proposed by Neil Rickert of Northern Illinois University. CONFIG: Mac OS X (Darwin) ships with mail.local as non-set-user-ID binary. Adjust local mailer flags accordingly. Problem noted by John Beck. CONTRIB: Add a warning to qtool.pl to not move queue files around if queue groups are used. CONTRIB: buildvirtuser: Add -f option to force rebuild. CONTRIB: smcontrol.pl: Add -f option to specify control socket. CONTRIB: smcontrol.pl: Add support for 'memdump' command. Suggested by Bryan Costales. DEVTOOLS: Add dependency generation for test programs. LIBMILTER: Remove conversion of port number for the socket structure that is passed to xxfi_connect(). Notice: this fix requires that sendmail and libmilter both have this change; mixing versions may lead to wrong port values depending on the endianness of the involved systems. Problem noted by Gisle Aas of ActiveState. LIBMILTER: If smfi_setreply() sets a custom reply code of '4XX' but SMFI_REJECT is returned, ignore the custom reply. Do the same if '5XX' is used and SMFI_TEMPFAIL is returned. LIBMILTER: Install include files in ${INCLUDEDIR}/libmilter/ as required by mfapi.h. Problem noted by Jose Marcio Martins da Cruz of Ecole Nationale Superieure des Mines de Paris. LIBSM: Add SM_CONF_LDAP_MEMFREE as a configuration define. Set this to 1 if your LDAP client libraries include ldap_memfree(). LIBSMDB: Avoid a file creation race condition for Berkeley DB 1.X and NDBM on systems with the O_EXLOCK open(2) flag. SMRSH: Fix compilation problem on some operating systems. Problem noted by Christian Krackowizer of schuler technodat GmbH. VACATION: Allow root to operate on user vacation databases. Based on patch from Greg Couch of the University of California, San Francisco. VACATION: Don't ignore -C option. Based on patch by Bryan Costales. VACATION: Clarify option usage in the man page. Problem noted by Joe Barbish. New Files: libmilter/docs/smfi_setbacklog.html 8.12.2/8.12.2 2002/01/13 Don't complain too much if stdin, stdout, or stderr are missing at startup, only log an error message. Fix potential problem if an unknown operation mode (character following -b) has been specified. Prevent purgestat from looping even if someone changes the permissions or owner of hoststatus files. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Properly record dropped connections in persistent host status. Problem noted by Ulrich Windl of the Universitat Regensburg. Remove newlines from recipients read via sendmail -t to prevent SMTP protocol errors when sending the RCPT command. Problem noted by William D. Colburn of the New Mexico Institute of Mining and Technology. Only log milter body replacements once instead of for each body chunk sent by a filter. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. In 8.12.0 and 8.12.1, the headers were mistakenly not included in the message size calculation. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Since 8.12 no longer forks at the SMTP MAIL command, the daemon needs to collect children status to avoid zombie processes. Problem noted by Chris Adams of HiWAAY Informations Services. Shut down "nullserver" and ETRN-only connections after 25 bad commands are issued. This makes it consistent with normal SMTP connections. Avoid duplicate logging of milter rejections. Problem noted by William D. Colburn of the New Mexico Institute of Mining and Technology. Error and delay DSNs were being sent to postmaster instead of the message sender if the sender had used a deprecated RFC822 source route. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Fix FallbackMXhost behavior for temporary errors during address parsing. Problem noted by Jorg Bielak from Coastal Web Online. For systems on which stat(2) does not return a value for st_blksize that is the "optimal blocksize for I/O" three new compile time flags are available: SM_IO_MAX_BUF_FILE, SM_IO_MIN_BUF, and SM_IO_MAX_BUF, which define an upper limit for regular files, and a lower and upper limit for other file types, respectively. Fix a potential deadlock if two events are supposed to occur at exactly the same time. Problem noted by Valdis Kletnieks of Virginia Tech. Perform envelope splitting for aliases listed directly in the alias file, not just for include/.forward files. Problem noted by John Beck of Sun Microsystems. Allow selection of queue group for mailq using -qGgroup. Based on patch by John Beck of Sun Microsystems. Make sure cached LDAP connections used my multiple maps in the same process are closed. Patch from Taso N. Devetzis. If running as root, allow reading of class files in protected directories. Patch from Alexander Talos of the University of Vienna. Correct a few LDAP related memory leaks. Patch from David Powell of Sun Microsystems. Allow specification of an empty realm via the authinfo ruleset. This is necessary to interoperate as an SMTP AUTH client with servers that do not support realms when using CRAM-MD5. Problem noted by Bjoern Voigt of TU Berlin. Avoid a potential information leak if AUTH PLAIN is used and the server gets stuck while processing that command. Problem noted by Chris Adams from HiWAAY Informations Services. In addition to printing errors when parsing recipients during command line invocations log them to make it simpler to understand possible DSNs to postmaster. Do not use FallbackMXhost on mailers which have the F=0 flag set. Allow local mailers (F=l) to specify a host for TCP connections instead of forcing localhost. Obey ${DESTDIR} for installation of the client mail queue and submit.cf. Patch from Peter 'Luna' Runestig. Re-enable support for -M option which was broken in 8.12.1. Problem noted by Neil Rickert of Northern Illinois University. If a remote server violates the SMTP standard by unexpectedly dropping the connection during an SMTP transaction, stop sending commands. This prevents bogus "Bad file number" recipient status. Problem noted by Allan E Johannesen of Worcester Polytechnic Institute. Do not use a size estimate of 100 for postmaster bounces, it's almost always too small; do not guess the size at all. New VENDOR_DEC for Compaq/DEC. Requested by James Seagraves of Compaq Computer Corp. Fix DaemonPortOptions IPv6 address parsing such that ::1 works properly. Problem noted by Valdis Kletnieks of Virginia Tech. Portability: Fix IPv6 network interface probing on HP-UX 11.X. Based on patch provided by HP. Mac OS X (aka Darwin) has a broken setreuid() call, but a working seteuid() call. From Daniel J. Luke. Use proper type for a 32-bit integer on SINIX. From Ganu Sachin of Siemens. Set SM_IO_MIN_BUF (4K) and SM_IO_MAX_BUF (8K) for HP-UX. Reduce optimization from +O3 to +O2 on HP-UX 11. This fixes a problem that caused additional bogus characters to be written to the qf file. Problem noted by Tapani Tarvainen. Set LDA_USE_LOCKF by default for UnixWare. Problem noted by Boyd Lynn Gerber. Add support for HP MPE/iX. See sendmail/README for port information. From Mark Bixby of Hewlett-Packard. New portability defines HASNICE, HASRRESVPORT, USE_ENVIRON, USE_DOUBLE_FORK, and NEEDLINK. See sendmail/README for more information. From Mark Bixby of Hewlett-Packard. If an OS doesn't have a method of finding free disk space (SFS_NONE), lie and say there is plenty of space. From Mark Bixby of Hewlett-Packard. Add support for AIX 5.1. From Valdis Kletnieks of Virginia Tech. Fix man page location for NeXTSTEP. From Hisanori Gogota of the NTT/InterCommunication Center. Do not assume that strerror() always returns a string. Problem noted by John Beck of Sun Microsystems. CONFIG: Add OSTYPE(freebsd5) for FreeBSD 5.X, which has removed UUCP from the base operating system. From Mark Murray of FreeBSD Services, Ltd. CONFIG: Add OSTYPE(mpeix) and a generic .mc file for HP MPE/iX systems. From Mark Bixby of Hewlett-Packard. CONFIG: Add support for selecting a queue group for all mailers. Based on proposal by Stephen L. Ulmer of the University of Florida. CONFIG: Fix error reporting for compat_check.m4. Problem noted by Altin Waldmann. CONFIG: Do not override user selections for confRUN_AS_USER and confTRUSTED_USER in FEATURE(msp). From Mark Bixby of Hewlett-Packard. LIBMILTER: Fix bug that prevented the removal of a socket after libmilter terminated. Problem reported by Andrey V. Pevnev of MSFU. LIBMILTER: Fix configuration error that required libsm for linking. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. LIBMILTER: Portability fix for OpenUNIX. Patch from Larry Rosenman. LIBMILTER: Fix a theoretical memory leak and a possible attempt to free memory twice. LIBSM: Fix a potential segmentation violation in the I/O library. Problem found and analyzed by John Beck and Tim Haley of Sun Microsystems. LIBSM: Do not clear the LDAP configuration information when terminating the mailbox database connection in the LDAP example code. Problem noted by Nikos Voutsinas of the University of Athens. New Files: cf/cf/generic-mpeix.cf cf/cf/generic-mpeix.mc cf/ostype/freebsd5.m4 cf/ostype/mpeix.m4 devtools/OS/AIX.5.1 devtools/OS/MPE-iX include/sm/os/sm_os_mpeix.h libsm/mpeix.c 8.12.1/8.12.1 2001/10/01 SECURITY: Check whether dropping group privileges actually succeeded to avoid possible compromises of the mail system by supplying bogus data. Add configuration options for different set*gid() calls to reset saved gid. Problem found by Michal Zalewski. PRIVACY: Prevent information leakage when sendmail has extra privileges by disabling debugging (command line -d flag) during queue runs and disabling ETRN when sendmail -bs is used. Suggested by Michal Zalewski. Avoid memory corruption problems resulting from bogus .cf files. Problem found by Michal Zalewski. Set the ${server_addr} macro to name of mailer when doing LMTP delivery. LMTP systems may offer SMTP Authentication or STARTTLS causing sendmail to use this macro in rulesets. If debugging is turned on (-d0.10) print not just the default values for configuration file and pid file but also the selected values. Problem noted by Brad Chapman. Continue dealing with broken nameservers by ignoring SERVFAIL errors returned on T_AAAA (IPv6) lookups at delivery time if ResolverOptions=WorkAroundBrokenAAAA is set. Previously this only applied to hostname canonification. Problem noted by Bill Fenner of AT&T Research. Ignore comments in NIS host records when trying to find the canonical name for a host. When sendmail has extra privileges, limit mail submission command line flags (i.e., -G, -h, -F, etc.) to mail submission operating modes (i.e., -bm, -bs, -bv, etc.). Idea based on suggestion from Michal Zalewski. Portability: AIX: Use `oslevel` if available to determine OS version. `uname` does not given complete information. Problem noted by Keith Neufeld of the Cessna Aircraft Company. OpenUNIX: Use lockf() for LDA delivery (affects mail.local). Problem noticed by Boyd Lynn Gerber of ZENEX. Avoid compiler warnings by not using pointers to pass integers. Problem noted by Todd C. Miller of Courtesan Consulting. CONFIG: Add restrictqrun to PrivacyOptions for the MSP to minimize problems with potential misconfigurations. CONFIG: Fix comment showing default value of MaxHopCount. Problem noted by Greg Robinson of the Defence Science and Technology Organisation of Australia. CONFIG: dnsbl: If an argument specifies an error message in case of temporary lookup failures for DNS based blacklists then use it. LIBMILTER: Install mfdef.h, required by mfapi.h. Problem noted by Richard A. Nelson of Debian. LIBMILTER: Add __P definition for OS that lack it. Problem noted by Chris Adams from HiWAAY Informations Services. LIBSMDB: Fix a lock race condition that affects makemap, praliases, and vacation. MAKEMAP: Avoid going beyond the end of an input line if it does not contain a value for a key. Based on patch from Mark Bixby from Hewlett-Packard. New Files: test/Build test/Makefile test/Makefile.m4 test/README test/t_dropgid.c test/t_setgid.c Deleted Files: include/sm/stdio.h include/sm/sysstat.h 8.12.0/8.12.0 2001/09/08 *NOTICE*: The default installation of sendmail does not use set-user-ID root anymore. You need to create a new user and a new group before installing sendmail (both called smmsp by default). The installation process tries to install /etc/mail/submit.cf and creates /var/spool/clientmqueue by default. Please see sendmail/SECURITY for details. SECURITY: Check for group and world writable forward and :include: files. These checks can be turned off if absolutely necessary using the DontBlameSendmail option and the new flags: GroupWritableForwardFile WorldWritableForwardFile GroupWritableIncludeFile WorldWritableIncludeFile Problem noted by Slawek Zak of Politechnika Warszawska, SECURITY: Drop privileges when using address test mode. Suggested by Michal Zalewski of the "Internet for Schools" project (IdS). Fixed problem of a global variable being used for a timeout jump point where the variable could become overused for more than one timeout concurrently. This erroneous behavior resulted in a corrupted stack causing a core dump. The timeout is now handled via libsm. Problem noted by Michael Shapiro, John Beck, and Carl Smith of Sun Microsystems. If sendmail is set-group-ID then that group ID is used for permission checks (group ID of RunAsUser). This allows use of a set-group-ID sendmail binary for initial message submission and no set-user-ID root sendmail is needed. For details see sendmail/SECURITY. Log a warning if a non-trusted user changes the syslog label. Based on notice from Bryan Costales of SL3D, Inc. If sendmail is called for initial delivery, try to use submit.cf with a fallback of sendmail.cf as configuration file. See sendmail/SECURITY. New configuration file option UseMSP to allow group writable queue files if the group is the same as that of a set-group-ID sendmail binary. See sendmail/SECURITY. The .cf file is chosen based on the operation mode. For -bm (default), -bs, and -t it is submit.cf if it exists for all others it is sendmail.cf (to be backward compatible). This selection can be changed by the new option -Ac or -Am (alternative .cf file: client or mta). See sendmail/SECURITY. The SMTP server no longer forks on each MAIL command. The ONEX command has been removed. Implement SMTP PIPELINING per RFC 2920. It can be turned off at compile time or per host (ruleset). New option MailboxDatabase specifies the type of mailbox database used to look up local mail recipients; the default value is "pw", which means to use getpwnam(). New mailbox database types can be added by adding custom code to libsm/mbdb.c. Queue file names are now 15 characters long, rather than 14 characters long, to accomodate envelope splitting. File systems with a 14 character file name length limit are no longer supported. Recipient list used for delivery now gets internally ordered by hostsignature (character string version of MX RR). This orders recipients for the same MX RR's together meaning smaller portions of the list need to be scanned (instead of the whole list) each delivery() pass to determine piggybacking. The significance of the change is better the larger the recipient list. Hostsignature is now created during recipient list creation rather than just before delivery. Enhancements for more opportunistic piggybacking. Previous piggybacking (called coincidental) extended to coattail piggybacking. Rather than complete MX RR matching (coincidental) piggybacking is done if just the lowest value preference matches (coattail). If sendmail receives a temporary error on a RCPT TO: command, it will try other MX hosts if available. DefaultAuthInfo can contain a list of mechanisms to be used for outgoing (client-side) SMTP Authentication. New modifier 'A' for DaemonPortOptions/ClientPortOptions to disable AUTH (overrides 'a' modifier in DaemonPortOptions). Based on patch from Lyndon Nerenberg of Messaging Direct. Enable AUTH mechanism EXTERNAL if STARTTLS is used. A new ruleset authinfo can be used to return client side authentication information for AUTH instead of DefaultAuthInfo. Therefore the DefaultAuthInfo option is deprecated and will be removed in future versions. Accept any SMTP continuation code 3xy for AUTH even though RFC 2554 requires 334. Mercury 1.48 is a known offender. Add new option AuthMaxBits to limit the overall encryption strength for the security layer in SMTP AUTH (SASL). See doc/op/op.me for details. Introduce new STARTTLS related macros {cn_issuer}, {cn_subject}, {cert_md5} which hold the CN (common name) of the CA that signed the presented certificate, the CN and the MD5 hash of the presented certificate, respectively. New ruleset try_tls to decide whether to try (as client) STARTTLS. New ruleset srv_features to enable/disable certain features in the server per connection. See doc/op/op.me for details. New ruleset tls_rcpt to decide whether to send e-mail to a particular recipient; useful to decide whether a conection is secure enough on a per recipient basis. New option TLSSrvOptions to modify some aspects of the server for STARTTLS. If no certificate has been requested, the macro {verify} has the value "NOT". New M=S modifier for ClientPortOptions/DaemonPortOptions to turn off using/offering STARTTLS when delivering/receiving e-mail. Macro expand filenames/directories for certs and keys in the .cf file. Proposed by Neil Rickert of Northern Illinois University. Generate an ephemeral RSA key for a STARTTLS connection only if really required. This change results in a noticable performance gains on most machines. Moreover, if shared memory is in use, reuse the key several times. Add queue groups which can be used to group queue directories with the same behavior together. See doc/op/op.me for details. If the new option FastSplit (defaults to one) has a value greater than zero, it suppresses the MX lookups on addresses when they are initially sorted which may result in faster envelope splitting. If the mail is submitted directly from the command line, then the value also limits the number of processes to deliver the envelopes; if more envelopes are created they are only queued up and must be taken care of by a queue run. The check for 'enough disk space' now pays attention to which file system each queue directory resides in. All queue runners can be cleanly terminated via SIGTERM to parent. New option QueueFileMode for the default permissions of queue files. Add parallel queue runner code. Allows multiple queue runners per work group (one or more queues in a multi-queue environment collected together) to process the same work list at the same time. Option MaxQueueChildren added to limit the number of concurrently active queue runner processes. New option MaxRunnersPerQueue to specify the maximum number of queue runners per queue group. Queue member selection by substring pattern matching now allows the pattern to be negated. For -qI, -qR and -qS it is permissible for -q!I, -q!R and -q!S to mean remove members of the queue that match during processing. New -qp[time] option is similar to -qtime, except that instead of periodically forking a child to process the queue, a single child is forked for each queue that sleeps between queue runs. A SIGHUP signal can be sent to restart this persistent queue runner. The SIGHUP signal now restarts a timed queue run process (i.e., a sendmail process which only runs the queue at an interval: sendmail -q15m). New option NiceQueueRun to set the priority of queue runners. Proposed by Thom O'Connor. sendmail will run the queue(s) in the background when invoked with -q unless the new -qf option or -v is used. QueueSortOrder=Random sorts the queue randomly, which is useful if several queue runners are started by hand to avoid contention. QueueSortOrder=Modification sorts the queue by the modification time of the qf file (older entries first). Support Deliver By SMTP Service Extension (RFC 2852) which allows a client to specify an amount of time within which an e-mail should be delivered. New option DeliverByMin added to set the minimum amount of time or disable the extension. Non-printable characters (ASCII: 0-31, 127) in mailbox addresses are not allowed unless escaped or quoted. Add support for a generic DNS map. Based on a patch contributed by Leif Johansson of Stockholm University, which was based on work by Assar Westerlund of Swedish Institute of Computer Science, Kista, and Johan Danielsson of Royal Institute of Technology, Stockholm, Sweden. MX records will be looked up for FallBackMXhost. To use the old behavior (no MX lookups), put the name in square brackets. Proposed by Thom O'Connor. Use shared memory to store free space of filesystems that are used for queues, if shared memory is available and if a key is set via SharedMemoryKey. This minimizes the number of system calls to check the available space. See doc/op/op.me for details. If shared memory is compiled in the option -bP can be used to print the number of entries in the queue(s). Enable generic mail filter API (milter). See libmilter/README and the usual documentation for details. Remove AutoRebuildAliases option, deprecated since 8.10. Remove '-U' (initial user submission) command line option as announced in 8.10. Remove support for non-standard SMTP command XUSR. Use an MSA instead. New macro {addr_type} which contains whether the current address is an envelope sender or recipient address. Suggested by Neil Rickert of Northern Illinois University. Two new options for host maps: -d (retransmission timeout), -r (number of retries). New option for LDAP maps: the -V allows you to specify a separator such that a lookup can return both an attribute and value separated by the given separator. Add new operators '%', '|', '&' (modulo, binary or, binary and) to map class arith. If DoubleBounceAddress expands to an empty string, ``double bounces'' (errors that occur when sending an error message) are dropped. New DontBlameSendmail options GroupReadableSASLDBFile and GroupWritableSASLDBFile to relax requirements for sasldb files. New DontBlameSendmail options GroupReadableKeyFile to relax requirements for files containing secret keys. This is necessary for the MSP if client authentification is used. Properly handle quoted filenames for class files (to allow for filenames with spaces). Honor the resolver option RES_NOALIASES when canonifying hostnames. Add macros to avoid the reuse of {if_addr} etc: {if_name_out} hostname of interface of outgoing connection. {if_addr_out} address of interface of outgoing connection. {if_family_out} family of interface of outgoing connection. The latter two are only set if the interface does not belong to the loopback net. Add macro {nrcpts} which holds the number of (validated) recipients. DialDelay option applies only to mailers with flag 'Z'. Patch from Juergen Georgi of RUS University of Stuttgart. New Timeout.lhlo,auth,starttls options to limit the time waiting for an answer to the LMTP LHLO, SMTP AUTH or STARTTLS command. New Timeout.aconnect option to limit the overall waiting time for all connections for a single delivery attempt to succeed. Limit the rate recipients in the SMTP envelope are accepted once a threshold number of recipients has been rejected (option BadRcptThrottle). From Gregory A Lundberg of the WU-FTPD Development Group. New option DelayLA to delay connections if the load averages exceeds the specified value. The default of 0 does not change the previous behavior. A value greater than 0 will cause sendmail to sleep for one second on most SMTP commands and before accepting connections if that load average is exceeded. Use a dynamic (instead of fixed-size) buffer for the list of recipients that are sent during a connection to a mailer. This also introduces a new mailer field 'r' which defines the maximum number of recipients (defaults to 100). Based on patch by Motonori Nakamura of Kyoto University. Add new F=1 mailer flag to disable sending of null characters ('\0'). Add new F=2 mailer flag to disable use of ESMTP, using SMTP instead. The deprecated [TCP] builtin mailer pathname (P=) is gone. Use [IPC] instead. IPC is no longer available as first mailer argument (A=) for [IPC] builtin mailer pathnames. Use TCP instead. PH map code updated to use the new libphclient API instead of the old libqiapi library. Contributed by Mark Roth of the University of Illinois at Urbana-Champaign. New option DirectSubmissionModifiers to define {daemon_flags} for direct (command line) submissions. New M=O modifier for DaemonPortOptions to ignore the socket in case of failures. Based on patch by Jun-ichiro itojun Hagino of the KAME Project. Add Disposition-Notification-To: (RFC 2298) to the list of headers whose content is rewritten similar to Reply-To:. Proposed by Andrzej Filip. Use STARTTLS/AUTH=server/client for logging incoming/outgoing STARTTLS/AUTH connections; log incoming connections at level 9 or higher. Use AUTH/STARTTLS instead of SASL/TLS for SMTP AUTH/STARTTLS related logfile entries. Convert unprintable characters (and backslash) into octal or C format before logging. Log recipients if no message is transferred but QUIT/RSET is given (at LogLevel 9/10 or higher). Log discarded recipients at LogLevel 10 or higher. Do not log "did not issue MAIL/EXPN/VRFY/ETRN" for connections in which most commands are rejected due to check_relay or TCP Wrappers if the host tries one of those commands anyway. Change logging format for cloned envelopes to be similar to that for DSNs ("old id: new id: clone"). Suggested by Ulrich Windl of the Universitat Regensburg. Added libsm, a C library of general purpose abstractions including assertions, tracing and debugging with named debug categories, exception handling, malloc debugging, resource pools, portability abstractions, and an extensible buffered I/O package. It will at some point replace libsmutil. See libsm/index.html for details. Fixed most memory leaks in sendmail which were previously taken care of by fork() and exit(). Use new sm_io*() functions in place of stdio calls. Allows for more consistent portablity amongst different platforms new and old (from new libsm). Common I/O pkg means just one buffering method needed instead of two ('bf_portable' and 'bf_torek' now just 'bf'). Sfio no longer needed as SASL/TLS code uses sm_io*() API's. New possible value 'interactive' for SuperSafe which can be used together with DeliveryMode=interactive is to avoid some disk synchronizations calls. Add per-recipient status information to mailq -v output. T_ANY queries are no longer used by sendmail. When compiling with "gcc -O -Wall" specify "-DSM_OMIT_BOGUS_WARNINGS" too (see include/sm/cdefs.h for more info). sendmail -d now has general support for named debug categories. See libsm/debug.html and section 3.4 of doc/op/op.me for details. Eliminate the "postmaster warning" DSNs on address parsing errors such as unbalanced angle brackets or parentheses. The DSNs generated by this condition were illegal (not RFC conform). Problem noted by Ulrich Windl of the Universitaet Regensburg. Do not issue a DSN if the ruleset localaddr resolves to the $#error mailer and the recipient has hence been rejected during the SMTP dialogue. Problem reported by Larry Greenfield of CMU. Deal with a case of multiple deliveries on misconfigured systems that do not have postmaster defined. If an email was sent from an address to which a DSN cannot be returned and in which at least one recipient address is non-deliverable, then that email had been delivered in each queue run. Problem reported by Matteo HCE Valsasna of Universita degli Studi dell'Insubria. The compilation options SMTP, DAEMON, and QUEUE have been removed, i.e., the corresponding code is always compiled in now. Log the command line in daemon/queue-run mode at LogLevel 10 and higher. Suggested by Robert Harker of Harker Systems. New ResolverOptions setting: WorkAroundBrokenAAAA. When attempting to canonify a hostname, some broken nameservers will return SERVFAIL (a temporary failure) on T_AAAA (IPv6) lookups. If you want to excuse this behavior, use this new flag. Suggested by Chris Foote of SE Network Access and Mark Roth of the University of Illinois at Urbana-Champaign. Free the memory allocated by getipnodeby{addr,name}(). Problem noted by Joy Latten of IBM. ConnectionRateThrottle limits the number of connections per second to each daemon individually, not the overall number of connections. Specifying only "ldap:" as an AliasFile specification will force sendmail to use a default alias schema as outlined in the ``USING LDAP FOR ALIASES, MAPS, and CLASSES'' section of cf/README. Add a new syntax for the 'F' (file class) sendmail.cf command. If the first character after the class name is not a '/' or a '|' and it contains an '@' (e.g., F{X}key@class:spec), the rest of the line will be parsed as a map lookup. This allows classes to be filled via a map lookup. See op.me for more syntax information. Specifically, this can be used for commands such as VIRTUSER_DOMAIN_FILE() to read the list of domains via LDAP (see the ``USING LDAP FOR ALIASES, MAPS, and CLASSES'' section of cf/README for an example). The new macro ${sendmailMTACluster} determines the LDAP cluster for the default schema used in the above two items. Unless DontBlameSendmail=RunProgramInUnsafeDirPath is set, log a warning if a program being run from a mailer or file class (e.g., F|/path/to/prog) is in an unsafe directory path. Unless DontBlameSendmail=RunWritableProgram is set, log a warning if a program being run from a mailer or file class (e.g., F|/path/to/prog) is group or world writable. Loopback interfaces (e.g., "lo0") are now probed for class {w} hostnames. Setting DontProbeInterfaces to "loopback" (without quotes) will disable this and return to the pre-8.12 behavior of only probing non-loopback interfaces. Suggested by Bryan Stansell of GNAC. In accordance with RFC 2821 section 4.1.4, accept multiple HELO/EHLO commands. Multiple ClientPortOptions settings are now allowed, one for each possible protocol family which may be used for outgoing connections. Restrictions placed on one family only affect outgoing connections on that particular family. Because of this change, the ${client_flags} macro is not set until the connection is established. Based on patch from Motonori Nakamura of Kyoto University. PrivacyOptions=restrictexpand instructs sendmail to drop privileges when the -bv option is given by users who are neither root nor the TrustedUser so users can not read private aliases, forwards, or :include: files. It also will override the -v (verbose) command line option. If the M=b modifier is set in DaemonPortOptions and the interface address can't be used for the outgoing connection, fall back to the settings in ClientPortOptions (if set). Problem noted by John Beck of Sun Microsystems. New named config file rule check_data for DATA command (input: number of recipients). Based on patch from Mark Roth of the University of Illinois at Urbana-Champaign. Add support for ETRN queue selection per RFC 1985. The queue group can be specified using the '#' option character. For example, 'ETRN #queuegroup'. If an LDAP server times out or becomes unavailable, close the current connection and reopen to get to one of the fallback servers. Patch from Paul Hilchey of the University of British Columbia. Make default error number on $#error messages 550 instead of 501 because 501 is not allowed on all commands. The .cf file option UnsafeGroupWrites is deprecated, it should be replaced with the settings GroupWritableForwardFileSafe and GroupWritableIncludeFileSafe in DontBlameSendmail if required. The deprecated ldapx map class has been removed. Use the ldap map class instead. Any IPv6 addresses used in configuration should be prefixed by the "IPv6:" tag to identify the address properly. For example, if you want to add the IPv6 address [2002:c0a8:51d2::23f4] to class {w}, you would need to add [IPv6:2002:c0a8:51d2::23f4]. Change the $&{opMode} macro if the operation mode changes while the MTA is running. For example, during a queue run. Add "use_inet6" as a new ResolverOptions flag to control the RES_USE_INET6 resolver option. Based on patch from Rick Nelson of IBM. The maximum number of commands before the MTA slows down when too many "light weight" commands have been received are now configurable during compile time. The current values and their defaults are: MAXBADCOMMANDS 25 unknown commands MAXNOOPCOMMANDS 20 NOOP, VERB, ONEX, XUSR MAXHELOCOMMANDS 3 HELO, EHLO MAXVRFYCOMMANDS 6 VRFY, EXPN MAXETRNCOMMANDS 8 ETRN Setting a value to 0 disables the check. Patch from Bryan Costales of SL3D, Inc. The header syntax H?${MyMacro}?X-My-Header: now not only checks if ${MyMacro} is defined but also that it is not empty. Properly quote usernames with special characters if they are used in headers. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Be sure to include the proper Final-Recipient: DSN header in bounce messages for messages for mailing list expanded addresses which are not delivered on the initial attempt. Do not treat errors as sticky when doing delivery via LMTP after the final dot has been sent to avoid affecting future deliveries. Problem reported by Larry Greenfield of CMU. New compile time flag REQUIRES_DIR_FSYNC which turns on support for file systems that require to call fsync() for a directory if the meta-data in it has been changed. This should be set at least for ReiserFS; it is enabled by default for Linux. See sendmail/README for further information. Avoid file locking deadlock when updating the statistics file if sendmail is signaled to terminate. Problem noted by Christophe Wolfhugel of France Telecom. Set the $c macro (hop count) as it is being set instead of when the envelope is initialized. Problem noted by Kari Hurtta of the Finnish Meteorological Institute. Properly count recipients for DeliveryMode defer and queue. Fix from Peter A. Friend of EarthLink. Treat invalid hesiod lookups as permanent errors instead of temporary errors. Problem noted by Russell McOrmond of flora.ca. Portability: Remove support for AIX 2, which supports only 14 character filenames and is outdated anyway. Suggested by Valdis Kletnieks of Virginia Tech. Change several settings for Irix 6: remove confSBINDIR, i.e., use default /usr/sbin, change owner/group of man pages and user-executable to root/sys, set optimization limit to 0 (unlimited). Based on patch from Ayamura Kikuchi, M.D, and proposal from Kari Hurtta of the Finnish Meteorological Institute. Do not assume LDAP support is installed by default under Solaris 8 and later. Add support for OpenUNIX. CONFIG: Increment version number of config file to 10. CONFIG: Add an install target and a README file in cf/cf. CONFIG: Don't accept addresses of the form a@b@, a@b@c, a@[b]c, etc. CONFIG: Reject empty recipient addresses (in check_rcpt). CONFIG: The access map uses an option of -T to deal with temporary lookup failures. CONFIG: New value for access map: SKIP, which causes the default action to be taken by aborting the search for domain names or IP nets. CONFIG: check_rcpt can deal with TEMPFAIL for either recipient or relay address as long as the other part allows the email to get through. CONFIG: Entries for virtusertable can make use of a third parameter "%3" which contains "+detail" of a wildcard match, i.e., an entry like user+*@domain. This allows handling of details by using %1%3 as the RHS. Additionally, a "+" wildcard has been introduced to match only non-empty details of addresses. CONFIG: Numbers for rulesets used by MAILERs have been removed and hence there is no required order within the MAILER section anymore except for MAILER(`uucp') which must come after MAILER(`smtp') if uucp-dom and uucp-uudom are used. CONFIG: Hosts listed in the generics domain class {G} (GENERICS_DOMAIN() and GENERICS_DOMAIN_FILE()) are treated as canonical. Suggested by Per Hedeland of Ericsson. CONFIG: If FEATURE(`delay_checks') is used, make sure that a lookup in the access map which returns OK or RELAY actually terminates check_* ruleset checking. CONFIG: New tag TLS_Rcpt: for access map to be used by ruleset tls_rcpt, see cf/README for details. CONFIG: Change format of Received: header line which reveals whether STARTTLS has been used to "(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})". CONFIG: Use "Spam:" as tag for lookups for FEATURE(`delay_checks') options friends/haters instead of "To:" and enable specification of whole domains instead of just users. Notice: this change is not backward compatible. Suggested by Chris Adams from HiWAAY Informations Services. CONFIG: Allow for local extensions for most new rulesets, see cf/README for details. CONFIG: New FEATURE(`lookupdotdomain') to lookup also .domain in the access map. Proposed by Randall Winchester of the University of Maryland. CONFIG: New FEATURE(`local_no_masquerade') to avoid masquerading for the local mailer. Proposed by Ingo Brueckl of Wupper Online. CONFIG: confRELAY_MSG/confREJECT_MSG can override the default messages for an unauthorized relaying attempt/for access map entries with RHS REJECT, respectively. CONFIG: FEATURE(`always_add_domain') takes an optional argument to specify another domain to be added instead of the local one. Suggested by Richard H. Gumpertz of Computer Problem Solving. CONFIG: confAUTH_OPTIONS allows setting of Cyrus-SASL specific options, see doc/op/op.me for details. CONFIG: confAUTH_MAX_BITS sets the maximum encryption strength for the security layer in SMTP AUTH (SASL). CONFIG: If Local_localaddr resolves to $#ok, localaddr is terminated immediately. CONFIG: FEATURE(`enhdnsbl') is an enhanced version of dnsbl which allows checking of the return values of the DNS lookups. See cf/README for details. CONFIG: FEATURE(`dnsbl') allows now to specify the behavior for temporary lookup failures. CONFIG: New option confDELIVER_BY_MIN to specify minimum time for Deliver By (RFC 2852) or to turn off the extension. CONFIG: New option confSHARED_MEMORY_KEY to set the key for shared memory use. CONFIG: New FEATURE(`compat_check') to look up a key consisting of the sender and the recipient address delimited by the string "<@>", e.g., sender@sdomain<@>recipient@rdomain, in the access map. Based on code contributed by Mathias Koerber of Singapore Telecommunications Ltd. CONFIG: Add EXPOSED_USER_FILE() command to allow an exposed user file. Suggested by John Beck of Sun Microsystems. CONFIG: Don't use MAILER-DAEMON for error messages delivered via LMTP. Problem reported by Larry Greenfield of CMU. CONFIG: New FEATURE(`preserve_luser_host') to preserve the name of the recipient host if LUSER_RELAY is used. CONFIG: New FEATURE(`preserve_local_plus_detail') to preserve the +detail portion of the address when passing address to local delivery agent. Disables alias and .forward +detail stripping. Only use if LDA supports this. CONFIG: Removed deprecated FEATURE(`rbl'). CONFIG: Add LDAPROUTE_EQUIVALENT() and LDAPROUTE_EQUIVALENT_FILE() which allow you to specify 'equivalent' hosts for LDAP Routing lookups. Equivalent hostnames are replaced by the masquerade domain name for lookups. See cf/README for additional details. CONFIG: Add a fourth argument to FEATURE(`ldap_routing') which instructs the rulesets on what to do if the address being looked up has +detail information. See cf/README for more information. CONFIG: When chosing a new destination via LDAP Routing, also look up the new routing address/host in the mailertable. Based on patch from Don Badrak of the United States Census Bureau. CONFIG: Do not reject the SMTP Mail from: command if LDAP Routing is in use and the bounce option is enabled. Only reject recipients as user unknown. CONFIG: Provide LDAP support for the remaining database map features. See the ``USING LDAP FOR ALIASES AND MAPS'' section of cf/README for more information. CONFIG: Add confLDAP_CLUSTER which defines the ${sendmailMTACluster} macro used for LDAP searches as described above in ``USING LDAP FOR ALIASES, MAPS, AND CLASSES''. CONFIG: confCLIENT_OPTIONS has been replaced by CLIENT_OPTIONS(), which takes the options as argument and can be used multiple times; see cf/README for details. CONFIG: Add configuration macros for new options: confBAD_RCPT_THROTTLE BadRcptThrottle confDIRECT_SUBMISSION_MODIFIERS DirectSubmissionModifiers confMAILBOX_DATABASE MailboxDatabase confMAX_QUEUE_CHILDREN MaxQueueChildren confMAX_RUNNERS_PER_QUEUE MaxRunnersPerQueue confNICE_QUEUE_RUN NiceQueueRun confQUEUE_FILE_MODE QueueFileMode confFAST_SPLIT FastSplit confTLS_SRV_OPTIONS TLSSrvOptions See above (and related documentation) for further information. CONFIG: Add configuration variables for new timeout options: confTO_ACONNECT Timeout.aconnect confTO_AUTH Timeout.auth confTO_LHLO Timeout.lhlo confTO_STARTTLS Timeout.starttls CONFIG: Add configuration macros for mail filter API: confINPUT_MAIL_FILTERS InputMailFilters confMILTER_LOG_LEVEL Milter.LogLevel confMILTER_MACROS_CONNECT Milter.macros.connect confMILTER_MACROS_HELO Milter.macros.helo confMILTER_MACROS_ENVFROM Milter.macros.envfrom confMILTER_MACROS_ENVRCPT Milter.macros.envrcpt Mail filters can be defined via INPUT_MAIL_FILTER() and MAIL_FILTER(). See libmilter/README, cf/README, and doc/op/op.me for details. CONFIG: Add support for accepting temporarily unresolvable domains. See cf/README for details. Based on