]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.6-20080123
authorWietse Venema <wietse@porcupine.org>
Wed, 23 Jan 2008 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:33:54 +0000 (06:33 +0000)
24 files changed:
postfix/HISTORY
postfix/README_FILES/QSHAPE_README
postfix/RELEASE_NOTES-2.5
postfix/WISHLIST
postfix/conf/postfix-files
postfix/html/QSHAPE_README.html
postfix/html/oqmgr.8.html
postfix/html/postconf.5.html
postfix/html/qmgr.8.html
postfix/man/man5/postconf.5
postfix/man/man8/oqmgr.8
postfix/man/man8/qmgr.8
postfix/mantools/postlink
postfix/proto/QSHAPE_README.html
postfix/proto/postconf.proto
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/oqmgr/qmgr.c
postfix/src/postconf/auto.awk
postfix/src/qmgr/qmgr.c
postfix/src/smtp/smtp_sasl_auth_cache.c
postfix/src/util/sane_accept.c
postfix/src/util/sane_connect.c
postfix/src/util/sane_socketpair.c

index 29af59cdd00cd943541dd75437b9e50416f2d748..59862c25a44a49c0a370037f03adc75d65210bff 100644 (file)
@@ -13870,7 +13870,7 @@ Apologies for any names omitted.
 20071202
 
        Feature: output rate control. For example, specify
-       "smtp_delivery_rate_delay = 5m" to insert a five-minute
+       "smtp_destination_rate_delay = 5m" to insert a five-minute
        delay between deliveries. This was an opportunity to define
        the mutually exclusive states that a queue can have, and
        to detect invalid transitions.  This will make adding new
@@ -14270,3 +14270,10 @@ Apologies for any names omitted.
 
        Bugfix (introduced 20080112): missing #ifdef for the SASL
        login failure cache. File: smtp/smtp_sasl_auth_cache.h.
+
+20080123
+
+       Name fix: renamed the mumble_delivery_rate_delay parameter
+       to mumble_destination_rate_delay, because it really is a
+       per-destination feature. With this change we keep the option
+       of implementing a future per-transport rate delay.
index 05c546a87bf634a30b4efe32a0e6cc5cdb750ef5..3e8877caab008e686551349c1ac374320c4448b3 100644 (file)
@@ -290,54 +290,121 @@ If one finds oneself needing to deliver a high volume of mail to a destination
 that exhibits frequent brief bursts of errors and connection caching does not
 solve the problem, there is a subtle workaround.
 
-  * In master.cf set up a dedicated clone of the "smtp" transport for the
-    destination in question.
+  * Postfix version 2.5 and later:
 
-  * In master.cf configure a reasonable process limit for the transport (a
-    number in the 10-20 range is typical).
+      o In master.cf set up a dedicated clone of the "smtp" transport for the
+        destination in question. In the example below we will call it
+        "fragile".
 
-  * IMPORTANT!!! In main.cf configure a very large initial and destination
-    concurrency limit for this transport (say 2000).
+      o In master.cf configure a reasonable process limit for the cloned smtp
+        transport (a number in the 10-20 range is typical).
 
-    /etc/postfix/main.cf:
-        initial_destination_concurrency = 2000
-        transportname_destination_concurrency_limit = 2000
+      o IMPORTANT!!! In main.cf configure a large per-destination pseudo-cohort
+        failure limit for the cloned smtp transport.
 
-    Where transportname is the name of the master.cf entry in question.
+        /etc/postfix/main.cf:
+            transport_maps = hash:/etc/postfix/transport
+            fragile_destination_concurrency_failed_cohort_limit = 100
+            fragile_destination_concurrency_limit = 20
 
-The effect of this surprising configuration is that up to 2000 consecutive
-errors are tolerated without marking the destination dead, while the total
-concurrency remains reasonable (10-20 processes). This trick is only for a very
-specialized situation: high volume delivery into a channel with multi-error
-bursts that is capable of high throughput, but is repeatedly throttled by the
-bursts of errors.
+        /etc/postfix/transport:
+            example.com  fragile:
+
+        /etc/postfix/master.cf:
+            # service type  private unpriv  chroot  wakeup  maxproc command
+            fragile   unix     -       -       n       -      20    smtp
+
+        See also the documentation for
+        default_destination_concurrency_failed_cohort_limit and
+        default_destination_concurrency_limit.
+
+  * Earlier Postfix versions:
+
+      o In master.cf set up a dedicated clone of the "smtp" transport for the
+        destination in question. In the example below we will call it
+        "fragile".
+
+      o In master.cf configure a reasonable process limit for the transport (a
+        number in the 10-20 range is typical).
+
+      o IMPORTANT!!! In main.cf configure a very large initial and destination
+        concurrency limit for this transport (say 2000).
+
+        /etc/postfix/main.cf:
+            transport_maps = hash:/etc/postfix/transport
+            initial_destination_concurrency = 2000
+            fragile_destination_concurrency_limit = 2000
+
+        /etc/postfix/transport:
+            example.com  fragile:
+
+        /etc/postfix/master.cf:
+            # service type  private unpriv  chroot  wakeup  maxproc command
+            fragile   unix     -       -       n       -      20    smtp
+
+        See also the documentation for default_destination_concurrency_limit.
+
+The effect of this configuration is that up to 2000 consecutive errors are
+tolerated without marking the destination dead, while the total concurrency
+remains reasonable (10-20 processes). This trick is only for a very specialized
+situation: high volume delivery into a channel with multi-error bursts that is
+capable of high throughput, but is repeatedly throttled by the bursts of
+errors.
 
 When a destination is unable to handle the load even after the Postfix process
 limit is reduced to 1, a desperate measure is to insert brief delays between
 delivery attempts.
 
