]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.3-20051229
authorWietse Venema <wietse@porcupine.org>
Thu, 29 Dec 2005 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:32:01 +0000 (06:32 +0000)
16 files changed:
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/html/postconf.5.html
postfix/html/smtp.8.html
postfix/man/man5/postconf.5
postfix/man/man8/smtp.8
postfix/mantools/postlink
postfix/proto/postconf.proto
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/smtp/lmtp_params.c
postfix/src/smtp/smtp.c
postfix/src/smtp/smtp.h
postfix/src/smtp/smtp_chat.c
postfix/src/smtp/smtp_params.c
postfix/src/smtp/smtp_proto.c

index 34a838444d7de5e7f4dcf27b3be6ae559327dde3..0e687f07a59382cf31fa444b7df6d15191a0bb65 100644 (file)
@@ -11690,22 +11690,17 @@ Apologies for any names omitted.
        (example: sockaddr_to_hostaddr: Unknown error: success).
        File: util/myaddrinfo.c.
 
-20051228
-
-       Workaround: don't pipeline the DOT+QUIT commands in the
-       SMTP client. The 20050929 paranoia about malformed server
-       replies eliminated a rare occurrence of "lost mail" with
-       sites that mis-implement DOT+QUIT pipelining. However, we
-       now have a larger occurrence of repeated deliveries to sites
-       with different implementation errors.  
-
-       The default "smtp_pipeline_dot_quit = never" setting
-       eliminates the repeated deliveries at the cost of a small
-       performance loss with normal deliveries.  Other settings
-       are "always" (always pipeline the DOT+QUIT commands, when
-       pipelining is enabled) and "newmail" (pipeline DOT+QUIT
-       only when mail is newer than $minimal_backoff_time).
-       Files: smtp/smtp_proto.c, smtp/smtp.c.
+20051229
+
+       Workaround: when mail is still queued after 3000 seconds,
+       the SMTP client no longer pipelines the DOT+QUIT commands.
+       The 20050929 paranoia about malformed server replies
+       eliminated a rare occurrence of "lost mail" with sites that
+       mis-implement DOT+QUIT pipelining, but resulted in a larger
+       occurrence of repeated deliveries to sites with a different
+       DOT+QUIT pipelining bug. The time threshold is set with the
+       smtp_dot_quit_workaround_threshold_time parameter.  Files:
+       smtp/smtp_proto.c, smtp/smtp.c.
 
 Open problems:
 
index fd785d210b0b40edf0a61406aaae430199924225..9dec3fe0d30cd11e0ff88cb531aed06f52a2b067 100644 (file)
@@ -20,16 +20,16 @@ before proceeding.
 Incompatibility with snapshot 20051228
 ======================================
 
-New parameter "smtp_pipeline_dot_quit" (default: "never") to work
-around broken servers and firewalls.  After one documented case of
-lost mail, as of 20050929 Postfix is more paranoid about malformed
-SMTP server replies. Unfortuately this results in repeated delivery
-attempts with other broken systems.  To avoid this, the SMTP+LMTP
-client no longer pipelines the DOT+QUIT commands by default. Instead
-of "never" you can specify "always" (self-evident) or "newmail"
-(pipeline DOT+QUIT only when mail is newer than $minimal_backoff_time,
-so that the number of duplicate deliveries is limited).  More details
-are in the postconf(5) manual.
+New workaround to limit the number of repeated deliveries with
+servers or firewalls that mis-implement DOT+QUIT command pipelining.
+After one documented case of lost mail, as of 20050929 Postfix is
+more paranoid about malformed SMTP server replies. Unfortuately
+this results in repeated deliveries with other broken systems.  To
+limit the number of repeated deliveries, the SMTP client no longer
+pipelines the DOT+QUIT commands when mail is queued longer than the
+time specified with the smtp_dot_quit_workaround_threshold_time
+parameter (default: 3000s). More details are in the postconf(5)
+manual.
 
 Major changes with snapshot 20051222
 ====================================
index cabc84d9c336f056cb41977ae54df42faed16665..fb8c14ab457737594061a877968cd1e398630a75 100644 (file)
@@ -3253,6 +3253,15 @@ discard LHLO keywords selectively. </p>
 </ul>
 
 
+</DD>
+
+<DT><b><a name="lmtp_dot_quit_workaround_threshold_time">lmtp_dot_quit_workaround_threshold_time</a>
+(default: 3000s)</b></DT><DD>
+
+<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_dot_quit_workaround_threshold_time">smtp_dot_quit_workaround_threshold_time</a>
+configuration parameter.  See there for details. </p>
+
+
 </DD>
 
 <DT><b><a name="lmtp_enforce_tls">lmtp_enforce_tls</a>
