2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 13:48:06 +00:00

postfix-2.3-20051229

This commit is contained in:
Wietse Venema 2005-12-29 00:00:00 -05:00 committed by Viktor Dukhovni
parent 4049d5fab2
commit 790bb6870f
16 changed files with 164 additions and 204 deletions

View File

@ -11690,22 +11690,17 @@ Apologies for any names omitted.
(example: sockaddr_to_hostaddr: Unknown error: success).
File: util/myaddrinfo.c.
20051228
20051229
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.
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:

View 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
====================================

View 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>

View 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-

View 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

View 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.

View File

@ -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;

View 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>
<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>
<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>
<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>
<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>
</dl>
<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>

View 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

View 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

View 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[] = {

View File

@ -140,13 +140,14 @@
/* 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
@ -154,7 +155,7 @@
/* .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.
@ -530,7 +531,6 @@
#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 */

View 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
*/

View 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);
}
}

View 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[] = {

View 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 */