Prereq: "2.4.3" diff -cr --new-file /var/tmp/postfix-2.4.3/src/global/mail_version.h ./src/global/mail_version.h *** /var/tmp/postfix-2.4.3/src/global/mail_version.h Thu May 31 14:20:10 2007 --- ./src/global/mail_version.h Tue Jul 31 12:46:23 2007 *************** *** 20,27 **** * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ ! #define MAIL_RELEASE_DATE "20070531" ! #define MAIL_VERSION_NUMBER "2.4.3" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE --- 20,27 ---- * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ ! #define MAIL_RELEASE_DATE "20070731" ! #define MAIL_VERSION_NUMBER "2.4.4" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff -cr --new-file /var/tmp/postfix-2.4.3/HISTORY ./HISTORY *** /var/tmp/postfix-2.4.3/HISTORY Thu May 31 11:19:10 2007 --- ./HISTORY Tue Jul 31 10:20:34 2007 *************** *** 13481,13483 **** --- 13481,13536 ---- Portability: Victor helpfully pointed out that change 20070425 broke on non-IPv6 systems. Files: smtpd/smtpd_peer.c, qmqpd/qmqpd_peer.c. + + 20070613 + + Bugfix: the Milter client assumed that a Milter application + does not modify the message header or envelope, after that + same Milter application has modified the message body of + that same email message. This is not a problem with updates + by different Milter applications. Problem was triggered + by Jose-Marcio Martins da Cruz. Also simplified the handling + of queue file update errors. File: milter/milter8.c. + + 20070614 + + Workaround: some non-Cyrus SASL SMTP servers require SASL + login without authzid (authoriZation ID), i.e. the client + must send only the authcid (authentiCation ID) + the authcid's + password. In this case the server is supposed to derive + the authzid from the authcid. This works as expected when + authenticating to a Cyrus SASL SMTP server. To get the old + behavior specify "send_cyrus_sasl_authzid = yes", in which + case Postfix sends the (authzid, authcid, password), with + the authzid equal to the authcid. File: xsasl/xsasl_cyrus_client.c. + + 20070619 + + Portability: /dev/poll support for Solaris chroot jail setup + scripts. Files: examples/chroot-setup/Solaris8, + examples/chroot-setup/Solaris10. + + 20070719 + + Cleanup: Milter client error handling, so that the (Postfix + SMTP server's Milter client) does not get out of sync with + Milter applications after the (cleanup server's Milter + client) encounters some non-recoverable problem. Files: + milter/milter8.c, smtpd/smtpd.c. + + 20070729 + + Performance: workaround for poor TCP performance on loopback + (127.0.0.1) connections. Problem reported by Mark Martinec. + Files: util/vstream_tweak.c, milter/milter8.c, smtp/smtp_connect.c, + smtpstone/*source.c. + + 20070730 + + Bugfix: when a milter replied with ACCEPT at or before the + first RCPT command, the cleanup server would apply the + non_smtpd_milters setting as if the message was a local + submission. Problem reported by Jukka Salmi. Also, the + cleanup server would get out of sync with the milter when + a milter replied with ACCEPT at the DATA command. Files: + cleanup/cleanup_envelope.c, smtpd/smtpd.c, milter/milters.c. diff -cr --new-file /var/tmp/postfix-2.4.3/README_FILES/RELEASE_NOTES ./README_FILES/RELEASE_NOTES *** /var/tmp/postfix-2.4.3/README_FILES/RELEASE_NOTES Wed Mar 28 14:18:39 2007 --- ./README_FILES/RELEASE_NOTES Fri Jul 20 11:27:38 2007 *************** *** 11,16 **** --- 11,30 ---- The mail_release_date configuration parameter (format: yyyymmdd) specifies the release date of a stable release or snapshot release. + Incompatibility with Postfix 2.4.4 + ================================== + + By default, the Postfix Cyrus SASL client no longer sends a SASL + authoriZation ID (authzid); it sends only the SASL authentiCation + ID (authcid) plus the authcid's password. Specify "send_cyrus_sasl_authzid + = yes" to get the old behavior, which is to send the (authzid, + authcid, password), with the authzid equal to the authcid. This + workaround for non-Cyrus SASL servers is back-ported from Postfix + 2.5. + + Release notes for Postfix 2.4.0 + =============================== + Major changes - critical ------------------------ diff -cr --new-file /var/tmp/postfix-2.4.3/README_FILES/SASL_README ./README_FILES/SASL_README *** /var/tmp/postfix-2.4.3/README_FILES/SASL_README Tue Mar 13 19:53:54 2007 --- ./README_FILES/SASL_README Tue Jul 10 13:36:34 2007 *************** *** 356,375 **** 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AAUUTTHH PPLLAAIINN ddGGVVzzddAABB00ZZXXNN00AAHHRRllcc33RRwwYYXXNNzz 235 Authentication successful ! Instead of dGVzdAB0ZXN0AHRlc3RwYXNz, specify the base64 encoded form of ! username\0username\0password (the \0 is a null byte). The example above is for ! a user named `test' with password `testpass'. In order to generate base64 encoded authentication information you can use one of the following commands: ! % printf 'username\0username\0password' | mmencode % perl -MMIME::Base64 -e \ ! 'print encode_base64("username\0username\0password");' The mmencode command is part of the metamail software. MIME::Base64 is available from http://www.cpan.org/. --- 356,375 ---- 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AAUUTTHH PPLLAAIINN AAHHRRllcc33QQAAddGGVVzzddHHBBhhcc33MM== 235 Authentication successful ! Instead of AHRlc3QAdGVzdHBhc3M=, specify the base64 encoded form of ! \0username\0password (the \0 is a null byte). The example above is for a user ! named `test' with password `testpass'. In order to generate base64 encoded authentication information you can use one of the following commands: ! % printf '\0username\0password' | mmencode % perl -MMIME::Base64 -e \ ! 'print encode_base64("\0username\0password");' The mmencode command is part of the metamail software. MIME::Base64 is available from http://www.cpan.org/. diff -cr --new-file /var/tmp/postfix-2.4.3/RELEASE_NOTES ./RELEASE_NOTES *** /var/tmp/postfix-2.4.3/RELEASE_NOTES Wed Mar 28 14:18:39 2007 --- ./RELEASE_NOTES Fri Jul 20 11:27:38 2007 *************** *** 11,16 **** --- 11,30 ---- The mail_release_date configuration parameter (format: yyyymmdd) specifies the release date of a stable release or snapshot release. + Incompatibility with Postfix 2.4.4 + ================================== + + By default, the Postfix Cyrus SASL client no longer sends a SASL + authoriZation ID (authzid); it sends only the SASL authentiCation + ID (authcid) plus the authcid's password. Specify "send_cyrus_sasl_authzid + = yes" to get the old behavior, which is to send the (authzid, + authcid, password), with the authzid equal to the authcid. This + workaround for non-Cyrus SASL servers is back-ported from Postfix + 2.5. + + Release notes for Postfix 2.4.0 + =============================== + Major changes - critical ------------------------ diff -cr --new-file /var/tmp/postfix-2.4.3/examples/chroot-setup/Solaris10 ./examples/chroot-setup/Solaris10 *** /var/tmp/postfix-2.4.3/examples/chroot-setup/Solaris10 Sun Dec 12 10:34:18 2004 --- ./examples/chroot-setup/Solaris10 Tue Jun 19 06:19:55 2007 *************** *** 61,66 **** --- 61,67 ---- /dev/tcp6 /dev/udp /dev/tcp + /dev/poll /dev/rawip /dev/ticlts /dev/ticotsord *************** *** 71,76 **** --- 72,78 ---- /devices/pseudo/tcp6@0:tcp6 /devices/pseudo/udp@0:udp /devices/pseudo/tcp@0:tcp + /devices/pseudo/poll@0:poll /devices/pseudo/icmp@0:icmp /devices/pseudo/tl@0:ticlts /devices/pseudo/tl@0:ticotsord diff -cr --new-file /var/tmp/postfix-2.4.3/examples/chroot-setup/Solaris8 ./examples/chroot-setup/Solaris8 *** /var/tmp/postfix-2.4.3/examples/chroot-setup/Solaris8 Fri May 20 04:49:37 2005 --- ./examples/chroot-setup/Solaris8 Tue Jun 19 06:19:55 2007 *************** *** 61,66 **** --- 61,67 ---- /dev/tcp6 /dev/udp /dev/tcp + /dev/poll /dev/rawip /dev/ticlts /dev/ticotsord *************** *** 71,76 **** --- 72,78 ---- /devices/pseudo/tcp6@0:tcp6 /devices/pseudo/udp@0:udp /devices/pseudo/tcp@0:tcp + /devices/pseudo/poll@0:poll /devices/pseudo/icmp@0:icmp /devices/pseudo/tl@0:ticlts /devices/pseudo/tl@0:ticotsord diff -cr --new-file /var/tmp/postfix-2.4.3/html/SASL_README.html ./html/SASL_README.html *** /var/tmp/postfix-2.4.3/html/SASL_README.html Tue Mar 13 19:53:54 2007 --- ./html/SASL_README.html Tue Jul 10 13:36:32 2007 *************** *** 537,549 **** 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz 235 Authentication successful !

Instead of dGVzdAB0ZXN0AHRlc3RwYXNz, specify the base64 encoded ! form of username\0username\0password (the \0 is a null byte). The example above is for a user named `test' with password `testpass'.

--- 537,549 ---- 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AUTH PLAIN AHRlc3QAdGVzdHBhc3M= 235 Authentication successful !

Instead of AHRlc3QAdGVzdHBhc3M=, specify the base64 encoded ! form of \0username\0password (the \0 is a null byte). The example above is for a user named `test' with password `testpass'.

*************** *** 552,565 ****
! % printf 'username\0username\0password' | mmencode 
  
  % perl -MMIME::Base64 -e \
!     'print encode_base64("username\0username\0password");'
  
--- 552,565 ----
! % printf '\0username\0password' | mmencode 
  
  % perl -MMIME::Base64 -e \
!     'print encode_base64("\0username\0password");'
  