-  * In the transport map entry for the problem destination, specify a dead host
-    as the primary nexthop.
+  * Postfix version 2.5 and later:
+
+      o In master.cf set up a dedicated clone of the "smtp" transport for the
+        problem destination. In the example below we call it "slow".
+
+      o In main.cf configure a short delay between deliveries to the same
+        destination.
+
+        /etc/postfix/main.cf:
+            transport_maps = hash:/etc/postfix/transport
+            slow_destination_rate_delay = 1
+
+        /etc/postfix/transport:
+            example.com  slow:
+
+        /etc/postfix/master.cf:
+            # service type  private unpriv  chroot  wakeup  maxproc command
+            slow      unix     -       -       n       -       -    smtp
+
+    See also the documentation for default_destination_rate_delay.
+
+    This solution forces the Postfix smtp(8) client to wait for
+    $slow_destination_rate_delay seconds between deliveries to the same
+    destination.
+
+  * Earlier Postfix versions:
+
+      o In the transport map entry for the problem destination, specify a dead
+        host as the primary nexthop.
 
-  * In the master.cf entry for the transport specify the problem destination as
-    the fallback_relay and specify a small smtp_connect_timeout value.
+      o In the master.cf entry for the transport specify the problem
+        destination as the fallback_relay and specify a small
+        smtp_connect_timeout value.
 
-    /etc/postfix/transport:
-        problem.example.com  slow:[dead.host]
+        /etc/postfix/main.cf:
+            transport_maps = hash:/etc/postfix/transport
 
-    /etc/postfix/master.cf:
-        # service type  private unpriv  chroot  wakeup  maxproc command
-        slow      unix     -       -       n       -       1    smtp
-            -o fallback_relay=problem.example.com
-            -o smtp_connect_timeout=1
+        /etc/postfix/transport:
+            example.com  slow:[dead.host]
 
-This solution forces the Postfix smtp(8) client to wait for
-$smtp_connect_timeout seconds between deliveries. The solution depends on
-Postfix connection management details, and needs to be updated when SMTP
-connection caching is introduced.
+        /etc/postfix/master.cf:
+            # service type  private unpriv  chroot  wakeup  maxproc command
+            slow      unix     -       -       n       -       1    smtp
+                -o fallback_relay=problem.example.com
+                -o smtp_connect_timeout=1
+                -o smtp_cache_connection=no
 
-Hopefully a more elegant solution to these problems will be found in the
-future.
+    This solution forces the Postfix smtp(8) client to wait for
+    $smtp_connect_timeout seconds between deliveries. The connection caching
+    feature is disabled to prevent the client from skipping over the dead host.
 
 P\bPo\bos\bst\btf\bfi\bix\bx q\bqu\bue\beu\bue\be d\bdi\bir\bre\bec\bct\bto\bor\bri\bie\bes\bs
 
index a8730c4b440cb3d37a7027310ae070a65186631d..f560d3b5dca38ac95424cc1df1ce8479bc6a9c2d 100644 (file)
@@ -220,9 +220,9 @@ easier to find. This document describes the "mail sending" side
 only.
 
 [Feature 20071202] Output rate control in the queue manager. For
-example, specify "smtp_delivery_rate_delay = 5m", to pause five
+example, specify "smtp_destination_rate_delay = 5m", to pause five
 minutes between message deliveries. More information in the postconf(5)
-manual under "default_delivery_rate_delay".
+manual under "default_destination_rate_delay".
 
 Major changes - smtp client
 ---------------------------
index 7cafb5ccd9f70902b1471ef76f421a19643e0f1c..854c8987450b94351c448340a2e194dd329922b1 100644 (file)
@@ -1,13 +1,16 @@
 Wish list:
 
+       Make adding Date/From/Message-ID headers dependent on local
+       rewrite context?
+
        Write delivery rate delay example (which _README?) and auth
        failure cache example (SASL_README). Then include them in
        SOHO_README.
 
-       See if "pickup =o content_filter=smtp:127.0.0.1" can be
-       made a viable alternative to the use of non_smtpd_milters.
+       See if "pickup -o content_filter=smtp:127.0.0.1" can be a
+       viable alternative to the use of non_smtpd_milters.
 
-       Consolidate duplicated code *_server_accept_{pass,inet}().
+       Consolidate duplicated code in *_server_accept_{pass,inet}().
 
        Consolidate duplicated code in {inet,unix,upass}_trigger.c.
 
index 7690afc9056fa91d86322b63c2df99339e53ce49..9bd905f8cd16fe9863d94afc0d00a72cd6b3cddc 100644 (file)
@@ -192,10 +192,10 @@ $manpage_directory/man8/verify.8:f:root:-:644
 $manpage_directory/man8/virtual.8:f:root:-:644
 $sample_directory/sample-aliases.cf:f:root:-:644:o
 $sample_directory/sample-auth.cf:f:root:-:644:o
-$sample_directory/sample-canonical.cf:f:root:-:644:o:o
+$sample_directory/sample-canonical.cf:f:root:-:644:o
 $sample_directory/sample-compatibility.cf:f:root:-:644:o
 $sample_directory/sample-debug.cf:f:root:-:644:o
