mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-22 18:07:41 +00:00
postfix-2.9-20110212
This commit is contained in:
parent
1ac00dbaf1
commit
1b9ba18ece
@ -16576,3 +16576,18 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
Bugfix (introduced Postfix 2.8): segfault with smtpd_tls_loglevel
|
Bugfix (introduced Postfix 2.8): segfault with smtpd_tls_loglevel
|
||||||
>= 3. Files: tls/tls_server.c, tls.h, smtpd.c, tlsproxy.c.
|
>= 3. Files: tls/tls_server.c, tls.h, smtpd.c, tlsproxy.c.
|
||||||
|
|
||||||
|
Cleanup: read/write deadline support for single_server TLS
|
||||||
|
applications (i.e. smtpd(8), smtp(8)). File: tls/tls_bio_ops.c.
|
||||||
|
|
||||||
|
20110212
|
||||||
|
|
||||||
|
Infrastructure: run-time switch for read/write deadline
|
||||||
|
support. Files: util/vstream.[hc], global/smtp_stream.[hc],
|
||||||
|
tls/tls_bio_ops.c.
|
||||||
|
|
||||||
|
Cleanup: configurable read/write deadline support with
|
||||||
|
smtpd_per_record_deadline (normal: "no", overload: "yes")
|
||||||
|
and smtp_per_record_deadline (default: "no"). Files:
|
||||||
|
global/mail_params.h, smtpd/smtpd.c, smtp/smtp.c,
|
||||||
|
smtp/smtp_proto.c, proto/postconf.proto, mantools/postlink.
|
||||||
|
@ -12,10 +12,11 @@ is queued.
|
|||||||
|
|
||||||
The reason for adding Milter support to Postfix is that there exists a large
|
The reason for adding Milter support to Postfix is that there exists a large
|
||||||
collection of applications, not only to block unwanted mail, but also to verify
|
collection of applications, not only to block unwanted mail, but also to verify
|
||||||
authenticity (examples: DomainKeys Identified Mail (DKIM), SenderID+SPF and
|
authenticity (examples: OpenDKIM, DomainKeys Identified Mail (DKIM),
|
||||||
DomainKeys) or to digitally sign mail (examples: DomainKeys Identified Mail
|
SenderID+SPF and DomainKeys) or to digitally sign mail (examples: OpenDKIM,
|
||||||
(DKIM), DomainKeys). Having yet another Postfix-specific version of all that
|
DomainKeys Identified Mail (DKIM), DomainKeys). Having yet another Postfix-
|
||||||
software is a poor use of human and system resources.
|
specific version of all that software is a poor use of human and system
|
||||||
|
resources.
|
||||||
|
|
||||||
The Milter protocol has evolved over time, and different Postfix versions
|
The Milter protocol has evolved over time, and different Postfix versions
|
||||||
implement different feature sets. See the workarounds and limitations sections
|
implement different feature sets. See the workarounds and limitations sections
|
||||||
@ -92,8 +93,15 @@ such a library, but Sendmail does.
|
|||||||
Sendmail libmilter library by default. With other systems, libmilter may be
|
Sendmail libmilter library by default. With other systems, libmilter may be
|
||||||
provided by a package (called "sendmail-devel" on some Linux systems).
|
provided by a package (called "sendmail-devel" on some Linux systems).
|
||||||
|
|
||||||
Once libmilter is installed, applications such as dkim-milter and sid-
|
Once libmilter is installed, applications such as OpenDKIM, dkim-milter and
|
||||||
milter build out of the box without requiring any tinkering:
|
sid-milter build out of the box without requiring any tinkering:
|
||||||
|
|
||||||
|
$ ggzzccaatt ooppeennddkkiimm--xx..yy..zz..ttaarr..ggzz || ttaarr xxff --
|
||||||
|
$ ccdd ooppeennddkkiimm--xx..yy..zz
|
||||||
|
$ ..//ccoonnffiigguurree ......ooppttiioonnss......
|
||||||
|
$ mmaakkee
|
||||||
|
[...lots of output omitted...]
|
||||||
|
$ mmaakkee iinnssttaallll
|
||||||
|
|
||||||
$ ggzzccaatt ddkkiimm--mmiilltteerr--xx..yy..zz..ttaarr..ggzz || ttaarr xxff --
|
$ ggzzccaatt ddkkiimm--mmiilltteerr--xx..yy..zz..ttaarr..ggzz || ttaarr xxff --
|
||||||
$ ccdd ddkkiimm--mmiilltteerr--xx..yy..zz
|
$ ccdd ddkkiimm--mmiilltteerr--xx..yy..zz
|
||||||
|
@ -318,11 +318,12 @@ in SMTP engine anyway. This is to make postscreen(8) logging more informative.
|
|||||||
|
|
||||||
When a client sends multiple commands, postscreen(8) logs this as:
|
When a client sends multiple commands, postscreen(8) logs this as:
|
||||||
|
|
||||||
CCOOMMMMAANNDD PPIIPPEELLIINNIINNGG aafftteerr time ffrroomm [address]:port
|
CCOOMMMMAANNDD PPIIPPEELLIINNIINNGG ffrroomm [address]:port aafftteerr command: text
|
||||||
|
|
||||||
Translation: the SMTP client at [address]:port sent multiple SMTP commands,
|
Translation: the SMTP client at [address]:port sent multiple SMTP commands,
|
||||||
instead of sending one command and then waiting for the server to reply. This
|
instead of sending one command and then waiting for the server to reply. This
|
||||||
happened time seconds after the "220 " server greeting was sent.
|
happened after the client sent command. The text shows part of the input that
|
||||||
|
was sent too early; it is not logged with Postfix 2.8.
|
||||||
|
|
||||||
The postscreen_pipelining_action parameter specifies the action that is taken
|
The postscreen_pipelining_action parameter specifies the action that is taken
|
||||||
next. See "When tests fail after the 220 SMTP server greeting" below.
|
next. See "When tests fail after the 220 SMTP server greeting" below.
|
||||||
|
@ -14,6 +14,30 @@ specifies the release date of a stable release or snapshot release.
|
|||||||
If you upgrade from Postfix 2.7 or earlier, read RELEASE_NOTES-2.8
|
If you upgrade from Postfix 2.7 or earlier, read RELEASE_NOTES-2.8
|
||||||
before proceeding.
|
before proceeding.
|
||||||
|
|
||||||
|
Major changes with snapshot 20110130
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Support for per-record deadlines. These change the behavior of
|
||||||
|
Postfix timeout parameters, from a time limit per read or write
|
||||||
|
system call, to a time limit to send or receive a complete record
|
||||||
|
(an SMTP command line, SMTP response line, SMTP message content
|
||||||
|
line, or TLS protocol message). This limits the impact from hostile
|
||||||
|
peers that trickle data one byte at a time.
|
||||||
|
|
||||||
|
The new configuration parameters and their default settings are:
|
||||||
|
smtpd_per_record_deadline (normal: no, overload: yes),
|
||||||
|
smtp_per_record_deadline (no), and lmtp_per_record_deadline (no).
|
||||||
|
|
||||||
|
Note: when per-record deadlines are enabled, a short timeout may
|
||||||
|
cause problems with TLS over very slow network connections. The
|
||||||
|
reasons are that a TLS protocol message can be up to 16 kbytes long
|
||||||
|
(with TLSv1), and that an entire TLS protocol message must be sent
|
||||||
|
or received within the per-record deadline.
|
||||||
|
|
||||||
|
Per-record deadlines were introduced with postscreen(8). This program
|
||||||
|
does not receive mail, and therefore has no problems with TLS over
|
||||||
|
slow connections.
|
||||||
|
|
||||||
Incompatible changes with snapshot 20110130
|
Incompatible changes with snapshot 20110130
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ Wish list:
|
|||||||
Don't forget Apple's code donation for fetching mail from
|
Don't forget Apple's code donation for fetching mail from
|
||||||
IMAP server.
|
IMAP server.
|
||||||
|
|
||||||
|
Update MILTER_README with pointer to OpenDKIM.
|
||||||
|
|
||||||
postconf command-line option to show the compile-time
|
postconf command-line option to show the compile-time
|
||||||
settings (CCARGS, AUXLIBS) in case binary packages
|
settings (CCARGS, AUXLIBS) in case binary packages
|
||||||
don't install the makedefs.out file.
|
don't install the makedefs.out file.
|
||||||
|
@ -28,11 +28,13 @@ SMTP commands (HELO, MAIL FROM, etc.) as well as mail content
|
|||||||
<p> The reason for adding Milter support to Postfix is that there
|
<p> The reason for adding Milter support to Postfix is that there
|
||||||
exists a large collection of applications, not only to block unwanted
|
exists a large collection of applications, not only to block unwanted
|
||||||
mail, but also to verify authenticity (examples: <a
|
mail, but also to verify authenticity (examples: <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
||||||
Identified Mail (DKIM)</a>, <a
|
Identified Mail (DKIM)</a>, <a
|
||||||
href="http://sourceforge.net/projects/sid-milter/">SenderID+SPF</a> and
|
href="http://sourceforge.net/projects/sid-milter/">SenderID+SPF</a> and
|
||||||
<a href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>)
|
<a href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>)
|
||||||
or to digitally sign mail (examples: <a
|
or to digitally sign mail (examples: <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
||||||
Identified Mail (DKIM)</a>, <a
|
Identified Mail (DKIM)</a>, <a
|
||||||
href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>).
|
href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>).
|
||||||
@ -212,10 +214,22 @@ other systems, libmilter may be provided by a package (called
|
|||||||
"sendmail-devel" on some Linux systems). </p>
|
"sendmail-devel" on some Linux systems). </p>
|
||||||
|
|
||||||
<p> Once libmilter is installed, applications such as <a
|
<p> Once libmilter is installed, applications such as <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">dkim-milter</a> and
|
href="http://sourceforge.net/projects/dkim-milter/">dkim-milter</a> and
|
||||||
<a href="http://sourceforge.net/projects/sid-milter/">sid-milter</a>
|
<a href="http://sourceforge.net/projects/sid-milter/">sid-milter</a>
|
||||||
build out of the box without requiring any tinkering:</p>
|
build out of the box without requiring any tinkering:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
$ <b>gzcat opendkim-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
|
$ <b>cd opendkim-<i>x.y.z</i></b>
|
||||||
|
$ <b>./configure ...<i>options</i>...</b>
|
||||||
|
$ <b>make</b>
|
||||||
|
[...<i>lots of output omitted</i>...]
|
||||||
|
$ <b>make install</b>
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
$ <b>gzcat dkim-milter-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
$ <b>gzcat dkim-milter-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
|
@ -432,13 +432,14 @@ logging more informative. </p>
|
|||||||
as: </p>
|
as: </p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
<b>COMMAND PIPELINING after</b> <i>time</i> <b>from</b> <i>[address]:port</i>
|
<b>COMMAND PIPELINING from</b> <i>[address]:port</i> <b>after</b> <i>command</i>: <i>text</i>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p> Translation: the SMTP client at <i>[address]:port</i> sent multiple
|
<p> Translation: the SMTP client at <i>[address]:port</i> sent
|
||||||
SMTP commands, instead of sending one command and then waiting for
|
multiple SMTP commands, instead of sending one command and then
|
||||||
the server to reply. This happened <i>time</i> seconds after the
|
waiting for the server to reply. This happened after the client
|
||||||
"220 " server greeting was sent. </p>
|
sent <i>command</i>. The <i>text</i> shows part of the input that
|
||||||
|
was sent too early; it is not logged with Postfix 2.8. </p>
|
||||||
|
|
||||||
<p> The <a href="postconf.5.html#postscreen_pipelining_action">postscreen_pipelining_action</a> parameter specifies the action
|
<p> The <a href="postconf.5.html#postscreen_pipelining_action">postscreen_pipelining_action</a> parameter specifies the action
|
||||||
that is taken next. See "<a href="#fail_after_220">When tests fail
|
that is taken next. See "<a href="#fail_after_220">When tests fail
|
||||||
|
@ -295,6 +295,16 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_dns_resolver_options">smtp_dns_resolver_options</a> (empty)</b>
|
<b><a href="postconf.5.html#smtp_dns_resolver_options">smtp_dns_resolver_options</a> (empty)</b>
|
||||||
DNS Resolver options for the Postfix SMTP client.
|
DNS Resolver options for the Postfix SMTP client.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||||
|
Change the behavior of the smtp_*_timeout time lim-
|
||||||
|
its, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>MIME PROCESSING CONTROLS</b>
|
<b>MIME PROCESSING CONTROLS</b>
|
||||||
Available in Postfix version 2.0 and later:
|
Available in Postfix version 2.0 and later:
|
||||||
|
|
||||||
@ -692,6 +702,16 @@ SMTP(8) SMTP(8)
|
|||||||
Time limit for connection cache connect, send or
|
Time limit for connection cache connect, send or
|
||||||
receive operations.
|
receive operations.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||||
|
Change the behavior of the smtp_*_timeout time lim-
|
||||||
|
its, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>TROUBLE SHOOTING CONTROLS</b>
|
<b>TROUBLE SHOOTING CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
||||||
The increment in verbose logging level when a
|
The increment in verbose logging level when a
|
||||||
|
@ -4034,6 +4034,17 @@ configuration parameter. See there for details. </p>
|
|||||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="lmtp_per_record_deadline">lmtp_per_record_deadline</a>
|
||||||
|
(default: no)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a>
|
||||||
|
configuration parameter. See there for details. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.8 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="lmtp_pix_workaround_delay_time">lmtp_pix_workaround_delay_time</a>
|
<DT><b><a name="lmtp_pix_workaround_delay_time">lmtp_pix_workaround_delay_time</a>
|
||||||
@ -9545,6 +9556,29 @@ available. </p>
|
|||||||
<a href="postconf.5.html#smtp_always_send_ehlo">smtp_always_send_ehlo</a> parameter. </p>
|
<a href="postconf.5.html#smtp_always_send_ehlo">smtp_always_send_ehlo</a> parameter. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="smtp_per_record_deadline">smtp_per_record_deadline</a>
|
||||||
|
(default: no)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time. </p>
|
||||||
|
|
||||||
|
<p> Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a>
|
<DT><b><a name="smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a>
|
||||||
@ -12697,6 +12731,29 @@ DNS lookup and increases the maximal inbound delivery rate. </p>
|
|||||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="smtpd_per_record_deadline">smtpd_per_record_deadline</a>
|
||||||
|
(default: normal: no, overload: yes)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> Change the behavior of the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> time limit, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time. </p>
|
||||||
|
|
||||||
|
<p> Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="smtpd_policy_service_max_idle">smtpd_policy_service_max_idle</a>
|
<DT><b><a name="smtpd_policy_service_max_idle">smtpd_policy_service_max_idle</a>
|
||||||
|
@ -76,7 +76,8 @@ POSTSCREEN(8) POSTSCREEN(8)
|
|||||||
Support for AUTH may be added in the future. In the mean
|
Support for AUTH may be added in the future. In the mean
|
||||||
time, if you need to make these services available on port
|
time, if you need to make these services available on port
|
||||||
25, then do not enable the optional "after 220 server
|
25, then do not enable the optional "after 220 server
|
||||||
greeting" tests.
|
greeting" tests, and do not use DNSBLs that reject traffic
|
||||||
|
from dial-up and residential networks.
|
||||||
|
|
||||||
The optional "after 220 server greeting" tests involve
|
The optional "after 220 server greeting" tests involve
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these
|
||||||
|
@ -295,6 +295,16 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_dns_resolver_options">smtp_dns_resolver_options</a> (empty)</b>
|
<b><a href="postconf.5.html#smtp_dns_resolver_options">smtp_dns_resolver_options</a> (empty)</b>
|
||||||
DNS Resolver options for the Postfix SMTP client.
|
DNS Resolver options for the Postfix SMTP client.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||||
|
Change the behavior of the smtp_*_timeout time lim-
|
||||||
|
its, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>MIME PROCESSING CONTROLS</b>
|
<b>MIME PROCESSING CONTROLS</b>
|
||||||
Available in Postfix version 2.0 and later:
|
Available in Postfix version 2.0 and later:
|
||||||
|
|
||||||
@ -692,6 +702,16 @@ SMTP(8) SMTP(8)
|
|||||||
Time limit for connection cache connect, send or
|
Time limit for connection cache connect, send or
|
||||||
receive operations.
|
receive operations.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
|
||||||
|
Change the behavior of the smtp_*_timeout time lim-
|
||||||
|
its, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>TROUBLE SHOOTING CONTROLS</b>
|
<b>TROUBLE SHOOTING CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
|
||||||
The increment in verbose logging level when a
|
The increment in verbose logging level when a
|
||||||
|
@ -153,6 +153,16 @@ SMTPD(8) SMTPD(8)
|
|||||||
A mechanism to transform commands from remote SMTP
|
A mechanism to transform commands from remote SMTP
|
||||||
clients.
|
clients.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtpd_per_record_deadline">smtpd_per_record_deadline</a> (normal: no, overload: yes)</b>
|
||||||
|
Change the behavior of the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> time
|
||||||
|
limit, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>ADDRESS REWRITING CONTROLS</b>
|
<b>ADDRESS REWRITING CONTROLS</b>
|
||||||
See the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document for a detailed
|
See the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document for a detailed
|
||||||
discussion of Postfix address rewriting.
|
discussion of Postfix address rewriting.
|
||||||
@ -842,6 +852,16 @@ SMTPD(8) SMTPD(8)
|
|||||||
sions that a remote SMTP client is allowed to nego-
|
sions that a remote SMTP client is allowed to nego-
|
||||||
tiate with this service per time unit.
|
tiate with this service per time unit.
|
||||||
|
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtpd_per_record_deadline">smtpd_per_record_deadline</a> (normal: no, overload: yes)</b>
|
||||||
|
Change the behavior of the <a href="postconf.5.html#smtpd_timeout">smtpd_timeout</a> time
|
||||||
|
limit, from a time limit per read or write system
|
||||||
|
call, to a time limit to read or write a complete
|
||||||
|
record (an SMTP command line, SMTP response line,
|
||||||
|
SMTP message content line, or TLS protocol mes-
|
||||||
|
sage).
|
||||||
|
|
||||||
<b>TARPIT CONTROLS</b>
|
<b>TARPIT CONTROLS</b>
|
||||||
When a remote SMTP client makes errors, the Postfix SMTP
|
When a remote SMTP client makes errors, the Postfix SMTP
|
||||||
server can insert delays before responding. This can help
|
server can insert delays before responding. This can help
|
||||||
|
@ -2236,6 +2236,11 @@ The LMTP-specific version of the smtp_nested_header_checks
|
|||||||
configuration parameter. See there for details.
|
configuration parameter. See there for details.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.5 and later.
|
This feature is available in Postfix 2.5 and later.
|
||||||
|
.SH lmtp_per_record_deadline (default: no)
|
||||||
|
The LMTP-specific version of the smtp_per_record_deadline
|
||||||
|
configuration parameter. See there for details.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.8 and later.
|
||||||
.SH lmtp_pix_workaround_delay_time (default: 10s)
|
.SH lmtp_pix_workaround_delay_time (default: 10s)
|
||||||
The LMTP-specific version of the smtp_pix_workaround_delay_time
|
The LMTP-specific version of the smtp_pix_workaround_delay_time
|
||||||
configuration parameter. See there for details.
|
configuration parameter. See there for details.
|
||||||
@ -5499,6 +5504,23 @@ This feature is available in Postfix 2.5 and later.
|
|||||||
.SH smtp_never_send_ehlo (default: no)
|
.SH smtp_never_send_ehlo (default: no)
|
||||||
Never send EHLO at the start of an SMTP session. See also the
|
Never send EHLO at the start of an SMTP session. See also the
|
||||||
smtp_always_send_ehlo parameter.
|
smtp_always_send_ehlo parameter.
|
||||||
|
.SH smtp_per_record_deadline (default: no)
|
||||||
|
Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time.
|
||||||
|
.PP
|
||||||
|
Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no".
|
||||||
.SH smtp_pix_workaround_delay_time (default: 10s)
|
.SH smtp_pix_workaround_delay_time (default: 10s)
|
||||||
How long the Postfix SMTP client pauses before sending
|
How long the Postfix SMTP client pauses before sending
|
||||||
".<CR><LF>" in order to work around the PIX firewall
|
".<CR><LF>" in order to work around the PIX firewall
|
||||||
@ -7912,6 +7934,23 @@ lookup is disabled. Turning off name lookup reduces delays due to
|
|||||||
DNS lookup and increases the maximal inbound delivery rate.
|
DNS lookup and increases the maximal inbound delivery rate.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.3 and later.
|
This feature is available in Postfix 2.3 and later.
|
||||||
|
.SH smtpd_per_record_deadline (default: normal: no, overload: yes)
|
||||||
|
Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time.
|
||||||
|
.PP
|
||||||
|
Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no".
|
||||||
.SH smtpd_policy_service_max_idle (default: 300s)
|
.SH smtpd_policy_service_max_idle (default: 300s)
|
||||||
The time after which an idle SMTPD policy service connection is
|
The time after which an idle SMTPD policy service connection is
|
||||||
closed.
|
closed.
|
||||||
|
@ -82,7 +82,8 @@ XFORWARD.
|
|||||||
Support for AUTH may be added in the future.
|
Support for AUTH may be added in the future.
|
||||||
In the mean time, if you need to make these services available
|
In the mean time, if you need to make these services available
|
||||||
on port 25, then do not enable the optional "after 220
|
on port 25, then do not enable the optional "after 220
|
||||||
server greeting" tests.
|
server greeting" tests, and do not use DNSBLs that reject
|
||||||
|
traffic from dial-up and residential networks.
|
||||||
|
|
||||||
The optional "after 220 server greeting" tests involve
|
The optional "after 220 server greeting" tests involve
|
||||||
\fBpostscreen\fR(8)'s built-in SMTP protocol engine. When
|
\fBpostscreen\fR(8)'s built-in SMTP protocol engine. When
|
||||||
|
@ -256,6 +256,13 @@ An optional workaround for routers that break TCP window scaling.
|
|||||||
Available in Postfix version 2.8 and later:
|
Available in Postfix version 2.8 and later:
|
||||||
.IP "\fBsmtp_dns_resolver_options (empty)\fR"
|
.IP "\fBsmtp_dns_resolver_options (empty)\fR"
|
||||||
DNS Resolver options for the Postfix SMTP client.
|
DNS Resolver options for the Postfix SMTP client.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
.IP "\fBsmtp_per_record_deadline (no)\fR"
|
||||||
|
Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
time limit per read or write system call, to a time limit to read
|
||||||
|
or write a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message).
|
||||||
.SH "MIME PROCESSING CONTROLS"
|
.SH "MIME PROCESSING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@ -547,6 +554,13 @@ Available in Postfix version 2.3 and later:
|
|||||||
.IP "\fBconnection_cache_protocol_timeout (5s)\fR"
|
.IP "\fBconnection_cache_protocol_timeout (5s)\fR"
|
||||||
Time limit for connection cache connect, send or receive
|
Time limit for connection cache connect, send or receive
|
||||||
operations.
|
operations.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
.IP "\fBsmtp_per_record_deadline (no)\fR"
|
||||||
|
Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
time limit per read or write system call, to a time limit to read
|
||||||
|
or write a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message).
|
||||||
.SH "TROUBLE SHOOTING CONTROLS"
|
.SH "TROUBLE SHOOTING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -143,6 +143,13 @@ An optional workaround for routers that break TCP window scaling.
|
|||||||
Available in Postfix version 2.7 and later:
|
Available in Postfix version 2.7 and later:
|
||||||
.IP "\fBsmtpd_command_filter (empty)\fR"
|
.IP "\fBsmtpd_command_filter (empty)\fR"
|
||||||
A mechanism to transform commands from remote SMTP clients.
|
A mechanism to transform commands from remote SMTP clients.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
.IP "\fBsmtpd_per_record_deadline (normal: no, overload: yes)\fR"
|
||||||
|
Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
time limit per read or write system call, to a time limit to read
|
||||||
|
or write a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message).
|
||||||
.SH "ADDRESS REWRITING CONTROLS"
|
.SH "ADDRESS REWRITING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@ -673,6 +680,13 @@ Available in Postfix version 2.3 and later:
|
|||||||
The maximal number of new (i.e., uncached) TLS sessions that a
|
The maximal number of new (i.e., uncached) TLS sessions that a
|
||||||
remote SMTP client is allowed to negotiate with this service per
|
remote SMTP client is allowed to negotiate with this service per
|
||||||
time unit.
|
time unit.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.9 and later:
|
||||||
|
.IP "\fBsmtpd_per_record_deadline (normal: no, overload: yes)\fR"
|
||||||
|
Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
time limit per read or write system call, to a time limit to read
|
||||||
|
or write a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message).
|
||||||
.SH "TARPIT CONTROLS"
|
.SH "TARPIT CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -631,6 +631,7 @@ while (<>) {
|
|||||||
s;\bsmtp_body_checks\b;<a href="postconf.5.html#smtp_body_checks">$&</a>;g;
|
s;\bsmtp_body_checks\b;<a href="postconf.5.html#smtp_body_checks">$&</a>;g;
|
||||||
s;\bsmtp_reply_filter\b;<a href="postconf.5.html#smtp_reply_filter">$&</a>;g;
|
s;\bsmtp_reply_filter\b;<a href="postconf.5.html#smtp_reply_filter">$&</a>;g;
|
||||||
s;\bsmtp_address_preference\b;<a href="postconf.5.html#smtp_address_preference">$&</a>;g;
|
s;\bsmtp_address_preference\b;<a href="postconf.5.html#smtp_address_preference">$&</a>;g;
|
||||||
|
s;\bsmtp_per_record_deadline\b;<a href="postconf.5.html#smtp_per_record_deadline">$&</a>;g;
|
||||||
s;\bsmtpd_enforce_tls\b;<a href="postconf.5.html#smtpd_enforce_tls">$&</a>;g;
|
s;\bsmtpd_enforce_tls\b;<a href="postconf.5.html#smtpd_enforce_tls">$&</a>;g;
|
||||||
s;\bsmtpd_sasl_tls_security_options\b;<a href="postconf.5.html#smtpd_sasl_tls_security_options">$&</a>;g;
|
s;\bsmtpd_sasl_tls_security_options\b;<a href="postconf.5.html#smtpd_sasl_tls_security_options">$&</a>;g;
|
||||||
s;\bsmtpd_sasl_type\b;<a href="postconf.5.html#smtpd_sasl_type">$&</a>;g;
|
s;\bsmtpd_sasl_type\b;<a href="postconf.5.html#smtpd_sasl_type">$&</a>;g;
|
||||||
@ -667,6 +668,7 @@ while (<>) {
|
|||||||
s;\bsmtpd_tls_wrappermode\b;<a href="postconf.5.html#smtpd_tls_wrappermode">$&</a>;g;
|
s;\bsmtpd_tls_wrappermode\b;<a href="postconf.5.html#smtpd_tls_wrappermode">$&</a>;g;
|
||||||
s;\bsmtpd_use_tls\b;<a href="postconf.5.html#smtpd_use_tls">$&</a>;g;
|
s;\bsmtpd_use_tls\b;<a href="postconf.5.html#smtpd_use_tls">$&</a>;g;
|
||||||
s;\bsmtpd_reject_footer\b;<a href="postconf.5.html#smtpd_reject_footer">$&</a>;g;
|
s;\bsmtpd_reject_footer\b;<a href="postconf.5.html#smtpd_reject_footer">$&</a>;g;
|
||||||
|
s;\bsmtpd_per_record_deadline\b;<a href="postconf.5.html#smtpd_per_record_deadline">$&</a>;g;
|
||||||
s;\btls_daemon_random_bytes\b;<a href="postconf.5.html#tls_daemon_random_bytes">$&</a>;g;
|
s;\btls_daemon_random_bytes\b;<a href="postconf.5.html#tls_daemon_random_bytes">$&</a>;g;
|
||||||
s;\btls_daemon_random_source\b;<a href="postconf.5.html#tls_daemon_random_source">$&</a>;g;
|
s;\btls_daemon_random_source\b;<a href="postconf.5.html#tls_daemon_random_source">$&</a>;g;
|
||||||
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_bytes\b;<a href="postconf.5.html#tls_random_bytes">$&</a>;g;
|
s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_bytes\b;<a href="postconf.5.html#tls_random_bytes">$&</a>;g;
|
||||||
|
@ -28,11 +28,13 @@ SMTP commands (HELO, MAIL FROM, etc.) as well as mail content
|
|||||||
<p> The reason for adding Milter support to Postfix is that there
|
<p> The reason for adding Milter support to Postfix is that there
|
||||||
exists a large collection of applications, not only to block unwanted
|
exists a large collection of applications, not only to block unwanted
|
||||||
mail, but also to verify authenticity (examples: <a
|
mail, but also to verify authenticity (examples: <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
||||||
Identified Mail (DKIM)</a>, <a
|
Identified Mail (DKIM)</a>, <a
|
||||||
href="http://sourceforge.net/projects/sid-milter/">SenderID+SPF</a> and
|
href="http://sourceforge.net/projects/sid-milter/">SenderID+SPF</a> and
|
||||||
<a href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>)
|
<a href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>)
|
||||||
or to digitally sign mail (examples: <a
|
or to digitally sign mail (examples: <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
href="http://sourceforge.net/projects/dkim-milter/">DomainKeys
|
||||||
Identified Mail (DKIM)</a>, <a
|
Identified Mail (DKIM)</a>, <a
|
||||||
href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>).
|
href="http://sourceforge.net/projects/dk-milter/">DomainKeys</a>).
|
||||||
@ -212,10 +214,22 @@ other systems, libmilter may be provided by a package (called
|
|||||||
"sendmail-devel" on some Linux systems). </p>
|
"sendmail-devel" on some Linux systems). </p>
|
||||||
|
|
||||||
<p> Once libmilter is installed, applications such as <a
|
<p> Once libmilter is installed, applications such as <a
|
||||||
|
href="http://www.opendkim.org/">OpenDKIM</a>, <a
|
||||||
href="http://sourceforge.net/projects/dkim-milter/">dkim-milter</a> and
|
href="http://sourceforge.net/projects/dkim-milter/">dkim-milter</a> and
|
||||||
<a href="http://sourceforge.net/projects/sid-milter/">sid-milter</a>
|
<a href="http://sourceforge.net/projects/sid-milter/">sid-milter</a>
|
||||||
build out of the box without requiring any tinkering:</p>
|
build out of the box without requiring any tinkering:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
$ <b>gzcat opendkim-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
|
$ <b>cd opendkim-<i>x.y.z</i></b>
|
||||||
|
$ <b>./configure ...<i>options</i>...</b>
|
||||||
|
$ <b>make</b>
|
||||||
|
[...<i>lots of output omitted</i>...]
|
||||||
|
$ <b>make install</b>
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
$ <b>gzcat dkim-milter-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
$ <b>gzcat dkim-milter-<i>x.y.z</i>.tar.gz | tar xf -</b>
|
||||||
|
@ -432,13 +432,14 @@ logging more informative. </p>
|
|||||||
as: </p>
|
as: </p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
<b>COMMAND PIPELINING after</b> <i>time</i> <b>from</b> <i>[address]:port</i>
|
<b>COMMAND PIPELINING from</b> <i>[address]:port</i> <b>after</b> <i>command</i>: <i>text</i>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p> Translation: the SMTP client at <i>[address]:port</i> sent multiple
|
<p> Translation: the SMTP client at <i>[address]:port</i> sent
|
||||||
SMTP commands, instead of sending one command and then waiting for
|
multiple SMTP commands, instead of sending one command and then
|
||||||
the server to reply. This happened <i>time</i> seconds after the
|
waiting for the server to reply. This happened after the client
|
||||||
"220 " server greeting was sent. </p>
|
sent <i>command</i>. The <i>text</i> shows part of the input that
|
||||||
|
was sent too early; it is not logged with Postfix 2.8. </p>
|
||||||
|
|
||||||
<p> The postscreen_pipelining_action parameter specifies the action
|
<p> The postscreen_pipelining_action parameter specifies the action
|
||||||
that is taken next. See "<a href="#fail_after_220">When tests fail
|
that is taken next. See "<a href="#fail_after_220">When tests fail
|
||||||
|
@ -14011,3 +14011,47 @@ service performs plaintext <=> TLS ciphertext conversion. <p>
|
|||||||
|
|
||||||
<p> This feature is available in Postfix 2.8 and later. </p>
|
<p> This feature is available in Postfix 2.8 and later. </p>
|
||||||
|
|
||||||
|
%PARAM smtpd_per_record_deadline normal: no, overload: yes
|
||||||
|
|
||||||
|
<p> Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time. </p>
|
||||||
|
|
||||||
|
<p> Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". </p>
|
||||||
|
|
||||||
|
%PARAM smtp_per_record_deadline no
|
||||||
|
|
||||||
|
<p> Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
time limit per read or write system call, to a time limit to send
|
||||||
|
or receive a complete record (an SMTP command line, SMTP response
|
||||||
|
line, SMTP message content line, or TLS protocol message). This
|
||||||
|
limits the impact from hostile peers that trickle data one byte at
|
||||||
|
a time. </p>
|
||||||
|
|
||||||
|
<p> Note: when per-record deadlines are enabled, a short timeout
|
||||||
|
may cause problems with TLS over very slow network connections.
|
||||||
|
The reasons are that a TLS protocol message can be up to 16 kbytes
|
||||||
|
long (with TLSv1), and that an entire TLS protocol message must be
|
||||||
|
sent or received within the per-record deadline. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.9 and later. With older
|
||||||
|
Postfix releases, the behavior is as if this parameter is set to
|
||||||
|
"no". </p>
|
||||||
|
|
||||||
|
%PARAM lmtp_per_record_deadline no
|
||||||
|
|
||||||
|
<p> The LMTP-specific version of the smtp_per_record_deadline
|
||||||
|
configuration parameter. See there for details. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.8 and later. </p>
|
||||||
|
@ -3583,6 +3583,19 @@ extern bool var_tlsp_tls_set_sessid;
|
|||||||
#define DEF_SMTPD_REJ_FOOTER ""
|
#define DEF_SMTPD_REJ_FOOTER ""
|
||||||
extern char *var_smtpd_rej_footer;
|
extern char *var_smtpd_rej_footer;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Per-record time limit support.
|
||||||
|
*/
|
||||||
|
#define VAR_SMTPD_REC_DEADLINE "smtpd_per_record_deadline"
|
||||||
|
#define DEF_SMTPD_REC_DEADLINE "${stress?yes}${stress:no}"
|
||||||
|
extern bool var_smtpd_rec_deadline;
|
||||||
|
|
||||||
|
#define VAR_SMTP_REC_DEADLINE "smtp_per_record_deadline"
|
||||||
|
#define DEF_SMTP_REC_DEADLINE 0
|
||||||
|
#define VAR_LMTP_REC_DEADLINE "lmtp_per_record_deadline"
|
||||||
|
#define DEF_LMTP_REC_DEADLINE 0
|
||||||
|
extern bool var_smtp_rec_deadline;
|
||||||
|
|
||||||
/* LICENSE
|
/* LICENSE
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20110207"
|
#define MAIL_RELEASE_DATE "20110212"
|
||||||
#define MAIL_VERSION_NUMBER "2.9"
|
#define MAIL_VERSION_NUMBER "2.9"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@ -6,9 +6,10 @@
|
|||||||
/* SYNOPSIS
|
/* SYNOPSIS
|
||||||
/* #include <smtp_stream.h>
|
/* #include <smtp_stream.h>
|
||||||
/*
|
/*
|
||||||
/* void smtp_timeout_setup(stream, timeout)
|
/* void smtp_stream_setup(stream, timeout, enable_deadline)
|
||||||
/* VSTREAM *stream;
|
/* VSTREAM *stream;
|
||||||
/* int timeout;
|
/* int timeout;
|
||||||
|
/* int enable_deadline;
|
||||||
/*
|
/*
|
||||||
/* void smtp_printf(stream, format, ...)
|
/* void smtp_printf(stream, format, ...)
|
||||||
/* VSTREAM *stream;
|
/* VSTREAM *stream;
|
||||||
@ -44,16 +45,24 @@
|
|||||||
/* VSTREAM *stream;
|
/* VSTREAM *stream;
|
||||||
/* char *format;
|
/* char *format;
|
||||||
/* va_list ap;
|
/* va_list ap;
|
||||||
|
/* LEGACY API
|
||||||
|
/* void smtp_timeout_setup(stream, timeout)
|
||||||
|
/* VSTREAM *stream;
|
||||||
|
/* int timeout;
|
||||||
|
/* int enable_deadline;
|
||||||
/* DESCRIPTION
|
/* DESCRIPTION
|
||||||
/* This module reads and writes text records delimited by CR LF,
|
/* This module reads and writes text records delimited by CR LF,
|
||||||
/* with error detection: timeouts or unexpected end-of-file.
|
/* with error detection: timeouts or unexpected end-of-file.
|
||||||
/* A trailing CR LF is added upon writing and removed upon reading.
|
/* A trailing CR LF is added upon writing and removed upon reading.
|
||||||
/*
|
/*
|
||||||
/* smtp_timeout_setup() arranges for a time limit on the smtp read
|
/* smtp_stream_setup() prepares the specified stream for SMTP read
|
||||||
/* and write operations described below.
|
/* and write operations described below.
|
||||||
/* This routine alters the behavior of streams as follows:
|
/* This routine alters the behavior of streams as follows:
|
||||||
/* .IP \(bu
|
/* .IP \(bu
|
||||||
/* The read/write total time limit is set to the specified value.
|
/* When enable_deadline is non-zero, the stream is configured
|
||||||
|
/* to enforce a total time limit for each smtp_stream read/write
|
||||||
|
/* operation. Otherwise, the stream is configured to enforce
|
||||||
|
/* a time limit for each individual read/write system call.
|
||||||
/* .IP \f(bu
|
/* .IP \f(bu
|
||||||
/* The stream is configured to use double buffering.
|
/* The stream is configured to use double buffering.
|
||||||
/* .IP \f(bu
|
/* .IP \f(bu
|
||||||
@ -90,6 +99,9 @@
|
|||||||
/* The stream is not flushed.
|
/* The stream is not flushed.
|
||||||
/*
|
/*
|
||||||
/* smtp_vprintf() is the machine underneath smtp_printf().
|
/* smtp_vprintf() is the machine underneath smtp_printf().
|
||||||
|
/*
|
||||||
|
/* smtp_timeout_setup() is a backwards-compatibility interface
|
||||||
|
/* for programs that don't require per-record deadline support.
|
||||||
/* DIAGNOSTICS
|
/* DIAGNOSTICS
|
||||||
/* .fi
|
/* .fi
|
||||||
/* .ad
|
/* .ad
|
||||||
@ -102,7 +114,7 @@
|
|||||||
/* .IP SMTP_ERR_EOF
|
/* .IP SMTP_ERR_EOF
|
||||||
/* An I/O error happened, or the peer has disconnected unexpectedly.
|
/* An I/O error happened, or the peer has disconnected unexpectedly.
|
||||||
/* .IP SMTP_ERR_TIME
|
/* .IP SMTP_ERR_TIME
|
||||||
/* The time limit specified to smtp_timeout_setup() was exceeded.
|
/* The time limit specified to smtp_stream_setup() was exceeded.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* Additional error codes that may be used by applications:
|
/* Additional error codes that may be used by applications:
|
||||||
/* .IP SMTP_ERR_QUIET
|
/* .IP SMTP_ERR_QUIET
|
||||||
@ -166,9 +178,8 @@ static void smtp_timeout_reset(VSTREAM *stream)
|
|||||||
* in the buffer. Such system calls would really hurt when receiving or
|
* in the buffer. Such system calls would really hurt when receiving or
|
||||||
* sending body content one line at a time.
|
* sending body content one line at a time.
|
||||||
*/
|
*/
|
||||||
vstream_control(stream,
|
if (vstream_fstat(stream, VSTREAM_FLAG_DEADLINE))
|
||||||
VSTREAM_CTL_TIME_LIMIT, stream->timeout,
|
vstream_control(stream, VSTREAM_CTL_START_DEADLINE, VSTREAM_CTL_END);
|
||||||
VSTREAM_CTL_END);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* smtp_longjmp - raise an exception */
|
/* smtp_longjmp - raise an exception */
|
||||||
@ -190,13 +201,21 @@ static NORETURN smtp_longjmp(VSTREAM *stream, int err, const char *context)
|
|||||||
vstream_longjmp(stream, err);
|
vstream_longjmp(stream, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* smtp_timeout_setup - configure timeout trap */
|
/* smtp_stream_setup - configure timeout trap */
|
||||||
|
|
||||||
void smtp_timeout_setup(VSTREAM *stream, int maxtime)
|
void smtp_stream_setup(VSTREAM *stream, int maxtime, int enable_deadline)
|
||||||
{
|
{
|
||||||
|
const char *myname = "smtp_stream_setup";
|
||||||
|
|
||||||
|
if (msg_verbose)
|
||||||
|
msg_info("%s: maxtime=%d enable_deadline=%d",
|
||||||
|
myname, maxtime, enable_deadline);
|
||||||
|
|
||||||
vstream_control(stream,
|
vstream_control(stream,
|
||||||
VSTREAM_CTL_DOUBLE,
|
VSTREAM_CTL_DOUBLE,
|
||||||
VSTREAM_CTL_TIMEOUT, maxtime,
|
VSTREAM_CTL_TIMEOUT, maxtime,
|
||||||
|
enable_deadline ? VSTREAM_CTL_START_DEADLINE
|
||||||
|
: VSTREAM_CTL_STOP_DEADLINE,
|
||||||
VSTREAM_CTL_EXCEPT,
|
VSTREAM_CTL_EXCEPT,
|
||||||
VSTREAM_CTL_END);
|
VSTREAM_CTL_END);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#define SMTP_ERR_QUIET 3 /* silent cleanup (application) */
|
#define SMTP_ERR_QUIET 3 /* silent cleanup (application) */
|
||||||
#define SMTP_ERR_NONE 4 /* non-error case */
|
#define SMTP_ERR_NONE 4 /* non-error case */
|
||||||
|
|
||||||
extern void smtp_timeout_setup(VSTREAM *, int);
|
extern void smtp_stream_setup(VSTREAM *, int, int);
|
||||||
extern void PRINTFLIKE(2, 3) smtp_printf(VSTREAM *, const char *,...);
|
extern void PRINTFLIKE(2, 3) smtp_printf(VSTREAM *, const char *,...);
|
||||||
extern void smtp_flush(VSTREAM *);
|
extern void smtp_flush(VSTREAM *);
|
||||||
extern int smtp_fgetc(VSTREAM *);
|
extern int smtp_fgetc(VSTREAM *);
|
||||||
@ -43,6 +43,9 @@ extern void smtp_fputc(int, VSTREAM *);
|
|||||||
|
|
||||||
extern void smtp_vprintf(VSTREAM *, const char *, va_list);
|
extern void smtp_vprintf(VSTREAM *, const char *, va_list);
|
||||||
|
|
||||||
|
#define smtp_timeout_setup(stream, timeout) \
|
||||||
|
smtp_stream_setup((stream), (timeout), 0)
|
||||||
|
|
||||||
#define SMTP_GET_FLAG_NONE 0
|
#define SMTP_GET_FLAG_NONE 0
|
||||||
#define SMTP_GET_FLAG_SKIP (1<<0) /* skip over excess input */
|
#define SMTP_GET_FLAG_SKIP (1<<0) /* skip over excess input */
|
||||||
|
|
||||||
|
@ -68,7 +68,8 @@
|
|||||||
/* Support for AUTH may be added in the future.
|
/* Support for AUTH may be added in the future.
|
||||||
/* In the mean time, if you need to make these services available
|
/* In the mean time, if you need to make these services available
|
||||||
/* on port 25, then do not enable the optional "after 220
|
/* on port 25, then do not enable the optional "after 220
|
||||||
/* server greeting" tests.
|
/* server greeting" tests, and do not use DNSBLs that reject
|
||||||
|
/* traffic from dial-up and residential networks.
|
||||||
/*
|
/*
|
||||||
/* The optional "after 220 server greeting" tests involve
|
/* The optional "after 220 server greeting" tests involve
|
||||||
/* \fBpostscreen\fR(8)'s built-in SMTP protocol engine. When
|
/* \fBpostscreen\fR(8)'s built-in SMTP protocol engine. When
|
||||||
|
@ -175,8 +175,8 @@ void psc_parse_tests(PSC_STATE *state,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the cache entry, and allow for older postscreen versions that
|
* Parse the cache entry, and allow for older postscreen versions that
|
||||||
* implemented fewer tests. We pretend that these tests were disabled
|
* implemented fewer tests. We pretend that the newer tests were disabled
|
||||||
* when the cache entry was written.
|
* at the time that the cache entry was written.
|
||||||
*
|
*
|
||||||
* Flag the cache entry as "new" when the cache entry has fields for all
|
* Flag the cache entry as "new" when the cache entry has fields for all
|
||||||
* enabled tests, but the remote SMTP client has not yet passed all those
|
* enabled tests, but the remote SMTP client has not yet passed all those
|
||||||
|
@ -108,5 +108,6 @@
|
|||||||
VAR_LMTP_CNAME_OVERR, DEF_LMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
VAR_LMTP_CNAME_OVERR, DEF_LMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
||||||
VAR_LMTP_SASL_AUTH_SOFT_BOUNCE, DEF_LMTP_SASL_AUTH_SOFT_BOUNCE, &var_smtp_sasl_auth_soft_bounce,
|
VAR_LMTP_SASL_AUTH_SOFT_BOUNCE, DEF_LMTP_SASL_AUTH_SOFT_BOUNCE, &var_smtp_sasl_auth_soft_bounce,
|
||||||
VAR_LMTP_ASSUME_FINAL, DEF_LMTP_ASSUME_FINAL, &var_lmtp_assume_final,
|
VAR_LMTP_ASSUME_FINAL, DEF_LMTP_ASSUME_FINAL, &var_lmtp_assume_final,
|
||||||
|
VAR_LMTP_REC_DEADLINE, DEF_LMTP_REC_DEADLINE, &var_smtp_rec_deadline,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
@ -234,6 +234,13 @@
|
|||||||
/* Available in Postfix version 2.8 and later:
|
/* Available in Postfix version 2.8 and later:
|
||||||
/* .IP "\fBsmtp_dns_resolver_options (empty)\fR"
|
/* .IP "\fBsmtp_dns_resolver_options (empty)\fR"
|
||||||
/* DNS Resolver options for the Postfix SMTP client.
|
/* DNS Resolver options for the Postfix SMTP client.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.9 and later:
|
||||||
|
/* .IP "\fBsmtp_per_record_deadline (no)\fR"
|
||||||
|
/* Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
/* time limit per read or write system call, to a time limit to read
|
||||||
|
/* or write a complete record (an SMTP command line, SMTP response
|
||||||
|
/* line, SMTP message content line, or TLS protocol message).
|
||||||
/* MIME PROCESSING CONTROLS
|
/* MIME PROCESSING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -513,6 +520,13 @@
|
|||||||
/* .IP "\fBconnection_cache_protocol_timeout (5s)\fR"
|
/* .IP "\fBconnection_cache_protocol_timeout (5s)\fR"
|
||||||
/* Time limit for connection cache connect, send or receive
|
/* Time limit for connection cache connect, send or receive
|
||||||
/* operations.
|
/* operations.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.9 and later:
|
||||||
|
/* .IP "\fBsmtp_per_record_deadline (no)\fR"
|
||||||
|
/* Change the behavior of the smtp_*_timeout time limits, from a
|
||||||
|
/* time limit per read or write system call, to a time limit to read
|
||||||
|
/* or write a complete record (an SMTP command line, SMTP response
|
||||||
|
/* line, SMTP message content line, or TLS protocol message).
|
||||||
/* TROUBLE SHOOTING CONTROLS
|
/* TROUBLE SHOOTING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -815,6 +829,7 @@ char *var_smtp_body_chks;
|
|||||||
char *var_smtp_resp_filter;
|
char *var_smtp_resp_filter;
|
||||||
bool var_lmtp_assume_final;
|
bool var_lmtp_assume_final;
|
||||||
char *var_smtp_dns_res_opt;
|
char *var_smtp_dns_res_opt;
|
||||||
|
bool var_smtp_rec_deadline;
|
||||||
|
|
||||||
/* Special handling of 535 AUTH errors. */
|
/* Special handling of 535 AUTH errors. */
|
||||||
char *var_smtp_sasl_auth_cache_name;
|
char *var_smtp_sasl_auth_cache_name;
|
||||||
|
@ -112,5 +112,6 @@
|
|||||||
VAR_SMTP_CNAME_OVERR, DEF_SMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
VAR_SMTP_CNAME_OVERR, DEF_SMTP_CNAME_OVERR, &var_smtp_cname_overr,
|
||||||
VAR_SMTP_SASL_AUTH_SOFT_BOUNCE, DEF_SMTP_SASL_AUTH_SOFT_BOUNCE, &var_smtp_sasl_auth_soft_bounce,
|
VAR_SMTP_SASL_AUTH_SOFT_BOUNCE, DEF_SMTP_SASL_AUTH_SOFT_BOUNCE, &var_smtp_sasl_auth_soft_bounce,
|
||||||
VAR_LMTP_ASSUME_FINAL, DEF_LMTP_ASSUME_FINAL, &var_lmtp_assume_final,
|
VAR_LMTP_ASSUME_FINAL, DEF_LMTP_ASSUME_FINAL, &var_lmtp_assume_final,
|
||||||
|
VAR_SMTP_REC_DEADLINE, DEF_SMTP_REC_DEADLINE, &var_smtp_rec_deadline,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
@ -295,7 +295,8 @@ int smtp_helo(SMTP_STATE *state)
|
|||||||
/*
|
/*
|
||||||
* Prepare for disaster.
|
* Prepare for disaster.
|
||||||
*/
|
*/
|
||||||
smtp_timeout_setup(state->session->stream, var_smtp_helo_tmout);
|
smtp_stream_setup(state->session->stream, var_smtp_helo_tmout,
|
||||||
|
var_smtp_rec_deadline);
|
||||||
if ((except = vstream_setjmp(state->session->stream)) != 0)
|
if ((except = vstream_setjmp(state->session->stream)) != 0)
|
||||||
return (smtp_stream_except(state, except, where));
|
return (smtp_stream_except(state, except, where));
|
||||||
|
|
||||||
@ -642,7 +643,8 @@ int smtp_helo(SMTP_STATE *state)
|
|||||||
/*
|
/*
|
||||||
* Prepare for disaster.
|
* Prepare for disaster.
|
||||||
*/
|
*/
|
||||||
smtp_timeout_setup(state->session->stream, var_smtp_starttls_tmout);
|
smtp_stream_setup(state->session->stream, var_smtp_starttls_tmout,
|
||||||
|
var_smtp_rec_deadline);
|
||||||
if ((except = vstream_setjmp(state->session->stream)) != 0)
|
if ((except = vstream_setjmp(state->session->stream)) != 0)
|
||||||
return (smtp_stream_except(state, except,
|
return (smtp_stream_except(state, except,
|
||||||
"receiving the STARTTLS response"));
|
"receiving the STARTTLS response"));
|
||||||
@ -1216,8 +1218,8 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
|
|||||||
|| send_state > SMTP_STATE_QUIT)
|
|| send_state > SMTP_STATE_QUIT)
|
||||||
msg_panic("%s: bad sender state %d (receiver state %d)",
|
msg_panic("%s: bad sender state %d (receiver state %d)",
|
||||||
myname, send_state, recv_state);
|
myname, send_state, recv_state);
|
||||||
smtp_timeout_setup(session->stream,
|
smtp_stream_setup(session->stream, *xfer_timeouts[send_state],
|
||||||
*xfer_timeouts[send_state]);
|
var_smtp_rec_deadline);
|
||||||
if ((except = vstream_setjmp(session->stream)) != 0) {
|
if ((except = vstream_setjmp(session->stream)) != 0) {
|
||||||
msg_warn("smtp_proto: spurious flush before read in send state %d",
|
msg_warn("smtp_proto: spurious flush before read in send state %d",
|
||||||
send_state);
|
send_state);
|
||||||
@ -1570,8 +1572,8 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
|
|||||||
*/
|
*/
|
||||||
#define LOST_CONNECTION_INSIDE_DATA (except == SMTP_ERR_EOF)
|
#define LOST_CONNECTION_INSIDE_DATA (except == SMTP_ERR_EOF)
|
||||||
|
|
||||||
smtp_timeout_setup(session->stream,
|
smtp_stream_setup(session->stream, *xfer_timeouts[recv_state],
|
||||||
*xfer_timeouts[recv_state]);
|
var_smtp_rec_deadline);
|
||||||
if (LOST_CONNECTION_INSIDE_DATA) {
|
if (LOST_CONNECTION_INSIDE_DATA) {
|
||||||
if (vstream_setjmp(session->stream) != 0)
|
if (vstream_setjmp(session->stream) != 0)
|
||||||
RETURN(smtp_stream_except(state, SMTP_ERR_EOF,
|
RETURN(smtp_stream_except(state, SMTP_ERR_EOF,
|
||||||
@ -1879,8 +1881,8 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
|
|||||||
*/
|
*/
|
||||||
if (send_state == SMTP_STATE_DOT && nrcpt > 0) {
|
if (send_state == SMTP_STATE_DOT && nrcpt > 0) {
|
||||||
|
|
||||||
smtp_timeout_setup(session->stream,
|
smtp_stream_setup(session->stream, var_smtp_data1_tmout,
|
||||||
var_smtp_data1_tmout);
|
var_smtp_rec_deadline);
|
||||||
|
|
||||||
if ((except = vstream_setjmp(session->stream)) == 0) {
|
if ((except = vstream_setjmp(session->stream)) == 0) {
|
||||||
|
|
||||||
|
@ -127,6 +127,13 @@
|
|||||||
/* Available in Postfix version 2.7 and later:
|
/* Available in Postfix version 2.7 and later:
|
||||||
/* .IP "\fBsmtpd_command_filter (empty)\fR"
|
/* .IP "\fBsmtpd_command_filter (empty)\fR"
|
||||||
/* A mechanism to transform commands from remote SMTP clients.
|
/* A mechanism to transform commands from remote SMTP clients.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.9 and later:
|
||||||
|
/* .IP "\fBsmtpd_per_record_deadline (normal: no, overload: yes)\fR"
|
||||||
|
/* Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
/* time limit per read or write system call, to a time limit to read
|
||||||
|
/* or write a complete record (an SMTP command line, SMTP response
|
||||||
|
/* line, SMTP message content line, or TLS protocol message).
|
||||||
/* ADDRESS REWRITING CONTROLS
|
/* ADDRESS REWRITING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -631,6 +638,13 @@
|
|||||||
/* The maximal number of new (i.e., uncached) TLS sessions that a
|
/* The maximal number of new (i.e., uncached) TLS sessions that a
|
||||||
/* remote SMTP client is allowed to negotiate with this service per
|
/* remote SMTP client is allowed to negotiate with this service per
|
||||||
/* time unit.
|
/* time unit.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.9 and later:
|
||||||
|
/* .IP "\fBsmtpd_per_record_deadline (normal: no, overload: yes)\fR"
|
||||||
|
/* Change the behavior of the smtpd_timeout time limit, from a
|
||||||
|
/* time limit per read or write system call, to a time limit to read
|
||||||
|
/* or write a complete record (an SMTP command line, SMTP response
|
||||||
|
/* line, SMTP message content line, or TLS protocol message).
|
||||||
/* TARPIT CONTROLS
|
/* TARPIT CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -1248,6 +1262,7 @@ char *var_unk_name_tf_act;
|
|||||||
char *var_unk_addr_tf_act;
|
char *var_unk_addr_tf_act;
|
||||||
char *var_unv_rcpt_tf_act;
|
char *var_unv_rcpt_tf_act;
|
||||||
char *var_unv_from_tf_act;
|
char *var_unv_from_tf_act;
|
||||||
|
bool var_smtpd_rec_deadline;
|
||||||
|
|
||||||
int smtpd_proxy_opts;
|
int smtpd_proxy_opts;
|
||||||
|
|
||||||
@ -4338,7 +4353,7 @@ static void smtpd_proto(SMTPD_STATE *state)
|
|||||||
* cleans up, but no attempt is made to inform the client of the nature
|
* cleans up, but no attempt is made to inform the client of the nature
|
||||||
* of the problem.
|
* of the problem.
|
||||||
*/
|
*/
|
||||||
smtp_timeout_setup(state->client, var_smtpd_tmout);
|
smtp_stream_setup(state->client, var_smtpd_tmout, var_smtpd_rec_deadline);
|
||||||
|
|
||||||
while ((status = vstream_setjmp(state->client)) == SMTP_ERR_NONE)
|
while ((status = vstream_setjmp(state->client)) == SMTP_ERR_NONE)
|
||||||
/* void */ ;
|
/* void */ ;
|
||||||
@ -5165,6 +5180,10 @@ int main(int argc, char **argv)
|
|||||||
VAR_SMTPD_CLIENT_PORT_LOG, DEF_SMTPD_CLIENT_PORT_LOG, &var_smtpd_client_port_log,
|
VAR_SMTPD_CLIENT_PORT_LOG, DEF_SMTPD_CLIENT_PORT_LOG, &var_smtpd_client_port_log,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
static const CONFIG_NBOOL_TABLE nbool_table[] = {
|
||||||
|
VAR_SMTPD_REC_DEADLINE, DEF_SMTPD_REC_DEADLINE, &var_smtpd_rec_deadline,
|
||||||
|
0,
|
||||||
|
};
|
||||||
static const CONFIG_STR_TABLE str_table[] = {
|
static const CONFIG_STR_TABLE str_table[] = {
|
||||||
VAR_SMTPD_BANNER, DEF_SMTPD_BANNER, &var_smtpd_banner, 1, 0,
|
VAR_SMTPD_BANNER, DEF_SMTPD_BANNER, &var_smtpd_banner, 1, 0,
|
||||||
VAR_NOTIFY_CLASSES, DEF_NOTIFY_CLASSES, &var_notify_classes, 0, 0,
|
VAR_NOTIFY_CLASSES, DEF_NOTIFY_CLASSES, &var_notify_classes, 0, 0,
|
||||||
@ -5281,6 +5300,7 @@ int main(int argc, char **argv)
|
|||||||
MAIL_SERVER_STR_TABLE, str_table,
|
MAIL_SERVER_STR_TABLE, str_table,
|
||||||
MAIL_SERVER_RAW_TABLE, raw_table,
|
MAIL_SERVER_RAW_TABLE, raw_table,
|
||||||
MAIL_SERVER_BOOL_TABLE, bool_table,
|
MAIL_SERVER_BOOL_TABLE, bool_table,
|
||||||
|
MAIL_SERVER_NBOOL_TABLE, nbool_table,
|
||||||
MAIL_SERVER_TIME_TABLE, time_table,
|
MAIL_SERVER_TIME_TABLE, time_table,
|
||||||
MAIL_SERVER_PRE_INIT, pre_jail_init,
|
MAIL_SERVER_PRE_INIT, pre_jail_init,
|
||||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||||
|
@ -103,6 +103,19 @@
|
|||||||
/* System library. */
|
/* System library. */
|
||||||
|
|
||||||
#include <sys_defs.h>
|
#include <sys_defs.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#ifndef timersub
|
||||||
|
/* res = a - b */
|
||||||
|
#define timersub(a, b, res) do { \
|
||||||
|
(res)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
|
||||||
|
(res)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
|
||||||
|
if ((res)->tv_usec < 0) { \
|
||||||
|
(res)->tv_sec--; \
|
||||||
|
(res)->tv_usec += 1000000; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TLS
|
#ifdef USE_TLS
|
||||||
|
|
||||||
@ -129,6 +142,24 @@ int tls_bio(int fd, int timeout, TLS_SESS_STATE *TLScontext,
|
|||||||
int err;
|
int err;
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
int done;
|
int done;
|
||||||
|
int enable_deadline;
|
||||||
|
struct timeval time_limit; /* initial time limit */
|
||||||
|
struct timeval time_left; /* amount of time left */
|
||||||
|
struct timeval time_entry; /* time of tls_bio() entry */
|
||||||
|
struct timeval time_now; /* time after SSL_mumble() call */
|
||||||
|
struct timeval time_elapsed; /* total elapsed time */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Deadline management is simpler than with VSTREAMs, because we don't
|
||||||
|
* need to decrement a per-stream time limit. We just work within the
|
||||||
|
* budget that is available for this tls_bio() call.
|
||||||
|
*/
|
||||||
|
enable_deadline = vstream_fstat(TLScontext->stream, VSTREAM_FLAG_DEADLINE);
|
||||||
|
if (enable_deadline) {
|
||||||
|
time_limit.tv_sec = timeout;
|
||||||
|
time_limit.tv_usec = 0;
|
||||||
|
GETTIMEOFDAY(&time_entry);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If necessary, retry the SSL handshake or read/write operation after
|
* If necessary, retry the SSL handshake or read/write operation after
|
||||||
@ -194,12 +225,24 @@ int tls_bio(int fd, int timeout, TLS_SESS_STATE *TLScontext,
|
|||||||
done = 1;
|
done = 1;
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_WANT_WRITE:
|
case SSL_ERROR_WANT_WRITE:
|
||||||
|
case SSL_ERROR_WANT_READ:
|
||||||
|
if (enable_deadline) {
|
||||||
|
GETTIMEOFDAY(&time_now);
|
||||||
|
timersub(&time_now, &time_entry, &time_elapsed);
|
||||||
|
timersub(&time_limit, &time_elapsed, &time_left);
|
||||||
|
timeout = time_left.tv_sec + (time_left.tv_usec > 0);
|
||||||
|
if (timeout <= 0) {
|
||||||
|
errno = ETIMEDOUT;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err == SSL_ERROR_WANT_WRITE) {
|
||||||
if (write_wait(fd, timeout) < 0)
|
if (write_wait(fd, timeout) < 0)
|
||||||
return (-1); /* timeout error */
|
return (-1); /* timeout error */
|
||||||
break;
|
} else {
|
||||||
case SSL_ERROR_WANT_READ:
|
|
||||||
if (read_wait(fd, timeout) < 0)
|
if (read_wait(fd, timeout) < 0)
|
||||||
return (-1); /* timeout error */
|
return (-1); /* timeout error */
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -138,6 +138,10 @@
|
|||||||
/*
|
/*
|
||||||
/* int vstream_wr_timeout(stream)
|
/* int vstream_wr_timeout(stream)
|
||||||
/* VSTREAM *stream;
|
/* VSTREAM *stream;
|
||||||
|
/*
|
||||||
|
/* int vstream_fstat(stream, flags)
|
||||||
|
/* VSTREAM *stream;
|
||||||
|
/* int flags;
|
||||||
/* DESCRIPTION
|
/* DESCRIPTION
|
||||||
/* The \fIvstream\fR module implements light-weight buffered I/O
|
/* The \fIvstream\fR module implements light-weight buffered I/O
|
||||||
/* similar to the standard I/O routines.
|
/* similar to the standard I/O routines.
|
||||||
@ -298,7 +302,7 @@
|
|||||||
/* .IP "VSTREAM_CTL_TIMEOUT (int)
|
/* .IP "VSTREAM_CTL_TIMEOUT (int)
|
||||||
/* The deadline for a descriptor to become readable in case of a read
|
/* The deadline for a descriptor to become readable in case of a read
|
||||||
/* request, or writable in case of a write request. Specify a value
|
/* request, or writable in case of a write request. Specify a value
|
||||||
/* <= 0 to disable deadlines.
|
/* of 0 to disable deadlines.
|
||||||
/* .IP "VSTREAM_CTL_EXCEPT (no value)"
|
/* .IP "VSTREAM_CTL_EXCEPT (no value)"
|
||||||
/* Enable exception handling with vstream_setjmp() and vstream_longjmp().
|
/* Enable exception handling with vstream_setjmp() and vstream_longjmp().
|
||||||
/* This involves allocation of additional memory that normally isn't
|
/* This involves allocation of additional memory that normally isn't
|
||||||
@ -319,12 +323,14 @@
|
|||||||
/* int. Use an explicit cast to avoid problems on LP64
|
/* int. Use an explicit cast to avoid problems on LP64
|
||||||
/* environments and other environments where ssize_t is larger
|
/* environments and other environments where ssize_t is larger
|
||||||
/* than int.
|
/* than int.
|
||||||
/* .IP "VSTREAM_CTL_TIME_LIMIT (int)"
|
/* .IP VSTREAM_CTL_START_DEADLINE
|
||||||
/* Specify an upper bound on the total time to complete all
|
/* Change the VSTREAM_CTL_TIMEOUT behavior, to limit the total
|
||||||
/* subsequent read or write operations. This is different from
|
/* time for all subsequent file descriptor read or write
|
||||||
/* VSTREAM_CTL_TIMEOUT, which specifies a deadline for each
|
/* operations, and recharge the deadline timer.
|
||||||
/* read or write operation. Specify a relative time in seconds,
|
/* .IP VSTREAM_CTL_STOP_DEADLINE
|
||||||
/* or zero to disable this feature.
|
/* Revert VSTREAM_CTL_TIMEOUT behavior to the default, i.e.
|
||||||
|
/* a time limit for individual file descriptor read or write
|
||||||
|
/* operations.
|
||||||
/* .PP
|
/* .PP
|
||||||
/* vstream_fileno() gives access to the file handle associated with
|
/* vstream_fileno() gives access to the file handle associated with
|
||||||
/* a buffered stream. With streams that have separate read/write
|
/* a buffered stream. With streams that have separate read/write
|
||||||
@ -402,6 +408,15 @@
|
|||||||
/*
|
/*
|
||||||
/* vstream_rd_mumble() and vstream_wr_mumble() report on
|
/* vstream_rd_mumble() and vstream_wr_mumble() report on
|
||||||
/* read and write error conditions, respectively.
|
/* read and write error conditions, respectively.
|
||||||
|
/*
|
||||||
|
/* vstream_fstat() queries stream status information about
|
||||||
|
/* user-requested features. The \fIflags\fR argument is the
|
||||||
|
/* bitwise OR of one or more of the following, and the result
|
||||||
|
/* value is the bitwise OR of the features that are activated.
|
||||||
|
/* .IP VSTREAM_FLAG_DEADLINE
|
||||||
|
/* The deadline feature is activated.
|
||||||
|
/* .IP VSTREAM_FLAG_DOUBLE
|
||||||
|
/* The double-buffering feature is activated.
|
||||||
/* DIAGNOSTICS
|
/* DIAGNOSTICS
|
||||||
/* Panics: interface violations. Fatal errors: out of memory.
|
/* Panics: interface violations. Fatal errors: out of memory.
|
||||||
/* SEE ALSO
|
/* SEE ALSO
|
||||||
@ -1314,7 +1329,6 @@ void vstream_control(VSTREAM *stream, int name,...)
|
|||||||
int old_fd;
|
int old_fd;
|
||||||
ssize_t req_bufsize = 0;
|
ssize_t req_bufsize = 0;
|
||||||
VSTREAM *stream2;
|
VSTREAM *stream2;
|
||||||
int time_limit;
|
|
||||||
|
|
||||||
#define SWAP(type,a,b) do { type temp = (a); (a) = (b); (b) = (temp); } while (0)
|
#define SWAP(type,a,b) do { type temp = (a); (a) = (b); (b) = (temp); } while (0)
|
||||||
|
|
||||||
@ -1377,6 +1391,8 @@ void vstream_control(VSTREAM *stream, int name,...)
|
|||||||
if (stream->timeout == 0)
|
if (stream->timeout == 0)
|
||||||
GETTIMEOFDAY(&stream->iotime);
|
GETTIMEOFDAY(&stream->iotime);
|
||||||
stream->timeout = va_arg(ap, int);
|
stream->timeout = va_arg(ap, int);
|
||||||
|
if (stream->timeout < 0)
|
||||||
|
msg_panic("%s: bad timeout %d", myname, stream->timeout);
|
||||||
break;
|
break;
|
||||||
case VSTREAM_CTL_EXCEPT:
|
case VSTREAM_CTL_EXCEPT:
|
||||||
if (stream->jbuf == 0)
|
if (stream->jbuf == 0)
|
||||||
@ -1428,17 +1444,15 @@ void vstream_control(VSTREAM *stream, int name,...)
|
|||||||
* that we need to do I/O. This avoids a performance hit when
|
* that we need to do I/O. This avoids a performance hit when
|
||||||
* sending or receiving body content one line at a time.
|
* sending or receiving body content one line at a time.
|
||||||
*/
|
*/
|
||||||
case VSTREAM_CTL_TIME_LIMIT:
|
case VSTREAM_CTL_STOP_DEADLINE:
|
||||||
time_limit = va_arg(ap, int);
|
|
||||||
if (time_limit < 0) {
|
|
||||||
msg_panic("%s: bad time limit: %d", myname, time_limit);
|
|
||||||
} else if (time_limit == 0) {
|
|
||||||
stream->buf.flags &= ~VSTREAM_FLAG_DEADLINE;
|
stream->buf.flags &= ~VSTREAM_FLAG_DEADLINE;
|
||||||
} else {
|
break;
|
||||||
|
case VSTREAM_CTL_START_DEADLINE:
|
||||||
|
if (stream->timeout <= 0)
|
||||||
|
msg_panic("%s: bad timeout %d", myname, stream->timeout);
|
||||||
stream->buf.flags |= VSTREAM_FLAG_DEADLINE;
|
stream->buf.flags |= VSTREAM_FLAG_DEADLINE;
|
||||||
stream->time_limit.tv_sec = time_limit;
|
stream->time_limit.tv_sec = stream->timeout;
|
||||||
stream->time_limit.tv_usec = 0;
|
stream->time_limit.tv_usec = 0;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
msg_panic("%s: bad name %d", myname, name);
|
msg_panic("%s: bad name %d", myname, name);
|
||||||
|
@ -126,6 +126,8 @@ extern int vstream_fdclose(VSTREAM *);
|
|||||||
#define vstream_ftime(vp) ((time_t) ((vp)->iotime.tv_sec))
|
#define vstream_ftime(vp) ((time_t) ((vp)->iotime.tv_sec))
|
||||||
#define vstream_ftimeval(vp) ((vp)->iotime)
|
#define vstream_ftimeval(vp) ((vp)->iotime)
|
||||||
|
|
||||||
|
#define vstream_fstat(vp, fl) ((vp)->buf.flags & (fl))
|
||||||
|
|
||||||
extern void vstream_control(VSTREAM *, int,...);
|
extern void vstream_control(VSTREAM *, int,...);
|
||||||
|
|
||||||
#define VSTREAM_CTL_END 0
|
#define VSTREAM_CTL_END 0
|
||||||
@ -144,7 +146,8 @@ extern void vstream_control(VSTREAM *, int,...);
|
|||||||
#endif
|
#endif
|
||||||
#define VSTREAM_CTL_BUFSIZE 12
|
#define VSTREAM_CTL_BUFSIZE 12
|
||||||
#define VSTREAM_CTL_SWAP_FD 13
|
#define VSTREAM_CTL_SWAP_FD 13
|
||||||
#define VSTREAM_CTL_TIME_LIMIT 14
|
#define VSTREAM_CTL_START_DEADLINE 14
|
||||||
|
#define VSTREAM_CTL_STOP_DEADLINE 15
|
||||||
|
|
||||||
extern VSTREAM *PRINTFLIKE(1, 2) vstream_printf(const char *,...);
|
extern VSTREAM *PRINTFLIKE(1, 2) vstream_printf(const char *,...);
|
||||||
extern VSTREAM *PRINTFLIKE(2, 3) vstream_fprintf(VSTREAM *, const char *,...);
|
extern VSTREAM *PRINTFLIKE(2, 3) vstream_fprintf(VSTREAM *, const char *,...);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user