@@ -3377,15 +3386,6 @@ parameter.  See there for details. </p>
 <p> This feature is available in Postfix 2.3 and later. </p>
 
 
-</DD>
-
-<DT><b><a name="lmtp_pipeline_dot_quit">lmtp_pipeline_dot_quit</a>
-(default: never)</b></DT><DD>
-
-<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_pipeline_dot_quit">smtp_pipeline_dot_quit</a>
-configuration parameter.  See there for details. </p>
-
-
 </DD>
 
 <DT><b><a name="lmtp_pix_workaround_delay_time">lmtp_pix_workaround_delay_time</a>
@@ -6678,6 +6678,39 @@ discard EHLO keywords selectively. </p>
 </ul>
 
 
+</DD>
+
+<DT><b><a name="smtp_dot_quit_workaround_threshold_time">smtp_dot_quit_workaround_threshold_time</a>
+(default: 3000s)</b></DT><DD>
+
+<p> How long a message must be queued before the "." + QUIT bug
+workaround is turned on for all deliveries; this limits the
+number of repeated deliveries with servers or firewalls that
+mis-implement END-OF-DATA + QUIT pipelining. </p>
+
+<p> When the workaround is turned on, the Postfix SMTP client will
+not send the QUIT command until it has received the server's
+END-OF-DATA reply.  This workaround incurs a small performance loss
+with delivery to sites that correctly implement SMTP command
+pipelining.  </p>
+
+<p> By default, the workaround is turned off for mail that is queued
+for less than 3000 seconds. In other words, the workaround is
+normally turned off for the first few delivery attempts of personal
+mail and of small mailing lists.  </p>
+
+<p> Specify 0 to enable this workaround upon the first delivery
+attempt, and specify a large value such as $<a href="postconf.5.html#maximal_queue_lifetime">maximal_queue_lifetime</a>
+to disable the workaround for practically all delivery attempts.
+</p>
+
+<p> Note: when the <a href="postconf.5.html#smtp_fallback_relay">smtp_fallback_relay</a> feature is used, there will
+be no second delivery attempt, and the workaround may have no effect.
+</p>
+
+<p> This feature is available in Postfix 2.3 and later. </p>
+
+
 </DD>
 
 <DT><b><a name="smtp_enforce_tls">smtp_enforce_tls</a>
@@ -6901,45 +6934,6 @@ complete the EHLO and TLS handshake (Postfix version 2.3 and later).  </p>
 <a href="postconf.5.html#smtp_always_send_ehlo">smtp_always_send_ehlo</a> parameter.  </p>
 
 
-</DD>
-
-<DT><b><a name="smtp_pipeline_dot_quit">smtp_pipeline_dot_quit</a>
-(default: never)</b></DT><DD>
-
-<p> When ESMTP command pipelining is enabled, whether or not the
-SMTP client will send the QUIT command before it has received the
-server's END-OF-DATA reply. </p>
-
-<p> Specify one of the following: </p>
-
-<dl>
-
-<dt> <b>always</b> </dt> <dd> Always pipeline the END-OF-DATA and
-QUIT commands.  With servers or firewalls that mis-implement
-END-OF-DATA + QUIT pipelining, mail will be delivered repeatedly
-until it expires in the queue.  </dd>
-
-<dt> <b>never</b> </dt> <dd> Wait for the server's END-OF-DATA reply
-before sending the QUIT command. This avoids repeated delivery
-attempts with servers and firewalls that mis-implement END-OF-DATA
-+ QUIT pipelining, at the cost of a small performance loss with
-sites that correctly implement SMTP. </dd>
-
-<dt> <b>newmail</b> </dt> <dd> Pipeline the END-OF-DATA and QUIT
-commands only when mail is newer than $<a href="postconf.5.html#minimal_backoff_time">minimal_backoff_time</a>.  This
-limits the number of repeated deliveries with servers and firewalls
-that mis-implement END-OF-DATA + QUIT pipelining, while avoiding
-the performance loss associated with the "never" setting for normal
-deliveries.  </dd>
-
-</dl>
-
-<p> Note: when <a href="postconf.5.html#smtp_fallback_relay">smtp_fallback_relay</a> is used, the "always" and "newmail"
-settings become identical in practice. </p>
-
-<p> This feature is available in Postfix 2.3 and later. </p>
-
-
 </DD>
 
 <DT><b><a name="smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a>
@@ -6965,7 +6959,7 @@ sending large messages over slow network connections.
 <p>
 How long a message must be queued before the PIX firewall
 "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug workaround is turned