-$sample_directory/sample-filter.cf:f:root:-:644:o:o
+$sample_directory/sample-filter.cf:f:root:-:644:o
 $sample_directory/sample-flush.cf:f:root:-:644:o
 $sample_directory/sample-ipv6.cf:f:root:-:644:o
 $sample_directory/sample-ldap.cf:f:root:-:644:o
@@ -203,15 +203,15 @@ $sample_directory/sample-lmtp.cf:f:root:-:644:o
 $sample_directory/sample-local.cf:f:root:-:644:o
 $sample_directory/sample-mime.cf:f:root:-:644:o
 $sample_directory/sample-misc.cf:f:root:-:644:o
-$sample_directory/sample-pcre-access.cf:f:root:-:644:o:o
-$sample_directory/sample-pcre-body.cf:f:root:-:644:o:o
-$sample_directory/sample-pcre-header.cf:f:root:-:644:o:o
+$sample_directory/sample-pcre-access.cf:f:root:-:644:o
+$sample_directory/sample-pcre-body.cf:f:root:-:644:o
+$sample_directory/sample-pcre-header.cf:f:root:-:644:o
 $sample_directory/sample-pgsql-aliases.cf:f:root:-:644:o
 $sample_directory/sample-qmqpd.cf:f:root:-:644:o
 $sample_directory/sample-rate.cf:f:root:-:644:o
-$sample_directory/sample-regexp-access.cf:f:root:-:644:o:o
-$sample_directory/sample-regexp-body.cf:f:root:-:644:o:o
-$sample_directory/sample-regexp-header.cf:f:root:-:644:o:o
+$sample_directory/sample-regexp-access.cf:f:root:-:644:o
+$sample_directory/sample-regexp-body.cf:f:root:-:644:o
+$sample_directory/sample-regexp-header.cf:f:root:-:644:o
 $sample_directory/sample-relocated.cf:f:root:-:644:o
 $sample_directory/sample-resource.cf:f:root:-:644:o
 $sample_directory/sample-rewrite.cf:f:root:-:644:o
index 905bc5ebbc689e4ca8c03b80698a26197252540a..7f295ec3651e3f374e1a77327e524e7f6ee98275 100644 (file)
@@ -409,8 +409,47 @@ caching does not solve the problem, there is a subtle workaround. </p>
 
 <ul>
 
+<li> <p> Postfix version 2.5 and later: </p>
+
+<ul>
+
+<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp" transport
+for the destination in question. In the example below we will call
+it "fragile". </p>
+
+<li> <p> In <a href="master.5.html">master.cf</a> configure a reasonable process limit for the
+cloned smtp transport (a number in the 10-20 range is typical). </p>
+
+<li> <p> IMPORTANT!!! In <a href="postconf.5.html">main.cf</a> configure a large per-destination
+pseudo-cohort failure limit for the cloned smtp transport. </p>
+
+<pre>
+/etc/postfix/<a href="postconf.5.html">main.cf</a>:
+    <a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
+    fragile_destination_concurrency_failed_cohort_limit = 100
+    fragile_destination_concurrency_limit = 20
+
+/etc/postfix/transport:
+    example.com  fragile:
+
+/etc/postfix/<a href="master.5.html">master.cf</a>:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    fragile   unix     -       -       n       -      20    smtp
+</pre>
+
+<p> See also the documentation for
+<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">default_destination_concurrency_failed_cohort_limit</a> and
+<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concurrency_limit</a>. </p>
+
+</ul>
+
+<li> <p> Earlier Postfix versions: </p>
+
+<ul>
+
 <li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp"
-transport for the destination in question. </p>
+transport for the destination in question. In the example below
+we will call it "fragile". </p>
 
 <li> <p> In <a href="master.5.html">master.cf</a> configure a reasonable process limit for the
 transport (a number in the 10-20 range is typical). </p>
@@ -420,16 +459,26 @@ and destination concurrency limit for this transport (say 2000). </p>
 
 <pre>
 /etc/postfix/<a href="postconf.5.html">main.cf</a>:
+    <a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
     <a href="postconf.5.html#initial_destination_concurrency">initial_destination_concurrency</a> = 2000
-    <i>transportname</i>_destination_concurrency_limit = 2000
+    fragile_destination_concurrency_limit = 2000
+
+/etc/postfix/transport:
+    example.com  fragile:
+
+/etc/postfix/<a href="master.5.html">master.cf</a>:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    fragile   unix     -       -       n       -      20    smtp
 </pre>
 
-<p> Where <i>transportname</i> is the name of the <a href="master.5.html">master.cf</a> entry
-in question. </p>
+<p> See also the documentation for <a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concurrency_limit</a>.
+</p>
+
+</ul>
 
 </ul>
 
-<p> The effect of this surprising configuration is that up to 2000
+<p> The effect of this configuration is that up to 2000
 consecutive errors are tolerated without marking the destination
 dead, while the total concurrency remains reasonable (10-20
 processes). This trick is only for a very specialized situation:
@@ -443,6 +492,42 @@ insert brief delays between delivery attempts. </p>
 
 <ul> 
 
