mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-22 18:07:41 +00:00
postfix-2.12-20140321
This commit is contained in:
parent
1b55748771
commit
48a0b6fc23
@ -19627,10 +19627,25 @@ Apologies for any names omitted.
|
||||
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.
|
||||
global/mail_params.h, mantools/postlink.
|
||||
|
||||
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.
|
||||
|
||||
20140320
|
||||
|
||||
Feature: support to replace successful delivery status code
|
||||
and explanatory text. This can be used to to hide local
|
||||
details such as destination commands or file names when a
|
||||
remote sender requests confirmation of delivery. As of now
|
||||
*_bounce_defer_filter is renamed into *_delivery_status_filter.
|
||||
Files: global/bounce.c, global/bounce.h, global/defer.c,
|
||||
global/defer.h, global/dsn_filter.c, global/dsn_filter.h,
|
||||
global/mail_params.c, global/mail_params.h, global/sent.c,
|
||||
local/local.c, master/event_server.c, master/multi_server.c,
|
||||
master/single_server.c, master/trigger_server.c, pipe/pipe.c,
|
||||
smtp/lmtp_params.c, smtp/smtp.c, smtp/smtp_params.c,
|
||||
virtual/virtual.c, mantools/postlink.
|
||||
|
@ -16,42 +16,53 @@ 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
|
||||
before proceeding.
|
||||
|
||||
Major changes with snapshot 20140318
|
||||
Major changes with snapshot 20140321
|
||||
====================================
|
||||
|
||||
Support to change arbitrary hard delivery errors into soft errors
|
||||
and vice versa, or to replace the descriptive text in non-delivery
|
||||
notifications. This was originally implemented for sites that want
|
||||
to bounce mail when no remote SMTP server supports STARTTLS.
|
||||
Delivery status filter support, to replace the delivery status codes
|
||||
and explanatory text of successful or unsuccessful deliveries. This
|
||||
was originally implemented for sites that want to turn certain soft
|
||||
delivery errors into hard delivery errors, but it can also be used
|
||||
to censor out information from delivery confirmation reports.
|
||||
|
||||
This feature is implemented as a filter that replaces the three-number
|
||||
enhanced status code and descriptive text in Postfix delivery agent
|
||||
bounce/defer messages. Note: this will not override "soft_bounce=yes".
|
||||
success, bounce, or defer messages. Note: this will not override
|
||||
"soft_bounce=yes", and this will not change a successful delivery
|
||||
status into an unsuccessful status or vice versa.
|
||||
|
||||
The following example turns specific soft TLS errors into hard
|
||||
The first example turns specific soft TLS errors into hard
|
||||
errors, by overriding the first number in the enhanced status code.
|
||||
|
||||
/etc/postfix/main.cf:
|
||||
smtp_bounce_defer_filter = pcre:/etc/postfix/smtp_ndr_filter
|
||||
smtp_delivery_status_filter = pcre:/etc/postfix/smtp_dsn_filter
|
||||
|
||||
/etc/postfix/smtp_ndr_filter:
|
||||
/etc/postfix/smtp_dsn_filter:
|
||||
/^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
|
||||
|
||||
The second example removes the destination command name and file
|
||||
name from local(8) successful delivery reports, so that they will
|
||||
not be reported when a sender requests confirmation of delivery.
|
||||
|
||||
/etc/postfix/main.cf:
|
||||
local_delivery_status_filter = pcre:/etc/postfix/local_dsn_filter
|
||||
|
||||
/etc/postfix/local_dsn_filter:
|
||||
/^(2\S+ delivered to file).+/ $1
|
||||
/^(2\S+ delivered to command).+/ $1
|
||||
|
||||
This feature is supported in the lmtp(8), local(8), pipe(8), smtp(8)
|
||||
and virtual(8) delivery agents. That is, all delivery agents that
|
||||
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 =
|
||||
lmtp_bounce_defer_filter = $default_bounce_defer_filter
|
||||
local_bounce_defer_filter = $default_bounce_defer_filter
|
||||
pipe_bounce_defer_filter = $default_bounce_defer_filter
|
||||
smtp_bounce_defer_filter = $default_bounce_defer_filter
|
||||
virtual_bounce_defer_filter = $default_bounce_defer_filter
|
||||
default_delivery_status_filter =
|
||||
lmtp_delivery_status_filter = $default_delivery_status_filter
|
||||
local_delivery_status_filter = $default_delivery_status_filter
|
||||
pipe_delivery_status_filter = $default_delivery_status_filter
|
||||
smtp_delivery_status_filter = $default_delivery_status_filter
|
||||
virtual_delivery_status_filter = $default_delivery_status_filter
|
||||
|
||||
See the postconf(5) manpage for more details.
|
||||
|
@ -292,9 +292,10 @@ SMTP(8) SMTP(8)
|
||||
|
||||
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><a href="postconf.5.html#smtp_delivery_status_filter">smtp_delivery_status_filter</a> ($<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b>
|
||||
Optional filter for the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuc-
|
||||
cessful deliveries.
|
||||
|
||||
<b>MIME PROCESSING CONTROLS</b>
|
||||
Available in Postfix version 2.0 and later:
|
||||
|
@ -360,9 +360,10 @@ LOCAL(8) LOCAL(8)
|
||||
|
||||
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><a href="postconf.5.html#local_delivery_status_filter">local_delivery_status_filter</a> ($<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b>
|
||||
Optional filter for the <a href="local.8.html"><b>local</b>(8)</a> delivery agent to change the
|
||||
status code or explanatory text of successful or unsuccessful
|
||||
deliveries.
|
||||
|
||||
<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:
|
||||
|
@ -449,9 +449,10 @@ PIPE(8) PIPE(8)
|
||||
|
||||
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><a href="postconf.5.html#pipe_delivery_status_filter">pipe_delivery_status_filter</a> ($<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b>
|
||||
Optional filter for the <a href="pipe.8.html"><b>pipe</b>(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuc-
|
||||
cessful deliveries.
|
||||
|
||||
<b>SEE ALSO</b>
|
||||
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
||||
|
@ -1756,74 +1756,6 @@ Example:
|
||||
</pre>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="default_bounce_defer_filter">default_bounce_defer_filter</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa. This is implemented by rewriting the
|
||||
three-number enhanced status code and the explanatory text in a
|
||||
Postfix delivery agent bounce/defer message. </p>
|
||||
|
||||
<p> Specify zero or more "<a href="DATABASE_README.html">type:table</a>" lookup table names, separated
|
||||
by comma or whitespace. With each bounce or defer request, the
|
||||
tables are queried in the specified order with one line of text
|
||||
that is structured as follows: </p>
|
||||
|
||||
<blockquote>
|
||||
enhanced-status-code SPACE explanatory-text
|
||||
</blockquote>
|
||||
|
||||
<p> The first table match wins. The lookup result must have the
|
||||
same structure as the query: enhanced status codes must have a
|
||||
first numerical field of 4 (defer) or 5 (bounce), and the explanatory
|
||||
text field must be non-empty. Other results will result in a warning.
|
||||
</p>
|
||||
|
||||
<p> Example: </p>
|
||||
|
||||
<p> The following example turns specific soft TLS errors into hard
|
||||
errors, by overriding the first number in the enhanced status code.
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||
<a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/smtp_ndr_filter
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/smtp_ndr_filter:
|
||||
/^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
|
||||
# Do not change the following into hard bounces. They may
|
||||
# result from a local configuration problem.
|
||||
# 4.\d+.\d+ TLS is required, but our TLS engine is unavailable
|
||||
# 4.\d+.\d+ TLS is required, but unavailable
|
||||
# 4.\d+.\d+ Cannot start TLS: handshake failure
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p> Notes: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> This feature will NOT override the <a href="postconf.5.html#soft_bounce">soft_bounce</a> safety net. </p>
|
||||
|
||||
<li> <p> This feature will change the enhanced status code and text
|
||||
that is logged to the maillog file, and that is reported to the
|
||||
sender. </p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="default_database_type">default_database_type</a>
|
||||
@ -1952,6 +1884,93 @@ name of the message delivery transport.
|
||||
</p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="default_delivery_status_filter">default_delivery_status_filter</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> Optional filter to replace the delivery status code or explanatory
|
||||
text of successful or unsuccessful deliveries. This does, however,
|
||||
not allow the replacement of a successful status code (2.X.X) with
|
||||
an unsuccessful status code (4.X.X or 5.X.X) or vice versa. </p>
|
||||
|
||||
<p> Specify zero or more "<a href="DATABASE_README.html">type:table</a>" lookup table names, separated
|
||||
by comma or whitespace. With each bounce or defer request, the
|
||||
tables are queried in the specified order with one line of text
|
||||
that is structured as follows: </p>
|
||||
|
||||
<blockquote>
|
||||
enhanced-status-code SPACE explanatory-text
|
||||
</blockquote>
|
||||
|
||||
<p> The first table match wins. The lookup result must have the
|
||||
same structure as the query, a successful status code (2.X.X) must
|
||||
be replaced with a successful status code, an unsuccessful status
|
||||
code (4.X.X or 5.X.X) must be replaced with an unsuccessful status
|
||||
code, and the explanatory text field must be non-empty. Other results
|
||||
will result in a warning. </p>
|
||||
|
||||
<p> Example 1: convert specific soft TLS errors into hard errors,
|
||||
by overriding the first number in the enhanced status code. </p>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||
<a href="postconf.5.html#smtp_delivery_status_filter">smtp_delivery_status_filter</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/smtp_dsn_filter
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/smtp_dsn_filter:
|
||||
/^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
|
||||
# Do not change the following into hard bounces. They may
|
||||
# result from a local configuration problem.
|
||||
# 4.\d+.\d+ TLS is required, but our TLS engine is unavailable
|
||||
# 4.\d+.\d+ TLS is required, but unavailable
|
||||
# 4.\d+.\d+ Cannot start TLS: handshake failure
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p> Example 2: censor the per-recipient delivery status text so
|
||||
that it does not not reveal the destination command or filename
|
||||
when a remote sender requests confirmation of successful delivery.
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||
<a href="postconf.5.html#local_delivery_status_filter">local_delivery_status_filter</a> = <a href="pcre_table.5.html">pcre</a>:/etc/postfix/local_dsn_filter
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/local_dsn_filter:
|
||||
/^(2\S+ delivered to file).+/ $1
|
||||
/^(2\S+ delivered to command).+/ $1
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p> Notes: </p>
|
||||
|
||||
<ul>
|
||||
|
||||
<li> <p> This feature will NOT override the <a href="postconf.5.html#soft_bounce">soft_bounce</a> safety net. </p>
|
||||
|
||||
<li> <p> This feature will change the enhanced status code and text
|
||||
that is logged to the maillog file, and that is reported to the
|
||||
sender in delivery confirmation or non-delivery notifications.
|
||||
</p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="default_destination_concurrency_failed_cohort_limit">default_destination_concurrency_failed_cohort_limit</a>
|
||||
@ -3920,17 +3939,6 @@ parameter. See there for details. </p>
|
||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_bounce_defer_filter">lmtp_bounce_defer_filter</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_bounce_defer_filter">smtp_bounce_defer_filter</a>
|
||||
configuration parameter. See there for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_cache_connection">lmtp_cache_connection</a>
|
||||
@ -4132,6 +4140,17 @@ configuration parameter. See there for details. </p>
|
||||
<p> This feature is available in Postfix 2.3 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_delivery_status_filter">lmtp_delivery_status_filter</a>
|
||||
(default: empty)</b></DT><DD>
|
||||
|
||||
<p> The LMTP-specific version of the <a href="postconf.5.html#smtp_delivery_status_filter">smtp_delivery_status_filter</a>
|
||||
configuration parameter. See there for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="lmtp_destination_concurrency_limit">lmtp_destination_concurrency_limit</a>
|
||||
@ -5127,18 +5146,6 @@ This feature is available in Postfix 2.1 and later.
|
||||
</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>
|
||||
|
||||
<DT><b><a name="local_command_shell">local_command_shell</a>
|
||||
@ -5169,6 +5176,18 @@ Example:
|
||||
</pre>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="local_delivery_status_filter">local_delivery_status_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
|
||||
|
||||
<p> Optional filter for the <a href="local.8.html">local(8)</a> delivery agent to change the
|
||||
status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See <a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a> for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="local_destination_concurrency_limit">local_destination_concurrency_limit</a>
|
||||
@ -7013,12 +7032,12 @@ This feature is available in Postfix 2.0 and later.
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="pipe_bounce_defer_filter">pipe_bounce_defer_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||
<DT><b><a name="pipe_delivery_status_filter">pipe_delivery_status_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the <a href="pipe.8.html">pipe(8)</a> delivery agent. See
|
||||
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||
<p> Optional filter for the <a href="pipe.8.html">pipe(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See <a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a> for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
@ -9588,22 +9607,6 @@ that change the delivery time or destination are not available.
|
||||
<p> This feature is available in Postfix 2.5 and later. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_bounce_defer_filter">smtp_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="smtp.8.html">smtp(8)</a> delivery agent. See
|
||||
<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
|
||||
by the Postfix SMTP client, and that may or may not be derived from
|
||||
remote SMTP server responses. In contrast, the <a href="postconf.5.html#smtp_reply_filter">smtp_reply_filter</a>
|
||||
feature modifies remote SMTP server responses that may result in
|
||||
email non-delivery or delivery. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_cname_overrides_servername">smtp_cname_overrides_servername</a>
|
||||
@ -9868,6 +9871,21 @@ This feature is available in Postfix 2.1 and later.
|
||||
</p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_delivery_status_filter">smtp_delivery_status_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
|
||||
|
||||
<p> Optional filter for the <a href="smtp.8.html">smtp(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See <a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a> for details. </p>
|
||||
|
||||
<p> NOTE: This feature modifies Postfix SMTP client error or non-error
|
||||
messages that may or may not be derived from remote SMTP server
|
||||
responses. In contrast, the <a href="postconf.5.html#smtp_reply_filter">smtp_reply_filter</a> feature modifies
|
||||
remote SMTP server responses only. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a>
|
||||
@ -18219,12 +18237,12 @@ This feature is available in Postfix 2.1 and later.
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="virtual_bounce_defer_filter">virtual_bounce_defer_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
|
||||
<DT><b><a name="virtual_delivery_status_filter">virtual_delivery_status_filter</a>
|
||||
(default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the <a href="virtual.8.html">virtual(8)</a> delivery agent. See
|
||||
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
|
||||
<p> Optional filter for the <a href="virtual.8.html">virtual(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See <a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a> for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
|
@ -292,9 +292,10 @@ SMTP(8) SMTP(8)
|
||||
|
||||
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><a href="postconf.5.html#smtp_delivery_status_filter">smtp_delivery_status_filter</a> ($<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b>
|
||||
Optional filter for the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuc-
|
||||
cessful deliveries.
|
||||
|
||||
<b>MIME PROCESSING CONTROLS</b>
|
||||
Available in Postfix version 2.0 and later:
|
||||
|
@ -263,9 +263,10 @@ VIRTUAL(8) VIRTUAL(8)
|
||||
|
||||
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>
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the <a href="virtual.8.html"><b>virtual</b>(8)</a> delivery agent.
|
||||
<b><a href="postconf.5.html#virtual_delivery_status_filter">virtual_delivery_status_filter</a> ($<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b>
|
||||
Optional filter for the <a href="virtual.8.html"><b>virtual</b>(8)</a> delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuc-
|
||||
cessful deliveries.
|
||||
|
||||
<b>SEE ALSO</b>
|
||||
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
|
||||
|
@ -1021,71 +1021,6 @@ debugger_command =
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.SH default_bounce_defer_filter (default: empty)
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa. This is implemented by rewriting the
|
||||
three-number enhanced status code and the explanatory text in a
|
||||
Postfix delivery agent bounce/defer message.
|
||||
.PP
|
||||
Specify zero or more "type:table" lookup table names, separated
|
||||
by comma or whitespace. With each bounce or defer request, the
|
||||
tables are queried in the specified order with one line of text
|
||||
that is structured as follows:
|
||||
.sp
|
||||
.in +4
|
||||
enhanced-status-code SPACE explanatory-text
|
||||
.in -4
|
||||
.PP
|
||||
The first table match wins. The lookup result must have the
|
||||
same structure as the query: enhanced status codes must have a
|
||||
first numerical field of 4 (defer) or 5 (bounce), and the explanatory
|
||||
text field must be non-empty. Other results will result in a warning.
|
||||
.PP
|
||||
Example:
|
||||
.PP
|
||||
The following example turns specific soft TLS errors into hard
|
||||
errors, by overriding the first number in the enhanced status code.
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/main.cf:
|
||||
smtp_bounce_defer_filter = pcre:/etc/postfix/smtp_ndr_filter
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/smtp_ndr_filter:
|
||||
/^4(\e.\ed+\e.\ed+ TLS is required, but host \eS+ refused to start TLS: .+)/
|
||||
5$1
|
||||
/^4(\e.\ed+\e.\ed+ TLS is required, but was not offered by host .+)/
|
||||
5$1
|
||||
# Do not change the following into hard bounces. They may
|
||||
# result from a local configuration problem.
|
||||
# 4.\ed+.\ed+ TLS is required, but our TLS engine is unavailable
|
||||
# 4.\ed+.\ed+ TLS is required, but unavailable
|
||||
# 4.\ed+.\ed+ Cannot start TLS: handshake failure
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.PP
|
||||
Notes:
|
||||
.IP \(bu
|
||||
This feature will NOT override the soft_bounce safety net.
|
||||
.IP \(bu
|
||||
This feature will change the enhanced status code and text
|
||||
that is logged to the maillog file, and that is reported to the
|
||||
sender.
|
||||
.br
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH default_database_type (default: see "postconf -d" output)
|
||||
The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1)
|
||||
and \fBpostmap\fR(1) commands. On many UNIX systems the default type is
|
||||
@ -1173,6 +1108,98 @@ another preemption can take place later.
|
||||
Use \fItransport\fR_delivery_slot_loan to specify a
|
||||
transport-specific override, where \fItransport\fR is the master.cf
|
||||
name of the message delivery transport.
|
||||
.SH default_delivery_status_filter (default: empty)
|
||||
Optional filter to replace the delivery status code or explanatory
|
||||
text of successful or unsuccessful deliveries. This does, however,
|
||||
not allow the replacement of a successful status code (2.X.X) with
|
||||
an unsuccessful status code (4.X.X or 5.X.X) or vice versa.
|
||||
.PP
|
||||
Specify zero or more "type:table" lookup table names, separated
|
||||
by comma or whitespace. With each bounce or defer request, the
|
||||
tables are queried in the specified order with one line of text
|
||||
that is structured as follows:
|
||||
.sp
|
||||
.in +4
|
||||
enhanced-status-code SPACE explanatory-text
|
||||
.in -4
|
||||
.PP
|
||||
The first table match wins. The lookup result must have the
|
||||
same structure as the query, a successful status code (2.X.X) must
|
||||
be replaced with a successful status code, an unsuccessful status
|
||||
code (4.X.X or 5.X.X) must be replaced with an unsuccessful status
|
||||
code, and the explanatory text field must be non-empty. Other results
|
||||
will result in a warning.
|
||||
.PP
|
||||
Example 1: convert specific soft TLS errors into hard errors,
|
||||
by overriding the first number in the enhanced status code.
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/main.cf:
|
||||
smtp_delivery_status_filter = pcre:/etc/postfix/smtp_dsn_filter
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/smtp_dsn_filter:
|
||||
/^4(\e.\ed+\e.\ed+ TLS is required, but host \eS+ refused to start TLS: .+)/
|
||||
5$1
|
||||
/^4(\e.\ed+\e.\ed+ TLS is required, but was not offered by host .+)/
|
||||
5$1
|
||||
# Do not change the following into hard bounces. They may
|
||||
# result from a local configuration problem.
|
||||
# 4.\ed+.\ed+ TLS is required, but our TLS engine is unavailable
|
||||
# 4.\ed+.\ed+ TLS is required, but unavailable
|
||||
# 4.\ed+.\ed+ Cannot start TLS: handshake failure
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.PP
|
||||
Example 2: censor the per-recipient delivery status text so
|
||||
that it does not not reveal the destination command or filename
|
||||
when a remote sender requests confirmation of successful delivery.
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/main.cf:
|
||||
local_delivery_status_filter = pcre:/etc/postfix/local_dsn_filter
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.sp
|
||||
.in +4
|
||||
.nf
|
||||
.na
|
||||
.ft C
|
||||
/etc/postfix/local_dsn_filter:
|
||||
/^(2\eS+ delivered to file).+/ $1
|
||||
/^(2\eS+ delivered to command).+/ $1
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.in -4
|
||||
.PP
|
||||
Notes:
|
||||
.IP \(bu
|
||||
This feature will NOT override the soft_bounce safety net.
|
||||
.IP \(bu
|
||||
This feature will change the enhanced status code and text
|
||||
that is logged to the maillog file, and that is reported to the
|
||||
sender in delivery confirmation or non-delivery notifications.
|
||||
.br
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH default_destination_concurrency_failed_cohort_limit (default: 1)
|
||||
How many pseudo-cohorts must suffer connection or handshake
|
||||
failure before a specific destination is considered unavailable
|
||||
@ -2340,11 +2367,6 @@ The LMTP-specific version of the smtp_body_checks configuration
|
||||
parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.5 and later.
|
||||
.SH lmtp_bounce_defer_filter (default: empty)
|
||||
The LMTP-specific version of the smtp_bounce_defer_filter
|
||||
configuration parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH lmtp_cache_connection (default: yes)
|
||||
Keep Postfix LMTP client connections open for up to $max_idle
|
||||
seconds. When the LMTP client receives a request for the same
|
||||
@ -2454,6 +2476,11 @@ The LMTP-specific version of the smtp_defer_if_no_mx_address_found
|
||||
configuration parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
.SH lmtp_delivery_status_filter (default: empty)
|
||||
The LMTP-specific version of the smtp_delivery_status_filter
|
||||
configuration parameter. See there for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH lmtp_destination_concurrency_limit (default: $default_destination_concurrency_limit)
|
||||
The maximal number of parallel deliveries to the same destination
|
||||
via the lmtp message delivery transport. This limit is enforced by
|
||||
@ -2929,12 +2956,6 @@ Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
|
||||
The default time unit is s (seconds).
|
||||
.PP
|
||||
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)
|
||||
Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command.
|
||||
By default, non-Postfix commands are executed directly; commands
|
||||
@ -2959,6 +2980,12 @@ local_command_shell = /bin/bash -c
|
||||
.fi
|
||||
.ad
|
||||
.ft R
|
||||
.SH local_delivery_status_filter (default: $default_delivery_status_filter)
|
||||
Optional filter for the \fBlocal\fR(8) delivery agent to change the
|
||||
status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH local_destination_concurrency_limit (default: 2)
|
||||
The maximal number of parallel deliveries via the local mail
|
||||
delivery transport to the same recipient (when
|
||||
@ -4173,10 +4200,10 @@ The name of the \fBpickup\fR(8) service. This service picks up local mail
|
||||
submissions from the Postfix maildrop queue.
|
||||
.PP
|
||||
This feature is available in Postfix 2.0 and later.
|
||||
.SH pipe_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the \fBpipe\fR(8) delivery agent. See
|
||||
default_bounce_defer_filter for details.
|
||||
.SH pipe_delivery_status_filter (default: $default_delivery_status_filter)
|
||||
Optional filter for the \fBpipe\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH plaintext_reject_code (default: 450)
|
||||
@ -5852,16 +5879,6 @@ These tables are searched while mail is being delivered. Actions
|
||||
that change the delivery time or destination are not available.
|
||||
.PP
|
||||
This feature is available in Postfix 2.5 and later.
|
||||
.SH smtp_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the \fBsmtp\fR(8) delivery agent. See
|
||||
default_bounce_defer_filter for details.
|
||||
.PP
|
||||
NOTE: This feature modifies error messages that are generated
|
||||
by the Postfix SMTP client, and that may or may not be derived from
|
||||
remote SMTP server responses. In contrast, the smtp_reply_filter
|
||||
feature modifies remote SMTP server responses that may result in
|
||||
email non-delivery or delivery.
|
||||
.SH smtp_cname_overrides_servername (default: version dependent)
|
||||
When the remote SMTP servername is a DNS CNAME, replace the
|
||||
servername with the result from CNAME expansion for the purpose of
|
||||
@ -6027,6 +6044,15 @@ or worse preference
|
||||
than the local MTA itself.
|
||||
.PP
|
||||
This feature is available in Postfix 2.1 and later.
|
||||
.SH smtp_delivery_status_filter (default: $default_delivery_status_filter)
|
||||
Optional filter for the \fBsmtp\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details.
|
||||
.PP
|
||||
NOTE: This feature modifies Postfix SMTP client error or non-error
|
||||
messages that may or may not be derived from remote SMTP server
|
||||
responses. In contrast, the smtp_reply_filter feature modifies
|
||||
remote SMTP server responses only.
|
||||
.SH smtp_destination_concurrency_limit (default: $default_destination_concurrency_limit)
|
||||
The maximal number of parallel deliveries to the same destination
|
||||
via the smtp message delivery transport. This limit is enforced by
|
||||
@ -12338,10 +12364,10 @@ reach the sum of the expansion and recursion limits. This may
|
||||
change in the future.
|
||||
.PP
|
||||
This feature is available in Postfix 2.1 and later.
|
||||
.SH virtual_bounce_defer_filter (default: $default_bounce_defer_filter)
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. See
|
||||
default_bounce_defer_filter for details.
|
||||
.SH virtual_delivery_status_filter (default: $default_delivery_status_filter)
|
||||
Optional filter for the \fBvirtual\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details.
|
||||
.PP
|
||||
This feature is available in Postfix 2.12 and later.
|
||||
.SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit)
|
||||
|
@ -421,9 +421,10 @@ attribute, when delivering mail to a child alias that does not have
|
||||
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.
|
||||
.IP "\fBlocal_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
Optional filter for the \fBlocal\fR(8) delivery agent to change the
|
||||
status code or explanatory text of successful or unsuccessful
|
||||
deliveries.
|
||||
.SH "DELIVERY METHOD CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
|
@ -426,9 +426,10 @@ The mail system name that is prepended to the process name in syslog
|
||||
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.
|
||||
.IP "\fBpipe_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
Optional filter for the \fBpipe\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries.
|
||||
.SH "SEE ALSO"
|
||||
.na
|
||||
.nf
|
||||
|
@ -276,9 +276,10 @@ Available in Postfix version 2.11 and later:
|
||||
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.
|
||||
.IP "\fBsmtp_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
Optional filter for the \fBsmtp\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries.
|
||||
.SH "MIME PROCESSING CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
|
@ -283,9 +283,10 @@ The mail system name that is prepended to the process name in syslog
|
||||
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"
|
||||
Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
|
||||
.IP "\fBvirtual_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
Optional filter for the \fBvirtual\fR(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries.
|
||||
.SH "SEE ALSO"
|
||||
.na
|
||||
.nf
|
||||
|
@ -133,7 +133,7 @@ while (<>) {
|
||||
s;\bdaemon_timeout\b;<a href="postconf.5.html#daemon_timeout">$&</a>;g;
|
||||
s;\bdebug_peer_level\b;<a href="postconf.5.html#debug_peer_level">$&</a>;g;
|
||||
s;\bdebug_peer_list\b;<a href="postconf.5.html#debug_peer_list">$&</a>;g;
|
||||
s;\bdefault_bounce_defer_filter\b;<a href="postconf.5.html#default_bounce_defer_filter">$&</a>;g;
|
||||
s;\bdefault_delivery_status_filter\b;<a href="postconf.5.html#default_delivery_status_filter">$&</a>;g;
|
||||
s;\bdefault_data[-</Bb>]*\n* *[<Bb>]*base_type\b;<a href="postconf.5.html#default_database_type">$&</a>;g;
|
||||
s;\bdefault_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_cost\b;<a href="postconf.5.html#default_delivery_slot_cost">$&</a>;g;
|
||||
s;\bdefault_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_discount\b;<a href="postconf.5.html#default_delivery_slot_discount">$&</a>;g;
|
||||
@ -213,7 +213,7 @@ while (<>) {
|
||||
s;\blmtp_address_preference\b;<a href="postconf.5.html#lmtp_address_preference">$&</a>;g;
|
||||
s;\blmtp_body_checks\b;<a href="postconf.5.html#lmtp_body_checks">$&</a>;g;
|
||||
s;\blmtp_cname_overrides_servername\b;<a href="postconf.5.html#lmtp_cname_overrides_servername">$&</a>;g;
|
||||
s;\blmtp_bounce_defer_filter\b;<a href="postconf.5.html#lmtp_bounce_defer_filter">$&</a>;g;
|
||||
s;\blmtp_delivery_status_filter\b;<a href="postconf.5.html#lmtp_delivery_status_filter">$&</a>;g;
|
||||
s;\blmtp_dns_resolver_options\b;<a href="postconf.5.html#lmtp_dns_resolver_options">$&</a>;g;
|
||||
s;\blmtp_dns_support_level\b;<a href="postconf.5.html#lmtp_dns_support_level">$&</a>;g;
|
||||
s;\blmtp_header_checks\b;<a href="postconf.5.html#lmtp_header_checks">$&</a>;g;
|
||||
@ -307,7 +307,7 @@ while (<>) {
|
||||
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_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_delivery_status_filter\b;<a href="postconf.5.html#local_delivery_status_filter">$&</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_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g;
|
||||
@ -360,7 +360,7 @@ while (<>) {
|
||||
s;\bpar[-</bB>]*\n* *[<bB>]*ent_domain_matches_subdomains\b;<a href="postconf.5.html#parent_domain_matches_subdomains">$&</a>;g;
|
||||
s;\bpermit_mx_backup_networks\b;<a href="postconf.5.html#permit_mx_backup_networks">$&</a>;g;
|
||||
s;\bpickup_service_name\b;<a href="postconf.5.html#pickup_service_name">$&</a>;g;
|
||||
s;\bpipe_bounce_defer_filter\b;<a href="postconf.5.html#pipe_bounce_defer_filter">$&</a>;g;
|
||||
s;\bpipe_delivery_status_filter\b;<a href="postconf.5.html#pipe_delivery_status_filter">$&</a>;g;
|
||||
s;\bplaintext_reject_code\b;<a href="postconf.5.html#plaintext_reject_code">$&</a>;g;
|
||||
s;\bpost[-</bB>]*\n* *[<bB>]*multi_start_commands\b;<a href="postconf.5.html#postmulti_start_commands">$&</a>;g;
|
||||
s;\bpost[-</bB>]*\n* *[<bB>]*multi_stop_commands\b;<a href="postconf.5.html#postmulti_stop_commands">$&</a>;g;
|
||||
@ -455,7 +455,7 @@ while (<>) {
|
||||
s;\bsmtp_connection_cache_time_limit\b;<a href="postconf.5.html#smtp_connection_cache_time_limit">$&</a>;g;
|
||||
s;\bsmtp_connection_cache_destinations\b;<a href="postconf.5.html#smtp_connection_cache_destinations">$&</a>;g;
|
||||
|
||||
s;\bsmtp_bounce_defer_filter\b;<a href="postconf.5.html#smtp_bounce_defer_filter">$&</a>;g;
|
||||
s;\bsmtp_delivery_status_filter\b;<a href="postconf.5.html#smtp_delivery_status_filter">$&</a>;g;
|
||||
s;\bsmtp_data_done_timeout\b;<a href="postconf.5.html#smtp_data_done_timeout">$&</a>;g;
|
||||
s;\bsmtp_data_init_timeout\b;<a href="postconf.5.html#smtp_data_init_timeout">$&</a>;g;
|
||||
s;\bsmtp_data_xfer_timeout\b;<a href="postconf.5.html#smtp_data_xfer_timeout">$&</a>;g;
|
||||
@ -606,7 +606,7 @@ while (<>) {
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_maps\b;<a href="postconf.5.html#virtual_alias_maps">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_maps\b;<a href="postconf.5.html#virtual_maps">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_recursion_limit\b;<a href="postconf.5.html#virtual_alias_recursion_limit">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_bounce_defer_filter\b;<a href="postconf.5.html#virtual_bounce_defer_filter">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_delivery_status_filter\b;<a href="postconf.5.html#virtual_delivery_status_filter">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_gid_maps\b;<a href="postconf.5.html#virtual_gid_maps">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_base\b;<a href="postconf.5.html#virtual_mailbox_base">$&</a>;g;
|
||||
s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_domains\b;<a href="postconf.5.html#virtual_mailbox_domains">$&</a>;g;
|
||||
|
@ -15616,12 +15616,12 @@ anchor assertion) TLSA records. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.11 and later. </p>
|
||||
|
||||
%PARAM default_bounce_defer_filter
|
||||
%PARAM default_delivery_status_filter
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa. This is implemented by rewriting the
|
||||
three-number enhanced status code and the explanatory text in a
|
||||
Postfix delivery agent bounce/defer message. </p>
|
||||
<p> Optional filter to replace the delivery status code or explanatory
|
||||
text of successful or unsuccessful deliveries. This does, however,
|
||||
not allow the replacement of a successful status code (2.X.X) with
|
||||
an unsuccessful status code (4.X.X or 5.X.X) or vice versa. </p>
|
||||
|
||||
<p> Specify zero or more "type:table" lookup table names, separated
|
||||
by comma or whitespace. With each bounce or defer request, the
|
||||
@ -15633,27 +15633,25 @@ enhanced-status-code SPACE explanatory-text
|
||||
</blockquote>
|
||||
|
||||
<p> The first table match wins. The lookup result must have the
|
||||
same structure as the query: enhanced status codes must have a
|
||||
first numerical field of 4 (defer) or 5 (bounce), and the explanatory
|
||||
text field must be non-empty. Other results will result in a warning.
|
||||
</p>
|
||||
same structure as the query, a successful status code (2.X.X) must
|
||||
be replaced with a successful status code, an unsuccessful status
|
||||
code (4.X.X or 5.X.X) must be replaced with an unsuccessful status
|
||||
code, and the explanatory text field must be non-empty. Other results
|
||||
will result in a warning. </p>
|
||||
|
||||
<p> Example: </p>
|
||||
|
||||
<p> The following example turns specific soft TLS errors into hard
|
||||
errors, by overriding the first number in the enhanced status code.
|
||||
</p>
|
||||
<p> Example 1: convert specific soft TLS errors into hard errors,
|
||||
by overriding the first number in the enhanced status code. </p>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/main.cf:
|
||||
smtp_bounce_defer_filter = pcre:/etc/postfix/smtp_ndr_filter
|
||||
smtp_delivery_status_filter = pcre:/etc/postfix/smtp_dsn_filter
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/smtp_ndr_filter:
|
||||
/etc/postfix/smtp_dsn_filter:
|
||||
/^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 .+)/
|
||||
@ -15666,6 +15664,26 @@ errors, by overriding the first number in the enhanced status code.
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p> Example 2: censor the per-recipient delivery status text so
|
||||
that it does not not reveal the destination command or filename
|
||||
when a remote sender requests confirmation of successful delivery.
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/main.cf:
|
||||
local_delivery_status_filter = pcre:/etc/postfix/local_dsn_filter
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<pre>
|
||||
/etc/postfix/local_dsn_filter:
|
||||
/^(2\S+ delivered to file).+/ $1
|
||||
/^(2\S+ delivered to command).+/ $1
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p> Notes: </p>
|
||||
|
||||
<ul>
|
||||
@ -15674,51 +15692,51 @@ errors, by overriding the first number in the enhanced status code.
|
||||
|
||||
<li> <p> This feature will change the enhanced status code and text
|
||||
that is logged to the maillog file, and that is reported to the
|
||||
sender. </p>
|
||||
sender in delivery confirmation or non-delivery notifications.
|
||||
</p>
|
||||
|
||||
</ul>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
%PARAM smtp_bounce_defer_filter $default_bounce_defer_filter
|
||||
%PARAM smtp_delivery_status_filter $default_delivery_status_filter
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the smtp(8) delivery agent. See
|
||||
default_bounce_defer_filter for details. </p>
|
||||
<p> Optional filter for the smtp(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details. </p>
|
||||
|
||||
<p> NOTE: This feature modifies error messages that are generated
|
||||
by the Postfix SMTP client, and that may or may not be derived from
|
||||
remote SMTP server responses. In contrast, the smtp_reply_filter
|
||||
feature modifies remote SMTP server responses that may result in
|
||||
email non-delivery or delivery. </p>
|
||||
<p> NOTE: This feature modifies Postfix SMTP client error or non-error
|
||||
messages that may or may not be derived from remote SMTP server
|
||||
responses. In contrast, the smtp_reply_filter feature modifies
|
||||
remote SMTP server responses only. </p>
|
||||
|
||||
%PARAM lmtp_bounce_defer_filter
|
||||
%PARAM lmtp_delivery_status_filter
|
||||
|
||||
<p> The LMTP-specific version of the smtp_bounce_defer_filter
|
||||
<p> The LMTP-specific version of the smtp_delivery_status_filter
|
||||
configuration parameter. See there for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
%PARAM pipe_bounce_defer_filter $default_bounce_defer_filter
|
||||
%PARAM pipe_delivery_status_filter $default_delivery_status_filter
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the pipe(8) delivery agent. See
|
||||
default_bounce_defer_filter for details. </p>
|
||||
<p> Optional filter for the pipe(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
||||
%PARAM virtual_bounce_defer_filter $default_bounce_defer_filter
|
||||
%PARAM virtual_delivery_status_filter $default_delivery_status_filter
|
||||
|
||||
<p> Optional filter to change arbitrary hard delivery errors into
|
||||
soft errors and vice versa in the virtual(8) delivery agent. See
|
||||
default_bounce_defer_filter for details. </p>
|
||||
<p> Optional filter for the virtual(8) delivery agent to change the
|
||||
delivery status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_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
|
||||
%PARAM local_delivery_status_filter $default_delivery_status_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> Optional filter for the local(8) delivery agent to change the
|
||||
status code or explanatory text of successful or unsuccessful
|
||||
deliveries. See default_delivery_status_filter for details. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.12 and later. </p>
|
||||
|
@ -32,7 +32,7 @@ SRCS = abounce.c anvil_clnt.c been_here.c bounce.c bounce_log.c \
|
||||
match_service.c mail_conf_nint.c addr_match_list.c mail_conf_nbool.c \
|
||||
smtp_reply_footer.c safe_ultostr.c verify_sender_addr.c \
|
||||
dict_memcache.c mail_version.c memcache_proto.c server_acl.c \
|
||||
mkmap_fail.c haproxy_srvr.c ndr_filter.c
|
||||
mkmap_fail.c haproxy_srvr.c dsn_filter.c
|
||||
OBJS = abounce.o anvil_clnt.o been_here.o bounce.o bounce_log.o \
|
||||
canon_addr.o cfg_parser.o cleanup_strerror.o cleanup_strflags.o \
|
||||
clnt_stream.o conv_time.o db_common.o debug_peer.o debug_process.o \
|
||||
@ -66,7 +66,7 @@ OBJS = abounce.o anvil_clnt.o been_here.o bounce.o bounce_log.o \
|
||||
match_service.o mail_conf_nint.o addr_match_list.o mail_conf_nbool.o \
|
||||
smtp_reply_footer.o safe_ultostr.o verify_sender_addr.o \
|
||||
dict_memcache.o mail_version.o memcache_proto.o server_acl.o \
|
||||
mkmap_fail.o haproxy_srvr.o ndr_filter.o
|
||||
mkmap_fail.o haproxy_srvr.o dsn_filter.o
|
||||
HDRS = abounce.h anvil_clnt.h been_here.h bounce.h bounce_log.h \
|
||||
canon_addr.h cfg_parser.h cleanup_user.h clnt_stream.h config.h \
|
||||
conv_time.h db_common.h debug_peer.h debug_process.h defer.h \
|
||||
@ -93,7 +93,7 @@ HDRS = abounce.h anvil_clnt.h been_here.h bounce.h bounce_log.h \
|
||||
fold_addr.h header_body_checks.h data_redirect.h match_service.h \
|
||||
addr_match_list.h smtp_reply_footer.h safe_ultostr.h \
|
||||
verify_sender_addr.h dict_memcache.h memcache_proto.h server_acl.h \
|
||||
haproxy_srvr.h ndr_filter.h
|
||||
haproxy_srvr.h dsn_filter.h
|
||||
TESTSRC = rec2stream.c stream2rec.c recdump.c
|
||||
DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE)
|
||||
CFLAGS = $(DEBUG) $(OPT) $(DEFS)
|
||||
@ -666,7 +666,7 @@ bounce.o: log_adhoc.h
|
||||
bounce.o: mail_params.h
|
||||
bounce.o: mail_proto.h
|
||||
bounce.o: msg_stats.h
|
||||
bounce.o: ndr_filter.h
|
||||
bounce.o: dsn_filter.h
|
||||
bounce.o: rcpt_print.h
|
||||
bounce.o: recipient_list.h
|
||||
bounce.o: trace.h
|
||||
@ -812,7 +812,7 @@ defer.o: mail_params.h
|
||||
defer.o: mail_proto.h
|
||||
defer.o: mail_queue.h
|
||||
defer.o: msg_stats.h
|
||||
defer.o: ndr_filter.h
|
||||
defer.o: dsn_filter.h
|
||||
defer.o: rcpt_print.h
|
||||
defer.o: recipient_list.h
|
||||
defer.o: trace.h
|
||||
@ -1806,20 +1806,20 @@ namadr_list.o: ../../include/match_list.h
|
||||
namadr_list.o: ../../include/sys_defs.h
|
||||
namadr_list.o: namadr_list.c
|
||||
namadr_list.o: namadr_list.h
|
||||
ndr_filter.o: ../../include/argv.h
|
||||
ndr_filter.o: ../../include/dict.h
|
||||
ndr_filter.o: ../../include/msg.h
|
||||
ndr_filter.o: ../../include/myflock.h
|
||||
ndr_filter.o: ../../include/mymalloc.h
|
||||
ndr_filter.o: ../../include/sys_defs.h
|
||||
ndr_filter.o: ../../include/vbuf.h
|
||||
ndr_filter.o: ../../include/vstream.h
|
||||
ndr_filter.o: ../../include/vstring.h
|
||||
ndr_filter.o: dsn.h
|
||||
ndr_filter.o: dsn_util.h
|
||||
ndr_filter.o: maps.h
|
||||
ndr_filter.o: ndr_filter.c
|
||||
ndr_filter.o: ndr_filter.h
|
||||
dsn_filter.o: ../../include/argv.h
|
||||
dsn_filter.o: ../../include/dict.h
|
||||
dsn_filter.o: ../../include/msg.h
|
||||
dsn_filter.o: ../../include/myflock.h
|
||||
dsn_filter.o: ../../include/mymalloc.h
|
||||
dsn_filter.o: ../../include/sys_defs.h
|
||||
dsn_filter.o: ../../include/vbuf.h
|
||||
dsn_filter.o: ../../include/vstream.h
|
||||
dsn_filter.o: ../../include/vstring.h
|
||||
dsn_filter.o: dsn.h
|
||||
dsn_filter.o: dsn_util.h
|
||||
dsn_filter.o: maps.h
|
||||
dsn_filter.o: dsn_filter.c
|
||||
dsn_filter.o: dsn_filter.h
|
||||
off_cvt.o: ../../include/msg.h
|
||||
off_cvt.o: ../../include/sys_defs.h
|
||||
off_cvt.o: ../../include/vbuf.h
|
||||
|
@ -53,7 +53,7 @@
|
||||
/* const char *title;
|
||||
/* const char *maps;
|
||||
/* INTERNAL API
|
||||
/* NDR_FILTER *bounce_defer_filter;
|
||||
/* DSN_FILTER *delivery_status_filter;
|
||||
/*
|
||||
/* int bounce_append_intern(flags, id, stats, recipient, relay, dsn)
|
||||
/* int flags;
|
||||
@ -181,7 +181,7 @@
|
||||
|
||||
/* Global library. */
|
||||
|
||||
#define BOUNCE_DEFER_INTERN
|
||||
#define DSN_INTERN
|
||||
#include <mail_params.h>
|
||||
#include <mail_proto.h>
|
||||
#include <log_adhoc.h>
|
||||
@ -195,7 +195,7 @@
|
||||
|
||||
/* Shared internally, between bounce and defer clients. */
|
||||
|
||||
NDR_FILTER *bounce_defer_filter;
|
||||
DSN_FILTER *delivery_status_filter;
|
||||
|
||||
/* bounce_append - append delivery status to per-message bounce log */
|
||||
|
||||
@ -218,8 +218,8 @@ int bounce_append(int flags, const char *id, MSG_STATS *stats,
|
||||
/*
|
||||
* DSN filter (Postfix 2.12).
|
||||
*/
|
||||
if (bounce_defer_filter != 0
|
||||
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||
if (delivery_status_filter != 0
|
||||
&& (dsn_res = dsn_filter_lookup(delivery_status_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;
|
||||
@ -406,8 +406,8 @@ int bounce_one(int flags, const char *queue, const char *id,
|
||||
/*
|
||||
* DSN filter (Postfix 2.12).
|
||||
*/
|
||||
if (bounce_defer_filter != 0
|
||||
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||
if (delivery_status_filter != 0
|
||||
&& (dsn_res = dsn_filter_lookup(delivery_status_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;
|
||||
@ -508,8 +508,8 @@ void bounce_client_init(const char *title, const char *maps)
|
||||
{
|
||||
const char myname[] = "bounce_client_init";
|
||||
|
||||
if (bounce_defer_filter != 0)
|
||||
if (delivery_status_filter != 0)
|
||||
msg_panic("%s: duplicate initialization", myname);
|
||||
if (*maps)
|
||||
bounce_defer_filter = ndr_filter_create(title, maps);
|
||||
delivery_status_filter = dsn_filter_create(title, maps);
|
||||
}
|
||||
|
@ -70,11 +70,11 @@ extern void bounce_client_init(const char *, const char *);
|
||||
* Start of private API.
|
||||
*/
|
||||
|
||||
#ifdef BOUNCE_DEFER_INTERN
|
||||
#ifdef DSN_INTERN
|
||||
|
||||
#include <ndr_filter.h>
|
||||
#include <dsn_filter.h>
|
||||
|
||||
extern NDR_FILTER *bounce_defer_filter;
|
||||
extern DSN_FILTER *delivery_status_filter;
|
||||
|
||||
extern int bounce_append_intern(int, const char *, MSG_STATS *, RECIPIENT *,
|
||||
const char *, DSN *);
|
||||
|
@ -77,7 +77,7 @@
|
||||
/* question has been deferred. The defer log is not deleted,
|
||||
/* and no recipients are deleted from the original queue file.
|
||||
/*
|
||||
/* defer_one() implements ndr_filter(3) compatibility for the
|
||||
/* defer_one() implements dsn_filter(3) compatibility for the
|
||||
/* bounce_one() routine.
|
||||
/*
|
||||
/* defer_append_intern() is for use after the DSN filter.
|
||||
@ -160,7 +160,7 @@
|
||||
|
||||
/* Global library. */
|
||||
|
||||
#define BOUNCE_DEFER_INTERN
|
||||
#define DSN_INTERN
|
||||
#include <mail_params.h>
|
||||
#include <mail_queue.h>
|
||||
#include <mail_proto.h>
|
||||
@ -195,8 +195,8 @@ int defer_append(int flags, const char *id, MSG_STATS *stats,
|
||||
/*
|
||||
* DSN filter (Postfix 2.12).
|
||||
*/
|
||||
if (bounce_defer_filter != 0
|
||||
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||
if (delivery_status_filter != 0
|
||||
&& (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
|
||||
if (dsn_res->status[0] == '5')
|
||||
return (bounce_append_intern(flags, id, stats, rcpt, relay, dsn_res));
|
||||
my_dsn = *dsn_res;
|
||||
@ -351,8 +351,8 @@ int defer_one(int flags, const char *queue, const char *id,
|
||||
/*
|
||||
* DSN filter (Postfix 2.12).
|
||||
*/
|
||||
if (bounce_defer_filter != 0
|
||||
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) {
|
||||
if (delivery_status_filter != 0
|
||||
&& (dsn_res = dsn_filter_lookup(delivery_status_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,
|
||||
|
@ -33,7 +33,7 @@ extern int defer_one(int, const char *, const char *, const char *,
|
||||
/*
|
||||
* Start of private API.
|
||||
*/
|
||||
#ifdef BOUNCE_DEFER_INTERN
|
||||
#ifdef DSN_INTERN
|
||||
|
||||
extern int defer_append_intern(int, const char *, MSG_STATS *, RECIPIENT *,
|
||||
const char *, DSN *);
|
||||
|
192
postfix/src/global/dsn_filter.c
Normal file
192
postfix/src/global/dsn_filter.c
Normal file
@ -0,0 +1,192 @@
|
||||
/*++
|
||||
/* NAME
|
||||
/* dsn_filter 3
|
||||
/* SUMMARY
|
||||
/* filter DSN status or text
|
||||
/* SYNOPSIS
|
||||
/* #include <dsn_filter.h>
|
||||
/*
|
||||
/* DSN_FILTER *dsn_filter_create(
|
||||
/* const char *title,
|
||||
/* const char *map_names)
|
||||
/*
|
||||
/* DSN *dsn_filter_lookup(
|
||||
/* DSN_FILTER *fp,
|
||||
/* DSN *dsn)
|
||||
/*
|
||||
/* void dsn_free(
|
||||
/* DSN_FILTER *fp)
|
||||
/* DESCRIPTION
|
||||
/* This module maps (bounce or defer non-delivery status code
|
||||
/* and text) into replacement (bounce or defer non-delivery
|
||||
/* status code and text), or maps (success status code and
|
||||
/* text) into replacement (success status code and text). Other
|
||||
/* DSN attributes are passed through without modification.
|
||||
/*
|
||||
/* dsn_filter_create() instantiates a DSN filter.
|
||||
/*
|
||||
/* dsn_filter_lookup() queries the specified filter. The input
|
||||
/* DSN must be a success, bounce or defer DSN. If a match is
|
||||
/* found a non-delivery status must map to a non-delivery
|
||||
/* status, a success status must map to a success status, and
|
||||
/* the text must be non-empty. The result is a null pointer
|
||||
/* when no valid match is found. Otherwise, the result is
|
||||
/* overwritten upon each call. This function must not be
|
||||
/* called with the result from a dsn_filter_lookup() call.
|
||||
/*
|
||||
/* dsn_free() destroys the specified DSN filter.
|
||||
/*
|
||||
/* Arguments:
|
||||
/* .IP title
|
||||
/* Origin of the mapnames argument, typically a configuration
|
||||
/* parameter name. This is reported in diagnostics.
|
||||
/* .IP mapnames
|
||||
/* List of lookup tables, separated by whitespace or comma.
|
||||
/* .IP fp
|
||||
/* filter created with dsn_filter_create()
|
||||
/* .IP dsn
|
||||
/* A success, bounce or defer DSN data structure. The
|
||||
/* dsn_filter_lookup() result value is in part a shallow copy
|
||||
/* of this argument.
|
||||
/* SEE ALSO
|
||||
/* maps(3) multi-table search
|
||||
/* DIAGNOSTICS
|
||||
/* Panic: invalid dsn argument; recursive call. Fatal error:
|
||||
/* memory allocation problem. Warning: invalid DSN lookup
|
||||
/* result.
|
||||
/* LICENSE
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* The Secure Mailer license must be distributed with this software.
|
||||
/* AUTHOR(S)
|
||||
/* Wietse Venema
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*--*/
|
||||
|
||||
/*
|
||||
* System libraries.
|
||||
*/
|
||||
#include <sys_defs.h>
|
||||
|
||||
/*
|
||||
* Utility library.
|
||||
*/
|
||||
#include <msg.h>
|
||||
#include <mymalloc.h>
|
||||
#include <vstring.h>
|
||||
|
||||
/*
|
||||
* Global library.
|
||||
*/
|
||||
#include <maps.h>
|
||||
#include <dsn.h>
|
||||
#include <dsn_util.h>
|
||||
#include <maps.h>
|
||||
#include <dsn_filter.h>
|
||||
|
||||
/*
|
||||
* Private data structure.
|
||||
*/
|
||||
struct DSN_FILTER {
|
||||
MAPS *maps; /* Replacement (status, text) */
|
||||
VSTRING *buffer; /* Status code and text */
|
||||
DSN_SPLIT dp; /* Parsing aid */
|
||||
DSN dsn; /* Shallow copy */
|
||||
};
|
||||
|
||||
/*
|
||||
* SLMs.
|
||||
*/
|
||||
#define STR(x) vstring_str(x)
|
||||
|
||||
/* dsn_filter_create - create bounce/defer NDR filter */
|
||||
|
||||
DSN_FILTER *dsn_filter_create(const char *title, const char *map_names)
|
||||
{
|
||||
const char myname[] = "dsn_filter_create";
|
||||
DSN_FILTER *fp;
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: %s %s", myname, title, map_names);
|
||||
|
||||
fp = (DSN_FILTER *) mymalloc(sizeof(*fp));
|
||||
fp->buffer = vstring_alloc(100);
|
||||
fp->maps = maps_create(title, map_names, DICT_FLAG_LOCK);
|
||||
return (fp);
|
||||
}
|
||||
|
||||
/* dsn_filter_lookup - apply bounce/defer NDR filter */
|
||||
|
||||
DSN *dsn_filter_lookup(DSN_FILTER *fp, DSN *dsn)
|
||||
{
|
||||
const char myname[] = "dsn_filter_lookup";
|
||||
const char *result;
|
||||
int ndr_dsn = 0;
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: %s %s", myname, dsn->status, dsn->reason);
|
||||
|
||||
/*
|
||||
* XXX Instead of hard-coded '4' etc., use some form of encapsulation
|
||||
* when reading or updating the status class field.
|
||||
*/
|
||||
#define IS_SUCCESS_DSN(s) (dsn_valid(s) && (s)[0] == '2')
|
||||
#define IS_NDR_DSN(s) (dsn_valid(s) && ((s)[0] == '4' || (s)[0] == '5'))
|
||||
|
||||
/*
|
||||
* Sanity check. We filter only success/bounce/defer DSNs.
|
||||
*/
|
||||
if (IS_SUCCESS_DSN(dsn->status))
|
||||
ndr_dsn = 0;
|
||||
else if (IS_NDR_DSN(dsn->status))
|
||||
ndr_dsn = 1;
|
||||
else
|
||||
msg_panic("%s: dsn argument with bad status code: %s",
|
||||
myname, dsn->status);
|
||||
|
||||
/*
|
||||
* Sanity check. A DSN filter must not be invoked with its own result.
|
||||
*/
|
||||
if (dsn->reason == fp->dsn.reason)
|
||||
msg_panic("%s: recursive call is not allowed", myname);
|
||||
|
||||
/*
|
||||
* Look up replacement status and text.
|
||||
*/
|
||||
vstring_sprintf(fp->buffer, "%s %s", dsn->status, dsn->reason);
|
||||
if ((result = maps_find(fp->maps, STR(fp->buffer), 0)) != 0) {
|
||||
/* Sanity check. Do not allow success<=>error mappings. */
|
||||
if ((ndr_dsn == 0 && !IS_SUCCESS_DSN(result))
|
||||
|| (ndr_dsn != 0 && !IS_NDR_DSN(result))) {
|
||||
msg_warn("%s: bad status code: %s", fp->maps->title, result);
|
||||
return (0);
|
||||
} else {
|
||||
vstring_strcpy(fp->buffer, result);
|
||||
dsn_split(&fp->dp, "can't happen", STR(fp->buffer));
|
||||
(void) DSN_ASSIGN(&fp->dsn, DSN_STATUS(fp->dp.dsn),
|
||||
(result[0] == '4' ? "delayed" :
|
||||
result[0] == '5' ? "failed" :
|
||||
dsn->action),
|
||||
fp->dp.text, dsn->dtype, dsn->dtext,
|
||||
dsn->mtype, dsn->mname);
|
||||
return (&fp->dsn);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* dsn_filter_free - destroy bounce/defer NDR filter */
|
||||
|
||||
void dsn_filter_free(DSN_FILTER *fp)
|
||||
{
|
||||
const char myname[] = "dsn_filter_free";
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: %s", myname, fp->maps->title);
|
||||
|
||||
maps_free(fp->maps);
|
||||
vstring_free(fp->buffer);
|
||||
myfree((char *) fp);
|
||||
}
|
@ -1,24 +1,24 @@
|
||||
#ifndef _NDR_FILTER_H_INCLUDED_
|
||||
#define _NDR_FILTER_H_INCLUDED_
|
||||
#ifndef _DSN_FILTER_H_INCLUDED_
|
||||
#define _DSN_FILTER_H_INCLUDED_
|
||||
|
||||
/*++
|
||||
/* NAME
|
||||
/* ndr_filter 3h
|
||||
/* dsn_filter 3h
|
||||
/* SUMMARY
|
||||
/* bounce/defer DSN filter
|
||||
/* SYNOPSIS
|
||||
/* #include <ndr_filter.h>
|
||||
/* #include <dsn_filter.h>
|
||||
/* DESCRIPTION
|
||||
/* .nf
|
||||
|
||||
/*
|
||||
* External interface.
|
||||
*/
|
||||
typedef struct NDR_FILTER NDR_FILTER;
|
||||
typedef struct DSN_FILTER DSN_FILTER;
|
||||
|
||||
extern NDR_FILTER *ndr_filter_create(const char *, const char *);
|
||||
extern DSN *ndr_filter_lookup(NDR_FILTER *, DSN *);
|
||||
extern void ndr_filter_free(NDR_FILTER *);
|
||||
extern DSN_FILTER *dsn_filter_create(const char *, const char *);
|
||||
extern DSN *dsn_filter_lookup(DSN_FILTER *, DSN *);
|
||||
extern void dsn_filter_free(DSN_FILTER *);
|
||||
|
||||
/* LICENSE
|
||||
/* .ad
|
@ -121,7 +121,7 @@
|
||||
/* bool var_multi_enable;
|
||||
/* bool var_long_queue_ids;
|
||||
/* bool var_daemon_open_fatal;
|
||||
/* char *var_ndr_filter;
|
||||
/* char *var_dsn_filter;
|
||||
/*
|
||||
/* void mail_params_init()
|
||||
/*
|
||||
@ -315,7 +315,7 @@ char *var_multi_name;
|
||||
bool var_multi_enable;
|
||||
bool var_long_queue_ids;
|
||||
bool var_daemon_open_fatal;
|
||||
char *var_ndr_filter;
|
||||
char *var_dsn_filter;
|
||||
|
||||
const char null_format_string[1] = "";
|
||||
|
||||
@ -591,7 +591,7 @@ void mail_params_init()
|
||||
VAR_INT_FILT_CLASSES, DEF_INT_FILT_CLASSES, &var_int_filt_classes, 0, 0,
|
||||
/* multi_instance_wrapper may have dependencies but not dependents. */
|
||||
VAR_MULTI_WRAPPER, DEF_MULTI_WRAPPER, &var_multi_wrapper, 0, 0,
|
||||
VAR_NDR_FILTER, DEF_NDR_FILTER, &var_ndr_filter, 0, 0,
|
||||
VAR_DSN_FILTER, DEF_DSN_FILTER, &var_dsn_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_STR_FN_TABLE function_str_defaults_2[] = {
|
||||
|
@ -3747,27 +3747,27 @@ extern bool var_daemon_open_fatal;
|
||||
/*
|
||||
* Optional DSN bounce/defer filter.
|
||||
*/
|
||||
#define VAR_NDR_FILTER "default_bounce_defer_filter"
|
||||
#define DEF_NDR_FILTER ""
|
||||
extern char *var_ndr_filter;
|
||||
#define VAR_DSN_FILTER "default_delivery_status_filter"
|
||||
#define DEF_DSN_FILTER ""
|
||||
extern char *var_dsn_filter;
|
||||
|
||||
#define VAR_SMTP_NDR_FILTER "smtp_bounce_defer_filter"
|
||||
#define DEF_SMTP_NDR_FILTER "$" VAR_NDR_FILTER
|
||||
#define VAR_LMTP_NDR_FILTER "lmtp_bounce_defer_filter"
|
||||
#define DEF_LMTP_NDR_FILTER "$" VAR_NDR_FILTER
|
||||
extern char *var_smtp_ndr_filter;
|
||||
#define VAR_SMTP_DSN_FILTER "smtp_delivery_status_filter"
|
||||
#define DEF_SMTP_DSN_FILTER "$" VAR_DSN_FILTER
|
||||
#define VAR_LMTP_DSN_FILTER "lmtp_delivery_status_filter"
|
||||
#define DEF_LMTP_DSN_FILTER "$" VAR_DSN_FILTER
|
||||
extern char *var_smtp_dsn_filter;
|
||||
|
||||
#define VAR_PIPE_NDR_FILTER "pipe_bounce_defer_filter"
|
||||
#define DEF_PIPE_NDR_FILTER "$" VAR_NDR_FILTER
|
||||
extern char *var_pipe_ndr_filter;
|
||||
#define VAR_PIPE_DSN_FILTER "pipe_delivery_status_filter"
|
||||
#define DEF_PIPE_DSN_FILTER "$" VAR_DSN_FILTER
|
||||
extern char *var_pipe_dsn_filter;
|
||||
|
||||
#define VAR_VIRT_NDR_FILTER "virtual_bounce_defer_filter"
|
||||
#define DEF_VIRT_NDR_FILTER "$" VAR_NDR_FILTER
|
||||
extern char *var_virt_ndr_filter;
|
||||
#define VAR_VIRT_DSN_FILTER "virtual_delivery_status_filter"
|
||||
#define DEF_VIRT_DSN_FILTER "$" VAR_DSN_FILTER
|
||||
extern char *var_virt_dsn_filter;
|
||||
|
||||
#define VAR_LOCAL_NDR_FILTER "local_bounce_defer_filter"
|
||||
#define DEF_LOCAL_NDR_FILTER "$" VAR_NDR_FILTER
|
||||
extern char *var_local_ndr_filter;
|
||||
#define VAR_LOCAL_DSN_FILTER "local_delivery_status_filter"
|
||||
#define DEF_LOCAL_DSN_FILTER "$" VAR_DSN_FILTER
|
||||
extern char *var_local_dsn_filter;
|
||||
|
||||
/* LICENSE
|
||||
/* .ad
|
||||
|
@ -20,7 +20,7 @@
|
||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||
* patchlevel; they change the release date only.
|
||||
*/
|
||||
#define MAIL_RELEASE_DATE "20140318"
|
||||
#define MAIL_RELEASE_DATE "20140321"
|
||||
#define MAIL_VERSION_NUMBER "2.12"
|
||||
|
||||
#ifdef SNAPSHOT
|
||||
|
@ -1,182 +0,0 @@
|
||||
/*++
|
||||
/* NAME
|
||||
/* ndr_filter 3
|
||||
/* SUMMARY
|
||||
/* bounce or defer NDR filter
|
||||
/* SYNOPSIS
|
||||
/* #include <ndr_filter.h>
|
||||
/*
|
||||
/* NDR_FILTER *ndr_filter_create(
|
||||
/* const char *title,
|
||||
/* const char *map_names)
|
||||
/*
|
||||
/* DSN *ndr_filter_lookup(
|
||||
/* NDR_FILTER *fp,
|
||||
/* DSN *dsn)
|
||||
/*
|
||||
/* void dsn_free(
|
||||
/* NDR_FILTER *fp)
|
||||
/* DESCRIPTION
|
||||
/* This module maps a bounce or defer non-delivery status code
|
||||
/* and text into a bounce or defer non-delivery status code
|
||||
/* and text. The other DSN attributes are passed through without
|
||||
/* modification.
|
||||
/*
|
||||
/* ndr_filter_create() instantiates a bounce or defer NDR filter.
|
||||
/*
|
||||
/* ndr_filter_lookup() queries the specified filter. The DSN
|
||||
/* must be a bounce or defer DSN. If a match is found and the
|
||||
/* result is properly formatted, the result value must specify
|
||||
/* a bounce or defer DSN. The result is in part overwritten
|
||||
/* upon each call, and is in part a shallow copy of the dsn
|
||||
/* argument. The result is a null pointer when no valid match
|
||||
/* is found. This function must not be called with the result
|
||||
/* from a ndr_filter_lookup() call.
|
||||
/*
|
||||
/* dsn_free() destroys the specified NDR filter.
|
||||
/*
|
||||
/* Arguments:
|
||||
/* .IP title
|
||||
/* Origin of the mapnames argument, typically a configuration
|
||||
/* parameter name. This is reported in diagnostics.
|
||||
/* .IP mapnames
|
||||
/* List of lookup tables, separated by whitespace or comma.
|
||||
/* .IP fp
|
||||
/* filter created with ndr_filter_create()
|
||||
/* .IP dsn
|
||||
/* A bounce or defer DSN data structure. The ndr_filter_lookup()
|
||||
/* result value is in part a shallow copy of this argument.
|
||||
/* SEE ALSO
|
||||
/* maps(3) multi-table search
|
||||
/* DIAGNOSTICS
|
||||
/* Panic: invalid dsn argument; recursive call. Fatal error:
|
||||
/* memory allocation problem. Warning: invalid DSN lookup
|
||||
/* result.
|
||||
/* LICENSE
|
||||
/* .ad
|
||||
/* .fi
|
||||
/* The Secure Mailer license must be distributed with this software.
|
||||
/* AUTHOR(S)
|
||||
/* Wietse Venema
|
||||
/* IBM T.J. Watson Research
|
||||
/* P.O. Box 704
|
||||
/* Yorktown Heights, NY 10598, USA
|
||||
/*--*/
|
||||
|
||||
/*
|
||||
* System libraries.
|
||||
*/
|
||||
#include <sys_defs.h>
|
||||
|
||||
/*
|
||||
* Utility library.
|
||||
*/
|
||||
#include <msg.h>
|
||||
#include <mymalloc.h>
|
||||
#include <vstring.h>
|
||||
|
||||
/*
|
||||
* Global library.
|
||||
*/
|
||||
#include <maps.h>
|
||||
#include <dsn.h>
|
||||
#include <dsn_util.h>
|
||||
#include <maps.h>
|
||||
#include <ndr_filter.h>
|
||||
|
||||
/*
|
||||
* Private data structure.
|
||||
*/
|
||||
struct NDR_FILTER {
|
||||
MAPS *maps; /* Replacement (status, text) */
|
||||
VSTRING *buffer; /* Status code and text */
|
||||
DSN_SPLIT dp; /* Parsing aid */
|
||||
DSN dsn; /* Shallow copy */
|
||||
};
|
||||
|
||||
/*
|
||||
* SLMs.
|
||||
*/
|
||||
#define STR(x) vstring_str(x)
|
||||
|
||||
/* ndr_filter_create - create bounce/defer NDR filter */
|
||||
|
||||
NDR_FILTER *ndr_filter_create(const char *title, const char *map_names)
|
||||
{
|
||||
const char myname[] = "ndr_filter_create";
|
||||
NDR_FILTER *fp;
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: %s %s", myname, title, map_names);
|
||||
|
||||
fp = (NDR_FILTER *) mymalloc(sizeof(*fp));
|
||||
fp->buffer = vstring_alloc(100);
|
||||
fp->maps = maps_create(title, map_names, DICT_FLAG_LOCK);
|
||||
return (fp);
|
||||
}
|
||||
|
||||
/* ndr_filter_lookup - apply bounce/defer NDR filter */
|
||||
|
||||
DSN *ndr_filter_lookup(NDR_FILTER *fp, DSN *dsn)
|
||||
{
|
||||
const char myname[] = "ndr_filter_lookup";
|
||||
const char *result;
|
||||
|
||||
if (msg_verbose)
|
||||
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) \
|
||||
(dsn_valid(s) && ((s)[0] == '4' || (s)[0] == '5'))
|
||||
|
||||
/*
|
||||
* Sanity check. We filter only bounce/defer DSNs.
|
||||
*/
|
||||
if (!IS_NDR_DSN(dsn->status))
|
||||
msg_panic("%s: dsn argument with bad status code: %s",
|
||||
myname, dsn->status);
|
||||
|
||||
/*
|
||||
* Sanity check. An NDR filter must not be invoked with its own result.
|
||||
*/
|
||||
if (dsn->reason == fp->dsn.reason)
|
||||
msg_panic("%s: recursive call is not allowed", myname);
|
||||
|
||||
/*
|
||||
* Look up replacement status and text.
|
||||
*/
|
||||
vstring_sprintf(fp->buffer, "%s %s", dsn->status, dsn->reason);
|
||||
if ((result = maps_find(fp->maps, STR(fp->buffer), 0)) != 0) {
|
||||
/* Sanity check. We accept only bounce/defer DSNs. */
|
||||
if (!IS_NDR_DSN(result)) {
|
||||
msg_warn("%s: bad status code: %s", fp->maps->title, result);
|
||||
return (0);
|
||||
} else {
|
||||
vstring_strcpy(fp->buffer, result);
|
||||
dsn_split(&fp->dp, "can't happen", STR(fp->buffer));
|
||||
(void) DSN_ASSIGN(&fp->dsn, DSN_STATUS(fp->dp.dsn),
|
||||
(result[0] == '4' ? "delayed" : "failed"),
|
||||
fp->dp.text, dsn->dtype, dsn->dtext,
|
||||
dsn->mtype, dsn->mname);
|
||||
return (&fp->dsn);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* ndr_filter_free - destroy bounce/defer NDR filter */
|
||||
|
||||
void ndr_filter_free(NDR_FILTER *fp)
|
||||
{
|
||||
const char myname[] = "ndr_filter_free";
|
||||
|
||||
if (msg_verbose)
|
||||
msg_info("%s: %s", myname, fp->maps->title);
|
||||
|
||||
maps_free(fp->maps);
|
||||
vstring_free(fp->buffer);
|
||||
myfree((char *) fp);
|
||||
}
|
@ -19,8 +19,6 @@
|
||||
/* message delivery record on request by the sender. The
|
||||
/* flags argument determines the action.
|
||||
/*
|
||||
/* vsent() implements an alternative interface.
|
||||
/*
|
||||
/* Arguments:
|
||||
/* .IP flags
|
||||
/* Zero or more of the following:
|
||||
@ -79,6 +77,7 @@
|
||||
|
||||
/* Global library. */
|
||||
|
||||
#define DSN_INTERN
|
||||
#include <mail_params.h>
|
||||
#include <verify.h>
|
||||
#include <log_adhoc.h>
|
||||
@ -97,6 +96,7 @@ int sent(int flags, const char *id, MSG_STATS *stats,
|
||||
DSN *dsn)
|
||||
{
|
||||
DSN my_dsn = *dsn;
|
||||
DSN *dsn_res;
|
||||
int status;
|
||||
|
||||
/*
|
||||
@ -107,6 +107,13 @@ int sent(int flags, const char *id, MSG_STATS *stats,
|
||||
my_dsn.status = "2.0.0";
|
||||
}
|
||||
|
||||
/*
|
||||
* DSN filter (Postfix 2.12).
|
||||
*/
|
||||
if (delivery_status_filter != 0
|
||||
&& (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0)
|
||||
my_dsn = *dsn_res;
|
||||
|
||||
/*
|
||||
* MTA-requested address verification information is stored in the verify
|
||||
* service database.
|
||||
@ -147,7 +154,7 @@ int sent(int flags, const char *id, MSG_STATS *stats,
|
||||
vstring_sprintf(junk, "%s: %s service failed",
|
||||
id, var_trace_service);
|
||||
my_dsn.reason = vstring_str(junk);
|
||||
my_dsn.status ="4.3.0";
|
||||
my_dsn.status = "4.3.0";
|
||||
status = defer_append(flags, id, stats, recipient, relay, &my_dsn);
|
||||
vstring_free(junk);
|
||||
}
|
||||
|
@ -387,9 +387,10 @@
|
||||
/* 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.
|
||||
/* .IP "\fBlocal_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
/* Optional filter for the \fBlocal\fR(8) delivery agent to change the
|
||||
/* status code or explanatory text of successful or unsuccessful
|
||||
/* deliveries.
|
||||
/* DELIVERY METHOD CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
@ -904,7 +905,7 @@ int main(int argc, char **argv)
|
||||
VAR_DELIVER_HDR, DEF_DELIVER_HDR, &var_deliver_hdr, 0, 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_LOCAL_NDR_FILTER, DEF_LOCAL_NDR_FILTER, &var_local_ndr_filter, 0, 0,
|
||||
VAR_LOCAL_DSN_FILTER, DEF_LOCAL_DSN_FILTER, &var_local_ndr_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_BOOL_TABLE bool_table[] = {
|
||||
@ -943,7 +944,7 @@ int main(int argc, char **argv)
|
||||
MAIL_SERVER_POST_INIT, post_init,
|
||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||
MAIL_SERVER_PRIVILEGED,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_NDR_FILTER,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_DSN_FILTER,
|
||||
&var_local_ndr_filter,
|
||||
0);
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ event_server.o: ../../include/deliver_request.h
|
||||
event_server.o: ../../include/dict.h
|
||||
event_server.o: ../../include/dsn.h
|
||||
event_server.o: ../../include/dsn_buf.h
|
||||
event_server.o: ../../include/ndr_filter.h
|
||||
event_server.o: ../../include/dsn_filter.h
|
||||
event_server.o: ../../include/events.h
|
||||
event_server.o: ../../include/htable.h
|
||||
event_server.o: ../../include/iostuff.h
|
||||
@ -300,7 +300,7 @@ multi_server.o: ../../include/deliver_request.h
|
||||
multi_server.o: ../../include/dict.h
|
||||
multi_server.o: ../../include/dsn.h
|
||||
multi_server.o: ../../include/dsn_buf.h
|
||||
multi_server.o: ../../include/ndr_filter.h
|
||||
multi_server.o: ../../include/dsn_filter.h
|
||||
multi_server.o: ../../include/events.h
|
||||
multi_server.o: ../../include/htable.h
|
||||
multi_server.o: ../../include/iostuff.h
|
||||
@ -341,7 +341,7 @@ single_server.o: ../../include/deliver_request.h
|
||||
single_server.o: ../../include/dict.h
|
||||
single_server.o: ../../include/dsn.h
|
||||
single_server.o: ../../include/dsn_buf.h
|
||||
single_server.o: ../../include/ndr_filter.h
|
||||
single_server.o: ../../include/dsn_filter.h
|
||||
single_server.o: ../../include/events.h
|
||||
single_server.o: ../../include/htable.h
|
||||
single_server.o: ../../include/iostuff.h
|
||||
@ -382,7 +382,7 @@ trigger_server.o: ../../include/deliver_request.h
|
||||
trigger_server.o: ../../include/dict.h
|
||||
trigger_server.o: ../../include/dsn.h
|
||||
trigger_server.o: ../../include/dsn_buf.h
|
||||
trigger_server.o: ../../include/ndr_filter.h
|
||||
trigger_server.o: ../../include/dsn_filter.h
|
||||
trigger_server.o: ../../include/events.h
|
||||
trigger_server.o: ../../include/htable.h
|
||||
trigger_server.o: ../../include/iostuff.h
|
||||
|
@ -560,8 +560,8 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
|
||||
char *generation;
|
||||
int msg_vstream_needed = 0;
|
||||
int redo_syslog_init = 0;
|
||||
const char *ndr_filter_title;
|
||||
const char **ndr_filter_maps;
|
||||
const char *dsn_filter_title;
|
||||
const char **dsn_filter_maps;
|
||||
|
||||
/*
|
||||
* Process environment options as early as we can.
|
||||
@ -773,9 +773,9 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
|
||||
event_server_slow_exit = va_arg(ap, MAIL_SERVER_SLOW_EXIT_FN);
|
||||
break;
|
||||
case MAIL_SERVER_BOUNCE_INIT:
|
||||
ndr_filter_title = va_arg(ap, const char *);
|
||||
ndr_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(ndr_filter_title, *ndr_filter_maps);
|
||||
dsn_filter_title = va_arg(ap, const char *);
|
||||
dsn_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(dsn_filter_title, *dsn_filter_maps);
|
||||
break;
|
||||
default:
|
||||
msg_panic("%s: unknown argument type: %d", myname, key);
|
||||
|
@ -556,8 +556,8 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
|
||||
char *generation;
|
||||
int msg_vstream_needed = 0;
|
||||
int redo_syslog_init = 0;
|
||||
const char *ndr_filter_title;
|
||||
const char **ndr_filter_maps;
|
||||
const char *dsn_filter_title;
|
||||
const char **dsn_filter_maps;
|
||||
|
||||
/*
|
||||
* Process environment options as early as we can.
|
||||
@ -763,9 +763,9 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
|
||||
service_name);
|
||||
break;
|
||||
case MAIL_SERVER_BOUNCE_INIT:
|
||||
ndr_filter_title = va_arg(ap, const char *);
|
||||
ndr_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(ndr_filter_title, *ndr_filter_maps);
|
||||
dsn_filter_title = va_arg(ap, const char *);
|
||||
dsn_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(dsn_filter_title, *dsn_filter_maps);
|
||||
break;
|
||||
default:
|
||||
msg_panic("%s: unknown argument type: %d", myname, key);
|
||||
|
@ -434,8 +434,8 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
|
||||
char *generation;
|
||||
int msg_vstream_needed = 0;
|
||||
int redo_syslog_init = 0;
|
||||
const char *ndr_filter_title;
|
||||
const char **ndr_filter_maps;
|
||||
const char *dsn_filter_title;
|
||||
const char **dsn_filter_maps;
|
||||
|
||||
/*
|
||||
* Process environment options as early as we can.
|
||||
@ -638,9 +638,9 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
|
||||
service_name);
|
||||
break;
|
||||
case MAIL_SERVER_BOUNCE_INIT:
|
||||
ndr_filter_title = va_arg(ap, const char *);
|
||||
ndr_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(ndr_filter_title, *ndr_filter_maps);
|
||||
dsn_filter_title = va_arg(ap, const char *);
|
||||
dsn_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(dsn_filter_title, *dsn_filter_maps);
|
||||
break;
|
||||
default:
|
||||
msg_panic("%s: unknown argument type: %d", myname, key);
|
||||
|
@ -437,8 +437,8 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,..
|
||||
char *generation;
|
||||
int msg_vstream_needed = 0;
|
||||
int redo_syslog_init = 0;
|
||||
const char *ndr_filter_title;
|
||||
const char **ndr_filter_maps;
|
||||
const char *dsn_filter_title;
|
||||
const char **dsn_filter_maps;
|
||||
|
||||
/*
|
||||
* Process environment options as early as we can.
|
||||
@ -644,9 +644,9 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,..
|
||||
trigger_server_watchdog = *va_arg(ap, int *);
|
||||
break;
|
||||
case MAIL_SERVER_BOUNCE_INIT:
|
||||
ndr_filter_title = va_arg(ap, const char *);
|
||||
ndr_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(ndr_filter_title, *ndr_filter_maps);
|
||||
dsn_filter_title = va_arg(ap, const char *);
|
||||
dsn_filter_maps = va_arg(ap, const char **);
|
||||
bounce_client_init(dsn_filter_title, *dsn_filter_maps);
|
||||
break;
|
||||
default:
|
||||
msg_panic("%s: unknown argument type: %d", myname, key);
|
||||
|
@ -404,9 +404,10 @@
|
||||
/* 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.
|
||||
/* .IP "\fBpipe_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
/* Optional filter for the \fBpipe\fR(8) delivery agent to change the
|
||||
/* delivery status code or explanatory text of successful or unsuccessful
|
||||
/* deliveries.
|
||||
/* SEE ALSO
|
||||
/* qmgr(8), queue manager
|
||||
/* bounce(8), delivery status reports
|
||||
@ -1329,7 +1330,7 @@ int main(int argc, char **argv)
|
||||
0,
|
||||
};
|
||||
static const CONFIG_STR_TABLE str_table[] = {
|
||||
VAR_PIPE_NDR_FILTER, DEF_PIPE_NDR_FILTER, &var_pipe_ndr_filter, 0, 0,
|
||||
VAR_PIPE_DSN_FILTER, DEF_PIPE_DSN_FILTER, &var_pipe_ndr_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
|
||||
@ -1344,7 +1345,7 @@ int main(int argc, char **argv)
|
||||
MAIL_SERVER_POST_INIT, drop_privileges,
|
||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||
MAIL_SERVER_PRIVILEGED,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_PIPE_NDR_FILTER,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_PIPE_DSN_FILTER,
|
||||
&var_pipe_ndr_filter,
|
||||
0);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@
|
||||
VAR_LMTP_RESP_FILTER, DEF_LMTP_RESP_FILTER, &var_smtp_resp_filter, 0, 0,
|
||||
VAR_LMTP_ADDR_PREF, DEF_LMTP_ADDR_PREF, &var_smtp_addr_pref, 1, 0,
|
||||
VAR_LMTP_DNS_RES_OPT, DEF_LMTP_DNS_RES_OPT, &var_smtp_dns_res_opt, 0, 0,
|
||||
VAR_LMTP_NDR_FILTER, DEF_LMTP_NDR_FILTER, &var_smtp_ndr_filter, 0, 0,
|
||||
VAR_LMTP_DSN_FILTER, DEF_LMTP_DSN_FILTER, &var_smtp_ndr_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_TIME_TABLE lmtp_time_table[] = {
|
||||
|
@ -254,9 +254,10 @@
|
||||
/* 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.
|
||||
/* .IP "\fBsmtp_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
/* Optional filter for the \fBsmtp\fR(8) delivery agent to change the
|
||||
/* delivery status code or explanatory text of successful or unsuccessful
|
||||
/* deliveries.
|
||||
/* MIME PROCESSING CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
@ -1277,7 +1278,7 @@ int main(int argc, char **argv)
|
||||
MAIL_SERVER_PRE_INIT, pre_init,
|
||||
MAIL_SERVER_POST_INIT, post_init,
|
||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_SMTP_NDR_FILTER,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_SMTP_DSN_FILTER,
|
||||
&var_smtp_ndr_filter,
|
||||
0);
|
||||
}
|
||||
|
@ -58,7 +58,7 @@
|
||||
VAR_SMTP_RESP_FILTER, DEF_SMTP_RESP_FILTER, &var_smtp_resp_filter, 0, 0,
|
||||
VAR_SMTP_ADDR_PREF, DEF_SMTP_ADDR_PREF, &var_smtp_addr_pref, 1, 0,
|
||||
VAR_SMTP_DNS_RES_OPT, DEF_SMTP_DNS_RES_OPT, &var_smtp_dns_res_opt, 0, 0,
|
||||
VAR_SMTP_NDR_FILTER, DEF_SMTP_NDR_FILTER, &var_smtp_ndr_filter, 0, 0,
|
||||
VAR_SMTP_DSN_FILTER, DEF_SMTP_DSN_FILTER, &var_smtp_ndr_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_TIME_TABLE smtp_time_table[] = {
|
||||
|
@ -247,9 +247,10 @@
|
||||
/* 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"
|
||||
/* Optional filter to change arbitrary hard delivery errors into
|
||||
/* soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
|
||||
/* .IP "\fBvirtual_delivery_status_filter ($default_delivery_status_filter)\fR"
|
||||
/* Optional filter for the \fBvirtual\fR(8) delivery agent to change the
|
||||
/* delivery status code or explanatory text of successful or unsuccessful
|
||||
/* deliveries.
|
||||
/* SEE ALSO
|
||||
/* qmgr(8), queue manager
|
||||
/* bounce(8), delivery status reports
|
||||
@ -516,7 +517,7 @@ int main(int argc, char **argv)
|
||||
VAR_VIRT_GID_MAPS, DEF_VIRT_GID_MAPS, &var_virt_gid_maps, 0, 0,
|
||||
VAR_VIRT_MAILBOX_BASE, DEF_VIRT_MAILBOX_BASE, &var_virt_mailbox_base, 1, 0,
|
||||
VAR_VIRT_MAILBOX_LOCK, DEF_VIRT_MAILBOX_LOCK, &var_virt_mailbox_lock, 1, 0,
|
||||
VAR_VIRT_NDR_FILTER, DEF_VIRT_NDR_FILTER, &var_virt_ndr_filter, 0, 0,
|
||||
VAR_VIRT_DSN_FILTER, DEF_VIRT_DSN_FILTER, &var_virt_ndr_filter, 0, 0,
|
||||
0,
|
||||
};
|
||||
static const CONFIG_BOOL_TABLE bool_table[] = {
|
||||
@ -538,7 +539,7 @@ int main(int argc, char **argv)
|
||||
MAIL_SERVER_POST_INIT, post_init,
|
||||
MAIL_SERVER_PRE_ACCEPT, pre_accept,
|
||||
MAIL_SERVER_PRIVILEGED,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_VIRT_NDR_FILTER,
|
||||
MAIL_SERVER_BOUNCE_INIT, VAR_VIRT_DSN_FILTER,
|
||||
&var_virt_ndr_filter,
|
||||
0);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user