-on.
+on for delivery through firewalls with "smtp fixup" mode turned on.
 </p>
 
 <p>
index 21c01c46f16463d364381d80a4cbcbfa081990ff..4ed672cfb68899bd643e07d165ee170b2c3da396 100644 (file)
@@ -166,25 +166,27 @@ SMTP(8)                                                                SMTP(8)
               Defer  mail  delivery when no MX record resolves to
               an IP address.
 
+       <b><a href="postconf.5.html#smtp_dot_quit_workaround_threshold_time">smtp_dot_quit_workaround_threshold_time</a> (3000s)</b>
+              How long a message must be queued before the "."  +
+              QUIT  bug  workaround is turned on for all deliver-
+              ies; this limits the number of repeated  deliveries
+              with  servers  or firewalls that mis-implement END-
+              OF-DATA + QUIT pipelining.
+
        <b><a href="postconf.5.html#smtp_line_length_limit">smtp_line_length_limit</a> (990)</b>
               The maximal length of message header and body lines
               that Postfix will send via SMTP.
 
-       <b><a href="postconf.5.html#smtp_pipeline_dot_quit">smtp_pipeline_dot_quit</a> (never)</b>
-              When  ESMTP  command pipelining is enabled, whether
-              or not the SMTP client will send the  QUIT  command
-              before  it  has  received  the server's END-OF-DATA
-              reply.
-
        <b><a href="postconf.5.html#smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a> (10s)</b>
-              How long the  Postfix  SMTP  client  pauses  before
+              How  long  the  Postfix  SMTP  client pauses before
               sending ".&lt;CR&gt;&lt;LF&gt;" in order to work around the PIX
               firewall "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug.
 
        <b><a href="postconf.5.html#smtp_pix_workaround_threshold_time">smtp_pix_workaround_threshold_time</a> (500s)</b>
-              How long a message must be queued  before  the  PIX
-              firewall   "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;"  bug  workaround  is
-              turned on.
+              How  long  a  message must be queued before the PIX
+              firewall  "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;"  bug  workaround   is
+              turned on for delivery through firewalls with "smtp
+              fixup" mode turned on.
 
        <b><a href="postconf.5.html#smtp_quote_rfc821_envelope">smtp_quote_rfc821_envelope</a> (yes)</b>
               Quote addresses in SMTP MAIL FROM and RCPT TO  com-