+<li> <p> Postfix version 2.5 and later: </p>
+
+<ul>
+
+<li> <p> In <a href="master.5.html">master.cf</a> set up a dedicated clone of the "smtp" transport
+for the problem destination. In the example below we call it "slow".
+</p>
+
+<li> <p> In <a href="postconf.5.html">main.cf</a> configure a short delay between deliveries to
+the same destination.  </p>
+
+<pre>
+/etc/postfix/<a href="postconf.5.html">main.cf</a>:
+    <a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
+    slow_destination_rate_delay = 1
+
+/etc/postfix/transport:
+    example.com  slow:
+
+/etc/postfix/<a href="master.5.html">master.cf</a>:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    slow      unix     -       -       n       -       -    smtp
+</pre>
+
+</ul>
+
+<p> See also the documentation for <a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>. </p>
+
+<p> This solution forces the Postfix <a href="smtp.8.html">smtp(8)</a> client to wait for
+$slow_destination_rate_delay seconds between deliveries to the same
+destination.  </p>
+
+<li> <p> Earlier Postfix versions: </p>
+
+<ul>
+
 <li> <p>  In the transport map entry for the problem destination,
 specify a dead host as the primary nexthop. </p>
 
@@ -451,25 +536,28 @@ problem destination as the <a href="postconf.5.html#fallback_relay">fallback_rel
 <a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> value. </p>
 
 <pre>
+/etc/postfix/<a href="postconf.5.html">main.cf</a>:
+    <a href="postconf.5.html#transport_maps">transport_maps</a> = hash:/etc/postfix/transport
+
 /etc/postfix/transport:
-    problem.example.com  slow:[dead.host]
+    example.com  slow:[dead.host]
 
 /etc/postfix/<a href="master.5.html">master.cf</a>:
     # service type  private unpriv  chroot  wakeup  maxproc command
     slow      unix     -       -       n       -       1    smtp
         -o <a href="postconf.5.html#fallback_relay">fallback_relay</a>=problem.example.com
         -o <a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a>=1
+        -o smtp_cache_connection=no
 </pre>
 
 </ul>
 
 <p> This solution forces the Postfix <a href="smtp.8.html">smtp(8)</a> client to wait for
-$<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> seconds between deliveries. The solution
-depends on Postfix connection management details, and needs to be
-updated when SMTP connection caching is introduced.  </p>
+$<a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> seconds between deliveries. The connection
+caching feature is disabled to prevent the client from skipping
+over the dead host.  </p>
 
-<p> Hopefully a more elegant solution to these problems will be
-found in the future. </p>
+</ul>
 
 <h2><a name="queues">Postfix queue directories</a></h2>
 
index 63f3625c1c5df6dc443233089248b9a74897bce3..47e56ddb02676df63e740d126d0d5b2c145c769a 100644 (file)
@@ -305,14 +305,15 @@ OQMGR(8)                                                              OQMGR(8)
 
        Available in Postfix version 2.5 and later:
 
-       <b><a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a> (0s)</b>
+       <b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
               The  default  amount  of  delay  that  is  inserted
               between individual deliveries to the same  destina-
               tion;  with  per-destination recipient limit &gt; 1, a
               destination is a domain, otherwise it is a  recipi-
               ent.
 
-       <b><a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a></b>
+       <b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a>         $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
+       <b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
               Idem, for delivery via the named message <i>transport</i>.
 
 <b>MISCELLANEOUS CONTROLS</b>
index f3ae20f90d34d661a1bc3998b02aaf2f7586950b..be2b7499ba2a75bb165df305a30785d4bc9d40c2 100644 (file)
@@ -1595,35 +1595,6 @@ Examples:
 </pre>
 
 
-</DD>
-
-<DT><b><a name="default_delivery_rate_delay">default_delivery_rate_delay</a>
-(default: 0s)</b></DT><DD>
-
-<p> The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit &gt; 1, a destination is a domain, otherwise it is a recipient.
-</p>
-
-<p> To enable the delay, specify a non-zero time value (an integral
-value plus an optional one-letter suffix that specifies the time
-unit). </p>
-
-<p> Time units: s (seconds), m (minutes), h (hours), d (days), w
-(weeks). The default time unit is s (seconds). </p>
-
-<p> NOTE: the delay is enforced by the queue manager. The delay
-timer state does not survive "postfix reload" or "postfix stop".
-</p>
-
-<p> Use <a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> to specify a
-transport-specific override, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
-name of the message delivery transport.
-</p>
-
-<p> This feature is available in Postfix 2.5 and later. </p>
-
-
 </DD>
 
 <DT><b><a name="default_delivery_slot_cost">default_delivery_slot_cost</a>
@@ -1875,6 +1846,35 @@ is the <a href="master.5.html">master.cf</a> name of the message delivery transp
 <p> This feature is available in Postfix 2.5 and later.  </p>
 
 
+</DD>
+
+<DT><b><a name="default_destination_rate_delay">default_destination_rate_delay</a>
+(default: 0s)</b></DT><DD>
+
+<p> The default amount of delay that is inserted between individual
+deliveries to the same destination; with per-destination recipient
+limit &gt; 1, a destination is a domain, otherwise it is a recipient.
+</p>
+
+<p> To enable the delay, specify a non-zero time value (an integral
+value plus an optional one-letter suffix that specifies the time
+unit). </p>
+
+<p> Time units: s (seconds), m (minutes), h (hours), d (days), w
+(weeks). The default time unit is s (seconds). </p>
+
+<p> NOTE: the delay is enforced by the queue manager. The delay
+timer state does not survive "postfix reload" or "postfix stop".
+</p>
+
+<p> Use <a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> to specify a
+transport-specific override, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
+name of the message delivery transport.
+</p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
+
+
 </DD>
 
 <DT><b><a name="default_destination_recipient_limit">default_destination_recipient_limit</a>