diff -cr --new-file /var/tmp/postfix-2.4.3/html/lmtp.8.html ./html/lmtp.8.html *** /var/tmp/postfix-2.4.3/html/lmtp.8.html Sun Mar 25 18:46:38 2007 --- ./html/lmtp.8.html Fri Jul 20 11:25:24 2007 *************** *** 253,263 **** will ignore in the LHLO response from a remote LMTP server. MIME PROCESSING CONTROLS Available in Postfix version 2.0 and later: disable_mime_output_conversion (no) ! Disable the conversion of 8BITMIME format to 7BIT format. mime_boundary_length_limit (2048) --- 253,271 ---- will ignore in the LHLO response from a remote LMTP server. + Available in Postfix version 2.4.4 and later: + + send_cyrus_sasl_authzid (no) + When authenticating to a remote SMTP or LMTP server + with the default setting "no", send no SASL autho- + riZation ID (authzid); send only the SASL authenti- + Cation ID (authcid) plus the authcid's password. + MIME PROCESSING CONTROLS Available in Postfix version 2.0 and later: disable_mime_output_conversion (no) ! Disable the conversion of 8BITMIME format to 7BIT format. mime_boundary_length_limit (2048) *************** *** 272,361 **** Available in Postfix version 2.1 and later: smtp_send_xforward_command (no) ! Send the non-standard XFORWARD command when the ! Postfix SMTP server EHLO response announces XFOR- WARD support. SASL AUTHENTICATION CONTROLS smtp_sasl_auth_enable (no) ! Enable SASL authentication in the Postfix SMTP client. smtp_sasl_password_maps (empty) ! Optional SMTP client lookup tables with one user- ! name:password entry per remote hostname or domain, or sender address when sender-dependent authentica- tion is enabled. smtp_sasl_security_options (noplaintext, noanonymous) ! SASL security options; as of Postfix 2.3 the list ! of available features depends on the SASL client ! implementation that is selected with smtp_sasl_type. Available in Postfix version 2.2 and later: smtp_sasl_mechanism_filter (empty) ! If non-empty, a Postfix SMTP client filter for the ! remote SMTP server's list of offered SASL mecha- nisms. Available in Postfix version 2.3 and later: smtp_sender_dependent_authentication (no) Enable sender-dependent authentication in the Post- ! fix SMTP client; this is available only with SASL ! authentication, and disables SMTP connection ! caching to ensure that mail from different senders will use the appropriate credentials. smtp_sasl_path (empty) ! Implementation-specific information that is passed ! through to the SASL plug-in implementation that is selected with smtp_sasl_type. smtp_sasl_type (cyrus) ! The SASL plug-in type that the Postfix SMTP client should use for authentication. STARTTLS SUPPORT CONTROLS ! Detailed information about STARTTLS configuration may be found in the TLS_README document. smtp_tls_security_level (empty) The default SMTP TLS security level for the Postfix ! SMTP client; when a non-empty value is specified, ! this overrides the obsolete parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. smtp_sasl_tls_security_options ($smtp_sasl_secu- rity_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions. smtp_starttls_timeout (300s) ! Time limit for Postfix SMTP client write and read ! operations during TLS startup and shutdown hand- shake procedures. smtp_tls_CAfile (empty) ! The file with the certificate of the certification ! authority (CA) that issued the Postfix SMTP client certificate. smtp_tls_CApath (empty) ! Directory with PEM format certificate authority ! certificates that the Postfix SMTP client uses to verify a remote SMTP server certificate. smtp_tls_cert_file (empty) ! File with the Postfix SMTP client RSA certificate in PEM format. smtp_tls_mandatory_ciphers (medium) ! The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_exclude_ciphers (empty) --- 280,369 ---- Available in Postfix version 2.1 and later: smtp_send_xforward_command (no) ! Send the non-standard XFORWARD command when the ! Postfix SMTP server EHLO response announces XFOR- WARD support. SASL AUTHENTICATION CONTROLS smtp_sasl_auth_enable (no) ! Enable SASL authentication in the Postfix SMTP client. smtp_sasl_password_maps (empty) ! Optional SMTP client lookup tables with one user- ! name:password entry per remote hostname or domain, or sender address when sender-dependent authentica- tion is enabled. smtp_sasl_security_options (noplaintext, noanonymous) ! SASL security options; as of Postfix 2.3 the list ! of available features depends on the SASL client ! implementation that is selected with smtp_sasl_type. Available in Postfix version 2.2 and later: smtp_sasl_mechanism_filter (empty) ! If non-empty, a Postfix SMTP client filter for the ! remote SMTP server's list of offered SASL mecha- nisms. Available in Postfix version 2.3 and later: smtp_sender_dependent_authentication (no) Enable sender-dependent authentication in the Post- ! fix SMTP client; this is available only with SASL ! authentication, and disables SMTP connection ! caching to ensure that mail from different senders will use the appropriate credentials. smtp_sasl_path (empty) ! Implementation-specific information that is passed ! through to the SASL plug-in implementation that is selected with smtp_sasl_type. smtp_sasl_type (cyrus) ! The SASL plug-in type that the Postfix SMTP client should use for authentication. STARTTLS SUPPORT CONTROLS ! Detailed information about STARTTLS configuration may be found in the TLS_README document. smtp_tls_security_level (empty) The default SMTP TLS security level for the Postfix ! SMTP client; when a non-empty value is specified, ! this overrides the obsolete parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. smtp_sasl_tls_security_options ($smtp_sasl_secu- rity_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions. smtp_starttls_timeout (300s) ! Time limit for Postfix SMTP client write and read ! operations during TLS startup and shutdown hand- shake procedures. smtp_tls_CAfile (empty) ! The file with the certificate of the certification ! authority (CA) that issued the Postfix SMTP client certificate. smtp_tls_CApath (empty) ! Directory with PEM format certificate authority ! certificates that the Postfix SMTP client uses to verify a remote SMTP server certificate. smtp_tls_cert_file (empty) ! File with the Postfix SMTP client RSA certificate in PEM format. smtp_tls_mandatory_ciphers (medium) ! The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_exclude_ciphers (empty) *************** *** 364,406 **** levels. smtp_tls_mandatory_exclude_ciphers (empty) ! Additional list of ciphers or cipher types to ! exclude from the SMTP client cipher list at manda- tory TLS security levels. smtp_tls_dcert_file (empty) ! File with the Postfix SMTP client DSA certificate in PEM format. smtp_tls_dkey_file ($smtp_tls_dcert_file) ! File with the Postfix SMTP client DSA private key in PEM format. smtp_tls_key_file ($smtp_tls_cert_file) ! File with the Postfix SMTP client RSA private key in PEM format. smtp_tls_loglevel (0) ! Enable additional Postfix SMTP client logging of TLS activity. smtp_tls_note_starttls_offer (no) ! Log the hostname of a remote SMTP server that ! offers STARTTLS, when TLS is not already enabled for that server. smtp_tls_policy_maps (empty) Optional lookup tables with the Postfix SMTP client TLS security policy by next-hop destination; when a ! non-empty value is specified, this overrides the obsolete smtp_tls_per_site parameter. smtp_tls_mandatory_protocols (SSLv3, TLSv1) ! List of TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_scert_verifydepth (5) ! The verification depth for remote SMTP server cer- tificates. smtp_tls_secure_cert_match (nexthop, dot-nexthop) --- 372,414 ---- levels. smtp_tls_mandatory_exclude_ciphers (empty) ! Additional list of ciphers or cipher types to ! exclude from the SMTP client cipher list at manda- tory TLS security levels. smtp_tls_dcert_file (empty) ! File with the Postfix SMTP client DSA certificate in PEM format. smtp_tls_dkey_file ($smtp_tls_dcert_file) ! File with the Postfix SMTP client DSA private key in PEM format. smtp_tls_key_file ($smtp_tls_cert_file) ! File with the Postfix SMTP client RSA private key in PEM format. smtp_tls_loglevel (0) ! Enable additional Postfix SMTP client logging of TLS activity. smtp_tls_note_starttls_offer (no) ! Log the hostname of a remote SMTP server that ! offers STARTTLS, when TLS is not already enabled for that server. smtp_tls_policy_maps (empty) Optional lookup tables with the Postfix SMTP client TLS security policy by next-hop destination; when a ! non-empty value is specified, this overrides the obsolete smtp_tls_per_site parameter. smtp_tls_mandatory_protocols (SSLv3, TLSv1) ! List of TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_scert_verifydepth (5) ! The verification depth for remote SMTP server cer- tificates. smtp_tls_secure_cert_match (nexthop, dot-nexthop) *************** *** 408,414 **** for the "secure" TLS security level. smtp_tls_session_cache_database (empty) ! Name of the file containing the optional Postfix SMTP client TLS session cache. smtp_tls_session_cache_timeout (3600s) --- 416,422 ---- for the "secure" TLS security level. smtp_tls_session_cache_database (empty) ! Name of the file containing the optional Postfix SMTP client TLS session cache. smtp_tls_session_cache_timeout (3600s) *************** *** 420,428 **** for the "verify" TLS security level. tls_daemon_random_bytes (32) ! The number of pseudo-random bytes that an smtp(8) ! or smtpd(8) process requests from the tlsmgr(8) ! server in order to seed its internal pseudo random number generator (PRNG). tls_high_cipherlist --- 428,436 ---- for the "verify" TLS security level. tls_daemon_random_bytes (32) ! The number of pseudo-random bytes that an smtp(8) ! or smtpd(8) process requests from the tlsmgr(8) ! server in order to seed its internal pseudo random number generator (PRNG). tls_high_cipherlist *************** *** 434,440 **** ciphers. tls_low_cipherlist (ALL:!EXPORT:+RC4:@STRENGTH) ! The OpenSSL cipherlist for "LOW" or higher grade ciphers. tls_export_cipherlist (ALL:+RC4:@STRENGTH) --- 442,448 ---- ciphers. tls_low_cipherlist (ALL:!EXPORT:+RC4:@STRENGTH) ! The OpenSSL cipherlist for "LOW" or higher grade ciphers. tls_export_cipherlist (ALL:+RC4:@STRENGTH) *************** *** 442,481 **** ciphers. tls_null_cipherlist (eNULL:!aNULL) ! The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. Available in Postfix version 2.4 and later: smtp_sasl_tls_verified_security_options ($smtp_sasl_tls_security_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions with a verified server certificate. OBSOLETE STARTTLS CONTROLS ! The following configuration parameters exist for compati- bility with Postfix versions before 2.3. Support for these will be removed in a future release. smtp_use_tls (no) ! Opportunistic mode: use TLS when a remote SMTP ! server announces STARTTLS support, otherwise send the mail in the clear. smtp_enforce_tls (no) ! Enforcement mode: require that remote SMTP servers ! use TLS encryption, and never send mail in the clear. smtp_tls_enforce_peername (yes) ! With mandatory TLS encryption, require that the remote SMTP server hostname matches the information in the remote SMTP server certificate. smtp_tls_per_site (empty) Optional lookup tables with the Postfix SMTP client ! TLS usage policy by next-hop destination and by remote SMTP server hostname. smtp_tls_cipherlist (empty) --- 450,489 ---- ciphers. tls_null_cipherlist (eNULL:!aNULL) ! The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. Available in Postfix version 2.4 and later: smtp_sasl_tls_verified_security_options ($smtp_sasl_tls_security_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions with a verified server certificate. OBSOLETE STARTTLS CONTROLS ! The following configuration parameters exist for compati- bility with Postfix versions before 2.3. Support for these will be removed in a future release. smtp_use_tls (no) ! Opportunistic mode: use TLS when a remote SMTP ! server announces STARTTLS support, otherwise send the mail in the clear. smtp_enforce_tls (no) ! Enforcement mode: require that remote SMTP servers ! use TLS encryption, and never send mail in the clear. smtp_tls_enforce_peername (yes) ! With mandatory TLS encryption, require that the remote SMTP server hostname matches the information in the remote SMTP server certificate. smtp_tls_per_site (empty) Optional lookup tables with the Postfix SMTP client ! TLS usage policy by next-hop destination and by remote SMTP server hostname. smtp_tls_cipherlist (empty) *************** *** 485,511 **** RESOURCE AND RATE CONTROLS smtp_destination_concurrency_limit ($default_destina- tion_concurrency_limit) ! The maximal number of parallel deliveries to the ! same destination via the smtp message delivery transport. smtp_destination_recipient_limit ($default_destina- tion_recipient_limit) ! The maximal number of recipients per delivery via the smtp message delivery transport. smtp_connect_timeout (30s) ! The SMTP client time limit for completing a TCP connection, or zero (use the operating system built-in time limit). smtp_helo_timeout (300s) ! The SMTP client time limit for sending the HELO or ! EHLO command, and for receiving the initial server response. lmtp_lhlo_timeout (300s) ! The LMTP client time limit for sending the LHLO command, and for receiving the initial server response. --- 493,519 ---- RESOURCE AND RATE CONTROLS smtp_destination_concurrency_limit ($default_destina- tion_concurrency_limit) ! The maximal number of parallel deliveries to the ! same destination via the smtp message delivery transport. smtp_destination_recipient_limit ($default_destina- tion_recipient_limit) ! The maximal number of recipients per delivery via the smtp message delivery transport. smtp_connect_timeout (30s) ! The SMTP client time limit for completing a TCP connection, or zero (use the operating system built-in time limit). smtp_helo_timeout (300s) ! The SMTP client time limit for sending the HELO or ! EHLO command, and for receiving the initial server response. lmtp_lhlo_timeout (300s) ! The LMTP client time limit for sending the LHLO command, and for receiving the initial server response. *************** *** 514,543 **** command, and for receiving the server response. smtp_mail_timeout (300s) ! The SMTP client time limit for sending the MAIL ! FROM command, and for receiving the server response. smtp_rcpt_timeout (300s) ! The SMTP client time limit for sending the SMTP ! RCPT TO command, and for receiving the server response. smtp_data_init_timeout (120s) ! The SMTP client time limit for sending the SMTP ! DATA command, and for receiving the server response. smtp_data_xfer_timeout (180s) ! The SMTP client time limit for sending the SMTP message content. smtp_data_done_timeout (600s) ! The SMTP client time limit for sending the SMTP ".", and for receiving the server response. smtp_quit_timeout (300s) ! The SMTP client time limit for sending the QUIT command, and for receiving the server response. Available in Postfix version 2.1 and later: --- 522,551 ---- command, and for receiving the server response. smtp_mail_timeout (300s) ! The SMTP client time limit for sending the MAIL ! FROM command, and for receiving the server response. smtp_rcpt_timeout (300s) ! The SMTP client time limit for sending the SMTP ! RCPT TO command, and for receiving the server response. smtp_data_init_timeout (120s) ! The SMTP client time limit for sending the SMTP ! DATA command, and for receiving the server response. smtp_data_xfer_timeout (180s) ! The SMTP client time limit for sending the SMTP message content. smtp_data_done_timeout (600s) ! The SMTP client time limit for sending the SMTP ".", and for receiving the server response. smtp_quit_timeout (300s) ! The SMTP client time limit for sending the QUIT command, and for receiving the server response. Available in Postfix version 2.1 and later: *************** *** 548,559 **** lookups, or zero (no limit). smtp_mx_session_limit (2) ! The maximal number of SMTP sessions per delivery ! request before giving up or delivering to a fall- back relay host, or zero (no limit). smtp_rset_timeout (20s) ! The SMTP client time limit for sending the RSET command, and for receiving the server response. Available in Postfix version 2.2 and earlier: --- 556,567 ---- lookups, or zero (no limit). smtp_mx_session_limit (2) ! The maximal number of SMTP sessions per delivery ! request before giving up or delivering to a fall- back relay host, or zero (no limit). smtp_rset_timeout (20s) ! The SMTP client time limit for sending the RSET command, and for receiving the server response. Available in Postfix version 2.2 and earlier: *************** *** 565,575 **** Available in Postfix version 2.2 and later: smtp_connection_cache_destinations (empty) ! Permanently enable SMTP connection caching for the specified destinations. smtp_connection_cache_on_demand (yes) ! Temporarily enable SMTP connection caching while a destination has a high volume of mail in the active queue. --- 573,583 ---- Available in Postfix version 2.2 and later: smtp_connection_cache_destinations (empty) ! Permanently enable SMTP connection caching for the specified destinations. smtp_connection_cache_on_demand (yes) ! Temporarily enable SMTP connection caching while a destination has a high volume of mail in the active queue. *************** *** 579,640 **** smtp_connection_cache_time_limit (2s) When SMTP connection caching is enabled, the amount ! of time that an unused SMTP client socket is kept open before it is closed. Available in Postfix version 2.3 and later: connection_cache_protocol_timeout (5s) ! Time limit for connection cache connect, send or receive operations. TROUBLE SHOOTING CONTROLS debug_peer_level (2) ! The increment in verbose logging level when a ! remote client or server matches a pattern in the debug_peer_list parameter. debug_peer_list (empty) ! Optional list of remote client or server hostname ! or network address patterns that cause the verbose ! logging level to increase by the amount specified in $debug_peer_level. error_notice_recipient (postmaster) ! The recipient of postmaster notifications about ! mail delivery problems that are caused by policy, resource, software or protocol errors. internal_mail_filter_classes (empty) ! What categories of Postfix-generated mail are sub- ! ject to before-queue content inspection by non_smtpd_milters, header_checks and body_checks. notify_classes (resource, software) ! The list of error classes that are reported to the postmaster. MISCELLANEOUS CONTROLS best_mx_transport (empty) ! Where the Postfix SMTP client should deliver mail when it detects a "mail loops back to myself" error condition. config_directory (see 'postconf -d' output) ! The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) ! How much time a Postfix daemon process may take to ! handle a request before it is terminated by a built-in watchdog timer. delay_logging_resolution_limit (2) ! The maximal number of digits after the decimal point when logging sub-second delay values. disable_dns_lookups (no) ! Disable DNS lookups in the Postfix SMTP and LMTP clients. inet_interfaces (all) --- 587,648 ---- smtp_connection_cache_time_limit (2s) When SMTP connection caching is enabled, the amount ! of time that an unused SMTP client socket is kept open before it is closed. Available in Postfix version 2.3 and later: connection_cache_protocol_timeout (5s) ! Time limit for connection cache connect, send or receive operations. TROUBLE SHOOTING CONTROLS debug_peer_level (2) ! The increment in verbose logging level when a ! remote client or server matches a pattern in the debug_peer_list parameter. debug_peer_list (empty) ! Optional list of remote client or server hostname ! or network address patterns that cause the verbose ! logging level to increase by the amount specified in $debug_peer_level. error_notice_recipient (postmaster) ! The recipient of postmaster notifications about ! mail delivery problems that are caused by policy, resource, software or protocol errors. internal_mail_filter_classes (empty) ! What categories of Postfix-generated mail are sub- ! ject to before-queue content inspection by non_smtpd_milters, header_checks and body_checks. notify_classes (resource, software) ! The list of error classes that are reported to the postmaster. MISCELLANEOUS CONTROLS best_mx_transport (empty) ! Where the Postfix SMTP client should deliver mail when it detects a "mail loops back to myself" error condition. config_directory (see 'postconf -d' output) ! The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) ! How much time a Postfix daemon process may take to ! handle a request before it is terminated by a built-in watchdog timer. delay_logging_resolution_limit (2) ! The maximal number of digits after the decimal point when logging sub-second delay values. disable_dns_lookups (no) ! Disable DNS lookups in the Postfix SMTP and LMTP clients. inet_interfaces (all) *************** *** 642,648 **** tem receives mail on. inet_protocols (ipv4) ! The Internet protocols Postfix will attempt to use when making or accepting connections. ipc_timeout (3600s) --- 650,656 ---- tem receives mail on. inet_protocols (ipv4) ! The Internet protocols Postfix will attempt to use when making or accepting connections. ipc_timeout (3600s) *************** *** 650,724 **** over an internal communication channel. lmtp_tcp_port (24) ! The default TCP port that the Postfix LMTP client connects to. max_idle (100s) ! The maximum amount of time that an idle Postfix ! daemon process waits for an incoming connection before terminating voluntarily. max_use (100) ! The maximal number of incoming connections that a ! Postfix daemon process will service before termi- nating voluntarily. process_id (read-only) ! The process ID of a Postfix command or daemon process. process_name (read-only) ! The process name of a Postfix command or daemon process. proxy_interfaces (empty) The network interface addresses that this mail sys- ! tem receives mail on by way of a proxy or network address translation unit. smtp_bind_address (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv4 connection. smtp_bind_address6 (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv6 connection. smtp_helo_name ($myhostname) ! The hostname to send in the SMTP EHLO or HELO com- mand. lmtp_lhlo_name ($myhostname) The hostname to send in the LMTP LHLO command. smtp_host_lookup (dns) ! What mechanisms when the Postfix SMTP client uses to look up a host's IP address. smtp_randomize_addresses (yes) ! Randomize the order of equal-preference MX host addresses. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) ! The mail system name that is prepended to the ! process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". Available with Postfix 2.2 and earlier: fallback_relay (empty) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. Available with Postfix 2.3 and later: smtp_fallback_relay ($fallback_relay) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. SEE ALSO --- 658,732 ---- over an internal communication channel. lmtp_tcp_port (24) ! The default TCP port that the Postfix LMTP client connects to. max_idle (100s) ! The maximum amount of time that an idle Postfix ! daemon process waits for an incoming connection before terminating voluntarily. max_use (100) ! The maximal number of incoming connections that a ! Postfix daemon process will service before termi- nating voluntarily. process_id (read-only) ! The process ID of a Postfix command or daemon process. process_name (read-only) ! The process name of a Postfix command or daemon process. proxy_interfaces (empty) The network interface addresses that this mail sys- ! tem receives mail on by way of a proxy or network address translation unit. smtp_bind_address (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv4 connection. smtp_bind_address6 (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv6 connection. smtp_helo_name ($myhostname) ! The hostname to send in the SMTP EHLO or HELO com- mand. lmtp_lhlo_name ($myhostname) The hostname to send in the LMTP LHLO command. smtp_host_lookup (dns) ! What mechanisms when the Postfix SMTP client uses to look up a host's IP address. smtp_randomize_addresses (yes) ! Randomize the order of equal-preference MX host addresses. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) ! The mail system name that is prepended to the ! process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". Available with Postfix 2.2 and earlier: fallback_relay (empty) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. Available with Postfix 2.3 and later: smtp_fallback_relay ($fallback_relay) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. SEE ALSO *************** *** 736,742 **** TLS_README, Postfix STARTTLS howto LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) --- 744,750 ---- TLS_README, Postfix STARTTLS howto LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) diff -cr --new-file /var/tmp/postfix-2.4.3/html/postconf.5.html ./html/postconf.5.html *** /var/tmp/postfix-2.4.3/html/postconf.5.html Mon Apr 2 19:15:49 2007 --- ./html/postconf.5.html Fri Jul 20 11:25:24 2007 *************** *** 53,58 **** --- 53,60 ---- "$name" is empty. This form is supported with Postfix version 2.2 and later.