index da6589148e57cb1e789ca6d39a08f20fde53d9a3..9bfc3e5236076c425cfd85e903495ef5983ad96f 100644 (file)
@@ -1746,6 +1746,9 @@ this action from being logged.
 .IP \(bu
 Use the lmtp_discard_lhlo_keyword_address_maps feature to
 discard LHLO keywords selectively.
+.SH lmtp_dot_quit_workaround_threshold_time (default: 3000s)
+The LMTP-specific version of the smtp_dot_quit_workaround_threshold_time
+configuration parameter.  See there for details.
 .SH lmtp_enforce_tls (default: no)
 The LMTP-specific version of the smtp_enforce_tls configuration
 parameter.  See there for details.
@@ -1808,9 +1811,6 @@ The LMTP-specific version of the smtp_mx_session_limit configuration
 parameter.  See there for details.
 .PP
 This feature is available in Postfix 2.3 and later.
-.SH lmtp_pipeline_dot_quit (default: never)
-The LMTP-specific version of the smtp_pipeline_dot_quit
-configuration parameter.  See there for details.
 .SH lmtp_pix_workaround_delay_time (default: 10s)
 The LMTP-specific version of the smtp_pix_workaround_delay_time
 configuration parameter.  See there for details.
@@ -3723,6 +3723,31 @@ this action from being logged.
 .IP \(bu
 Use the smtp_discard_ehlo_keyword_address_maps feature to
 discard EHLO keywords selectively.
+.SH smtp_dot_quit_workaround_threshold_time (default: 3000s)
+How long a message must be queued before the "." + QUIT bug
+workaround is turned on for all deliveries; this limits the
+number of repeated deliveries with servers or firewalls that
+mis-implement END-OF-DATA + QUIT pipelining.
+.PP
+When the workaround is turned on, the Postfix SMTP client will
+not send the QUIT command until it has received the server's
+END-OF-DATA reply.  This workaround incurs a small performance loss
+with delivery to sites that correctly implement SMTP command
+pipelining.
+.PP
+By default, the workaround is turned off for mail that is queued
+for less than 3000 seconds. In other words, the workaround is
+normally turned off for the first few delivery attempts of personal
+mail and of small mailing lists.
+.PP
+Specify 0 to enable this workaround upon the first delivery
+attempt, and specify a large value such as $maximal_queue_lifetime
+to disable the workaround for practically all delivery attempts.
+.PP
+Note: when the smtp_fallback_relay feature is used, there will
+be no second delivery attempt, and the workaround may have no effect.
+.PP
+This feature is available in Postfix 2.3 and later.
 .SH smtp_enforce_tls (default: no)
 Enforcement mode: require that remote SMTP servers use TLS
 encryption, and never send mail in the clear.  This also requires
@@ -3841,35 +3866,6 @@ This feature is available in Postfix 2.1 and later.
 .SH smtp_never_send_ehlo (default: no)
 Never send EHLO at the start of an SMTP session. See also the
 smtp_always_send_ehlo parameter.
-.SH smtp_pipeline_dot_quit (default: never)
-When ESMTP command pipelining is enabled, whether or not the
-SMTP client will send the QUIT command before it has received the
-server's END-OF-DATA reply.
-.PP
-Specify one of the following:
-.IP "\fBalways\fR"
-Always pipeline the END-OF-DATA and
-QUIT commands.  With servers or firewalls that mis-implement
-END-OF-DATA + QUIT pipelining, mail will be delivered repeatedly
-until it expires in the queue.
-.IP "\fBnever\fR"
-Wait for the server's END-OF-DATA reply
-before sending the QUIT command. This avoids repeated delivery
-attempts with servers and firewalls that mis-implement END-OF-DATA
-+ QUIT pipelining, at the cost of a small performance loss with
-sites that correctly implement SMTP.
-.IP "\fBnewmail\fR"
-Pipeline the END-OF-DATA and QUIT
-commands only when mail is newer than $minimal_backoff_time.  This
-limits the number of repeated deliveries with servers and firewalls
-that mis-implement END-OF-DATA + QUIT pipelining, while avoiding
-the performance loss associated with the "never" setting for normal
-deliveries.
-.PP
-Note: when smtp_fallback_relay is used, the "always" and "newmail"
-settings become identical in practice.
-.PP
-This feature is available in Postfix 2.3 and later.
 .SH smtp_pix_workaround_delay_time (default: 10s)
 How long the Postfix SMTP client pauses before sending
 ".<CR><LF>" in order to work around the PIX firewall
@@ -3880,7 +3876,7 @@ sending large messages over slow network connections.
 .SH smtp_pix_workaround_threshold_time (default: 500s)
 How long a message must be queued before the PIX firewall
 "<CR><LF>.<CR><LF>" bug workaround is turned
-on.
+on for delivery through firewalls with "smtp fixup" mode turned on.
 .PP
 By default, the workaround is turned off for mail that is queued
 for less than 500 seconds. In other words, the workaround is normally
index f8bcaefebdca22318620e076f0d8a2dca390a4e5..5126a27cbb8a49f06d8002b0d2870a43d3d552b3 100644 (file)
@@ -162,13 +162,14 @@ Always send EHLO at the start of an SMTP session.
 Never send EHLO at the start of an SMTP session.
 .IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
 Defer mail delivery when no MX record resolves to an IP address.
+.IP "\fBsmtp_dot_quit_workaround_threshold_time (3000s)\fR"
+How long a message must be queued before the "." + QUIT bug
+workaround is turned on for all deliveries; this limits the
+number of repeated deliveries with servers or firewalls that
+mis-implement END-OF-DATA + QUIT pipelining.
 .IP "\fBsmtp_line_length_limit (990)\fR"
 The maximal length of message header and body lines that Postfix
 will send via SMTP.
-.IP "\fBsmtp_pipeline_dot_quit (never)\fR"
-When ESMTP command pipelining is enabled, whether or not the
-SMTP client will send the QUIT command before it has received the
-server's END-OF-DATA reply.
 .IP "\fBsmtp_pix_workaround_delay_time (10s)\fR"
 How long the Postfix SMTP client pauses before sending
 ".<CR><LF>" in order to work around the PIX firewall
@@ -176,7 +177,7 @@ How long the Postfix SMTP client pauses before sending
 .IP "\fBsmtp_pix_workaround_threshold_time (500s)\fR"
 How long a message must be queued before the PIX firewall
 "<CR><LF>.<CR><LF>" bug workaround is turned
-on.
+on for delivery through firewalls with "smtp fixup" mode turned on.
 .IP "\fBsmtp_quote_rfc821_envelope (yes)\fR"
 Quote addresses in SMTP MAIL FROM and RCPT TO commands as required
 by RFC 821.
index 7ec5cb6b427937945a78f4349b660ab55a716bd2..405b2dbe20e116dc343dad4fda0b7c288f938673 100755 (executable)
@@ -387,7 +387,7 @@ while (<>) {
     s;\bsmtp_mx_session_limit\b;<a href="postconf.5.html#smtp_mx_session_limit">$&</a>;g;
     s;\bsmtp_never_send_ehlo\b;<a href="postconf.5.html#smtp_never_send_ehlo">$&</a>;g;
     s;\bsmtp_sender_depen[-</bB>]*\n*[ <bB>]*dent_authentication\b;<a href="postconf.5.html#smtp_sender_dependent_authentication">$&</a>;g;
-    s;\bsmtp_pipeline_dot_quit\b;<a href="postconf.5.html#smtp_pipeline_dot_quit">$&</a>;g;
+    s;\bsmtp_dot_quit_workaround_threshold_time\b;<a href="postconf.5.html#smtp_dot_quit_workaround_threshold_time">$&</a>;g;
     s;\bsmtp_pix_workaround_delay_time\b;<a href="postconf.5.html#smtp_pix_workaround_delay_time">$&</a>;g;
     s;\bsmtp_pix_workaround_threshold_time\b;<a href="postconf.5.html#smtp_pix_workaround_threshold_time">$&</a>;g;
     s;\bsmtp_quit_timeout\b;<a href="postconf.5.html#smtp_quit_timeout">$&</a>;g;
index d6ca70d2b7d4260dabc34a0dcc78ef03b73d58fb..1294e41f04a323d7a7ea3d0d8356fbaa7e771ce5 100644 (file)
@@ -3950,7 +3950,7 @@ smtp_always_send_ehlo parameter.  </p>
 <p>
 How long a message must be queued before the PIX firewall
 "&lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;" bug workaround is turned
-on.
+on for delivery through firewalls with "smtp fixup" mode turned on.
 </p>
 
 <p>
@@ -9126,42 +9126,36 @@ rejecting the address as invalid.  </p>
 
 <p> This feature is available in Postfix 2.3 and later.
 
-%PARAM smtp_pipeline_dot_quit never
+%PARAM smtp_dot_quit_workaround_threshold_time 3000s
 
-<p> When ESMTP command pipelining is enabled, whether or not the
-SMTP client will send the QUIT command before it has received the
-server's END-OF-DATA reply. </p>
+<p> How long a message must be queued before the "." + QUIT bug
+workaround is turned on for all deliveries; this limits the
+number of repeated deliveries with servers or firewalls that
+mis-implement END-OF-DATA + QUIT pipelining. </p>
 
-<p> Specify one of the following: </p>
+<p> When the workaround is turned on, the Postfix SMTP client will
+not send the QUIT command until it has received the server's
+END-OF-DATA reply.  This workaround incurs a small performance loss
+with delivery to sites that correctly implement SMTP command
+pipelining.  </p>
 
-<dl>
-
-<dt> <b>always</b> </dt> <dd> Always pipeline the END-OF-DATA and
-QUIT commands.  With servers or firewalls that mis-implement
-END-OF-DATA + QUIT pipelining, mail will be delivered repeatedly
-until it expires in the queue.  </dd>
-
-<dt> <b>never</b> </dt> <dd> Wait for the server's END-OF-DATA reply
-before sending the QUIT command. This avoids repeated delivery
-attempts with servers and firewalls that mis-implement END-OF-DATA
-+ QUIT pipelining, at the cost of a small performance loss with
-sites that correctly implement SMTP. </dd>
-
-<dt> <b>newmail</b> </dt> <dd> Pipeline the END-OF-DATA and QUIT
-commands only when mail is newer than $minimal_backoff_time.  This
-limits the number of repeated deliveries with servers and firewalls
-that mis-implement END-OF-DATA + QUIT pipelining, while avoiding
-the performance loss associated with the "never" setting for normal
-deliveries.  </dd>
+<p> By default, the workaround is turned off for mail that is queued
+for less than 3000 seconds. In other words, the workaround is
+normally turned off for the first few delivery attempts of personal
+mail and of small mailing lists.  </p>
 
-</dl>
+<p> Specify 0 to enable this workaround upon the first delivery
+attempt, and specify a large value such as $maximal_queue_lifetime
+to disable the workaround for practically all delivery attempts.
+</p>
 
-<p> Note: when smtp_fallback_relay is used, the "always" and "newmail"
-settings become identical in practice. </p>
+<p> Note: when the smtp_fallback_relay feature is used, there will
+be no second delivery attempt, and the workaround may have no effect.
+</p>
 
 <p> This feature is available in Postfix 2.3 and later. </p>
 
-%PARAM lmtp_pipeline_dot_quit never
+%PARAM lmtp_dot_quit_workaround_threshold_time 3000s
 
-<p> The LMTP-specific version of the smtp_pipeline_dot_quit
+<p> The LMTP-specific version of the smtp_dot_quit_workaround_threshold_time
 configuration parameter.  See there for details. </p>
index 51c6668cfd549e5c4d6fb60d736ca845565f6f51..acfa48531e8e9d3ee63ab5fe911e9f5c336393fc 100644 (file)
@@ -1006,15 +1006,11 @@ extern int var_smtp_pix_thresh;
 #define DEF_LMTP_PIX_DELAY     "10s"
 extern int var_smtp_pix_delay;
 
-#define SMTP_PIPE_DOT_QUIT_NEVER       "never"
-#define SMTP_PIPE_DOT_QUIT_NEWMAIL     "newmail"
-#define SMTP_PIPE_DOT_QUIT_ALWAYS      "always"
-
-#define VAR_SMTP_PIPE_DOT_QUIT "smtp_pipeline_dot_quit"
-#define DEF_SMTP_PIPE_DOT_QUIT SMTP_PIPE_DOT_QUIT_NEVER
-#define VAR_LMTP_PIPE_DOT_QUIT "lmtp_pipeline_dot_quit"
-#define DEF_LMTP_PIPE_DOT_QUIT SMTP_PIPE_DOT_QUIT_NEVER
-extern char *var_smtp_pipe_dot_quit;
+#define VAR_SMTP_DOTQ_THRESH   "smtp_dot_quit_workaround_threshold"
+#define DEF_SMTP_DOTQ_THRESH   "3000s"
+#define VAR_LMTP_DOTQ_THRESH   "lmtp_dot_quit_workaround_threshold"
+#define DEF_LMTP_DOTQ_THRESH   "3000s"
+extern int var_smtp_dotq_thresh;
 
 #define VAR_SMTP_DEFER_MXADDR  "smtp_defer_if_no_mx_address_found"
 #define DEF_SMTP_DEFER_MXADDR  0
index 1210c95e4b98e9bf5ddbebace6ec387c857bb3d9..3bd0e89536c7aa7ccb3b2a462e4c19e836e9d496 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      "20051228"
+#define MAIL_RELEASE_DATE      "20051229"
 #define MAIL_VERSION_NUMBER    "2.3"
 
 #ifdef SNAPSHOT
index a29e9e552879523a789be409ff8ae5f03317845d..b8d3d47361de435b2c2a34d53cefacaef6f18d45 100644 (file)
@@ -22,7 +22,6 @@
        VAR_PROP_EXTENSION, DEF_PROP_EXTENSION, &var_prop_extension, 0, 0,
        VAR_LMTP_GENERIC_MAPS, DEF_LMTP_GENERIC_MAPS, &var_smtp_generic_maps, 0, 0,
        VAR_LMTP_TCP_PORT, DEF_LMTP_TCP_PORT, &var_lmtp_tcp_port, 0, 0,
-       VAR_LMTP_PIPE_DOT_QUIT, DEF_LMTP_PIPE_DOT_QUIT, &var_smtp_pipe_dot_quit, 1, 0,
        0,
     };
     static CONFIG_TIME_TABLE lmtp_time_table[] = {
@@ -45,6 +44,9 @@
 #endif
        VAR_SCACHE_PROTO_TMOUT, DEF_SCACHE_PROTO_TMOUT, &var_scache_proto_tmout, 1, 0,
        VAR_MIN_BACKOFF_TIME, DEF_MIN_BACKOFF_TIME, &var_min_backoff_time, 1, 0,
+       VAR_MAX_BACKOFF_TIME, DEF_MAX_BACKOFF_TIME, &var_max_backoff_time, 1, 0,
+       VAR_MAX_QUEUE_TIME, DEF_MAX_QUEUE_TIME, &var_max_queue_time, 0, 0,
+       VAR_LMTP_DOTQ_THRESH, DEF_LMTP_DOTQ_THRESH, &var_smtp_dotq_thresh, 0, 0,
        0,
     };
     static CONFIG_INT_TABLE lmtp_int_table[] = {
index 2196e4db104e25cc3e7dfbb78ae13319ca47d7fa..00b3cae5caada0e30cf0e51eac9813daef665cc4 100644 (file)
 /*     Never send EHLO at the start of an SMTP session.
 /* .IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
 /*     Defer mail delivery when no MX record resolves to an IP address.
+/* .IP "\fBsmtp_dot_quit_workaround_threshold_time (3000s)\fR"
+/*     How long a message must be queued before the "." + QUIT bug
+/*     workaround is turned on for all deliveries; this limits the
+/*     number of repeated deliveries with servers or firewalls that
+/*     mis-implement END-OF-DATA + QUIT pipelining.
 /* .IP "\fBsmtp_line_length_limit (990)\fR"
 /*     The maximal length of message header and body lines that Postfix
 /*     will send via SMTP.
-/* .IP "\fBsmtp_pipeline_dot_quit (never)\fR"
-/*     When ESMTP command pipelining is enabled, whether or not the
-/*     SMTP client will send the QUIT command before it has received the
-/*     server's END-OF-DATA reply.
 /* .IP "\fBsmtp_pix_workaround_delay_time (10s)\fR"
 /*     How long the Postfix SMTP client pauses before sending
 /*     ".<CR><LF>" in order to work around the PIX firewall
 /* .IP "\fBsmtp_pix_workaround_threshold_time (500s)\fR"
 /*     How long a message must be queued before the PIX firewall
 /*     "<CR><LF>.<CR><LF>" bug workaround is turned
-/*     on.
+/*     on for delivery through firewalls with "smtp fixup" mode turned on.
 /* .IP "\fBsmtp_quote_rfc821_envelope (yes)\fR"
 /*     Quote addresses in SMTP MAIL FROM and RCPT TO commands as required
 /*     by RFC 821.
 #include <msg.h>
 #include <mymalloc.h>
 #include <name_mask.h>
-#include <name_code.h>
 
 /* Global library. */
 
@@ -622,8 +622,12 @@ char   *var_prop_extension;
 bool    var_smtp_sender_auth;
 char   *var_lmtp_tcp_port;
 int     var_scache_proto_tmout;
-char   *var_smtp_pipe_dot_quit;
+int     var_smtp_dotq_thresh;
+
+/* Workaround for "smtp_dot_quit_workaround_threshold_time = $name". */
 int     var_min_backoff_time;
+int     var_max_backoff_time;
+int     var_max_queue_time;
 
  /*
   * Global variables. smtp_errno is set by the address lookup routines and by
@@ -636,7 +640,6 @@ SCACHE *smtp_scache;
 MAPS   *smtp_ehlo_dis_maps;
 MAPS   *smtp_generic_maps;
 int     smtp_ext_prop_mask;
-int     smtp_pipe_dot_quit;
 
 #ifdef USE_TLS
 
@@ -730,12 +733,6 @@ static void post_init(char *unused_name, char **unused_argv)
        SMTP_HOST_LOOKUP_NATIVE, SMTP_HOST_FLAG_NATIVE,
        0,
     };
-    static NAME_CODE pipe_dot_quit_codes[] = {
-       SMTP_PIPE_DOT_QUIT_NEVER, SMTP_PIPE_DOT_QUIT_CODE_NEVER,
-       SMTP_PIPE_DOT_QUIT_NEWMAIL, SMTP_PIPE_DOT_QUIT_CODE_NEWMAIL,
-       SMTP_PIPE_DOT_QUIT_ALWAYS, SMTP_PIPE_DOT_QUIT_CODE_ALWAYS,
-       0, SMTP_PIPE_DOT_QUIT_CODE_ERROR,
-    };
 
     /*
      * Select hostname lookup mechanisms.
@@ -762,16 +759,6 @@ static void post_init(char *unused_name, char **unused_argv)
                                         var_ipc_idle_limit,
                                         var_ipc_ttl_limit);
 #endif
-
-    /*
-     * Initialize dot-quit pipelining workaround.
-     */
-    smtp_pipe_dot_quit = name_code(pipe_dot_quit_codes,
-                                  NAME_CODE_FLAG_NONE,
-                                  var_smtp_pipe_dot_quit);
-    if (smtp_pipe_dot_quit == SMTP_PIPE_DOT_QUIT_CODE_ERROR)
-       msg_fatal("unknown %s value: %s", VAR_SMTP_PIPE_DOT_QUIT,
-                 var_smtp_pipe_dot_quit);
 }
 
 /* pre_init - pre-jail initialization */
index 620c6de93ec3fbc79c0c85ca4f602288b6312b22..9e4e5c8edd111e70254d3ac7f7151f7bd6eefbad 100644 (file)
@@ -166,13 +166,6 @@ extern SSL_CTX *smtp_tls_ctx;              /* client-side TLS engine */
 
 #endif
 
-#define SMTP_PIPE_DOT_QUIT_CODE_ERROR  0
-#define SMTP_PIPE_DOT_QUIT_CODE_NEVER  1
-#define SMTP_PIPE_DOT_QUIT_CODE_NEWMAIL        2
-#define SMTP_PIPE_DOT_QUIT_CODE_ALWAYS 3
-
-extern int smtp_pipe_dot_quit;
-
  /*
   * smtp_session.c
   */
index d92e9063e3e8fdc4b3b83a9691f88ff76ae199f8..753061996be46d456da0261fdb9046203ad65105 100644 (file)
@@ -290,6 +290,9 @@ SMTP_RESP *smtp_chat_resp(SMTP_SESSION *session)
                     (session->state->misc_flags &
                      SMTP_MISC_FLAG_USE_LMTP) ? "LMTP" : "ESMTP",
                     session->namaddrport, STR(session->buffer));
+           msg_warn("consider turning off pipelining selectively with %s",
+                    (session->state->misc_flags & SMTP_MISC_FLAG_USE_LMTP) ?
+                    VAR_LMTP_EHLO_DIS_WORDS : VAR_SMTP_EHLO_DIS_MAPS);
            vstream_longjmp(session->stream, SMTP_ERR_PROTO);
        }
     }