@@ -12798,18 +12798,6 @@ This feature is available in Postfix 2.1 and later.
 </p>
 
 
-</DD>
-
-<DT><b><a name="transport_delivery_rate_delay">transport_delivery_rate_delay</a>
-(default: $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a>)</b></DT><DD>
-
-<p> A transport-specific override for the <a href="postconf.5.html#default_recipient_refill_delay">default_recipient_refill_delay</a>
-parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a> name of
-the message delivery transport. </p>
-
-<p> This feature is available in Postfix 2.5 and later. </p>
-
-
 </DD>
 
 <DT><b><a name="transport_delivery_slot_cost">transport_delivery_slot_cost</a>
@@ -12890,6 +12878,18 @@ transport. </p>
 <p> This feature is available in Postfix 2.5 and later. </p>
 
 
+</DD>
+
+<DT><b><a name="transport_destination_rate_delay">transport_destination_rate_delay</a>
+(default: $<a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>)</b></DT><DD>
+
+<p> A transport-specific override for the <a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a>
+parameter value, where <i>transport</i> is the <a href="master.5.html">master.cf</a> name of
+the message delivery transport. </p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
+
+
 </DD>
 
 <DT><b><a name="transport_destination_recipient_limit">transport_destination_recipient_limit</a>
index d66594bd3d8f6d5d340ce452d14d5b4cd0f420d4..4a2b267831d3cba2e33dc51908c0ae6a5a2a4c32 100644 (file)
@@ -377,14 +377,15 @@ QMGR(8)                                                                QMGR(8)
 
        Available in Postfix version 2.5 and later:
 
-       <b><a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a> (0s)</b>
+       <b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
               The  default  amount  of  delay  that  is  inserted
               between individual deliveries to the same  destina-
               tion;  with  per-destination recipient limit &gt; 1, a
               destination is a domain, otherwise it is a  recipi-
               ent.
 
-       <b><a href="postconf.5.html#transport_delivery_rate_delay"><i>transport</i>_delivery_rate_delay</a> $<a href="postconf.5.html#default_delivery_rate_delay">default_delivery_rate_delay</a></b>
+       <b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a>         $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
+       <b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
               Idem, for delivery via the named message <i>transport</i>.
 
 <b>MISCELLANEOUS CONTROLS</b>
index b8bac10b328e8bafdfb757049383967ea9bc0988..474f1a8d11c7728830da10bd78eb1a0bf1ce3201 100644 (file)
@@ -886,7 +886,7 @@ default_database_type = dbm
 .fi
 .ad
 .ft R
-.SH default_delivery_rate_delay (default: 0s)
+.SH default_destination_rate_delay (default: 0s)
 The default amount of delay that is inserted between individual
 deliveries to the same destination; with per-destination recipient
 limit > 1, a destination is a domain, otherwise it is a recipient.
@@ -901,7 +901,7 @@ Time units: s (seconds), m (minutes), h (hours), d (days), w
 NOTE: the delay is enforced by the queue manager. The delay
 timer state does not survive "postfix reload" or "postfix stop".
 .PP
-Use \fItransport\fR_delivery_rate_delay to specify a
+Use \fItransport\fR_destination_rate_delay to specify a
 transport-specific override, where \fItransport\fR is the master.cf
 name of the message delivery transport.
 .PP
@@ -7938,8 +7938,8 @@ of mail deliveries and produces a mail delivery report when verbose
 delivery is requested with "\fBsendmail -v\fR".
 .PP
 This feature is available in Postfix 2.1 and later.
-.SH transport_delivery_rate_delay (default: $default_delivery_rate_delay)
-A transport-specific override for the default_recipient_refill_delay
+.SH transport_destination_rate_delay (default: $default_destination_rate_delay)
+A transport-specific override for the default_destination_rate_delay
 parameter value, where \fItransport\fR is the master.cf name of
 the message delivery transport.
 .PP
index 05f0d18d2904cf2516dd1c01175ad63d8e672e1b..0196a3abcbdef939dd6f20965a264fc66588d1f2 100644 (file)
@@ -275,11 +275,11 @@ The maximal time a bounce message is queued before it is considered
 undeliverable.
 .PP
 Available in Postfix version 2.5 and later:
-.IP "\fBdefault_delivery_rate_delay (0s)\fR"
+.IP "\fBdefault_destination_rate_delay (0s)\fR"
 The default amount of delay that is inserted between individual
 deliveries to the same destination; with per-destination recipient
 limit > 1, a destination is a domain, otherwise it is a recipient.
-.IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
+.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
 Idem, for delivery via the named message \fItransport\fR.
 .SH MISCELLANEOUS CONTROLS
 .ad
index 9b9ba7d6d9185fc5f7b5529d67b67eeb5fda8f8e..610c4ee63d89cb434871808b8360fa525233f09c 100644 (file)
@@ -323,11 +323,11 @@ The maximal time a bounce message is queued before it is considered
 undeliverable.
 .PP
 Available in Postfix version 2.5 and later:
-.IP "\fBdefault_delivery_rate_delay (0s)\fR"
+.IP "\fBdefault_destination_rate_delay (0s)\fR"
 The default amount of delay that is inserted between individual
 deliveries to the same destination; with per-destination recipient
 limit > 1, a destination is a domain, otherwise it is a recipient.
-.IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
+.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
 Idem, for delivery via the named message \fItransport\fR.
 .SH "MISCELLANEOUS CONTROLS"
 .na
