diff --git a/postfix/.indent.pro b/postfix/.indent.pro index c229c2ce6..5951928c3 100644 --- a/postfix/.indent.pro +++ b/postfix/.indent.pro @@ -57,6 +57,7 @@ -TDELIVER_REQUEST -TDELTA_TIME -TDICT +-TDICT_CACHE -TDICT_CDBM -TDICT_CDBQ -TDICT_CIDR diff --git a/postfix/HISTORY b/postfix/HISTORY index 2cee54e8d..3911a4883 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -15453,7 +15453,7 @@ Apologies for any names omitted. 20091023 - Feature: specify "smtp_command_filter = pcre:/file/name" + Feature: specify "smtpd_command_filter = pcre:/file/name" to replace remote SMTP client commands before they are executed by the Postfix SMTP server. This a last-resort tool to fix inter-operability problems. See examples in @@ -15563,3 +15563,42 @@ Apologies for any names omitted. Cleanup: the postscreen daemon now applies the permanent whitelist first. It is a safety feature that prevents mail from being blocked. File: postscreeb/postscreen.c. + +20091224 + + Bugfix (introduced 20041215): dict_dbm_sequence() did not + release the shared lock when the end of the sequence was + reached. File: util/dict_dbm.c. + +20091227 + + Cleanup: postscreen and verify periodic cache cleanup + (default: 12 hours after the previous cache cleanup run). + This is based on a new dict_cache(3) module that implements + a generalized version of the tlsmgr(8) cache maintenance + code. Once the new dict_cache(3) code is burned in, the + tlsmgr(8) will be migrated to it. See the RELEASE_NOTES for + user interface details. Files: util/htable.[hc], util/dict_ht.c, + util/dict_cache.[hc], postscreen/postscreen.c, verify/verify.c. + + Bugfix: the event handler starved I/O events when a timer + call-back routine scheduled a zero-delay timer request. + This bug was exposed when adding the new dict_cache(3) + module for cache expiration. File: util/events.c. + +20091228 + + Cleanup: postscreen and verify periodic cache cleanup is + now optional (specify a null time interval between cache + cleanup runs). + +20091229 + + Cleanup: the address_verify_poll_count default parameter + value is now stress-dependent, so that the Postfix SMTP + server will not wait (up to 6 seconds) for the address + verification result. File: global/mail_params.h. + + Final slution for the I/O event starvation problem when a + timer call-back schedules a zero-delay timer request. File: + util/events.c. diff --git a/postfix/README_FILES/SMTPD_PROXY_README b/postfix/README_FILES/SMTPD_PROXY_README index 27e3eb762..8aadb4a9a 100644 --- a/postfix/README_FILES/SMTPD_PROXY_README +++ b/postfix/README_FILES/SMTPD_PROXY_README @@ -36,23 +36,28 @@ This document describes the following topics: PPrriinncciipplleess ooff ooppeerraattiioonn -The before-filter Postfix SMTP server accepts connections from the Internet and -does the usual relay access control, SASL authentication, TLS negotiation, RBL -lookups, rejecting non-existent sender or recipient addresses, etc. The before- -queue filter receives unfiltered mail content from Postfix and does one of the -following: +As shown in the diagram above, the before-queue filter sits between two Postfix +SMTP server processes. - 1. Re-inject the mail back into Postfix via SMTP, perhaps after changing its - content and/or destination. + * The before-filter Postfix SMTP server accepts connections from the Internet + and does the usual relay access control, SASL authentication, TLS + negotiation, RBL lookups, rejecting non-existent sender or recipient + addresses, etc. - 2. Discard or quarantine the mail. + * The before-queue filter receives unfiltered mail content from Postfix and + does one of the following: - 3. Reject the mail by sending a suitable SMTP status code back to Postfix. - Postfix passes the status back to the remote SMTP client. This way, Postfix - does not have to send a bounce message. + 1. Re-inject the mail back into Postfix via SMTP, perhaps after changing + its content and/or destination. -The after-filter Postfix SMTP server receives mail from the content filter. -From then on Postfix processes the mail as usual. + 2. Discard or quarantine the mail. + + 3. Reject the mail by sending a suitable SMTP status code back to Postfix. + Postfix passes the status back to the remote SMTP client. This way, + Postfix does not have to send a bounce message. + + * The after-filter Postfix SMTP server receives mail from the content filter. + From then on Postfix processes the mail as usual. The before-queue content filter described here works just like the after-queue content filter described in the FILTER_README document. In many cases you can diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES index a7cba8714..95f1d77df 100644 --- a/postfix/RELEASE_NOTES +++ b/postfix/RELEASE_NOTES @@ -14,6 +14,33 @@ specifies the release date of a stable release or snapshot release. If you upgrade from Postfix 2.5 or earlier, read RELEASE_NOTES-2.6 before proceeding. +Incompatibility with snapshot 20091229 +====================================== + +The verify(8) service now uses a persistent cache by default +(address_verify_map = btree:$data_directory/verify_cache). To +disable, specify "address_verify_map =" in main.cf. + +When periodic cache cleanup is enabled (the default), the postscreen(8) +and verify(8) servers now require that their cache databases support +the "delete" and "sequence" operations. To disable periodic cache +cleanup specify a zero xxx_cache_cleanup_interval. + +Major changes with snapshot 20091229 +==================================== + +Periodic cache cleanup for the postscreen(8) and verify(8) cache +databases. The time between cache cleanup runs is controlled with +the address_verify_cache_cleanup_interval (default: 12h) and +postscreen_cache_cleanup_interval (default: 12h) parameters. Cache +cleanup increases the database access latency, so this should not +be run more often than necessary. + +In addition, the postscreen_cache_retention_time (default: 1d) +parameter specifies how long to keep an expired entry in the cache. +This prevents a client from being logged as "NEW" after its record +expired only a little while ago. + Incompatibility with snapshot 20091209 ====================================== @@ -112,11 +139,12 @@ without blocking mail: 1 - Comment out the "smtp inet ... smtpd" service in master.cf, including any "-o parameter=value" entries that follow. -2 - Uncomment the new "smtpd pass ... smtpd" service in master.cf. +2 - Uncomment the new "smtpd pass ... smtpd" service in master.cf, + and duplicate any "-o parameter=value" entries from the smtpd + service that was commented out in step 1. 3 - Uncomment the the new "smtp inet ... postscreen" service in - master.cf, and duplicate any "-o parameter=value" entries from - the smtpd service that was commented out in step 1. + master.cf. 4 - Uncomment the new "dnsblog unix ... dnsblog" service in master.cf. This service does DNSBL lookups for postscreen(8) diff --git a/postfix/WISHLIST b/postfix/WISHLIST index 6430c0a72..38337c5cf 100644 --- a/postfix/WISHLIST +++ b/postfix/WISHLIST @@ -2,11 +2,25 @@ Wish list: Remove this file from the stable release. + It would be nice if the generic dict_cache(3) cache manager + could postpone process suicide until cache cleanup is + completed (but that is not possible when postscreen forks + into the background to finish already-accepted connections). + + When postscreen drops a connection, a 521 "greeting" should + be of the form "521 servername..." and not have an enhanced + status code. The "521 5.7.1" form can be used after EHLO. + Of course no spammer is going to complain about Postfix + SMTP compliance. + Find a place to document all the mail routing mechanisms in one place so people can figure out how Postfix works. owner-listname does not work for shell commands. + Investigate viability of Sendmail socket maps (the moral + equivalent of tcp_table(5)), and dns maps. + The BCC action is marked "not stable", perhaps because people would also expect BCC actions in header/body_checks. How much would it take to make the queue file editing code diff --git a/postfix/html/SMTPD_PROXY_README.html b/postfix/html/SMTPD_PROXY_README.html index 6fc463c22..52702112e 100644 --- a/postfix/html/SMTPD_PROXY_README.html +++ b/postfix/html/SMTPD_PROXY_README.html @@ -108,11 +108,18 @@ filter