index 95765849cf91ae13db2e800a5042c925c8e43eaa..92317722c05b22e4337afd46690964032a438392 100644 (file)
@@ -23,7 +23,6 @@
        VAR_PROP_EXTENSION, DEF_PROP_EXTENSION, &var_prop_extension, 0, 0,
        VAR_SMTP_GENERIC_MAPS, DEF_SMTP_GENERIC_MAPS, &var_smtp_generic_maps, 0, 0,
        VAR_LMTP_TCP_PORT, DEF_LMTP_TCP_PORT, &var_lmtp_tcp_port, 0, 0,
-       VAR_SMTP_PIPE_DOT_QUIT, DEF_SMTP_PIPE_DOT_QUIT, &var_smtp_pipe_dot_quit, 1, 0,
        0,
     };
     static CONFIG_TIME_TABLE smtp_time_table[] = {
@@ -46,6 +45,9 @@
 #endif
        VAR_SCACHE_PROTO_TMOUT, DEF_SCACHE_PROTO_TMOUT, &var_scache_proto_tmout, 1, 0,
        VAR_MIN_BACKOFF_TIME, DEF_MIN_BACKOFF_TIME, &var_min_backoff_time, 1, 0,
+       VAR_MAX_BACKOFF_TIME, DEF_MAX_BACKOFF_TIME, &var_max_backoff_time, 1, 0,
+       VAR_MAX_QUEUE_TIME, DEF_MAX_QUEUE_TIME, &var_max_queue_time, 0, 0,
+       VAR_SMTP_DOTQ_THRESH, DEF_SMTP_DOTQ_THRESH, &var_smtp_dotq_thresh, 0, 0,
        0,
     };
     static CONFIG_INT_TABLE smtp_int_table[] = {
index f6c5583dfffd2f493081ab45e91d2b0c68ab3831..1a3041c4214e798ad9a1b9c5ded3044ee1282065 100644 (file)
@@ -926,16 +926,11 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
 #define SENDER_IS_AHEAD \
        (recv_state < send_state || recv_rcpt != send_rcpt)
 
-#define DONT_PIPELINE_DOT_QUIT \
-       (smtp_pipe_dot_quit == SMTP_PIPE_DOT_QUIT_CODE_NEVER \
-        || (smtp_pipe_dot_quit == SMTP_PIPE_DOT_QUIT_CODE_NEWMAIL \
-            && request->msg_stats.incoming_arrival.tv_sec \
-               < vstream_ftime(session->stream) - var_min_backoff_time))
-
 #define SENDER_IN_WAIT_STATE \
        (send_state == SMTP_STATE_DOT || send_state == SMTP_STATE_LAST \
         || (recv_state == SMTP_STATE_DOT && send_state == SMTP_STATE_QUIT \
-            && DONT_PIPELINE_DOT_QUIT))
+            && request->msg_stats.incoming_arrival.tv_sec \
+               <= vstream_ftime(session->stream) - var_smtp_dotq_thresh))
 
 #define SENDING_MAIL \
        (recv_state <= SMTP_STATE_DOT)
@@ -1591,7 +1586,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
                smtp_fputs("", 0, session->stream);
            if ((session->features & SMTP_FEATURE_MAYBEPIX) != 0
                && request->msg_stats.incoming_arrival.tv_sec
-               < vstream_ftime(session->stream) - var_smtp_pix_thresh) {
+               <= vstream_ftime(session->stream) - var_smtp_pix_thresh) {
                msg_info("%s: enabling PIX <CRLF>.<CRLF> workaround for %s",
                         request->queue_id, session->namaddrport);
                smtp_flush(session->stream);    /* hurts performance */