index 15ea442187dc9208f23fe7dcd600da29997c77e0..07c43c01f76fcf5f2f274788f86689aef57fe22e 100755 (executable)
@@ -346,7 +346,7 @@ while (<>) {
     s;\bdefault_destination_concur[-</Bb>]*\n* *[<Bb>]*rency_positive_feedback\b;<a href="postconf.5.html#default_destination_concurrency_positive_feedback">$&</a>;g;
     s;\bdefault_destination_con[-</Bb>]*\n* *[<Bb>]*currency_failed_cohort_limit\b;<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">$&</a>;g;
     s;\bdestination_concurrency_feedback_debug\b;<a href="postconf.5.html#destination_concurrency_feedback_debug">$&</a>;g;
-    s;\bdefault_delivery_rate_delay\b;<a href="postconf.5.html#default_delivery_rate_delay">$&</a>;g;
+    s;\bdefault_destina[-</Bb>]*\n* *[<Bb>]*tion_rate_delay\b;<a href="postconf.5.html#default_destination_rate_delay">$&</a>;g;
 
     s;\bqmqpd_error_delay\b;<a href="postconf.5.html#qmqpd_error_delay">$&</a>;g;
     s;\bqmqpd_timeout\b;<a href="postconf.5.html#qmqpd_timeout">$&</a>;g;
@@ -649,7 +649,7 @@ while (<>) {
     s;(<i>transport</i>)(<b>)?(_recipient_refill_delay)\b;$2<a href="postconf.5.html#transport_recipient_refill_delay">$1$3</a>;g;
     s;(<i>transport</i>)(<b>)?(_recipient_refill_limit)\b;$2<a href="postconf.5.html#transport_recipient_refill_limit">$1$3</a>;g;
     s;(<i>transport</i>)(<b>)?(_time_limit)\b;$2<a href="postconf.5.html#transport_time_limit">$1$3</a>;g;
-    s;(<i>transport</i>)(<b>)?(_delivery_rate_delay)\b;$2<a href="postconf.5.html#transport_delivery_rate_delay">$1$3</a>;g;
+    s;(<i>transport</i>)(<b>)?(_destination_rate_delay)\b;$2<a href="postconf.5.html#transport_destination_rate_delay">$1$3</a>;g;
 
     # Undo hyperlinks of manual pages with the same name as parameters.
 
index 16394a138cc89aeafbfed5bf0fe325d95cff6c3d..2c82b4f6338677d171aee6c938b94383ea8f24bd 100644 (file)
@@ -409,8 +409,47 @@ caching does not solve the problem, there is a subtle workaround. </p>
 
 <ul>
 
+<li> <p> Postfix version 2.5 and later: </p>
+
+<ul>
+
+<li> <p> In master.cf set up a dedicated clone of the "smtp" transport
+for the destination in question. In the example below we will call
+it "fragile". </p>
+
+<li> <p> In master.cf configure a reasonable process limit for the
+cloned smtp transport (a number in the 10-20 range is typical). </p>
+
+<li> <p> IMPORTANT!!! In main.cf configure a large per-destination
+pseudo-cohort failure limit for the cloned smtp transport. </p>
+
+<pre>
+/etc/postfix/main.cf:
+    transport_maps = hash:/etc/postfix/transport
+    fragile_destination_concurrency_failed_cohort_limit = 100
+    fragile_destination_concurrency_limit = 20
+
+/etc/postfix/transport:
+    example.com  fragile:
+
+/etc/postfix/master.cf:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    fragile   unix     -       -       n       -      20    smtp
+</pre>
+
+<p> See also the documentation for
+default_destination_concurrency_failed_cohort_limit and
+default_destination_concurrency_limit. </p>
+
+</ul>
+
+<li> <p> Earlier Postfix versions: </p>
+
+<ul>
+
 <li> <p> In master.cf set up a dedicated clone of the "smtp"
-transport for the destination in question. </p>
+transport for the destination in question. In the example below
+we will call it "fragile". </p>
 
 <li> <p> In master.cf configure a reasonable process limit for the
 transport (a number in the 10-20 range is typical). </p>
@@ -420,16 +459,26 @@ and destination concurrency limit for this transport (say 2000). </p>
 
 <pre>
 /etc/postfix/main.cf:
+    transport_maps = hash:/etc/postfix/transport
     initial_destination_concurrency = 2000
-    <i>transportname</i>_destination_concurrency_limit = 2000
+    fragile_destination_concurrency_limit = 2000
+
+/etc/postfix/transport:
+    example.com  fragile:
+
+/etc/postfix/master.cf:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    fragile   unix     -       -       n       -      20    smtp
 </pre>
 
-<p> Where <i>transportname</i> is the name of the master.cf entry
-in question. </p>
+<p> See also the documentation for default_destination_concurrency_limit.
+</p>
+
+</ul>
 
 </ul>
 
-<p> The effect of this surprising configuration is that up to 2000
+<p> The effect of this configuration is that up to 2000
 consecutive errors are tolerated without marking the destination
 dead, while the total concurrency remains reasonable (10-20
 processes). This trick is only for a very specialized situation:
@@ -443,6 +492,42 @@ insert brief delays between delivery attempts. </p>
 
 <ul> 
 
+<li> <p> Postfix version 2.5 and later: </p>
+
+<ul>
+
+<li> <p> In master.cf set up a dedicated clone of the "smtp" transport
+for the problem destination. In the example below we call it "slow".
+</p>
+
+<li> <p> In main.cf configure a short delay between deliveries to
+the same destination.  </p>
+
+<pre>
+/etc/postfix/main.cf:
+    transport_maps = hash:/etc/postfix/transport
+    slow_destination_rate_delay = 1
+
+/etc/postfix/transport:
+    example.com  slow:
+
+/etc/postfix/master.cf:
+    # service type  private unpriv  chroot  wakeup  maxproc command
+    slow      unix     -       -       n       -       -    smtp
+</pre>
+
+</ul>
+
+<p> See also the documentation for default_destination_rate_delay. </p>
+
+<p> This solution forces the Postfix smtp(8) client to wait for
+$slow_destination_rate_delay seconds between deliveries to the same
+destination.  </p>
+
+<li> <p> Earlier Postfix versions: </p>
+
+<ul>
+
 <li> <p>  In the transport map entry for the problem destination,
 specify a dead host as the primary nexthop. </p>
 
@@ -451,25 +536,28 @@ problem destination as the fallback_relay and specify a small
 smtp_connect_timeout value. </p>
 
 <pre>
+/etc/postfix/main.cf:
+    transport_maps = hash:/etc/postfix/transport
+
 /etc/postfix/transport:
-    problem.example.com  slow:[dead.host]
+    example.com  slow:[dead.host]
 
 /etc/postfix/master.cf:
     # service type  private unpriv  chroot  wakeup  maxproc command
     slow      unix     -       -       n       -       1    smtp
         -o fallback_relay=problem.example.com
         -o smtp_connect_timeout=1
+        -o smtp_cache_connection=no
 </pre>
 
 </ul>
 
 <p> This solution forces the Postfix smtp(8) client to wait for
-$smtp_connect_timeout seconds between deliveries. The solution
-depends on Postfix connection management details, and needs to be
-updated when SMTP connection caching is introduced.  </p>
+$smtp_connect_timeout seconds between deliveries. The connection
+caching feature is disabled to prevent the client from skipping
+over the dead host.  </p>
 
-<p> Hopefully a more elegant solution to these problems will be
-found in the future. </p>
+</ul>
 
 <h2><a name="queues">Postfix queue directories</a></h2>
 
index 21c82d2e5303053792fce88cc3806f36580d1433..5e93d867564dd689df771fe6b02c97679919a3fa 100644 (file)
@@ -11382,7 +11382,7 @@ the message delivery transport. </p>
 
 <p> This feature is available in Postfix 2.4 and later. </p>
 
-%PARAM default_delivery_rate_delay 0s
+%PARAM default_destination_rate_delay 0s
 
 <p> The default amount of delay that is inserted between individual
 deliveries to the same destination; with per-destination recipient
@@ -11400,16 +11400,16 @@ unit). </p>
 timer state does not survive "postfix reload" or "postfix stop".
 </p>
 
-<p> Use <i>transport</i>_delivery_rate_delay to specify a
+<p> Use <i>transport</i>_destination_rate_delay to specify a
 transport-specific override, where <i>transport</i> is the master.cf
 name of the message delivery transport.
 </p>
 
 <p> This feature is available in Postfix 2.5 and later. </p>
 
-%PARAM transport_delivery_rate_delay $default_delivery_rate_delay
+%PARAM transport_destination_rate_delay $default_destination_rate_delay
 
-<p> A transport-specific override for the default_recipient_refill_delay
+<p> A transport-specific override for the default_destination_rate_delay
 parameter value, where <i>transport</i> is the master.cf name of
 the message delivery transport. </p>
 
index 55cecc7dd90d10ba9677004f47fbfcf364fc4898..b8b0caf80039e9d8e524627ceb503d96f06910cd 100644 (file)
@@ -2916,8 +2916,8 @@ extern int var_conc_cohort_limit;
 #define DEF_CONC_FDBACK_DEBUG  0
 extern bool var_conc_feedback_debug;
 
-#define VAR_DEST_RATE_DELAY    "default_delivery_rate_delay"
-#define _DEST_RATE_DELAY       "_delivery_rate_delay"
+#define VAR_DEST_RATE_DELAY    "default_destination_rate_delay"
+#define _DEST_RATE_DELAY       "_destination_rate_delay"
 #define DEF_DEST_RATE_DELAY    "0s"
 extern int var_dest_rate_delay;
 
index 06bbd42000b61a6e46d0ea6666fcffd271404a3d..d64340b885558ff75347660c5d07c005a56bb819 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20080116"
+#define MAIL_RELEASE_DATE      "20080123"
 #define MAIL_VERSION_NUMBER    "2.6"
 
 #ifdef SNAPSHOT
index d895cc78de04e4ad05bac4fa805d96801c8cb94d..e6b7a2cf04a0aeef80c522f38b7847777be57034 100644 (file)
 /*     undeliverable.
 /* .PP
 /*     Available in Postfix version 2.5 and later:
-/* .IP "\fBdefault_delivery_rate_delay (0s)\fR"
+/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
 /*     The default amount of delay that is inserted between individual
 /*     deliveries to the same destination; with per-destination recipient
 /*     limit > 1, a destination is a domain, otherwise it is a recipient.
-/* .IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
+/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
 /*     Idem, for delivery via the named message \fItransport\fR.
 /* .SH MISCELLANEOUS CONTROLS
 /* .ad
index 4b888da51c37baeb56c550db2712f7ee867ebcab..74e6401af4130a901eefa1ddf6b46514dd7cb8db 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
     vars["destination_concurrency_positive_feedback"] = "default_destination_concurrency_positive_feedback"
     vars["destination_recipient_limit"] = "default_destination_recipient_limit"
     vars["initial_destination_concurrency"] = "initial_destination_concurrency"
-    vars["delivery_rate_delay"] = "default_delivery_rate_delay"
+    vars["destination_rate_delay"] = "default_destination_rate_delay"
 
     # auto_table.h
 
index b3da982b10e72343507cc2651500236168906874..59bafb8b6adada7c97807b0e84df799c2ec36af0 100644 (file)
 /*     undeliverable.
 /* .PP
 /*     Available in Postfix version 2.5 and later:
-/* .IP "\fBdefault_delivery_rate_delay (0s)\fR"
+/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
 /*     The default amount of delay that is inserted between individual
 /*     deliveries to the same destination; with per-destination recipient
 /*     limit > 1, a destination is a domain, otherwise it is a recipient.
-/* .IP "\fItransport\fB_delivery_rate_delay $default_delivery_rate_delay
+/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
 /*     Idem, for delivery via the named message \fItransport\fR.
 /* MISCELLANEOUS CONTROLS
 /* .ad
index 9920850a1d484dfb76e99696cad06a7611ec3278..682c4fba3abda2ccea887ecae0c5a28f8c3fccfa 100644 (file)
@@ -132,11 +132,12 @@ SMTP_SASL_AUTH_CACHE *smtp_sasl_auth_cache_init(const char *map, int ttl)
      */
 #define CACHE_DICT_OPEN_FLAGS \
        (DICT_FLAG_DUP_REPLACE | DICT_FLAG_SYNC_UPDATE)
+#define PROXY_COLON    DICT_TYPE_PROXY ":"
+#define PROXY_COLON_LEN        (sizeof(PROXY_COLON) - 1)
 
-    if (strncmp(map, DICT_TYPE_PROXY, sizeof(DICT_TYPE_PROXY) - 1) != 0
-       || map[sizeof(DICT_TYPE_PROXY) - 1] != ':')
+    if (strncmp(map, PROXY_COLON, PROXY_COLON_LEN) != 0)
        msg_fatal("SASL authentication cache name \"%s\" must start with \""
-                 DICT_TYPE_PROXY "\":", map);
+                 PROXY_COLON, map);
 
     auth_cache = (SMTP_SASL_AUTH_CACHE *) mymalloc(sizeof(*auth_cache));
     auth_cache->dict = dict_open(map, O_CREAT | O_RDWR, CACHE_DICT_OPEN_FLAGS);