Principles of operation

-

The before-filter Postfix SMTP server accepts connections from the +

As shown in the diagram above, the before-queue filter sits +between two Postfix SMTP server processes.

+ + +

The before-queue content filter described here works just like the after-queue content filter described in the FILTER_README document. In many cases you can use the same software, within the diff --git a/postfix/html/cleanup.8.html b/postfix/html/cleanup.8.html index ff8859c1f..70e5e4098 100644 --- a/postfix/html/cleanup.8.html +++ b/postfix/html/cleanup.8.html @@ -58,8 +58,10 @@ CLEANUP(8) CLEANUP(8) RFC 822 (ARPA Internet Text Messages) RFC 2045 (MIME: Format of Internet Message Bodies) RFC 2046 (MIME: Media Types) + RFC 2822 (Internet Message Format) RFC 3463 (Enhanced Status Codes) RFC 3464 (Delivery status notifications) + RFC 5322 (Internet Message Format) DIAGNOSTICS Problems and transactions are logged to syslogd(8). diff --git a/postfix/html/postconf.5.html b/postfix/html/postconf.5.html index 9465bd00c..83c9a2abe 100644 --- a/postfix/html/postconf.5.html +++ b/postfix/html/postconf.5.html @@ -119,6 +119,23 @@ Do not change this unless you have a complete understanding of address_verify_cache_cleanup_interval +(default: 12h)

