mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-28 12:48:01 +00:00
postfix-2.12-20140318
This commit is contained in:
parent
977f2661d5
commit
1b55748771
@ -19611,15 +19611,26 @@ Apologies for any names omitted.
|
|||||||
20140316
|
20140316
|
||||||
|
|
||||||
Feature: preliminary support to change arbitrary hard
|
Feature: preliminary support to change arbitrary hard
|
||||||
delivery errors into soft errors and vice versa, originally
|
delivery errors into soft errors and vice versa, or to
|
||||||
introduced for sites that want to hard-bounce mail when a
|
replace the descriptive text of non-delivery notifications.
|
||||||
remote SMTP server does not announce TLS support. New main.cf
|
This was originally introduced for sites that want to bounce
|
||||||
|
mail when no remote SMTP server announces TLS support. New
|
||||||
parameters: {default,smtp,pipe,virtual}_bounce_defer_filter.
|
parameters: {default,smtp,pipe,virtual}_bounce_defer_filter.
|
||||||
Support for the local(8) delivery agent is awaiting additional
|
Files: proto/postconf.proto, mantools/postlink, global/bounce.[hc],
|
||||||
code to emulate defer_one() support, and support for qmgr(8)
|
bounce/defer.[hc], global/ndr_filter.[hc], global/mail_params.[hc],
|
||||||
is awaiting further analysis. Files: proto/postconf.proto,
|
|
||||||
mantools/postlink, global/bounce.[hc], bounce/defer.[hc],
|
|
||||||
global/ndr_filter.[hc], global/mail_params.[hc],
|
|
||||||
master/event_server.c, master/multi_server.c,
|
master/event_server.c, master/multi_server.c,
|
||||||
master/single_server.c, master/trigger_server.c, smtp/smtp.c,
|
master/single_server.c, master/trigger_server.c, smtp/smtp.c,
|
||||||
pipe/pipe.c, virtual/virtual.c.
|
pipe/pipe.c, virtual/virtual.c.
|
||||||
|
|
||||||
|
20140317
|
||||||
|
|
||||||
|
Feature: local_bounce_defer_filter support. Files:
|
||||||
|
global/bounce.[hc], global/defer.[hc], local/command.c,
|
||||||
|
local/file.c, local/bounce_workaround.c, local/local.c,
|
||||||
|
global/mail_params.h.
|
||||||
|
|
||||||
|
20140318
|
||||||
|
|
||||||
|
Refinement: don't throttle an SMTP destination when the new
|
||||||
|
smtp_bounce_defer_filter feature turns a soft bounce into
|
||||||
|
a hard bounce. File: smtp/smtp_trouble.c.
|
||||||
|
@ -16,17 +16,17 @@ specifies the release date of a stable release or snapshot release.
|
|||||||
If you upgrade from Postfix 2.10 or earlier, read RELEASE_NOTES-2.11
|
If you upgrade from Postfix 2.10 or earlier, read RELEASE_NOTES-2.11
|
||||||
before proceeding.
|
before proceeding.
|
||||||
|
|
||||||
Major changes with snapshot 20140316
|
Major changes with snapshot 20140318
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
Preliminary support to change arbitrary hard delivery errors into
|
Support to change arbitrary hard delivery errors into soft errors
|
||||||
soft errors and vice versa, originally implemented for sites that
|
and vice versa, or to replace the descriptive text in non-delivery
|
||||||
want to bounce mail when a remote SMTP server does not support
|
notifications. This was originally implemented for sites that want
|
||||||
STARTTLS.
|
to bounce mail when no remote SMTP server supports STARTTLS.
|
||||||
|
|
||||||
This feature is implemented as a filter that replaces the three-number
|
This feature is implemented as a filter that replaces the three-number
|
||||||
enhanced status code and descriptive text in Postfix delivery agent
|
enhanced status code and descriptive text in Postfix delivery agent
|
||||||
bounce/defer messages.
|
bounce/defer messages. Note: this will not override "soft_bounce=yes".
|
||||||
|
|
||||||
The following example turns specific soft TLS errors into hard
|
The following example turns specific soft TLS errors into hard
|
||||||
errors, by overriding the first number in the enhanced status code.
|
errors, by overriding the first number in the enhanced status code.
|
||||||
@ -38,15 +38,20 @@ errors, by overriding the first number in the enhanced status code.
|
|||||||
/^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/ 5$1
|
/^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/ 5$1
|
||||||
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ 5$1
|
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ 5$1
|
||||||
|
|
||||||
Support is currently limited to the lmtp(8), pipe(8), smtp(8) and
|
This feature is supported in the lmtp(8), local(8), pipe(8), smtp(8)
|
||||||
virtual(8) delivery agents. The new main.cf parameters and default
|
and virtual(8) delivery agents. That is, all delivery agents that
|
||||||
values are:
|
actually deliver mail.
|
||||||
|
|
||||||
|
This feature will not be supported in the error(8) or retry(8) dummy
|
||||||
|
delivery agents, because lots of things would break.
|
||||||
|
|
||||||
|
The new main.cf parameters and default values are:
|
||||||
|
|
||||||
default_bounce_defer_filter =
|
default_bounce_defer_filter =
|
||||||
lmtp_bounce_defer_filter = $default_bounce_defer_filter
|
lmtp_bounce_defer_filter = $default_bounce_defer_filter
|
||||||
|
local_bounce_defer_filter = $default_bounce_defer_filter
|
||||||
pipe_bounce_defer_filter = $default_bounce_defer_filter
|
pipe_bounce_defer_filter = $default_bounce_defer_filter
|
||||||
smtp_bounce_defer_filter = $default_bounce_defer_filter
|
smtp_bounce_defer_filter = $default_bounce_defer_filter
|
||||||
virtual_bounce_defer_filter = $default_bounce_defer_filter
|
virtual_bounce_defer_filter = $default_bounce_defer_filter
|
||||||
|
|
||||||
See the postconf(5) manpage for more details. Support for local(8)
|
See the postconf(5) manpage for more details.
|
||||||
and qmgr(8) will be added as time is available.
|
|
||||||
|
@ -152,10 +152,6 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_never_send_ehlo">smtp_never_send_ehlo</a> (no)</b>
|
<b><a href="postconf.5.html#smtp_never_send_ehlo">smtp_never_send_ehlo</a> (no)</b>
|
||||||
Never send EHLO at the start of an SMTP session.
|
Never send EHLO at the start of an SMTP session.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
|
||||||
soft errors and vice versa.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b>
|
<b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b>
|
||||||
Defer mail delivery when no MX record resolves to an IP address.
|
Defer mail delivery when no MX record resolves to an IP address.
|
||||||
|
|
||||||
@ -294,6 +290,12 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_dns_support_level">smtp_dns_support_level</a> (empty)</b>
|
<b><a href="postconf.5.html#smtp_dns_support_level">smtp_dns_support_level</a> (empty)</b>
|
||||||
Level of DNS support in the Postfix SMTP client.
|
Level of DNS support in the Postfix SMTP client.
|
||||||
|
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent.
|
||||||
|
|
||||||
<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:
|
||||||
|
|
||||||
|
@ -358,6 +358,12 @@ LOCAL(8) LOCAL(8)
|
|||||||
attribute, when delivering mail to a child alias that does not
|
attribute, when delivering mail to a child alias that does not
|
||||||
have its own owner alias.
|
have its own owner alias.
|
||||||
|
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#local_bounce_defer_filter">local_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the <a href="local.8.html"><b>local</b>(8)</a> delivery agent.
|
||||||
|
|
||||||
<b>DELIVERY METHOD CONTROLS</b>
|
<b>DELIVERY METHOD CONTROLS</b>
|
||||||
The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to low is:
|
The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to low is:
|
||||||
aliases, .forward files, <a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a>, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>,
|
aliases, .forward files, <a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a>, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>,
|
||||||
|
@ -425,10 +425,6 @@ PIPE(8) PIPE(8)
|
|||||||
The maximal number of incoming connections that a Postfix daemon
|
The maximal number of incoming connections that a Postfix daemon
|
||||||
process will service before terminating voluntarily.
|
process will service before terminating voluntarily.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#pipe_bounce_defer_filter">pipe_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
|
||||||
soft errors and vice versa.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
||||||
The process ID of a Postfix command or daemon process.
|
The process ID of a Postfix command or daemon process.
|
||||||
|
|
||||||
@ -451,6 +447,12 @@ PIPE(8) PIPE(8)
|
|||||||
syslog records, so that "smtpd" becomes, for example, "post-
|
syslog records, so that "smtpd" becomes, for example, "post-
|
||||||
fix/smtpd".
|
fix/smtpd".
|
||||||
|
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#pipe_bounce_defer_filter">pipe_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the <a href="pipe.8.html"><b>pipe</b>(8)</a> delivery agent.
|
||||||
|
|
||||||
<b>SEE ALSO</b>
|
<b>SEE ALSO</b>
|
||||||
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
||||||
<a href="bounce.8.html">bounce(8)</a>, delivery status reports
|
<a href="bounce.8.html">bounce(8)</a>, delivery status reports
|
||||||
|
@ -5127,6 +5127,18 @@ This feature is available in Postfix 2.1 and later.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
</DD>
|
||||||
|
|
||||||
|
<DT><b><a name="local_bounce_defer_filter">local_bounce_defer_filter</a>
|
||||||
|
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||||
|
|
||||||
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the <a href="local.8.html">local(8)</a> delivery agent. See
|
||||||
|
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
|
||||||
|
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="local_command_shell">local_command_shell</a>
|
<DT><b><a name="local_command_shell">local_command_shell</a>
|
||||||
@ -7005,8 +7017,8 @@ This feature is available in Postfix 2.0 and later.
|
|||||||
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
|
soft errors and vice versa in the <a href="pipe.8.html">pipe(8)</a> delivery agent. See
|
||||||
details. </p>
|
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
|
||||||
@ -9582,8 +9594,8 @@ that change the delivery time or destination are not available.
|
|||||||
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
|
soft errors and vice versa in the <a href="smtp.8.html">smtp(8)</a> delivery agent. See
|
||||||
details. </p>
|
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||||
|
|
||||||
<p> NOTE: This feature modifies error messages that are generated
|
<p> NOTE: This feature modifies error messages that are generated
|
||||||
by the Postfix SMTP client, and that may or may not be derived from
|
by the Postfix SMTP client, and that may or may not be derived from
|
||||||
@ -18211,8 +18223,8 @@ This feature is available in Postfix 2.1 and later.
|
|||||||
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
|
soft errors and vice versa in the <a href="virtual.8.html">virtual(8)</a> delivery agent. See
|
||||||
details. </p>
|
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
|
||||||
|
@ -152,10 +152,6 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_never_send_ehlo">smtp_never_send_ehlo</a> (no)</b>
|
<b><a href="postconf.5.html#smtp_never_send_ehlo">smtp_never_send_ehlo</a> (no)</b>
|
||||||
Never send EHLO at the start of an SMTP session.
|
Never send EHLO at the start of an SMTP session.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
|
||||||
soft errors and vice versa.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b>
|
<b><a href="postconf.5.html#smtp_defer_if_no_mx_address_found">smtp_defer_if_no_mx_address_found</a> (no)</b>
|
||||||
Defer mail delivery when no MX record resolves to an IP address.
|
Defer mail delivery when no MX record resolves to an IP address.
|
||||||
|
|
||||||
@ -294,6 +290,12 @@ SMTP(8) SMTP(8)
|
|||||||
<b><a href="postconf.5.html#smtp_dns_support_level">smtp_dns_support_level</a> (empty)</b>
|
<b><a href="postconf.5.html#smtp_dns_support_level">smtp_dns_support_level</a> (empty)</b>
|
||||||
Level of DNS support in the Postfix SMTP client.
|
Level of DNS support in the Postfix SMTP client.
|
||||||
|
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent.
|
||||||
|
|
||||||
<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:
|
||||||
|
|
||||||
|
@ -261,9 +261,11 @@ VIRTUAL(8) VIRTUAL(8)
|
|||||||
syslog records, so that "smtpd" becomes, for example, "post-
|
syslog records, so that "smtpd" becomes, for example, "post-
|
||||||
fix/smtpd".
|
fix/smtpd".
|
||||||
|
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#virtual_bounce_defer_filter">virtual_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
<b><a href="postconf.5.html#virtual_bounce_defer_filter">virtual_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b>
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa.
|
soft errors and vice versa in the <a href="virtual.8.html"><b>virtual</b>(8)</a> delivery agent.
|
||||||
|
|
||||||
<b>SEE ALSO</b>
|
<b>SEE ALSO</b>
|
||||||
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
||||||
|
@ -2929,6 +2929,12 @@ Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
|||||||
The default time unit is s (seconds).
|
The default time unit is s (seconds).
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.1 and later.
|
This feature is available in Postfix 2.1 and later.
|
||||||
|
.SH local_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the \fBlocal\fR(8) delivery agent. See
|
||||||
|
default_bounce_defer_filter for details.
|
||||||
|
.PP
|
||||||
|
This feature is available in Postfix 2.12 and later.
|
||||||
.SH local_command_shell (default: empty)
|
.SH local_command_shell (default: empty)
|
||||||
Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command.
|
Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command.
|
||||||
By default, non-Postfix commands are executed directly; commands
|
By default, non-Postfix commands are executed directly; commands
|
||||||
@ -4169,8 +4175,8 @@ submissions from the Postfix maildrop queue.
|
|||||||
This feature is available in Postfix 2.0 and later.
|
This feature is available in Postfix 2.0 and later.
|
||||||
.SH pipe_bounce_defer_filter (default: $default_bounce_defer_filter)
|
.SH pipe_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the \fBpipe\fR(8) delivery agent. See
|
||||||
details.
|
default_bounce_defer_filter for details.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.12 and later.
|
This feature is available in Postfix 2.12 and later.
|
||||||
.SH plaintext_reject_code (default: 450)
|
.SH plaintext_reject_code (default: 450)
|
||||||
@ -5848,8 +5854,8 @@ that change the delivery time or destination are not available.
|
|||||||
This feature is available in Postfix 2.5 and later.
|
This feature is available in Postfix 2.5 and later.
|
||||||
.SH smtp_bounce_defer_filter (default: $default_bounce_defer_filter)
|
.SH smtp_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the \fBsmtp\fR(8) delivery agent. See
|
||||||
details.
|
default_bounce_defer_filter for details.
|
||||||
.PP
|
.PP
|
||||||
NOTE: This feature modifies error messages that are generated
|
NOTE: This feature modifies error messages that are generated
|
||||||
by the Postfix SMTP client, and that may or may not be derived from
|
by the Postfix SMTP client, and that may or may not be derived from
|
||||||
@ -12334,8 +12340,8 @@ change in the future.
|
|||||||
This feature is available in Postfix 2.1 and later.
|
This feature is available in Postfix 2.1 and later.
|
||||||
.SH virtual_bounce_defer_filter (default: $default_bounce_defer_filter)
|
.SH virtual_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. See
|
||||||
details.
|
default_bounce_defer_filter for details.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.12 and later.
|
This feature is available in Postfix 2.12 and later.
|
||||||
.SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit)
|
.SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit)
|
||||||
|
@ -419,6 +419,11 @@ Defer delivery when a mailbox file is not owned by its recipient.
|
|||||||
Reset the \fBlocal\fR(8) delivery agent's idea of the owner-alias
|
Reset the \fBlocal\fR(8) delivery agent's idea of the owner-alias
|
||||||
attribute, when delivering mail to a child alias that does not have
|
attribute, when delivering mail to a child alias that does not have
|
||||||
its own owner alias.
|
its own owner alias.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
.IP "\fBlocal_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the \fBlocal\fR(8) delivery agent.
|
||||||
.SH "DELIVERY METHOD CONTROLS"
|
.SH "DELIVERY METHOD CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -409,9 +409,6 @@ for an incoming connection before terminating voluntarily.
|
|||||||
.IP "\fBmax_use (100)\fR"
|
.IP "\fBmax_use (100)\fR"
|
||||||
The maximal number of incoming connections that a Postfix daemon
|
The maximal number of incoming connections that a Postfix daemon
|
||||||
process will service before terminating voluntarily.
|
process will service before terminating voluntarily.
|
||||||
.IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
|
||||||
soft errors and vice versa.
|
|
||||||
.IP "\fBprocess_id (read-only)\fR"
|
.IP "\fBprocess_id (read-only)\fR"
|
||||||
The process ID of a Postfix command or daemon process.
|
The process ID of a Postfix command or daemon process.
|
||||||
.IP "\fBprocess_name (read-only)\fR"
|
.IP "\fBprocess_name (read-only)\fR"
|
||||||
@ -427,6 +424,11 @@ The syslog facility of Postfix logging.
|
|||||||
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
||||||
The mail system name that is prepended to the process name in syslog
|
The mail system name that is prepended to the process name in syslog
|
||||||
records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
.IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the \fBpipe\fR(8) delivery agent.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -163,9 +163,6 @@ Ignore DNS MX lookups that produce no response.
|
|||||||
Always send EHLO at the start of an SMTP session.
|
Always send EHLO at the start of an SMTP session.
|
||||||
.IP "\fBsmtp_never_send_ehlo (no)\fR"
|
.IP "\fBsmtp_never_send_ehlo (no)\fR"
|
||||||
Never send EHLO at the start of an SMTP session.
|
Never send EHLO at the start of an SMTP session.
|
||||||
.IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
|
||||||
soft errors and vice versa.
|
|
||||||
.IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
|
.IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
|
||||||
Defer mail delivery when no MX record resolves to an IP address.
|
Defer mail delivery when no MX record resolves to an IP address.
|
||||||
.IP "\fBsmtp_line_length_limit (998)\fR"
|
.IP "\fBsmtp_line_length_limit (998)\fR"
|
||||||
@ -277,6 +274,11 @@ FROM command in SASL-authenticated SMTP sessions.
|
|||||||
Available in Postfix version 2.11 and later:
|
Available in Postfix version 2.11 and later:
|
||||||
.IP "\fBsmtp_dns_support_level (empty)\fR"
|
.IP "\fBsmtp_dns_support_level (empty)\fR"
|
||||||
Level of DNS support in the Postfix SMTP client.
|
Level of DNS support in the Postfix SMTP client.
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
|
.IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the \fBsmtp\fR(8) delivery agent.
|
||||||
.SH "MIME PROCESSING CONTROLS"
|
.SH "MIME PROCESSING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -281,9 +281,11 @@ The syslog facility of Postfix logging.
|
|||||||
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
||||||
The mail system name that is prepended to the process name in syslog
|
The mail system name that is prepended to the process name in syslog
|
||||||
records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
||||||
|
.PP
|
||||||
|
Available in Postfix version 2.12 and later:
|
||||||
.IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
.IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
Optional filter to change arbitrary hard delivery errors into
|
Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa.
|
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -307,6 +307,7 @@ while (<>) {
|
|||||||
s;\blmtp_skip_quit_response\b;<a href="postconf.5.html#lmtp_skip_quit_response">$&</a>;g;
|
s;\blmtp_skip_quit_response\b;<a href="postconf.5.html#lmtp_skip_quit_response">$&</a>;g;
|
||||||
s;\blmtp_tcp_port\b;<a href="postconf.5.html#lmtp_tcp_port">$&</a>;g;
|
s;\blmtp_tcp_port\b;<a href="postconf.5.html#lmtp_tcp_port">$&</a>;g;
|
||||||
s;\blmtp_xforward_timeout\b;<a href="postconf.5.html#lmtp_xforward_timeout">$&</a>;g;
|
s;\blmtp_xforward_timeout\b;<a href="postconf.5.html#lmtp_xforward_timeout">$&</a>;g;
|
||||||
|
s;\blocal_bounce_defer_filter\b;<a href="postconf.5.html#local_bounce_defer_filter">$&</a>;g;
|
||||||
s;\blocal_command_shell\b;<a href="postconf.5.html#local_command_shell">$&</a>;g;
|
s;\blocal_command_shell\b;<a href="postconf.5.html#local_command_shell">$&</a>;g;
|
||||||
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_concurrency_limit\b;<a href="postconf.5.html#local_destination_concurrency_limit">$&</a>;g;
|
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_concurrency_limit\b;<a href="postconf.5.html#local_destination_concurrency_limit">$&</a>;g;
|
||||||
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g;
|
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g;
|
||||||
|
@ -15683,8 +15683,8 @@ sender. </p>
|
|||||||
%PARAM smtp_bounce_defer_filter $default_bounce_defer_filter
|
%PARAM smtp_bounce_defer_filter $default_bounce_defer_filter
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the smtp(8) delivery agent. See
|
||||||
details. </p>
|
default_bounce_defer_filter for details. </p>
|
||||||
|
|
||||||
<p> NOTE: This feature modifies error messages that are generated
|
<p> NOTE: This feature modifies error messages that are generated
|
||||||
by the Postfix SMTP client, and that may or may not be derived from
|
by the Postfix SMTP client, and that may or may not be derived from
|
||||||
@ -15702,15 +15702,23 @@ configuration parameter. See there for details. </p>
|
|||||||
%PARAM pipe_bounce_defer_filter $default_bounce_defer_filter
|
%PARAM pipe_bounce_defer_filter $default_bounce_defer_filter
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the pipe(8) delivery agent. See
|
||||||
details. </p>
|
default_bounce_defer_filter for details. </p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
|
||||||
%PARAM virtual_bounce_defer_filter $default_bounce_defer_filter
|
%PARAM virtual_bounce_defer_filter $default_bounce_defer_filter
|
||||||
|
|
||||||
<p> Optional filter to change arbitrary hard delivery errors into
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
soft errors and vice versa. See default_bounce_defer_filter for
|
soft errors and vice versa in the virtual(8) delivery agent. See
|
||||||
details. </p>
|
default_bounce_defer_filter for details. </p>
|
||||||
|
|
||||||
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
|
||||||
|
%PARAM local_bounce_defer_filter $default_bounce_defer_filter
|
||||||
|
|
||||||
|
<p> Optional filter to change arbitrary hard delivery errors into
|
||||||
|
soft errors and vice versa in the local(8) delivery agent. See
|
||||||
|
default_bounce_defer_filter for details. </p>
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||||
|
@ -90,8 +90,8 @@
|
|||||||
/*
|
/*
|
||||||
/* bounce_client_init() initializes an optional DSN filter.
|
/* bounce_client_init() initializes an optional DSN filter.
|
||||||
/*
|
/*
|
||||||
/* bounce_append_intern() is for use after the DSN filter. DSN
|
/* bounce_append_intern() and bounce_one_intern() are for use
|
||||||
/* filtering is not yet supported for bounce_one().
|
/* after the DSN filter.
|
||||||
/*
|
/*
|
||||||
/* Arguments:
|
/* Arguments:
|
||||||
/* .IP flags
|
/* .IP flags
|
||||||
@ -393,7 +393,7 @@ int bounce_one(int flags, const char *queue, const char *id,
|
|||||||
const char *relay, DSN *dsn)
|
const char *relay, DSN *dsn)
|
||||||
{
|
{
|
||||||
DSN my_dsn = *dsn;
|
DSN my_dsn = *dsn;
|
||||||
int status;
|
DSN *dsn_res;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check.
|
* Sanity check.
|
||||||
@ -403,6 +403,30 @@ int bounce_one(int flags, const char *queue, const char *id,
|
|||||||
my_dsn.status = "5.0.0";
|
my_dsn.status = "5.0.0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSN filter (Postfix 2.12).
|
||||||
|
*/
|
||||||
|
if (bounce_defer_filter != 0
|
||||||
|
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||||
|
if (dsn_res->status[0] == '4')
|
||||||
|
return (defer_append_intern(flags, id, stats, rcpt, relay, dsn_res));
|
||||||
|
my_dsn = *dsn_res;
|
||||||
|
}
|
||||||
|
return (bounce_one_intern(flags, queue, id, encoding, sender, dsn_envid,
|
||||||
|
dsn_ret, stats, rcpt, relay, &my_dsn));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bounce_one_intern - send notice for one recipient */
|
||||||
|
|
||||||
|
int bounce_one_intern(int flags, const char *queue, const char *id,
|
||||||
|
const char *encoding, const char *sender,
|
||||||
|
const char *dsn_envid, int dsn_ret,
|
||||||
|
MSG_STATS *stats, RECIPIENT *rcpt,
|
||||||
|
const char *relay, DSN *dsn)
|
||||||
|
{
|
||||||
|
DSN my_dsn = *dsn;
|
||||||
|
int status;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MTA-requested address verification information is stored in the verify
|
* MTA-requested address verification information is stored in the verify
|
||||||
* service database.
|
* service database.
|
||||||
@ -429,7 +453,7 @@ int bounce_one(int flags, const char *queue, const char *id,
|
|||||||
* based procedure.
|
* based procedure.
|
||||||
*/
|
*/
|
||||||
else if (var_soft_bounce) {
|
else if (var_soft_bounce) {
|
||||||
return (bounce_append(flags, id, stats, rcpt, relay, &my_dsn));
|
return (bounce_append_intern(flags, id, stats, rcpt, relay, &my_dsn));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -469,7 +493,7 @@ int bounce_one(int flags, const char *queue, const char *id,
|
|||||||
vstring_sprintf(junk, "%s or %s service failure",
|
vstring_sprintf(junk, "%s or %s service failure",
|
||||||
var_bounce_service, var_trace_service);
|
var_bounce_service, var_trace_service);
|
||||||
my_dsn.reason = vstring_str(junk);
|
my_dsn.reason = vstring_str(junk);
|
||||||
status = defer_append(flags, id, stats, rcpt, relay, &my_dsn);
|
status = defer_append_intern(flags, id, stats, rcpt, relay, &my_dsn);
|
||||||
vstring_free(junk);
|
vstring_free(junk);
|
||||||
} else {
|
} else {
|
||||||
status = -1;
|
status = -1;
|
||||||
|
@ -31,6 +31,20 @@
|
|||||||
/* const char *sender;
|
/* const char *sender;
|
||||||
/* const char *dsn_envid;
|
/* const char *dsn_envid;
|
||||||
/* int dsn_ret;
|
/* int dsn_ret;
|
||||||
|
/*
|
||||||
|
/* int defer_one(flags, queue, id, encoding, sender, envid, ret,
|
||||||
|
/* stats, recipient, relay, dsn)
|
||||||
|
/* int flags;
|
||||||
|
/* const char *queue;
|
||||||
|
/* const char *id;
|
||||||
|
/* const char *encoding;
|
||||||
|
/* const char *sender;
|
||||||
|
/* const char *dsn_envid;
|
||||||
|
/* int dsn_ret;
|
||||||
|
/* MSG_STATS *stats;
|
||||||
|
/* RECIPIENT *rcpt;
|
||||||
|
/* const char *relay;
|
||||||
|
/* DSN *dsn;
|
||||||
/* INTERNAL API
|
/* INTERNAL API
|
||||||
/* int defer_append_intern(flags, id, stats, rcpt, relay, dsn)
|
/* int defer_append_intern(flags, id, stats, rcpt, relay, dsn)
|
||||||
/* int flags;
|
/* int flags;
|
||||||
@ -63,6 +77,9 @@
|
|||||||
/* question has been deferred. The defer log is not deleted,
|
/* question has been deferred. The defer log is not deleted,
|
||||||
/* and no recipients are deleted from the original queue file.
|
/* and no recipients are deleted from the original queue file.
|
||||||
/*
|
/*
|
||||||
|
/* defer_one() implements ndr_filter(3) compatibility for the
|
||||||
|
/* bounce_one() routine.
|
||||||
|
/*
|
||||||
/* defer_append_intern() is for use after the DSN filter.
|
/* defer_append_intern() is for use after the DSN filter.
|
||||||
/*
|
/*
|
||||||
/* Arguments:
|
/* Arguments:
|
||||||
@ -311,3 +328,36 @@ int defer_warn(int flags, const char *queue, const char *id,
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* defer_one - defer mail for one recipient */
|
||||||
|
|
||||||
|
int defer_one(int flags, const char *queue, const char *id,
|
||||||
|
const char *encoding, const char *sender,
|
||||||
|
const char *dsn_envid, int dsn_ret,
|
||||||
|
MSG_STATS *stats, RECIPIENT *rcpt,
|
||||||
|
const char *relay, DSN *dsn)
|
||||||
|
{
|
||||||
|
DSN my_dsn = *dsn;
|
||||||
|
DSN *dsn_res;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity check.
|
||||||
|
*/
|
||||||
|
if (my_dsn.status[0] != '4' || !dsn_valid(my_dsn.status)) {
|
||||||
|
msg_warn("defer_one: ignoring dsn code \"%s\"", my_dsn.status);
|
||||||
|
my_dsn.status = "4.0.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DSN filter (Postfix 2.12).
|
||||||
|
*/
|
||||||
|
if (bounce_defer_filter != 0
|
||||||
|
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||||
|
if (dsn_res->status[0] == '5')
|
||||||
|
return (bounce_one_intern(flags, queue, id, encoding, sender,
|
||||||
|
dsn_envid, dsn_ret, stats, rcpt,
|
||||||
|
relay, dsn_res));
|
||||||
|
my_dsn = *dsn_res;
|
||||||
|
}
|
||||||
|
return (defer_append_intern(flags, id, stats, rcpt, relay, &my_dsn));
|
||||||
|
}
|
||||||
|
@ -25,6 +25,10 @@ extern int defer_flush(int, const char *, const char *, const char *,
|
|||||||
const char *, const char *, int);
|
const char *, const char *, int);
|
||||||
extern int defer_warn(int, const char *, const char *, const char *,
|
extern int defer_warn(int, const char *, const char *, const char *,
|
||||||
const char *, int);
|
const char *, int);
|
||||||
|
extern int defer_one(int, const char *, const char *, const char *,
|
||||||
|
const char *, const char *,
|
||||||
|
int, MSG_STATS *, RECIPIENT *,
|
||||||
|
const char *, DSN *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start of private API.
|
* Start of private API.
|
||||||
|
@ -3765,6 +3765,10 @@ extern char *var_pipe_ndr_filter;
|
|||||||
#define DEF_VIRT_NDR_FILTER "$" VAR_NDR_FILTER
|
#define DEF_VIRT_NDR_FILTER "$" VAR_NDR_FILTER
|
||||||
extern char *var_virt_ndr_filter;
|
extern char *var_virt_ndr_filter;
|
||||||
|
|
||||||
|
#define VAR_LOCAL_NDR_FILTER "local_bounce_defer_filter"
|
||||||
|
#define DEF_LOCAL_NDR_FILTER "$" VAR_NDR_FILTER
|
||||||
|
extern char *var_local_ndr_filter;
|
||||||
|
|
||||||
/* 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 "20140316"
|
#define MAIL_RELEASE_DATE "20140318"
|
||||||
#define MAIL_VERSION_NUMBER "2.12"
|
#define MAIL_VERSION_NUMBER "2.12"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
/*
|
/*
|
||||||
/* DSN *ndr_filter_lookup(
|
/* DSN *ndr_filter_lookup(
|
||||||
/* NDR_FILTER *fp,
|
/* NDR_FILTER *fp,
|
||||||
/* DSN dsn)
|
/* DSN *dsn)
|
||||||
/*
|
/*
|
||||||
/* void dsn_free(
|
/* void dsn_free(
|
||||||
/* NDR_FILTER *fp)
|
/* NDR_FILTER *fp)
|
||||||
@ -125,8 +125,12 @@ DSN *ndr_filter_lookup(NDR_FILTER *fp, DSN *dsn)
|
|||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("%s: %s %s", myname, dsn->status, dsn->reason);
|
msg_info("%s: %s %s", myname, dsn->status, dsn->reason);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX Instead of hard-coded '4' or '5', use some form of encapsulation
|
||||||
|
* to read or update the class field.
|
||||||
|
*/
|
||||||
#define IS_NDR_DSN(s) \
|
#define IS_NDR_DSN(s) \
|
||||||
(dsn_valid(s) && (s)[1] == '.' && ((s)[0] == '4' || (s)[0] == '5'))
|
(dsn_valid(s) && ((s)[0] == '4' || (s)[0] == '5'))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check. We filter only bounce/defer DSNs.
|
* Sanity check. We filter only bounce/defer DSNs.
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
/* Attributes describing alias, include or forward expansion.
|
/* Attributes describing alias, include or forward expansion.
|
||||||
/* A table with the results from expanding aliases or lists.
|
/* A table with the results from expanding aliases or lists.
|
||||||
/* A table with delivered-to: addresses taken from the message.
|
/* A table with delivered-to: addresses taken from the message.
|
||||||
|
/* The non-delivery status must be either 4.X.X or 5.X.X.
|
||||||
/* DIAGNOSTICS
|
/* DIAGNOSTICS
|
||||||
/* Fatal errors: out of memory. The result is non-zero when
|
/* Fatal errors: out of memory. The result is non-zero when
|
||||||
/* the operation should be tried again. Warnings: malformed
|
/* the operation should be tried again. Warnings: malformed
|
||||||
@ -121,18 +122,24 @@ int bounce_workaround(LOCAL_STATE state)
|
|||||||
SET_OWNER_ATTR(state.msg_attr, STR(canon_owner), state.level);
|
SET_OWNER_ATTR(state.msg_attr, STR(canon_owner), state.level);
|
||||||
}
|
}
|
||||||
myfree(owner_alias);
|
myfree(owner_alias);
|
||||||
if (alias_maps->error != 0)
|
if (alias_maps->error != 0) {
|
||||||
/* At this point, canon_owner == 0. */
|
/* At this point, canon_owner == 0. */
|
||||||
|
dsb_simple(state.msg_attr.why, "4.3.0",
|
||||||
|
"alias database unavailable");
|
||||||
return (defer_append(BOUNCE_FLAGS(state.request),
|
return (defer_append(BOUNCE_FLAGS(state.request),
|
||||||
BOUNCE_ATTR(state.msg_attr)));
|
BOUNCE_ATTR(state.msg_attr)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Send a delivery status notification with a single recipient to the
|
* Send a delivery status notification with a single recipient to the
|
||||||
* substitute sender address, before completion of the delivery request.
|
* substitute sender address, before completion of the delivery request.
|
||||||
*/
|
*/
|
||||||
if (canon_owner) {
|
if (canon_owner) {
|
||||||
rcpt_stat = bounce_one(BOUNCE_FLAGS(state.request),
|
rcpt_stat =
|
||||||
|
(STR(state.msg_attr.why->status)[0] == '4' ?
|
||||||
|
defer_one : bounce_one)
|
||||||
|
(BOUNCE_FLAGS(state.request),
|
||||||
BOUNCE_ONE_ATTR(state.msg_attr));
|
BOUNCE_ONE_ATTR(state.msg_attr));
|
||||||
vstring_free(canon_owner);
|
vstring_free(canon_owner);
|
||||||
}
|
}
|
||||||
@ -142,7 +149,10 @@ int bounce_workaround(LOCAL_STATE state)
|
|||||||
* delivery request.
|
* delivery request.
|
||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
rcpt_stat = bounce_append(BOUNCE_FLAGS(state.request),
|
rcpt_stat =
|
||||||
|
(STR(state.msg_attr.why->status)[0] == '4' ?
|
||||||
|
defer_append : bounce_append)
|
||||||
|
(BOUNCE_FLAGS(state.request),
|
||||||
BOUNCE_ATTR(state.msg_attr));
|
BOUNCE_ATTR(state.msg_attr));
|
||||||
}
|
}
|
||||||
return (rcpt_stat);
|
return (rcpt_stat);
|
||||||
|
@ -235,11 +235,6 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma
|
|||||||
break;
|
break;
|
||||||
case PIPE_STAT_BOUNCE:
|
case PIPE_STAT_BOUNCE:
|
||||||
case PIPE_STAT_DEFER:
|
case PIPE_STAT_DEFER:
|
||||||
if (STR(why->status)[0] == '4')
|
|
||||||
deliver_status =
|
|
||||||
defer_append(BOUNCE_FLAGS(state.request),
|
|
||||||
BOUNCE_ATTR(state.msg_attr));
|
|
||||||
else
|
|
||||||
/* Account for possible owner- sender address override. */
|
/* Account for possible owner- sender address override. */
|
||||||
deliver_status = bounce_workaround(state);
|
deliver_status = bounce_workaround(state);
|
||||||
break;
|
break;
|
||||||
|
@ -184,11 +184,6 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path)
|
|||||||
} else if (mail_copy_status != 0) {
|
} else if (mail_copy_status != 0) {
|
||||||
vstring_sprintf_prepend(why->reason,
|
vstring_sprintf_prepend(why->reason,
|
||||||
"cannot append message to file %s: ", path);
|
"cannot append message to file %s: ", path);
|
||||||
if (STR(why->status)[0] == '4')
|
|
||||||
deliver_status =
|
|
||||||
defer_append(BOUNCE_FLAGS(state.request),
|
|
||||||
BOUNCE_ATTR(state.msg_attr));
|
|
||||||
else
|
|
||||||
/* Account for possible owner- sender address override. */
|
/* Account for possible owner- sender address override. */
|
||||||
deliver_status = bounce_workaround(state);
|
deliver_status = bounce_workaround(state);
|
||||||
} else {
|
} else {
|
||||||
|
@ -385,6 +385,11 @@
|
|||||||
/* Reset the \fBlocal\fR(8) delivery agent's idea of the owner-alias
|
/* Reset the \fBlocal\fR(8) delivery agent's idea of the owner-alias
|
||||||
/* attribute, when delivering mail to a child alias that does not have
|
/* attribute, when delivering mail to a child alias that does not have
|
||||||
/* its own owner alias.
|
/* its own owner alias.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.12 and later:
|
||||||
|
/* .IP "\fBlocal_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
/* Optional filter to change arbitrary hard delivery errors into
|
||||||
|
/* soft errors and vice versa in the \fBlocal\fR(8) delivery agent.
|
||||||
/* DELIVERY METHOD CONTROLS
|
/* DELIVERY METHOD CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -663,6 +668,7 @@ int local_ext_prop_mask;
|
|||||||
int local_deliver_hdr_mask;
|
int local_deliver_hdr_mask;
|
||||||
int local_mbox_lock_mask;
|
int local_mbox_lock_mask;
|
||||||
MAPS *alias_maps;
|
MAPS *alias_maps;
|
||||||
|
char *var_local_ndr_filter;
|
||||||
|
|
||||||
/* local_deliver - deliver message with extreme prejudice */
|
/* local_deliver - deliver message with extreme prejudice */
|
||||||
|
|
||||||
@ -898,6 +904,7 @@ int main(int argc, char **argv)
|
|||||||
VAR_DELIVER_HDR, DEF_DELIVER_HDR, &var_deliver_hdr, 0, 0,
|
VAR_DELIVER_HDR, DEF_DELIVER_HDR, &var_deliver_hdr, 0, 0,
|
||||||
VAR_MAILBOX_LOCK, DEF_MAILBOX_LOCK, &var_mailbox_lock, 1, 0,
|
VAR_MAILBOX_LOCK, DEF_MAILBOX_LOCK, &var_mailbox_lock, 1, 0,
|
||||||
VAR_MAILBOX_CMD_MAPS, DEF_MAILBOX_CMD_MAPS, &var_mailbox_cmd_maps, 0, 0,
|
VAR_MAILBOX_CMD_MAPS, DEF_MAILBOX_CMD_MAPS, &var_mailbox_cmd_maps, 0, 0,
|
||||||
|
VAR_LOCAL_NDR_FILTER, DEF_LOCAL_NDR_FILTER, &var_local_ndr_filter, 0, 0,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
static const CONFIG_BOOL_TABLE bool_table[] = {
|
static const CONFIG_BOOL_TABLE bool_table[] = {
|
||||||
@ -936,5 +943,7 @@ int main(int argc, char **argv)
|
|||||||
MAIL_SERVER_POST_INIT, post_init,
|
MAIL_SERVER_POST_INIT, post_init,
|
||||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||||
MAIL_SERVER_PRIVILEGED,
|
MAIL_SERVER_PRIVILEGED,
|
||||||
|
MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_NDR_FILTER,
|
||||||
|
&var_local_ndr_filter,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
@ -387,9 +387,6 @@
|
|||||||
/* .IP "\fBmax_use (100)\fR"
|
/* .IP "\fBmax_use (100)\fR"
|
||||||
/* The maximal number of incoming connections that a Postfix daemon
|
/* The maximal number of incoming connections that a Postfix daemon
|
||||||
/* process will service before terminating voluntarily.
|
/* process will service before terminating voluntarily.
|
||||||
/* .IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
|
||||||
/* Optional filter to change arbitrary hard delivery errors into
|
|
||||||
/* soft errors and vice versa.
|
|
||||||
/* .IP "\fBprocess_id (read-only)\fR"
|
/* .IP "\fBprocess_id (read-only)\fR"
|
||||||
/* The process ID of a Postfix command or daemon process.
|
/* The process ID of a Postfix command or daemon process.
|
||||||
/* .IP "\fBprocess_name (read-only)\fR"
|
/* .IP "\fBprocess_name (read-only)\fR"
|
||||||
@ -405,6 +402,11 @@
|
|||||||
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
||||||
/* The mail system name that is prepended to the process name in syslog
|
/* The mail system name that is prepended to the process name in syslog
|
||||||
/* records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
/* records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.12 and later:
|
||||||
|
/* .IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
/* Optional filter to change arbitrary hard delivery errors into
|
||||||
|
/* soft errors and vice versa in the \fBpipe\fR(8) delivery agent.
|
||||||
/* SEE ALSO
|
/* SEE ALSO
|
||||||
/* qmgr(8), queue manager
|
/* qmgr(8), queue manager
|
||||||
/* bounce(8), delivery status reports
|
/* bounce(8), delivery status reports
|
||||||
|
@ -141,9 +141,6 @@
|
|||||||
/* Always send EHLO at the start of an SMTP session.
|
/* Always send EHLO at the start of an SMTP session.
|
||||||
/* .IP "\fBsmtp_never_send_ehlo (no)\fR"
|
/* .IP "\fBsmtp_never_send_ehlo (no)\fR"
|
||||||
/* Never send EHLO at the start of an SMTP session.
|
/* Never send EHLO at the start of an SMTP session.
|
||||||
/* .IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
|
||||||
/* Optional filter to change arbitrary hard delivery errors into
|
|
||||||
/* soft errors and vice versa.
|
|
||||||
/* .IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
|
/* .IP "\fBsmtp_defer_if_no_mx_address_found (no)\fR"
|
||||||
/* Defer mail delivery when no MX record resolves to an IP address.
|
/* Defer mail delivery when no MX record resolves to an IP address.
|
||||||
/* .IP "\fBsmtp_line_length_limit (998)\fR"
|
/* .IP "\fBsmtp_line_length_limit (998)\fR"
|
||||||
@ -255,6 +252,11 @@
|
|||||||
/* Available in Postfix version 2.11 and later:
|
/* Available in Postfix version 2.11 and later:
|
||||||
/* .IP "\fBsmtp_dns_support_level (empty)\fR"
|
/* .IP "\fBsmtp_dns_support_level (empty)\fR"
|
||||||
/* Level of DNS support in the Postfix SMTP client.
|
/* Level of DNS support in the Postfix SMTP client.
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.12 and later:
|
||||||
|
/* .IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
|
/* Optional filter to change arbitrary hard delivery errors into
|
||||||
|
/* soft errors and vice versa in the \fBsmtp\fR(8) delivery agent.
|
||||||
/* MIME PROCESSING CONTROLS
|
/* MIME PROCESSING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@ -195,6 +195,7 @@ static int smtp_bulk_fail(SMTP_STATE *state, int throttle_queue)
|
|||||||
DSN_BUF *why = state->why;
|
DSN_BUF *why = state->why;
|
||||||
RECIPIENT *rcpt;
|
RECIPIENT *rcpt;
|
||||||
int status;
|
int status;
|
||||||
|
int aggregate_status;
|
||||||
int soft_error = (STR(why->status)[0] == '4');
|
int soft_error = (STR(why->status)[0] == '4');
|
||||||
int soft_bounce_error = (STR(why->status)[0] == '5' && var_soft_bounce);
|
int soft_bounce_error = (STR(why->status)[0] == '5' && var_soft_bounce);
|
||||||
int nrcpt;
|
int nrcpt;
|
||||||
@ -239,6 +240,7 @@ static int smtp_bulk_fail(SMTP_STATE *state, int throttle_queue)
|
|||||||
GETTIMEOFDAY(&request->msg_stats.deliver_done);
|
GETTIMEOFDAY(&request->msg_stats.deliver_done);
|
||||||
|
|
||||||
(void) DSN_FROM_DSN_BUF(why);
|
(void) DSN_FROM_DSN_BUF(why);
|
||||||
|
aggregate_status = 0;
|
||||||
for (nrcpt = 0; nrcpt < SMTP_RCPT_LEFT(state); nrcpt++) {
|
for (nrcpt = 0; nrcpt < SMTP_RCPT_LEFT(state); nrcpt++) {
|
||||||
rcpt = request->rcpt_list.info + nrcpt;
|
rcpt = request->rcpt_list.info + nrcpt;
|
||||||
if (SMTP_RCPT_ISMARKED(rcpt))
|
if (SMTP_RCPT_ISMARKED(rcpt))
|
||||||
@ -250,10 +252,11 @@ static int smtp_bulk_fail(SMTP_STATE *state, int throttle_queue)
|
|||||||
if (status == 0)
|
if (status == 0)
|
||||||
deliver_completed(state->src, rcpt->offset);
|
deliver_completed(state->src, rcpt->offset);
|
||||||
SMTP_RCPT_DROP(state, rcpt);
|
SMTP_RCPT_DROP(state, rcpt);
|
||||||
state->status |= status;
|
aggregate_status |= status;
|
||||||
}
|
}
|
||||||
|
state->status |= aggregate_status;
|
||||||
if ((state->misc_flags & SMTP_MISC_FLAG_COMPLETE_SESSION) == 0
|
if ((state->misc_flags & SMTP_MISC_FLAG_COMPLETE_SESSION) == 0
|
||||||
&& throttle_queue && (soft_error || soft_bounce_error)
|
&& throttle_queue && aggregate_status
|
||||||
&& request->hop_status == 0)
|
&& request->hop_status == 0)
|
||||||
request->hop_status = DSN_COPY(&why->dsn);
|
request->hop_status = DSN_COPY(&why->dsn);
|
||||||
}
|
}
|
||||||
|
@ -245,9 +245,11 @@
|
|||||||
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
|
||||||
/* The mail system name that is prepended to the process name in syslog
|
/* The mail system name that is prepended to the process name in syslog
|
||||||
/* records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
/* records, so that "smtpd" becomes, for example, "postfix/smtpd".
|
||||||
|
/* .PP
|
||||||
|
/* Available in Postfix version 2.12 and later:
|
||||||
/* .IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
/* .IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR"
|
||||||
/* Optional filter to change arbitrary hard delivery errors into
|
/* Optional filter to change arbitrary hard delivery errors into
|
||||||
/* soft errors and vice versa.
|
/* soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
|
||||||
/* SEE ALSO
|
/* SEE ALSO
|
||||||
/* qmgr(8), queue manager
|
/* qmgr(8), queue manager
|
||||||
/* bounce(8), delivery status reports
|
/* bounce(8), delivery status reports
|
||||||
|
Loading…
x
Reference in New Issue
Block a user