@@ -192,9 +193,9 @@ static char *smtp_sasl_auth_cache_make_value(const char *password,
     return (vstring_export(val_buf));
 }
 
-/* smtp_sasl_auth_cache_valid - validate auth failure cache value */
+/* smtp_sasl_auth_cache_valid_value - validate auth failure cache value */
 
-static int smtp_sasl_auth_cache_valid(SMTP_SASL_AUTH_CACHE *auth_cache,
+static int smtp_sasl_auth_cache_valid_value(SMTP_SASL_AUTH_CACHE *auth_cache,
                                              const char *entry,
                                              const char *password)
 {
@@ -235,7 +236,7 @@ int     smtp_sasl_auth_cache_find(SMTP_SASL_AUTH_CACHE *auth_cache,
 
     key = smtp_sasl_auth_cache_make_key(session->host, session->sasl_username);
     if ((entry = dict_get(auth_cache->dict, key)) != 0)
-       if ((valid = smtp_sasl_auth_cache_valid(auth_cache, entry,
+       if ((valid = smtp_sasl_auth_cache_valid_value(auth_cache, entry,
                                                session->sasl_passwd)) == 0)
            /* Remove expired, password changed, or malformed cache entry. */
            if (dict_del(auth_cache->dict, key) == 0)
index 613177c294bd155ddca83e0780a47bbeda0cdf05..b1e6670d6f5d62838f8ff1ad51e48406f0768e43 100644 (file)
@@ -18,8 +18,8 @@
 /*     workarounds may be enabled that depend on the socket type.
 /* BUGS
 /*     Bizarre systems may have other harmless error results. Such
-/*     systems encourage programers to ignore error results, and
-/*     penalizes programmers who code defensively.
+/*     systems encourage programmers to ignore error results, and
+/*     penalize programmers who code defensively.
 /* LICENSE
 /* .ad
 /* .fi
index b8286a7989a27560a4902ecbfc0951b49eac2edc..513f97a0311693ca9d0c8b3f004d3a0b7eafec16 100644 (file)
@@ -15,8 +15,8 @@
 /*     known harmless error results to EAGAIN.
 /* BUGS
 /*     Bizarre systems may have other harmless error results. Such
-/*     systems encourage programers to ignore error results, and
-/*     penalizes programmers who code defensively.
+/*     systems encourage programmers to ignore error results, and
+/*     penalize programmers who code defensively.
 /* LICENSE
 /* .ad
 /* .fi
index c1d3568d31ec2942c953949e01181e08c7151bbe..a889934c38e9ec471362c3e2d7d9c154922bdc43 100644 (file)
@@ -16,8 +16,8 @@
 /*     skips over silly error results such as EINTR.
 /* BUGS
 /*     Bizarre systems may have other harmless error results. Such
-/*     systems encourage programers to ignore error results, and
-/*     penalizes programmers who code defensively.
+/*     systems encourage programmers to ignore error results, and
+/*     penalize programmers who code defensively.
 /* LICENSE
 /* .ad
 /* .fi