+ +

The amount of time between verify(8) cache cleanup runs. Cache +cleanup increases the load on the cache database and should therefore +not be run frequently. This feature requires that the cache database +supports the "delete" and "sequence" operators. Specify a zero +interval to disable cache cleanup.

+ +

Time units: s (seconds), m (minutes), h (hours), d (days), w +(weeks).

+ +

This feature is available in Postfix 2.7.

+ +
address_verify_default_transport @@ -249,7 +266,7 @@ This feature is available in Postfix 2.1 and later.
address_verify_poll_count -(default: 3)
+(default: see "postconf -d" output)

How many times to query the verify(8) service for the completion @@ -257,12 +274,16 @@ of an address verification request in progress.

-The default poll count is 3. +With Postfix version 2.7 and later, the SMTP server polls the +verify(8) service up to three times under non-overload conditions, +and only once when under overload. With earlier Postfix versions, +the SMTP server always polls the verify(8) service up to three +times.

Specify 1 to implement a crude form of greylisting, that is, always -defer the first delivery request for a never seen before address. +defer the first delivery request for a new address.

@@ -6561,6 +6582,23 @@ never uses the remote SMTP client hostname.

This feature is available in Postfix 2.7.

+
+ +
postscreen_cache_cleanup_interval +(default: 12h)
+ +

The amount of time between postscreen(8) cache cleanup runs. +Cache cleanup increases the load on the cache database and should +therefore not be run frequently. This feature requires that the +cache database supports the "delete" and "sequence" operators. +Specify a zero interval to disable cache cleanup.

+ +

Time units: s (seconds), m (minutes), h (hours), d (days), w +(weeks).

+ +

This feature is available in Postfix 2.7.

+ +
postscreen_cache_map @@ -6571,6 +6609,22 @@ never uses the remote SMTP client hostname.

This feature is available in Postfix 2.7.

+ + +
postscreen_cache_retention_time +(default: 1d)
+ +

The amount of time that postscreen(8) will cache an expired +temporary whitelist entry before it is removed. This prevents clients +from being logged as "NEW" just because their cache entry expired +an hour ago.

+ +

Time units: s (seconds), m (minutes), h (hours), d (days), w +(weeks).

+ +

This feature is available in Postfix 2.7.

+ +
postscreen_cache_ttl @@ -6579,9 +6633,9 @@ never uses the remote SMTP client hostname.

The amount of time that postscreen(8) will cache a decision for a specific SMTP client IP address. During this time, the client IP address is excluded from tests. If possible, expired decisions are -renewed silently. Specify a non-zero time value (an integral value -plus an optional one-letter suffix that specifies the time unit). -

+renewed automatically. Specify a non-zero time value (an integral +value plus an optional one-letter suffix that specifies the time +unit).

Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).

@@ -6661,7 +6715,8 @@ IP address.

postscreen_greet_banner (default: $smtpd_banner)
-

The text in the optional "220-text..." server response that +

The text in the optional "220-text..." server +response that postscreen(8) sends ahead of the real Postfix SMTP server's "220 text..." response, in an attempt to confuse bad SMTP clients so that they speak before their turn (pre-greet). Specify an empty @@ -8905,7 +8960,7 @@ invalid responses.