+
  • Specify "$$" to produce a single "$" character.

    +
  • When the same parameter is defined multiple times, only *************** *** 6682,6687 **** --- 6684,6707 ----

    The name of the directory with example Postfix configuration files.

    + + + + +
    send_cyrus_sasl_authzid + (default: no)
    + +

    When authenticating to a remote SMTP or LMTP server with the + default setting "no", send no SASL authoriZation ID (authzid); send + only the SASL authentiCation ID (authcid) plus the authcid's password. +

    + +

    The non-default setting "yes" enables the behavior of older + Postfix versions. These always send a SASL authzid that is equal + to the SASL authcid, but this causes inter-operability problems + with some SMTP servers.

    + +

    This feature is available in Postfix 2.4.4 and later.

    diff -cr --new-file /var/tmp/postfix-2.4.3/html/smtp.8.html ./html/smtp.8.html *** /var/tmp/postfix-2.4.3/html/smtp.8.html Sun Mar 25 18:46:38 2007 --- ./html/smtp.8.html Fri Jul 20 11:25:24 2007 *************** *** 253,263 **** will ignore in the LHLO response from a remote LMTP server. MIME PROCESSING CONTROLS Available in Postfix version 2.0 and later: disable_mime_output_conversion (no) ! Disable the conversion of 8BITMIME format to 7BIT format. mime_boundary_length_limit (2048) --- 253,271 ---- will ignore in the LHLO response from a remote LMTP server. + Available in Postfix version 2.4.4 and later: + + send_cyrus_sasl_authzid (no) + When authenticating to a remote SMTP or LMTP server + with the default setting "no", send no SASL autho- + riZation ID (authzid); send only the SASL authenti- + Cation ID (authcid) plus the authcid's password. + MIME PROCESSING CONTROLS Available in Postfix version 2.0 and later: disable_mime_output_conversion (no) ! Disable the conversion of 8BITMIME format to 7BIT format. mime_boundary_length_limit (2048) *************** *** 272,361 **** Available in Postfix version 2.1 and later: smtp_send_xforward_command (no) ! Send the non-standard XFORWARD command when the ! Postfix SMTP server EHLO response announces XFOR- WARD support. SASL AUTHENTICATION CONTROLS smtp_sasl_auth_enable (no) ! Enable SASL authentication in the Postfix SMTP client. smtp_sasl_password_maps (empty) ! Optional SMTP client lookup tables with one user- ! name:password entry per remote hostname or domain, or sender address when sender-dependent authentica- tion is enabled. smtp_sasl_security_options (noplaintext, noanonymous) ! SASL security options; as of Postfix 2.3 the list ! of available features depends on the SASL client ! implementation that is selected with smtp_sasl_type. Available in Postfix version 2.2 and later: smtp_sasl_mechanism_filter (empty) ! If non-empty, a Postfix SMTP client filter for the ! remote SMTP server's list of offered SASL mecha- nisms. Available in Postfix version 2.3 and later: smtp_sender_dependent_authentication (no) Enable sender-dependent authentication in the Post- ! fix SMTP client; this is available only with SASL ! authentication, and disables SMTP connection ! caching to ensure that mail from different senders will use the appropriate credentials. smtp_sasl_path (empty) ! Implementation-specific information that is passed ! through to the SASL plug-in implementation that is selected with smtp_sasl_type. smtp_sasl_type (cyrus) ! The SASL plug-in type that the Postfix SMTP client should use for authentication. STARTTLS SUPPORT CONTROLS ! Detailed information about STARTTLS configuration may be found in the TLS_README document. smtp_tls_security_level (empty) The default SMTP TLS security level for the Postfix ! SMTP client; when a non-empty value is specified, ! this overrides the obsolete parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. smtp_sasl_tls_security_options ($smtp_sasl_secu- rity_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions. smtp_starttls_timeout (300s) ! Time limit for Postfix SMTP client write and read ! operations during TLS startup and shutdown hand- shake procedures. smtp_tls_CAfile (empty) ! The file with the certificate of the certification ! authority (CA) that issued the Postfix SMTP client certificate. smtp_tls_CApath (empty) ! Directory with PEM format certificate authority ! certificates that the Postfix SMTP client uses to verify a remote SMTP server certificate. smtp_tls_cert_file (empty) ! File with the Postfix SMTP client RSA certificate in PEM format. smtp_tls_mandatory_ciphers (medium) ! The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_exclude_ciphers (empty) --- 280,369 ---- Available in Postfix version 2.1 and later: smtp_send_xforward_command (no) ! Send the non-standard XFORWARD command when the ! Postfix SMTP server EHLO response announces XFOR- WARD support. SASL AUTHENTICATION CONTROLS smtp_sasl_auth_enable (no) ! Enable SASL authentication in the Postfix SMTP client. smtp_sasl_password_maps (empty) ! Optional SMTP client lookup tables with one user- ! name:password entry per remote hostname or domain, or sender address when sender-dependent authentica- tion is enabled. smtp_sasl_security_options (noplaintext, noanonymous) ! SASL security options; as of Postfix 2.3 the list ! of available features depends on the SASL client ! implementation that is selected with smtp_sasl_type. Available in Postfix version 2.2 and later: smtp_sasl_mechanism_filter (empty) ! If non-empty, a Postfix SMTP client filter for the ! remote SMTP server's list of offered SASL mecha- nisms. Available in Postfix version 2.3 and later: smtp_sender_dependent_authentication (no) Enable sender-dependent authentication in the Post- ! fix SMTP client; this is available only with SASL ! authentication, and disables SMTP connection ! caching to ensure that mail from different senders will use the appropriate credentials. smtp_sasl_path (empty) ! Implementation-specific information that is passed ! through to the SASL plug-in implementation that is selected with smtp_sasl_type. smtp_sasl_type (cyrus) ! The SASL plug-in type that the Postfix SMTP client should use for authentication. STARTTLS SUPPORT CONTROLS ! Detailed information about STARTTLS configuration may be found in the TLS_README document. smtp_tls_security_level (empty) The default SMTP TLS security level for the Postfix ! SMTP client; when a non-empty value is specified, ! this overrides the obsolete parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. smtp_sasl_tls_security_options ($smtp_sasl_secu- rity_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions. smtp_starttls_timeout (300s) ! Time limit for Postfix SMTP client write and read ! operations during TLS startup and shutdown hand- shake procedures. smtp_tls_CAfile (empty) ! The file with the certificate of the certification ! authority (CA) that issued the Postfix SMTP client certificate. smtp_tls_CApath (empty) ! Directory with PEM format certificate authority ! certificates that the Postfix SMTP client uses to verify a remote SMTP server certificate. smtp_tls_cert_file (empty) ! File with the Postfix SMTP client RSA certificate in PEM format. smtp_tls_mandatory_ciphers (medium) ! The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_exclude_ciphers (empty) *************** *** 364,406 **** levels. smtp_tls_mandatory_exclude_ciphers (empty) ! Additional list of ciphers or cipher types to ! exclude from the SMTP client cipher list at manda- tory TLS security levels. smtp_tls_dcert_file (empty) ! File with the Postfix SMTP client DSA certificate in PEM format. smtp_tls_dkey_file ($smtp_tls_dcert_file) ! File with the Postfix SMTP client DSA private key in PEM format. smtp_tls_key_file ($smtp_tls_cert_file) ! File with the Postfix SMTP client RSA private key in PEM format. smtp_tls_loglevel (0) ! Enable additional Postfix SMTP client logging of TLS activity. smtp_tls_note_starttls_offer (no) ! Log the hostname of a remote SMTP server that ! offers STARTTLS, when TLS is not already enabled for that server. smtp_tls_policy_maps (empty) Optional lookup tables with the Postfix SMTP client TLS security policy by next-hop destination; when a ! non-empty value is specified, this overrides the obsolete smtp_tls_per_site parameter. smtp_tls_mandatory_protocols (SSLv3, TLSv1) ! List of TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_scert_verifydepth (5) ! The verification depth for remote SMTP server cer- tificates. smtp_tls_secure_cert_match (nexthop, dot-nexthop) --- 372,414 ---- levels. smtp_tls_mandatory_exclude_ciphers (empty) ! Additional list of ciphers or cipher types to ! exclude from the SMTP client cipher list at manda- tory TLS security levels. smtp_tls_dcert_file (empty) ! File with the Postfix SMTP client DSA certificate in PEM format. smtp_tls_dkey_file ($smtp_tls_dcert_file) ! File with the Postfix SMTP client DSA private key in PEM format. smtp_tls_key_file ($smtp_tls_cert_file) ! File with the Postfix SMTP client RSA private key in PEM format. smtp_tls_loglevel (0) ! Enable additional Postfix SMTP client logging of TLS activity. smtp_tls_note_starttls_offer (no) ! Log the hostname of a remote SMTP server that ! offers STARTTLS, when TLS is not already enabled for that server. smtp_tls_policy_maps (empty) Optional lookup tables with the Postfix SMTP client TLS security policy by next-hop destination; when a ! non-empty value is specified, this overrides the obsolete smtp_tls_per_site parameter. smtp_tls_mandatory_protocols (SSLv3, TLSv1) ! List of TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. smtp_tls_scert_verifydepth (5) ! The verification depth for remote SMTP server cer- tificates. smtp_tls_secure_cert_match (nexthop, dot-nexthop) *************** *** 408,414 **** for the "secure" TLS security level. smtp_tls_session_cache_database (empty) ! Name of the file containing the optional Postfix SMTP client TLS session cache. smtp_tls_session_cache_timeout (3600s) --- 416,422 ---- for the "secure" TLS security level. smtp_tls_session_cache_database (empty) ! Name of the file containing the optional Postfix SMTP client TLS session cache. smtp_tls_session_cache_timeout (3600s) *************** *** 420,428 **** for the "verify" TLS security level. tls_daemon_random_bytes (32) ! The number of pseudo-random bytes that an smtp(8) ! or smtpd(8) process requests from the tlsmgr(8) ! server in order to seed its internal pseudo random number generator (PRNG). tls_high_cipherlist --- 428,436 ---- for the "verify" TLS security level. tls_daemon_random_bytes (32) ! The number of pseudo-random bytes that an smtp(8) ! or smtpd(8) process requests from the tlsmgr(8) ! server in order to seed its internal pseudo random number generator (PRNG). tls_high_cipherlist *************** *** 434,440 **** ciphers. tls_low_cipherlist (ALL:!EXPORT:+RC4:@STRENGTH) ! The OpenSSL cipherlist for "LOW" or higher grade ciphers. tls_export_cipherlist (ALL:+RC4:@STRENGTH) --- 442,448 ---- ciphers. tls_low_cipherlist (ALL:!EXPORT:+RC4:@STRENGTH) ! The OpenSSL cipherlist for "LOW" or higher grade ciphers. tls_export_cipherlist (ALL:+RC4:@STRENGTH) *************** *** 442,481 **** ciphers. tls_null_cipherlist (eNULL:!aNULL) ! The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. Available in Postfix version 2.4 and later: smtp_sasl_tls_verified_security_options ($smtp_sasl_tls_security_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions with a verified server certificate. OBSOLETE STARTTLS CONTROLS ! The following configuration parameters exist for compati- bility with Postfix versions before 2.3. Support for these will be removed in a future release. smtp_use_tls (no) ! Opportunistic mode: use TLS when a remote SMTP ! server announces STARTTLS support, otherwise send the mail in the clear. smtp_enforce_tls (no) ! Enforcement mode: require that remote SMTP servers ! use TLS encryption, and never send mail in the clear. smtp_tls_enforce_peername (yes) ! With mandatory TLS encryption, require that the remote SMTP server hostname matches the information in the remote SMTP server certificate. smtp_tls_per_site (empty) Optional lookup tables with the Postfix SMTP client ! TLS usage policy by next-hop destination and by remote SMTP server hostname. smtp_tls_cipherlist (empty) --- 450,489 ---- ciphers. tls_null_cipherlist (eNULL:!aNULL) ! The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. Available in Postfix version 2.4 and later: smtp_sasl_tls_verified_security_options ($smtp_sasl_tls_security_options) ! The SASL authentication security options that the ! Postfix SMTP client uses for TLS encrypted SMTP sessions with a verified server certificate. OBSOLETE STARTTLS CONTROLS ! The following configuration parameters exist for compati- bility with Postfix versions before 2.3. Support for these will be removed in a future release. smtp_use_tls (no) ! Opportunistic mode: use TLS when a remote SMTP ! server announces STARTTLS support, otherwise send the mail in the clear. smtp_enforce_tls (no) ! Enforcement mode: require that remote SMTP servers ! use TLS encryption, and never send mail in the clear. smtp_tls_enforce_peername (yes) ! With mandatory TLS encryption, require that the remote SMTP server hostname matches the information in the remote SMTP server certificate. smtp_tls_per_site (empty) Optional lookup tables with the Postfix SMTP client ! TLS usage policy by next-hop destination and by remote SMTP server hostname. smtp_tls_cipherlist (empty) *************** *** 485,511 **** RESOURCE AND RATE CONTROLS smtp_destination_concurrency_limit ($default_destina- tion_concurrency_limit) ! The maximal number of parallel deliveries to the ! same destination via the smtp message delivery transport. smtp_destination_recipient_limit ($default_destina- tion_recipient_limit) ! The maximal number of recipients per delivery via the smtp message delivery transport. smtp_connect_timeout (30s) ! The SMTP client time limit for completing a TCP connection, or zero (use the operating system built-in time limit). smtp_helo_timeout (300s) ! The SMTP client time limit for sending the HELO or ! EHLO command, and for receiving the initial server response. lmtp_lhlo_timeout (300s) ! The LMTP client time limit for sending the LHLO command, and for receiving the initial server response. --- 493,519 ---- RESOURCE AND RATE CONTROLS smtp_destination_concurrency_limit ($default_destina- tion_concurrency_limit) ! The maximal number of parallel deliveries to the ! same destination via the smtp message delivery transport. smtp_destination_recipient_limit ($default_destina- tion_recipient_limit) ! The maximal number of recipients per delivery via the smtp message delivery transport. smtp_connect_timeout (30s) ! The SMTP client time limit for completing a TCP connection, or zero (use the operating system built-in time limit). smtp_helo_timeout (300s) ! The SMTP client time limit for sending the HELO or ! EHLO command, and for receiving the initial server response. lmtp_lhlo_timeout (300s) ! The LMTP client time limit for sending the LHLO command, and for receiving the initial server response. *************** *** 514,543 **** command, and for receiving the server response. smtp_mail_timeout (300s) ! The SMTP client time limit for sending the MAIL ! FROM command, and for receiving the server response. smtp_rcpt_timeout (300s) ! The SMTP client time limit for sending the SMTP ! RCPT TO command, and for receiving the server response. smtp_data_init_timeout (120s) ! The SMTP client time limit for sending the SMTP ! DATA command, and for receiving the server response. smtp_data_xfer_timeout (180s) ! The SMTP client time limit for sending the SMTP message content. smtp_data_done_timeout (600s) ! The SMTP client time limit for sending the SMTP ".", and for receiving the server response. smtp_quit_timeout (300s) ! The SMTP client time limit for sending the QUIT command, and for receiving the server response. Available in Postfix version 2.1 and later: --- 522,551 ---- command, and for receiving the server response. smtp_mail_timeout (300s) ! The SMTP client time limit for sending the MAIL ! FROM command, and for receiving the server response. smtp_rcpt_timeout (300s) ! The SMTP client time limit for sending the SMTP ! RCPT TO command, and for receiving the server response. smtp_data_init_timeout (120s) ! The SMTP client time limit for sending the SMTP ! DATA command, and for receiving the server response. smtp_data_xfer_timeout (180s) ! The SMTP client time limit for sending the SMTP message content. smtp_data_done_timeout (600s) ! The SMTP client time limit for sending the SMTP ".", and for receiving the server response. smtp_quit_timeout (300s) ! The SMTP client time limit for sending the QUIT command, and for receiving the server response. Available in Postfix version 2.1 and later: *************** *** 548,559 **** lookups, or zero (no limit). smtp_mx_session_limit (2) ! The maximal number of SMTP sessions per delivery ! request before giving up or delivering to a fall- back relay host, or zero (no limit). smtp_rset_timeout (20s) ! The SMTP client time limit for sending the RSET command, and for receiving the server response. Available in Postfix version 2.2 and earlier: --- 556,567 ---- lookups, or zero (no limit). smtp_mx_session_limit (2) ! The maximal number of SMTP sessions per delivery ! request before giving up or delivering to a fall- back relay host, or zero (no limit). smtp_rset_timeout (20s) ! The SMTP client time limit for sending the RSET command, and for receiving the server response. Available in Postfix version 2.2 and earlier: *************** *** 565,575 **** Available in Postfix version 2.2 and later: smtp_connection_cache_destinations (empty) ! Permanently enable SMTP connection caching for the specified destinations. smtp_connection_cache_on_demand (yes) ! Temporarily enable SMTP connection caching while a destination has a high volume of mail in the active queue. --- 573,583 ---- Available in Postfix version 2.2 and later: smtp_connection_cache_destinations (empty) ! Permanently enable SMTP connection caching for the specified destinations. smtp_connection_cache_on_demand (yes) ! Temporarily enable SMTP connection caching while a destination has a high volume of mail in the active queue. *************** *** 579,640 **** smtp_connection_cache_time_limit (2s) When SMTP connection caching is enabled, the amount ! of time that an unused SMTP client socket is kept open before it is closed. Available in Postfix version 2.3 and later: connection_cache_protocol_timeout (5s) ! Time limit for connection cache connect, send or receive operations. TROUBLE SHOOTING CONTROLS debug_peer_level (2) ! The increment in verbose logging level when a ! remote client or server matches a pattern in the debug_peer_list parameter. debug_peer_list (empty) ! Optional list of remote client or server hostname ! or network address patterns that cause the verbose ! logging level to increase by the amount specified in $debug_peer_level. error_notice_recipient (postmaster) ! The recipient of postmaster notifications about ! mail delivery problems that are caused by policy, resource, software or protocol errors. internal_mail_filter_classes (empty) ! What categories of Postfix-generated mail are sub- ! ject to before-queue content inspection by non_smtpd_milters, header_checks and body_checks. notify_classes (resource, software) ! The list of error classes that are reported to the postmaster. MISCELLANEOUS CONTROLS best_mx_transport (empty) ! Where the Postfix SMTP client should deliver mail when it detects a "mail loops back to myself" error condition. config_directory (see 'postconf -d' output) ! The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) ! How much time a Postfix daemon process may take to ! handle a request before it is terminated by a built-in watchdog timer. delay_logging_resolution_limit (2) ! The maximal number of digits after the decimal point when logging sub-second delay values. disable_dns_lookups (no) ! Disable DNS lookups in the Postfix SMTP and LMTP clients. inet_interfaces (all) --- 587,648 ---- smtp_connection_cache_time_limit (2s) When SMTP connection caching is enabled, the amount ! of time that an unused SMTP client socket is kept open before it is closed. Available in Postfix version 2.3 and later: connection_cache_protocol_timeout (5s) ! Time limit for connection cache connect, send or receive operations. TROUBLE SHOOTING CONTROLS debug_peer_level (2) ! The increment in verbose logging level when a ! remote client or server matches a pattern in the debug_peer_list parameter. debug_peer_list (empty) ! Optional list of remote client or server hostname ! or network address patterns that cause the verbose ! logging level to increase by the amount specified in $debug_peer_level. error_notice_recipient (postmaster) ! The recipient of postmaster notifications about ! mail delivery problems that are caused by policy, resource, software or protocol errors. internal_mail_filter_classes (empty) ! What categories of Postfix-generated mail are sub- ! ject to before-queue content inspection by non_smtpd_milters, header_checks and body_checks. notify_classes (resource, software) ! The list of error classes that are reported to the postmaster. MISCELLANEOUS CONTROLS best_mx_transport (empty) ! Where the Postfix SMTP client should deliver mail when it detects a "mail loops back to myself" error condition. config_directory (see 'postconf -d' output) ! The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) ! How much time a Postfix daemon process may take to ! handle a request before it is terminated by a built-in watchdog timer. delay_logging_resolution_limit (2) ! The maximal number of digits after the decimal point when logging sub-second delay values. disable_dns_lookups (no) ! Disable DNS lookups in the Postfix SMTP and LMTP clients. inet_interfaces (all) *************** *** 642,648 **** tem receives mail on. inet_protocols (ipv4) ! The Internet protocols Postfix will attempt to use when making or accepting connections. ipc_timeout (3600s) --- 650,656 ---- tem receives mail on. inet_protocols (ipv4) ! The Internet protocols Postfix will attempt to use when making or accepting connections. ipc_timeout (3600s) *************** *** 650,724 **** over an internal communication channel. lmtp_tcp_port (24) ! The default TCP port that the Postfix LMTP client connects to. max_idle (100s) ! The maximum amount of time that an idle Postfix ! daemon process waits for an incoming connection before terminating voluntarily. max_use (100) ! The maximal number of incoming connections that a ! Postfix daemon process will service before termi- nating voluntarily. process_id (read-only) ! The process ID of a Postfix command or daemon process. process_name (read-only) ! The process name of a Postfix command or daemon process. proxy_interfaces (empty) The network interface addresses that this mail sys- ! tem receives mail on by way of a proxy or network address translation unit. smtp_bind_address (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv4 connection. smtp_bind_address6 (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv6 connection. smtp_helo_name ($myhostname) ! The hostname to send in the SMTP EHLO or HELO com- mand. lmtp_lhlo_name ($myhostname) The hostname to send in the LMTP LHLO command. smtp_host_lookup (dns) ! What mechanisms when the Postfix SMTP client uses to look up a host's IP address. smtp_randomize_addresses (yes) ! Randomize the order of equal-preference MX host addresses. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) ! The mail system name that is prepended to the ! process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". Available with Postfix 2.2 and earlier: fallback_relay (empty) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. Available with Postfix 2.3 and later: smtp_fallback_relay ($fallback_relay) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. SEE ALSO --- 658,732 ---- over an internal communication channel. lmtp_tcp_port (24) ! The default TCP port that the Postfix LMTP client connects to. max_idle (100s) ! The maximum amount of time that an idle Postfix ! daemon process waits for an incoming connection before terminating voluntarily. max_use (100) ! The maximal number of incoming connections that a ! Postfix daemon process will service before termi- nating voluntarily. process_id (read-only) ! The process ID of a Postfix command or daemon process. process_name (read-only) ! The process name of a Postfix command or daemon process. proxy_interfaces (empty) The network interface addresses that this mail sys- ! tem receives mail on by way of a proxy or network address translation unit. smtp_bind_address (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv4 connection. smtp_bind_address6 (empty) ! An optional numerical network address that the ! Postfix SMTP client should bind to when making an IPv6 connection. smtp_helo_name ($myhostname) ! The hostname to send in the SMTP EHLO or HELO com- mand. lmtp_lhlo_name ($myhostname) The hostname to send in the LMTP LHLO command. smtp_host_lookup (dns) ! What mechanisms when the Postfix SMTP client uses to look up a host's IP address. smtp_randomize_addresses (yes) ! Randomize the order of equal-preference MX host addresses. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) ! The mail system name that is prepended to the ! process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". Available with Postfix 2.2 and earlier: fallback_relay (empty) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. Available with Postfix 2.3 and later: smtp_fallback_relay ($fallback_relay) ! Optional list of relay hosts for SMTP destinations that can't be found or that are unreachable. SEE ALSO *************** *** 736,742 **** TLS_README, Postfix STARTTLS howto LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) --- 744,750 ---- TLS_README, Postfix STARTTLS howto LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) diff -cr --new-file /var/tmp/postfix-2.4.3/man/man5/postconf.5 ./man/man5/postconf.5 *** /var/tmp/postfix-2.4.3/man/man5/postconf.5 Sun Mar 25 11:18:47 2007 --- ./man/man5/postconf.5 Fri Jul 20 11:25:24 2007 *************** *** 42,47 **** --- 42,49 ---- The expression "${name:value}" expands to "value" when "$name" is empty. This form is supported with Postfix version 2.2 and later. + .IP \(bu + Specify "$$" to produce a single "$" character. .RE .IP \(bu When the same parameter is defined multiple times, only the last *************** *** 3709,3714 **** --- 3711,3727 ---- This feature is available in Postfix 2.0 and later. .SH sample_directory (default: /etc/postfix) The name of the directory with example Postfix configuration files. + .SH send_cyrus_sasl_authzid (default: no) + When authenticating to a remote SMTP or LMTP server with the + default setting "no", send no SASL authoriZation ID (authzid); send + only the SASL authentiCation ID (authcid) plus the authcid's password. + .PP + The non-default setting "yes" enables the behavior of older + Postfix versions. These always send a SASL authzid that is equal + to the SASL authcid, but this causes inter-operability problems + with some SMTP servers. + .PP + This feature is available in Postfix 2.4.4 and later. .SH sender_based_routing (default: no) This parameter should not be used. It was replaced by sender_dependent_relayhost_maps in Postfix version 2.3. diff -cr --new-file /var/tmp/postfix-2.4.3/man/man8/smtp.8 ./man/man8/smtp.8 *** /var/tmp/postfix-2.4.3/man/man8/smtp.8 Sun Mar 25 18:46:38 2007 --- ./man/man8/smtp.8 Fri Jul 20 11:25:24 2007 *************** *** 226,231 **** --- 226,237 ---- A case insensitive list of LHLO keywords (pipelining, starttls, auth, etc.) that the LMTP client will ignore in the LHLO response from a remote LMTP server. + .PP + Available in Postfix version 2.4.4 and later: + .IP "\fBsend_cyrus_sasl_authzid (no)\fR" + When authenticating to a remote SMTP or LMTP server with the + default setting "no", send no SASL authoriZation ID (authzid); send + only the SASL authentiCation ID (authcid) plus the authcid's password. .SH "MIME PROCESSING CONTROLS" .na .nf diff -cr --new-file /var/tmp/postfix-2.4.3/mantools/postlink ./mantools/postlink *** /var/tmp/postfix-2.4.3/mantools/postlink Mon Apr 2 19:10:27 2007 --- ./mantools/postlink Tue Jul 10 13:27:12 2007 *************** *** 364,369 **** --- 364,370 ---- s;\bresolve_dequoted_address\b;$&;g; s;\brewrite_service_name\b;$&;g; s;\bsample_directory\b;$&;g; + s;\bsend_cyrus_sasl_authzid\b;$&;g; s;\bsender_based_routing\b;$&;g; s;\bsender_bcc_maps\b;$&;g; s;\bsender_canonical_classes\b;$&;g; diff -cr --new-file /var/tmp/postfix-2.4.3/proto/SASL_README.html ./proto/SASL_README.html *** /var/tmp/postfix-2.4.3/proto/SASL_README.html Mon Mar 12 20:40:22 2007 --- ./proto/SASL_README.html Tue Jul 10 13:36:23 2007 *************** *** 537,549 **** 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz 235 Authentication successful !

    Instead of dGVzdAB0ZXN0AHRlc3RwYXNz, specify the base64 encoded ! form of username\0username\0password (the \0 is a null byte). The example above is for a user named `test' with password `testpass'.

    --- 537,549 ---- 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME ! AUTH PLAIN AHRlc3QAdGVzdHBhc3M= 235 Authentication successful !

    Instead of AHRlc3QAdGVzdHBhc3M=, specify the base64 encoded ! form of \0username\0password (the \0 is a null byte). The example above is for a user named `test' with password `testpass'.

    *************** *** 552,565 ****
    ! % printf 'username\0username\0password' | mmencode 
      
      % perl -MMIME::Base64 -e \
    !     'print encode_base64("username\0username\0password");'
      
    --- 552,565 ----
    ! % printf '\0username\0password' | mmencode 
      
      % perl -MMIME::Base64 -e \
    !     'print encode_base64("\0username\0password");'
      
    diff -cr --new-file /var/tmp/postfix-2.4.3/proto/postconf.html.prolog ./proto/postconf.html.prolog *** /var/tmp/postfix-2.4.3/proto/postconf.html.prolog Tue Feb 8 17:18:11 2005 --- ./proto/postconf.html.prolog Wed Jun 13 20:47:33 2007 *************** *** 53,58 **** --- 53,60 ---- "$name" is empty. This form is supported with Postfix version 2.2 and later.

    +
  • Specify "$$" to produce a single "$" character.

    +
  • When the same parameter is defined multiple times, only diff -cr --new-file /var/tmp/postfix-2.4.3/proto/postconf.man.prolog ./proto/postconf.man.prolog *** /var/tmp/postfix-2.4.3/proto/postconf.man.prolog Tue Feb 8 17:18:47 2005 --- ./proto/postconf.man.prolog Wed Jun 13 20:47:59 2007 *************** *** 42,47 **** --- 42,49 ---- The expression "${name:value}" expands to "value" when "$name" is empty. This form is supported with Postfix version 2.2 and later. + .IP \(bu + Specify "$$" to produce a single "$" character. .RE .IP \(bu When the same parameter is defined multiple times, only the last diff -cr --new-file /var/tmp/postfix-2.4.3/proto/postconf.proto ./proto/postconf.proto *** /var/tmp/postfix-2.4.3/proto/postconf.proto Sun Mar 25 11:18:40 2007 --- ./proto/postconf.proto Fri Jul 20 11:24:56 2007 *************** *** 10572,10574 **** --- 10572,10588 ---- configuration parameter. See there for details.

    This feature is available in Postfix 2.4 and later.

    + + %PARAM send_cyrus_sasl_authzid no + +

    When authenticating to a remote SMTP or LMTP server with the + default setting "no", send no SASL authoriZation ID (authzid); send + only the SASL authentiCation ID (authcid) plus the authcid's password. +

    + +

    The non-default setting "yes" enables the behavior of older + Postfix versions. These always send a SASL authzid that is equal + to the SASL authcid, but this causes inter-operability problems + with some SMTP servers.

    + +

    This feature is available in Postfix 2.4.4 and later.

    diff -cr --new-file /var/tmp/postfix-2.4.3/src/cleanup/cleanup_envelope.c ./src/cleanup/cleanup_envelope.c *** /var/tmp/postfix-2.4.3/src/cleanup/cleanup_envelope.c Tue Jan 16 14:08:07 2007 --- ./src/cleanup/cleanup_envelope.c Mon Jul 30 20:41:04 2007 *************** *** 148,160 **** #endif if (type == REC_TYPE_MILT_COUNT) { /* Not part of queue file format. */ ! if (state->milters != 0) { ! msg_warn("%s: message rejected: too many milter instances", ! state->queue_id); ! state->errs |= CLEANUP_STAT_BAD; ! return; ! } ! if ((milter_count = atoi(buf)) > 0) cleanup_milter_receive(state, milter_count); return; } --- 148,154 ---- #endif if (type == REC_TYPE_MILT_COUNT) { /* Not part of queue file format. */ ! if ((milter_count = atoi(buf)) >= 0) cleanup_milter_receive(state, milter_count); return; } diff -cr --new-file /var/tmp/postfix-2.4.3/src/cleanup/cleanup_milter.c ./src/cleanup/cleanup_milter.c *** /var/tmp/postfix-2.4.3/src/cleanup/cleanup_milter.c Mon Jan 22 08:45:33 2007 --- ./src/cleanup/cleanup_milter.c Mon Jul 30 20:39:41 2007 *************** *** 1314,1319 **** --- 1314,1321 ---- void cleanup_milter_receive(CLEANUP_STATE *state, int count) { + if (state->milters) + milter_free(state->milters); state->milters = milter_receive(state->src, count); milter_macro_callback(state->milters, cleanup_milter_eval, (void *) state); milter_edit_callback(state->milters, diff -cr --new-file /var/tmp/postfix-2.4.3/src/global/mail_params.c ./src/global/mail_params.c *** /var/tmp/postfix-2.4.3/src/global/mail_params.c Mon Jul 10 17:29:30 2006 --- ./src/global/mail_params.c Tue Jul 10 13:27:12 2007 *************** *** 106,111 **** --- 106,112 ---- /* int var_oldlog_compat; /* int var_delay_max_res; /* char *var_int_filt_classes; + /* int var_cyrus_sasl_authzid; /* /* void mail_params_init() /* *************** *** 275,280 **** --- 276,282 ---- int var_oldlog_compat; int var_delay_max_res; char *var_int_filt_classes; + int var_cyrus_sasl_authzid; const char null_format_string[1] = ""; *************** *** 543,548 **** --- 545,551 ---- VAR_VERIFY_NEG_CACHE, DEF_VERIFY_NEG_CACHE, &var_verify_neg_cache, VAR_OLDLOG_COMPAT, DEF_OLDLOG_COMPAT, &var_oldlog_compat, VAR_HELPFUL_WARNINGS, DEF_HELPFUL_WARNINGS, &var_helpful_warnings, + VAR_CYRUS_SASL_AUTHZID, DEF_CYRUS_SASL_AUTHZID, &var_cyrus_sasl_authzid, 0, }; const char *cp; diff -cr --new-file /var/tmp/postfix-2.4.3/src/global/mail_params.h ./src/global/mail_params.h *** /var/tmp/postfix-2.4.3/src/global/mail_params.h Sat Feb 24 21:15:42 2007 --- ./src/global/mail_params.h Tue Jul 10 19:47:45 2007 *************** *** 41,49 **** * What problem classes should be reported to the postmaster via email. * Default is bad problems only. See mail_error(3). Even when mail notices * are disabled, problems are still logged to the syslog daemon. */ #define VAR_NOTIFY_CLASSES "notify_classes" ! #define DEF_NOTIFY_CLASSES "resource, software" extern char *var_notify_classes; /* --- 41,52 ---- * What problem classes should be reported to the postmaster via email. * Default is bad problems only. See mail_error(3). Even when mail notices * are disabled, problems are still logged to the syslog daemon. + * + * Do not add "protocol" to the default setting. It gives Postfix a bad + * reputation: people get mail whenever spam software makes a mistake. */ #define VAR_NOTIFY_CLASSES "notify_classes" ! #define DEF_NOTIFY_CLASSES "resource, software" /* Not: "protocol" */ extern char *var_notify_classes; /* *************** *** 1531,1536 **** --- 1534,1543 ---- * SASL-based relay etc. control. */ #define PERMIT_SASL_AUTH "permit_sasl_authenticated" + + #define VAR_CYRUS_SASL_AUTHZID "send_cyrus_sasl_authzid" + #define DEF_CYRUS_SASL_AUTHZID 0 + extern int var_cyrus_sasl_authzid; /* * LMTP client. Timeouts inspired by RFC 1123. The LMTP recipient limit diff -cr --new-file /var/tmp/postfix-2.4.3/src/milter/milter.c ./src/milter/milter.c *** /var/tmp/postfix-2.4.3/src/milter/milter.c Wed Mar 14 20:46:12 2007 --- ./src/milter/milter.c Mon Jul 30 20:42:56 2007 *************** *** 97,102 **** --- 97,106 ---- /* MILTERS *milter_receive(fp, count) /* VSTREAM *fp; /* int count; + /* + /* int milter_dummy(milters, fp) + /* MILTERS *milters; + /* VSTREAM *fp; /* DESCRIPTION /* The functions in this module manage one or more milter (mail /* filter) clients. Currently, only the Sendmail 8 filter *************** *** 192,197 **** --- 196,204 ---- /* milter_receive() receives the specified number of mail /* filters over the specified stream. The result is a null /* pointer when no milters were sent, or when an error happened. + /* + /* milter_dummy() is like milter_send(), except that it sends + /* a dummy, but entirely valid, mail filter list. /* SEE ALSO /* milter8(3) Sendmail 8 Milter protocol /* DIAGNOSTICS *************** *** 587,592 **** --- 594,609 ---- #define MAIL_ATTR_MILT_EOD "eod_macros" #define MAIL_ATTR_MILT_UNK "unk_macros" + /* milter_dummy - send empty milter list */ + + int milter_dummy(MILTERS *milters, VSTREAM *stream) + { + MILTERS dummy = *milters; + + dummy.milter_list = 0; + return (milter_send(&dummy, stream)); + } + /* milter_send - send Milter instances over stream */ int milter_send(MILTERS *milters, VSTREAM *stream) *************** *** 606,613 **** for (m = milters->milter_list; m != 0; m = m->next) if (m->active(m)) count++; - if (count == 0) - return (0); (void) rec_fprintf(stream, REC_TYPE_MILT_COUNT, "%d", count); /* --- 623,628 ---- *************** *** 655,663 **** VSTRING *data_macros; VSTRING *eod_macros; VSTRING *unk_macros; - - if (count == 0) - return (0); /* * Receive filter macros. --- 670,675 ---- diff -cr --new-file /var/tmp/postfix-2.4.3/src/milter/milter.h ./src/milter/milter.h *** /var/tmp/postfix-2.4.3/src/milter/milter.h Tue Jan 9 20:55:23 2007 --- ./src/milter/milter.h Tue Jul 31 13:10:17 2007 *************** *** 99,104 **** --- 99,105 ---- extern const char *milter_other_event(MILTERS *); extern void milter_abort(MILTERS *); extern void milter_disc_event(MILTERS *); + extern int milter_dummy(MILTERS *, VSTREAM *); extern int milter_send(MILTERS *, VSTREAM *); extern MILTERS *milter_receive(VSTREAM *, int); extern void milter_free(MILTERS *); diff -cr --new-file /var/tmp/postfix-2.4.3/src/milter/milter8.c ./src/milter/milter8.c *** /var/tmp/postfix-2.4.3/src/milter/milter8.c Tue Jan 16 20:08:01 2007 --- ./src/milter/milter8.c Tue Jul 31 13:12:10 2007 *************** *** 64,69 **** --- 64,73 ---- #include #include + #ifndef SHUT_RDWR + #define SHUT_RDWR 2 + #endif + /* Sendmail 8 Milter protocol. */ #ifdef USE_LIBMILTER_INCLUDES *************** *** 437,443 **** --- 441,456 ---- { const char *reply; + /* + * XXX When the cleanup server closes its end of the Milter socket while + * editing a queue file, the SMTP server is left out of sync with the + * Milter. Sending an ABORT to the Milters will not restore + * synchronization, because there may be any number of Milter replies + * already in flight. Workaround: poison the socket and force the SMTP + * server to abandon it. + */ if (milter->fp != 0) { + (void) shutdown(vstream_fileno(milter->fp), SHUT_RDWR); (void) vstream_fclose(milter->fp); milter->fp = 0; } *************** *** 456,462 **** --- 469,484 ---- { const char *reply; + /* + * XXX When the cleanup server closes its end of the Milter socket while + * editing a queue file, the SMTP server is left out of sync with the + * Milter. Sending an ABORT to the Milters will not restore + * synchronization, because there may be any number of Milter replies + * already in flight. Workaround: poison the socket and force the SMTP + * server to abandon it. + */ if (milter->fp != 0) { + (void) shutdown(vstream_fileno(milter->fp), SHUT_RDWR); (void) vstream_fclose(milter->fp); milter->fp = 0; } *************** *** 873,878 **** --- 895,901 ---- const char *retval = 0; VSTRING *body_line_buf = 0; int done = 0; + int body_edit_lockout = 0; #define DONT_SKIP_REPLY 0 *************** *** 974,983 **** /* * Receive the reply or replies. * ! * Intercept all loop exits so that we can do post body replacement * processing. * * XXX Bound the loop iteration count. */ #define IN_CONNECT_EVENT(e) ((e) == SMFIC_CONNECT || (e) == SMFIC_HELO) --- 997,1017 ---- /* * Receive the reply or replies. * ! * Intercept all loop exits so that we can do post header/body edit * processing. * * XXX Bound the loop iteration count. + * + * In the end-of-body stage, the Milter may reply with one or more queue + * file edit requests before it replies with its final decision: accept, + * reject, etc. After a local queue file edit error (file too big, media + * write error), do not close the Milter socket in the cleanup server. + * Instead skip all further Milter replies until the final decision. This + * way the Postfix SMTP server stays in sync with the Milter, and Postfix + * doesn't have to lose the ability to handle multiple deliveries within + * the same SMTP session. This requires that the Postfix SMTP server uses + * something other than CLEANUP_STAT_WRITE when it loses contact with the + * cleanup server. */ #define IN_CONNECT_EVENT(e) ((e) == SMFIC_CONNECT || (e) == SMFIC_HELO) *************** *** 1002,1007 **** --- 1036,1067 ---- msg_info("reply: %s data %ld bytes", (smfir_name = str_name_code(smfir_table, cmd)) != 0 ? smfir_name : "unknown", (long) data_size); + + /* + * Handle unfinished message body replacement first. + * + * XXX When SMFIR_REPLBODY is followed by some different request, we + * assume that the body replacement operation is complete. The queue + * file editing implementation currently does not support sending + * part 1 of the body replacement text, doing some other queue file + * updates, and then sending part 2 of the body replacement text. To + * avoid loss of data, we log an error when SMFIR_REPLBODY requests + * are alternated with other requests. + */ + if (body_line_buf != 0 && cmd != SMFIR_REPLBODY) { + /* In case the last body replacement line didn't end in CRLF. */ + if (edit_resp == 0 && LEN(body_line_buf) > 0) + edit_resp = parent->repl_body(parent->chg_context, + MILTER_BODY_LINE, + body_line_buf); + if (edit_resp == 0) + edit_resp = parent->repl_body(parent->chg_context, + MILTER_BODY_END, + (VSTRING *) 0); + body_edit_lockout = 1; + vstring_free(body_line_buf); + body_line_buf = 0; + } switch (cmd) { /* *************** *** 1052,1058 **** if (IN_CONNECT_EVENT(event)) { msg_warn("milter %s: DISCARD action is not allowed " "for connect or helo", milter->m.name); - milter8_conf_error(milter); MILTER8_EVENT_BREAK(milter->def_reply); } else { /* No more events for this message. */ --- 1112,1117 ---- *************** *** 1188,1193 **** --- 1247,1255 ---- MILTER8_DATA_STRING, milter->body, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; /* XXX Sendmail 8 compatibility. */ if (index == 0) index = 1; *************** *** 1212,1219 **** edit_resp = parent->del_header(parent->chg_context, (ssize_t) index, STR(milter->buf)); - if (edit_resp) - MILTER8_EVENT_BREAK(edit_resp); continue; #endif --- 1274,1279 ---- *************** *** 1226,1236 **** MILTER8_DATA_STRING, milter->body, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); edit_resp = parent->add_header(parent->chg_context, STR(milter->buf), STR(milter->body)); - if (edit_resp) - MILTER8_EVENT_BREAK(edit_resp); continue; /* --- 1286,1297 ---- MILTER8_DATA_STRING, milter->body, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; edit_resp = parent->add_header(parent->chg_context, STR(milter->buf), STR(milter->body)); continue; /* *************** *** 1247,1252 **** --- 1308,1316 ---- MILTER8_DATA_STRING, milter->body, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; if ((ssize_t) index + 1 < 1) { msg_warn("milter %s: bad insert header index: %ld", milter->m.name, (long) index); *************** *** 1257,1264 **** (ssize_t) index + 1, STR(milter->buf), STR(milter->body)); - if (edit_resp) - MILTER8_EVENT_BREAK(edit_resp); continue; #endif --- 1321,1326 ---- *************** *** 1270,1279 **** MILTER8_DATA_STRING, milter->buf, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); edit_resp = parent->add_rcpt(parent->chg_context, STR(milter->buf)); - if (edit_resp) - MILTER8_EVENT_BREAK(edit_resp); continue; /* --- 1332,1342 ---- MILTER8_DATA_STRING, milter->buf, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; edit_resp = parent->add_rcpt(parent->chg_context, STR(milter->buf)); continue; /* *************** *** 1284,1293 **** MILTER8_DATA_STRING, milter->buf, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); edit_resp = parent->del_rcpt(parent->chg_context, STR(milter->buf)); - if (edit_resp) - MILTER8_EVENT_BREAK(edit_resp); continue; /* --- 1347,1357 ---- MILTER8_DATA_STRING, milter->buf, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; edit_resp = parent->del_rcpt(parent->chg_context, STR(milter->buf)); continue; /* *************** *** 1295,1304 **** --- 1359,1378 ---- * update the message size. */ case SMFIR_REPLBODY: + if (body_edit_lockout) { + msg_warn("milter %s: body replacement requests can't " + "currently be mixed with other requests", + milter->m.name); + milter8_conf_error(milter); + MILTER8_EVENT_BREAK(milter->def_reply); + } if (milter8_read_data(milter, data_size, MILTER8_DATA_BUFFER, milter->body, MILTER8_DATA_END) != 0) MILTER8_EVENT_BREAK(milter->def_reply); + /* Skip to the next request after previous edit error. */ + if (edit_resp) + continue; /* Start body replacement. */ if (body_line_buf == 0) { body_line_buf = vstring_alloc(var_line_limit); *************** *** 1348,1382 **** } /* ! * Finish message body replacement. */ ! if (body_line_buf != 0) { ! if (edit_resp == 0) { ! /* In case the last body replacement line didn't end in CRLF. */ ! if (LEN(body_line_buf) > 0) ! edit_resp = parent->repl_body(parent->chg_context, ! MILTER_BODY_LINE, ! body_line_buf); ! if (edit_resp == 0) ! edit_resp = parent->repl_body(parent->chg_context, ! MILTER_BODY_END, ! (VSTRING *) 0); ! } vstring_free(body_line_buf); ! /* ! * Override a non-reject/discard result value after body replacement ! * failure. ! * ! * XXX Some cleanup clients ask the cleanup server to bounce mail for ! * them. In that case we must override a hard reject retval result ! * after queue file update failure. This is not a big problem; the ! * odds are small that a Milter application sends a hard reject after ! * replacing the message body. ! */ ! if (edit_resp && (retval == 0 || strchr("DS4", retval[0]) == 0)) ! retval = edit_resp; ! } return (retval); } --- 1422,1441 ---- } /* ! * Clean up after aborted message body replacement. */ ! if (body_line_buf) vstring_free(body_line_buf); ! /* ! * XXX Some cleanup clients ask the cleanup server to bounce mail for ! * them. In that case we must override a hard reject retval result after ! * queue file update failure. This is not a big problem; the odds are ! * small that a Milter application sends a hard reject after replacing ! * the message body. ! */ ! if (edit_resp && (retval == 0 || strchr("DS4", retval[0]) == 0)) ! retval = edit_resp; return (retval); } *************** *** 1532,1537 **** --- 1591,1599 ---- VSTREAM_CTL_DOUBLE, VSTREAM_CTL_TIMEOUT, milter->cmd_timeout, VSTREAM_CTL_END); + /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */ + if (connect_fn == inet_connect) + vstream_tweak_tcp(milter->fp); /* * Open the negotiations by sending what actions the Milter may request *************** *** 2434,2439 **** --- 2496,2503 ---- msg_timeout, NO_PROTOCOL, STR(act_buf), parent); milter->fp = vstream_fdopen(fd, O_RDWR); vstream_control(milter->fp, VSTREAM_CTL_DOUBLE, VSTREAM_CTL_END); + /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */ + vstream_tweak_sock(milter->fp); milter->version = version; milter->rq_mask = rq_mask; milter->ev_mask = ev_mask; diff -cr --new-file /var/tmp/postfix-2.4.3/src/smtp/smtp.c ./src/smtp/smtp.c *** /var/tmp/postfix-2.4.3/src/smtp/smtp.c Sun Mar 25 18:46:36 2007 --- ./src/smtp/smtp.c Fri Jul 20 11:25:24 2007 *************** *** 204,209 **** --- 204,215 ---- /* A case insensitive list of LHLO keywords (pipelining, starttls, /* auth, etc.) that the LMTP client will ignore in the LHLO response /* from a remote LMTP server. + /* .PP + /* Available in Postfix version 2.4.4 and later: + /* .IP "\fBsend_cyrus_sasl_authzid (no)\fR" + /* When authenticating to a remote SMTP or LMTP server with the + /* default setting "no", send no SASL authoriZation ID (authzid); send + /* only the SASL authentiCation ID (authcid) plus the authcid's password. /* MIME PROCESSING CONTROLS /* .ad /* .fi diff -cr --new-file /var/tmp/postfix-2.4.3/src/smtp/smtp_connect.c ./src/smtp/smtp_connect.c *** /var/tmp/postfix-2.4.3/src/smtp/smtp_connect.c Sun Dec 3 14:58:09 2006 --- ./src/smtp/smtp_connect.c Tue Jul 31 11:31:48 2007 *************** *** 304,309 **** --- 304,319 ---- stream = vstream_fdopen(sock, O_RDWR); /* + * Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. + */ + if (sa->sa_family == AF_INET + #ifdef AF_INET6 + || sa->sa_family == AF_INET6 + #endif + ) + vstream_tweak_tcp(stream); + + /* * Bundle up what we have into a nice SMTP_SESSION object. */ return (smtp_session_alloc(stream, destination, name, addr, *************** *** 380,386 **** if (THIS_SESSION_IS_EXPIRED) smtp_quit(state); /* also disables caching */ if (THIS_SESSION_IS_CACHED ! /* Redundant tests for safety... */ && vstream_ferror(session->stream) == 0 && vstream_feof(session->stream) == 0) { smtp_save_session(state); --- 390,396 ---- if (THIS_SESSION_IS_EXPIRED) smtp_quit(state); /* also disables caching */ if (THIS_SESSION_IS_CACHED ! /* Redundant tests for safety... */ && vstream_ferror(session->stream) == 0 && vstream_feof(session->stream) == 0) { smtp_save_session(state); diff -cr --new-file /var/tmp/postfix-2.4.3/src/smtpd/smtpd.c ./src/smtpd/smtpd.c *** /var/tmp/postfix-2.4.3/src/smtpd/smtpd.c Sat Mar 17 13:59:38 2007 --- ./src/smtpd/smtpd.c Tue Jul 31 11:35:26 2007 *************** *** 1618,1624 **** if (SMTPD_STAND_ALONE(state) == 0) { if (smtpd_milters != 0 && (state->saved_flags & MILTER_SKIP_FLAGS) == 0) ! (void) milter_send(smtpd_milters, state->dest->stream); rec_fprintf(state->cleanup, REC_TYPE_TIME, REC_TYPE_TIME_FORMAT, REC_TYPE_TIME_ARG(state->arrival_time)); if (*var_filter_xport) --- 1618,1625 ---- if (SMTPD_STAND_ALONE(state) == 0) { if (smtpd_milters != 0 && (state->saved_flags & MILTER_SKIP_FLAGS) == 0) ! /* Send place-holder smtpd_milters list. */ ! (void) milter_dummy(smtpd_milters, state->cleanup); rec_fprintf(state->cleanup, REC_TYPE_TIME, REC_TYPE_TIME_FORMAT, REC_TYPE_TIME_ARG(state->arrival_time)); if (*var_filter_xport) *************** *** 2521,2526 **** --- 2522,2531 ---- */ if (state->cleanup) { if (SMTPD_STAND_ALONE(state) == 0) { + if (smtpd_milters != 0 + && (state->saved_flags & MILTER_SKIP_FLAGS) == 0) + /* Send actual smtpd_milters list. */ + (void) milter_send(smtpd_milters, state->cleanup); if (state->saved_flags) rec_fprintf(state->cleanup, REC_TYPE_FLGS, "%d", state->saved_flags); *************** *** 2735,2740 **** --- 2740,2764 ---- state->dest = 0; state->cleanup = 0; } + + /* + * XXX If we lose the cleanup server while it is editing a queue file, + * the Postfix SMTP server will be out of sync with Milter applications. + * Sending an ABORT to the Milters is not sufficient to restore + * synchronization, because there may be any number of Milter replies + * already in flight. Destroying and recreating the Milters (and faking + * the connect and ehlo events) is too much trouble for testing and + * maintenance. Workaround: force the Postfix SMTP server to hang up with + * a 421 response in the rare case that the cleanup server breaks AND + * that the remote SMTP client continues the session after end-of-data. + * + * XXX Should use something other than CLEANUP_STAT_WRITE when we lose + * contact with the cleanup server. This requires changes to the + * mail_stream module and its users (smtpd, qmqpd, perhaps sendmail). + * That is too much change for a stable release. + */ + if (smtpd_milters != 0 && (state->err & CLEANUP_STAT_WRITE) != 0) + state->access_denied = mystrdup("421 4.3.0 Mail system error"); /* * Handle any errors. One message may suffer from multiple errors, so diff -cr --new-file /var/tmp/postfix-2.4.3/src/smtpstone/qmqp-source.c ./src/smtpstone/qmqp-source.c *** /var/tmp/postfix-2.4.3/src/smtpstone/qmqp-source.c Sat Mar 17 13:59:38 2007 --- ./src/smtpstone/qmqp-source.c Tue Jul 31 12:40:47 2007 *************** *** 356,361 **** --- 356,368 ---- dequeue_connect(session); non_blocking(fd, BLOCKING); event_disable_readwrite(fd); + /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */ + if (sa->sa_family == AF_INET + #ifdef AF_INET6 + || sa->sa_family == AF_INET6 + #endif + ) + vstream_tweak_tcp(session->stream); send_data(session); } } diff -cr --new-file /var/tmp/postfix-2.4.3/src/smtpstone/smtp-source.c ./src/smtpstone/smtp-source.c *** /var/tmp/postfix-2.4.3/src/smtpstone/smtp-source.c Sat Mar 17 13:59:38 2007 --- ./src/smtpstone/smtp-source.c Tue Jul 31 12:41:41 2007 *************** *** 472,477 **** --- 472,484 ---- event_disable_readwrite(fd); event_enable_read(fd, read_banner, (char *) session); dequeue_connect(session); + /* Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE. */ + if (sa->sa_family == AF_INET + #ifdef AF_INET6 + || sa->sa_family == AF_INET6 + #endif + ) + vstream_tweak_tcp(session->stream); } } diff -cr --new-file /var/tmp/postfix-2.4.3/src/util/Makefile.in ./src/util/Makefile.in *** /var/tmp/postfix-2.4.3/src/util/Makefile.in Sat Mar 17 13:51:33 2007 --- ./src/util/Makefile.in Sun Jul 29 12:02:35 2007 *************** *** 30,36 **** username.c valid_hostname.c vbuf.c vbuf_print.c vstream.c \ vstream_popen.c vstring.c vstring_vstream.c watchdog.c writable.c \ write_buf.c write_wait.c sane_basename.c format_tv.c allspace.c \ ! allascii.c load_file.c killme_after.c OBJS = alldig.o allprint.o argv.o argv_split.o attr_clnt.o attr_print0.o \ attr_print64.o attr_print_plain.o attr_scan0.o attr_scan64.o \ attr_scan_plain.o auto_clnt.o base64_code.o basename.o binhash.o \ --- 30,36 ---- username.c valid_hostname.c vbuf.c vbuf_print.c vstream.c \ vstream_popen.c vstring.c vstring_vstream.c watchdog.c writable.c \ write_buf.c write_wait.c sane_basename.c format_tv.c allspace.c \ ! allascii.c load_file.c killme_after.c vstream_tweak.c OBJS = alldig.o allprint.o argv.o argv_split.o attr_clnt.o attr_print0.o \ attr_print64.o attr_print_plain.o attr_scan0.o attr_scan64.o \ attr_scan_plain.o auto_clnt.o base64_code.o basename.o binhash.o \ *************** *** 62,68 **** username.o valid_hostname.o vbuf.o vbuf_print.o vstream.o \ vstream_popen.o vstring.o vstring_vstream.o watchdog.o writable.o \ write_buf.o write_wait.o sane_basename.o format_tv.o allspace.o \ ! allascii.o load_file.o killme_after.o HDRS = argv.h attr.h attr_clnt.h auto_clnt.h base64_code.h binhash.h \ chroot_uid.h cidr_match.h clean_env.h connect.h ctable.h dict.h \ dict_cdb.h dict_cidr.h dict_db.h dict_dbm.h dict_env.h dict_ht.h \ --- 62,68 ---- username.o valid_hostname.o vbuf.o vbuf_print.o vstream.o \ vstream_popen.o vstring.o vstring_vstream.o watchdog.o writable.o \ write_buf.o write_wait.o sane_basename.o format_tv.o allspace.o \ ! allascii.o load_file.o killme_after.o vstream_tweak.o HDRS = argv.h attr.h attr_clnt.h auto_clnt.h base64_code.h binhash.h \ chroot_uid.h cidr_match.h clean_env.h connect.h ctable.h dict.h \ dict_cdb.h dict_cidr.h dict_db.h dict_dbm.h dict_env.h dict_ht.h \ *************** *** 1600,1605 **** --- 1600,1610 ---- vstream_popen.o: vbuf.h vstream_popen.o: vstream.h vstream_popen.o: vstream_popen.c + vstream_tweak.o: msg.h + vstream_tweak.o: sys_defs.h + vstream_tweak.o: vbuf.h + vstream_tweak.o: vstream.h + vstream_tweak.o: vstream_tweak.c vstring.o: msg.h vstring.o: mymalloc.h vstring.o: sys_defs.h diff -cr --new-file /var/tmp/postfix-2.4.3/src/util/vstream.h ./src/util/vstream.h *** /var/tmp/postfix-2.4.3/src/util/vstream.h Wed Feb 14 18:46:29 2007 --- ./src/util/vstream.h Tue Jul 31 09:20:47 2007 *************** *** 153,158 **** --- 153,164 ---- #define vstream_setjmp(stream) setjmp((stream)->jbuf[0]) #define vstream_longjmp(stream, val) longjmp((stream)->jbuf[0], (val)) + /* + * Tweaks and workarounds. + */ + extern int vstream_tweak_sock(VSTREAM *); + extern int vstream_tweak_tcp(VSTREAM *); + /* LICENSE /* .ad /* .fi diff -cr --new-file /var/tmp/postfix-2.4.3/src/util/vstream_tweak.c ./src/util/vstream_tweak.c *** /var/tmp/postfix-2.4.3/src/util/vstream_tweak.c Wed Dec 31 19:00:00 1969 --- ./src/util/vstream_tweak.c Tue Jul 31 11:01:49 2007 *************** *** 0 **** --- 1,139 ---- + /*++ + /* NAME + /* vstream_tweak 3 + /* SUMMARY + /* performance tweaks + /* SYNOPSIS + /* #include + /* + /* VSTREAM *vstream_tweak_sock(stream) + /* VSTREAM *stream; + /* + /* VSTREAM *vstream_tweak_tcp(stream) + /* VSTREAM *stream; + /* DESCRIPTION + /* vstream_tweak_sock() does a best effort to boost your + /* network performance on the specified generic stream. + /* + /* vstream_tweak_tcp() does a best effort to boost your + /* Internet performance on the specified TCP stream. + /* + /* Arguments: + /* .IP stream + /* The stream being boosted. + /* DIAGNOSTICS + /* Panics: interface violations. + /* LICENSE + /* .ad + /* .fi + /* The Secure Mailer license must be distributed with this software. + /* AUTHOR(S) + /* Wietse Venema + /* IBM T.J. Watson Research + /* P.O. Box 704 + /* Yorktown Heights, NY 10598, USA + /*--*/ + + /* System library. */ + + #include + #include + #include + #include + + /* Utility library. */ + + #include + #include + + /* Application-specific. */ + + #ifdef HAS_IPV6 + #define SOCKADDR_STORAGE struct sockaddr_storage + #else + #define SOCKADDR_STORAGE struct sockaddr + #endif + + /* vstream_tweak_sock - boost your generic network performance */ + + int vstream_tweak_sock(VSTREAM *fp) + { + SOCKADDR_STORAGE ss; + struct sockaddr *sa = (struct sockaddr *) & ss; + SOCKADDR_SIZE sa_length = sizeof(ss); + int ret; + + /* + * If the caller doesn't know if this socket is AF_LOCAL, AF_INET, etc., + * figure it out for them. + */ + if ((ret = getsockname(vstream_fileno(fp), sa, &sa_length)) >= 0) { + switch (sa->sa_family) { + #ifdef AF_INET6 + case AF_INET6: + #endif + case AF_INET: + ret = vstream_tweak_tcp(fp); + break; + } + } + return (ret); + } + + /* vstream_tweak_tcp - boost your TCP performance */ + + int vstream_tweak_tcp(VSTREAM *fp) + { + const char *myname = "vstream_tweak_tcp"; + int mss; + SOCKOPT_SIZE mss_len = sizeof(mss); + int err; + + /* + * Avoid Nagle delays when VSTREAM buffers are smaller than the MSS. + * + * Forcing TCP_NODELAY to be "always on" would hurt performance in the + * common case where VSTREAM buffers are larger than the MSS. + * + * Instead we ask the kernel what the current MSS is, and take appropriate + * action. Linux <= 2.2 getsockopt(TCP_MAXSEG) always returns zero (or + * whatever value was stored last with setsockopt()). + */ + if ((err = getsockopt(vstream_fileno(fp), IPPROTO_TCP, TCP_MAXSEG, + (char *) &mss, &mss_len)) < 0) { + msg_warn("%s: getsockopt TCP_MAXSEG: %m", myname); + return (err); + } + if (msg_verbose) + msg_info("%s: TCP_MAXSEG %d", myname, mss); + + /* + * Fix for recent Postfix versions: increase the VSTREAM buffer size if + * the VSTREAM buffer is smaller than the MSS. Note: the MSS may change + * when the route changes and IP path MTU discovery is turned on, so we + * choose a somewhat larger buffer. + */ + #ifdef VSTREAM_CTL_BUFSIZE + if (mss > 0) { + if (mss < __MAXINT__(ssize_t) /2) + mss *= 2; + vstream_control(fp, + VSTREAM_CTL_BUFSIZE, (ssize_t) mss, + VSTREAM_CTL_END); + } + + /* + * Workaround for older Postfix versions: turn on TCP_NODELAY if the + * VSTREAM buffer size is smaller than the MSS. + */ + #else + if (mss > VSTREAM_BUFSIZE) { + int nodelay = 0; + + if ((err = setsockopt(vstream_fileno(fp), IPPROTO_TCP, TCP_NODELAY, + (char *) &nodelay, sizeof(nodelay))) < 0) + msg_warn("%s: setsockopt TCP_NODELAY: %m", myname); + } + #endif + return (err); + } diff -cr --new-file /var/tmp/postfix-2.4.3/src/xsasl/xsasl_cyrus_client.c ./src/xsasl/xsasl_cyrus_client.c *** /var/tmp/postfix-2.4.3/src/xsasl/xsasl_cyrus_client.c Mon Nov 27 17:18:58 2006 --- ./src/xsasl/xsasl_cyrus_client.c Wed Jul 11 08:35:45 2007 *************** *** 66,71 **** --- 66,76 ---- #include /* + * Global library + */ + #include + + /* * Application-specific */ #include *************** *** 329,335 **** if ((sasl_status = SASL_CLIENT_NEW(service, server, NULL_CLIENT_ADDR, NULL_SERVER_ADDR, ! custom_callbacks, NULL_SECFLAGS, &sasl_conn)) != SASL_OK) { msg_warn("per-session SASL client initialization: %s", xsasl_cyrus_strerror(sasl_status)); --- 334,341 ---- if ((sasl_status = SASL_CLIENT_NEW(service, server, NULL_CLIENT_ADDR, NULL_SERVER_ADDR, ! var_cyrus_sasl_authzid ? custom_callbacks : ! custom_callbacks + 1, NULL_SECFLAGS, &sasl_conn)) != SASL_OK) { msg_warn("per-session SASL client initialization: %s", xsasl_cyrus_strerror(sasl_status));