20140316
Feature: preliminary support to change arbitrary hard
- delivery errors into soft errors and vice versa, originally
- introduced for sites that want to hard-bounce mail when a
- remote SMTP server does not announce TLS support. New main.cf
+ delivery errors into soft errors and vice versa, or to
+ replace the descriptive text of non-delivery notifications.
+ 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.
- Support for the local(8) delivery agent is awaiting additional
- code to emulate defer_one() support, and support for qmgr(8)
- is awaiting further analysis. Files: proto/postconf.proto,
- mantools/postlink, global/bounce.[hc], bounce/defer.[hc],
- global/ndr_filter.[hc], global/mail_params.[hc],
+ 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/single_server.c, master/trigger_server.c, smtp/smtp.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.
If you upgrade from Postfix 2.10 or earlier, read RELEASE_NOTES-2.11
before proceeding.
-Major changes with snapshot 20140316
+Major changes with snapshot 20140318
====================================
-Preliminary support to change arbitrary hard delivery errors into
-soft errors and vice versa, originally implemented for sites that
-want to bounce mail when a remote SMTP server does not support
-STARTTLS.
+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.
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.
+bounce/defer messages. Note: this will not override "soft_bounce=yes".
The following example turns specific soft TLS errors into hard
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 was not offered by host .+)/ 5$1
-Support is currently limited to the lmtp(8), pipe(8), smtp(8) and
-virtual(8) delivery agents. The new main.cf parameters and default
-values are:
+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
-See the postconf(5) manpage for more details. Support for local(8)
-and qmgr(8) will be added as time is available.
+See the postconf(5) manpage for more details.
<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.
- <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>
Defer mail delivery when no MX record resolves to an IP address.
will send via SMTP.
<b><a href="postconf.5.html#smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a> (10s)</b>
- How long the Postfix SMTP client pauses before sending
- ".<CR><LF>" in order to work around the PIX firewall
+ How long the Postfix SMTP client pauses before sending
+ ".<CR><LF>" in order to work around the PIX firewall
"<CR><LF>.<CR><LF>" bug.
<b><a href="postconf.5.html#smtp_pix_workaround_threshold_time">smtp_pix_workaround_threshold_time</a> (500s)</b>
delivery through firewalls with "smtp fixup" mode turned on.
<b><a href="postconf.5.html#smtp_pix_workarounds">smtp_pix_workarounds</a> (disable_esmtp, delay_dotcrlf)</b>
- A list that specifies zero or more workarounds for CISCO PIX
+ A list that specifies zero or more workarounds for CISCO PIX
firewall bugs.
<b><a href="postconf.5.html#smtp_pix_workaround_maps">smtp_pix_workaround_maps</a> (empty)</b>
- Lookup tables, indexed by the remote SMTP server address, with
+ Lookup tables, indexed by the remote SMTP server address, with
per-destination workarounds for CISCO PIX firewall bugs.
<b><a href="postconf.5.html#smtp_quote_rfc821_envelope">smtp_quote_rfc821_envelope</a> (yes)</b>
- Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
+ Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
commands as required by <a href="http://tools.ietf.org/html/rfc5321">RFC 5321</a>.
<b><a href="postconf.5.html#smtp_reply_filter">smtp_reply_filter</a> (empty)</b>
- A mechanism to transform replies from remote SMTP servers one
+ A mechanism to transform replies from remote SMTP servers one
line at a time.
<b><a href="postconf.5.html#smtp_skip_5xx_greeting">smtp_skip_5xx_greeting</a> (yes)</b>
Available in Postfix version 2.0 and earlier:
<b><a href="postconf.5.html#smtp_skip_4xx_greeting">smtp_skip_4xx_greeting</a> (yes)</b>
- Skip SMTP servers that greet with a 4XX status code (go away,
+ Skip SMTP servers that greet with a 4XX status code (go away,
try again later).
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_discard_ehlo_keyword_address_maps">smtp_discard_ehlo_keyword_address_maps</a> (empty)</b>
- Lookup tables, indexed by the remote SMTP server address, with
- case insensitive lists of EHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote SMTP server address, with
+ case insensitive lists of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
<b><a href="postconf.5.html#smtp_discard_ehlo_keywords">smtp_discard_ehlo_keywords</a> (empty)</b>
- A case insensitive list of EHLO keywords (pipelining, starttls,
+ A case insensitive list of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
<b><a href="postconf.5.html#smtp_generic_maps">smtp_generic_maps</a> (empty)</b>
- Optional lookup tables that perform address rewriting in the
- Postfix SMTP client, typically to transform a locally valid
- address into a globally valid address when sending mail across
+ Optional lookup tables that perform address rewriting in the
+ Postfix SMTP client, typically to transform a locally valid
+ address into a globally valid address when sending mail across
the Internet.
Available in Postfix version 2.2.9 and later:
<b><a href="postconf.5.html#smtp_cname_overrides_servername">smtp_cname_overrides_servername</a> (version dependent)</b>
- When the remote SMTP servername is a DNS CNAME, replace the
- servername with the result from CNAME expansion for the purpose
- of logging, SASL password lookup, TLS policy decisions, or TLS
+ When the remote SMTP servername is a DNS CNAME, replace the
+ servername with the result from CNAME expansion for the purpose
+ of logging, SASL password lookup, TLS policy decisions, or TLS
certificate verification.
Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#lmtp_discard_lhlo_keyword_address_maps">lmtp_discard_lhlo_keyword_address_maps</a> (empty)</b>
- Lookup tables, indexed by the remote LMTP server address, with
- case insensitive lists of LHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote LMTP server address, with
+ case insensitive lists of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
<b><a href="postconf.5.html#lmtp_discard_lhlo_keywords">lmtp_discard_lhlo_keywords</a> (empty)</b>
- A case insensitive list of LHLO keywords (pipelining, starttls,
+ A case insensitive list of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
Available in Postfix version 2.4.4 and later:
<b><a href="postconf.5.html#send_cyrus_sasl_authzid">send_cyrus_sasl_authzid</a> (no)</b>
- When authenticating to a remote SMTP or LMTP server with the
- default setting "no", send no SASL authoriZation ID (authzid);
- send only the SASL authentiCation ID (authcid) plus the auth-
+ When authenticating to a remote SMTP or LMTP server with the
+ default setting "no", send no SASL authoriZation ID (authzid);
+ send only the SASL authentiCation ID (authcid) plus the auth-
cid's password.
Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_header_checks">smtp_header_checks</a> (empty)</b>
- Restricted <a href="header_checks.5.html"><b>header_checks</b>(5)</a> tables for the Postfix SMTP client.
+ Restricted <a href="header_checks.5.html"><b>header_checks</b>(5)</a> tables for the Postfix SMTP client.
<b><a href="postconf.5.html#smtp_mime_header_checks">smtp_mime_header_checks</a> (empty)</b>
- Restricted <b><a href="postconf.5.html#mime_header_checks">mime_header_checks</a></b>(5) tables for the Postfix SMTP
+ Restricted <b><a href="postconf.5.html#mime_header_checks">mime_header_checks</a></b>(5) tables for the Postfix SMTP
client.
<b><a href="postconf.5.html#smtp_nested_header_checks">smtp_nested_header_checks</a> (empty)</b>
- Restricted <b><a href="postconf.5.html#nested_header_checks">nested_header_checks</a></b>(5) tables for the Postfix SMTP
+ Restricted <b><a href="postconf.5.html#nested_header_checks">nested_header_checks</a></b>(5) tables for the Postfix SMTP
client.
<b><a href="postconf.5.html#smtp_body_checks">smtp_body_checks</a> (empty)</b>
Available in Postfix version 2.6 and later:
<b><a href="postconf.5.html#tcp_windowsize">tcp_windowsize</a> (0)</b>
- An optional workaround for routers that break TCP window scal-
+ An optional workaround for routers that break TCP window scal-
ing.
Available in Postfix version 2.8 and later:
Available in Postfix version 2.9 and later:
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
- Change the behavior of the smtp_*_timeout time limits, from a
- time limit per read or write system call, to a time limit to
- send or receive a complete record (an SMTP command line, SMTP
- response line, SMTP message content line, or TLS protocol mes-
+ Change the behavior of the smtp_*_timeout time limits, from a
+ time limit per read or write system call, to a time limit to
+ send or receive a complete record (an SMTP command line, SMTP
+ response line, SMTP message content line, or TLS protocol mes-
sage).
<b><a href="postconf.5.html#smtp_send_dummy_mail_auth">smtp_send_dummy_mail_auth</a> (no)</b>
- Whether or not to append the "AUTH=<>" option to the MAIL FROM
+ Whether or not to append the "AUTH=<>" option to the MAIL FROM
command in SASL-authenticated SMTP sessions.
Available in Postfix version 2.11 and later:
<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.
+ 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>
Available in Postfix version 2.0 and later:
attribute, when delivering mail to a child alias that does not
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>
- 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>,
- <a href="postconf.5.html#mailbox_command_maps">mailbox_command_maps</a>, <a href="postconf.5.html#mailbox_command">mailbox_command</a>, <a href="postconf.5.html#home_mailbox">home_mailbox</a>, <a href="postconf.5.html#mail_spool_directory">mail_spool_direc</a>-
+ <a href="postconf.5.html#mailbox_command_maps">mailbox_command_maps</a>, <a href="postconf.5.html#mailbox_command">mailbox_command</a>, <a href="postconf.5.html#home_mailbox">home_mailbox</a>, <a href="postconf.5.html#mail_spool_directory">mail_spool_direc</a>-
<a href="postconf.5.html#mail_spool_directory">tory</a>, <a href="postconf.5.html#fallback_transport_maps">fallback_transport_maps</a>, <a href="postconf.5.html#fallback_transport">fallback_transport</a>, and <a href="postconf.5.html#luser_relay">luser_relay</a>.
<b><a href="postconf.5.html#alias_maps">alias_maps</a> (see 'postconf -d' output)</b>
The alias databases that are used for <a href="local.8.html"><b>local</b>(8)</a> delivery.
<b><a href="postconf.5.html#forward_path">forward_path</a> (see 'postconf -d' output)</b>
- The <a href="local.8.html"><b>local</b>(8)</a> delivery agent search list for finding a .forward
+ The <a href="local.8.html"><b>local</b>(8)</a> delivery agent search list for finding a .forward
file with user-specified delivery methods.
<b><a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a> (empty)</b>
Optional lookup tables with per-recipient message delivery
- transports to use for <a href="local.8.html"><b>local</b>(8)</a> mailbox delivery, whether or not
+ transports to use for <a href="local.8.html"><b>local</b>(8)</a> mailbox delivery, whether or not
the recipients are found in the UNIX passwd database.
<b><a href="postconf.5.html#mailbox_transport">mailbox_transport</a> (empty)</b>
- Optional message delivery transport that the <a href="local.8.html"><b>local</b>(8)</a> delivery
- agent should use for mailbox delivery to all local recipients,
+ Optional message delivery transport that the <a href="local.8.html"><b>local</b>(8)</a> delivery
+ agent should use for mailbox delivery to all local recipients,
whether or not they are found in the UNIX passwd database.
<b><a href="postconf.5.html#mailbox_command_maps">mailbox_command_maps</a> (empty)</b>
- Optional lookup tables with per-recipient external commands to
+ Optional lookup tables with per-recipient external commands to
use for <a href="local.8.html"><b>local</b>(8)</a> mailbox delivery.
<b><a href="postconf.5.html#mailbox_command">mailbox_command</a> (empty)</b>
- Optional external command that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent
+ Optional external command that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent
should use for mailbox delivery.
<b><a href="postconf.5.html#home_mailbox">home_mailbox</a> (empty)</b>
- Optional pathname of a mailbox file relative to a <a href="local.8.html"><b>local</b>(8)</a>
+ Optional pathname of a mailbox file relative to a <a href="local.8.html"><b>local</b>(8)</a>
user's home directory.
<b><a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a> (see 'postconf -d' output)</b>
not find in the <a href="aliases.5.html"><b>aliases</b>(5)</a> or UNIX password database.
<b><a href="postconf.5.html#fallback_transport">fallback_transport</a> (empty)</b>
- Optional message delivery transport that the <a href="local.8.html"><b>local</b>(8)</a> delivery
- agent should use for names that are not found in the <a href="aliases.5.html"><b>aliases</b>(5)</a>
+ Optional message delivery transport that the <a href="local.8.html"><b>local</b>(8)</a> delivery
+ agent should use for names that are not found in the <a href="aliases.5.html"><b>aliases</b>(5)</a>
or UNIX password database.
<b><a href="postconf.5.html#luser_relay">luser_relay</a> (empty)</b>
- Optional catch-all destination for unknown <a href="local.8.html"><b>local</b>(8)</a> recipients.
+ Optional catch-all destination for unknown <a href="local.8.html"><b>local</b>(8)</a> recipients.
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#command_execution_directory">command_execution_directory</a> (empty)</b>
- The <a href="local.8.html"><b>local</b>(8)</a> delivery agent working directory for delivery to
+ The <a href="local.8.html"><b>local</b>(8)</a> delivery agent working directory for delivery to
external command.
<b>MAILBOX LOCKING CONTROLS</b>
mailbox file or <a href="bounce.8.html"><b>bounce</b>(8)</a> logfile.
<b><a href="postconf.5.html#deliver_lock_delay">deliver_lock_delay</a> (1s)</b>
- The time between attempts to acquire an exclusive lock on a
+ The time between attempts to acquire an exclusive lock on a
mailbox file or <a href="bounce.8.html"><b>bounce</b>(8)</a> logfile.
<b><a href="postconf.5.html#stale_lock_time">stale_lock_time</a> (500s)</b>
- The time after which a stale exclusive mailbox lockfile is
+ The time after which a stale exclusive mailbox lockfile is
removed.
<b><a href="postconf.5.html#mailbox_delivery_lock">mailbox_delivery_lock</a> (see 'postconf -d' output)</b>
- How to lock a UNIX-style <a href="local.8.html"><b>local</b>(8)</a> mailbox before attempting
+ How to lock a UNIX-style <a href="local.8.html"><b>local</b>(8)</a> mailbox before attempting
delivery.
<b>RESOURCE AND RATE CONTROLS</b>
<a href="showq.8.html"><b>showq</b>(8)</a> queue displays.
<b><a href="postconf.5.html#local_destination_concurrency_limit">local_destination_concurrency_limit</a> (2)</b>
- The maximal number of parallel deliveries via the local mail
- delivery transport to the same recipient (when "<a href="postconf.5.html#local_destination_recipient_limit">local_destina</a>-
- <a href="postconf.5.html#local_destination_recipient_limit">tion_recipient_limit</a> = 1") or the maximal number of parallel
+ The maximal number of parallel deliveries via the local mail
+ delivery transport to the same recipient (when "<a href="postconf.5.html#local_destination_recipient_limit">local_destina</a>-
+ <a href="postconf.5.html#local_destination_recipient_limit">tion_recipient_limit</a> = 1") or the maximal number of parallel
deliveries to the same local domain (when "<a href="postconf.5.html#local_destination_recipient_limit">local_destina</a>-
<a href="postconf.5.html#local_destination_recipient_limit">tion_recipient_limit</a> > 1").
<b><a href="postconf.5.html#local_destination_recipient_limit">local_destination_recipient_limit</a> (1)</b>
- The maximal number of recipients per message delivery via the
+ The maximal number of recipients per message delivery via the
local mail delivery transport.
<b><a href="postconf.5.html#mailbox_size_limit">mailbox_size_limit</a> (51200000)</b>
- The maximal size of any <a href="local.8.html"><b>local</b>(8)</a> individual mailbox or maildir
+ The maximal size of any <a href="local.8.html"><b>local</b>(8)</a> individual mailbox or maildir
file, or zero (no limit).
<b>SECURITY CONTROLS</b>
Restrict <a href="local.8.html"><b>local</b>(8)</a> mail delivery to external files.
<b><a href="postconf.5.html#command_expansion_filter">command_expansion_filter</a> (see 'postconf -d' output)</b>
- Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
- in $name expansions of $<a href="postconf.5.html#mailbox_command">mailbox_command</a> and $<a href="postconf.5.html#command_execution_directory">command_execu</a>-
+ Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
+ in $name expansions of $<a href="postconf.5.html#mailbox_command">mailbox_command</a> and $<a href="postconf.5.html#command_execution_directory">command_execu</a>-
<a href="postconf.5.html#command_execution_directory">tion_directory</a>.
<b><a href="postconf.5.html#default_privs">default_privs</a> (nobody)</b>
- The default rights used by the <a href="local.8.html"><b>local</b>(8)</a> delivery agent for
+ The default rights used by the <a href="local.8.html"><b>local</b>(8)</a> delivery agent for
delivery to external file or command.
<b><a href="postconf.5.html#forward_expansion_filter">forward_expansion_filter</a> (see 'postconf -d' output)</b>
- Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
+ Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
in $name expansions of $<a href="postconf.5.html#forward_path">forward_path</a>.
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#execution_directory_expansion_filter">execution_directory_expansion_filter</a> (see 'postconf -d' output)</b>
- Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
+ Restrict the characters that the <a href="local.8.html"><b>local</b>(8)</a> delivery agent allows
in $name expansions of $<a href="postconf.5.html#command_execution_directory">command_execution_directory</a>.
Available in Postfix version 2.5.3 and later:
<b><a href="postconf.5.html#strict_mailbox_ownership">strict_mailbox_ownership</a> (yes)</b>
- Defer delivery when a mailbox file is not owned by its recipi-
+ Defer delivery when a mailbox file is not owned by its recipi-
ent.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
- The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
+ The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
figuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b>
- How much time a Postfix daemon process may take to handle a
+ How much time a Postfix daemon process may take to handle a
request before it is terminated by a built-in watchdog timer.
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
- The maximal number of digits after the decimal point when log-
+ The maximal number of digits after the decimal point when log-
ging sub-second delay values.
<b><a href="postconf.5.html#export_environment">export_environment</a> (see 'postconf -d' output)</b>
- The list of environment variables that a Postfix process will
+ The list of environment variables that a Postfix process will
export to non-Postfix processes.
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b>
- The time limit for sending or receiving information over an
+ The time limit for sending or receiving information over an
internal communication channel.
<b><a href="postconf.5.html#local_command_shell">local_command_shell</a> (empty)</b>
mand.
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
- The maximum amount of time that an idle Postfix daemon process
+ The maximum amount of time that an idle Postfix daemon process
waits for an incoming connection before terminating voluntarily.
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
process will service before terminating voluntarily.
<b><a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a> (command, file, forward)</b>
- The message delivery contexts where the Postfix <a href="local.8.html"><b>local</b>(8)</a> deliv-
- ery agent prepends a Delivered-To: message header with the
+ The message delivery contexts where the Postfix <a href="local.8.html"><b>local</b>(8)</a> deliv-
+ ery agent prepends a Delivered-To: message header with the
address that the mail was delivered to.
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
The process name of a Postfix command or daemon process.
<b><a href="postconf.5.html#propagate_unmatched_extensions">propagate_unmatched_extensions</a> (canonical, virtual)</b>
- What address lookup tables copy an address extension from the
+ What address lookup tables copy an address extension from the
lookup key to the lookup result.
<b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b>
The location of the Postfix top-level queue directory.
<b><a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> (empty)</b>
- The set of characters that can separate a user name from its
- extension (example: user+foo), or a .forward file name from its
+ The set of characters that can separate a user name from its
+ extension (example: user+foo), or a .forward file name from its
extension (example: .forward+foo).
<b><a href="postconf.5.html#require_home_directory">require_home_directory</a> (no)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
- The mail system name that is prepended to the process name in
- syslog records, so that "smtpd" becomes, for example, "post-
+ The mail system name that is prepended to the process name in
+ syslog records, so that "smtpd" becomes, for example, "post-
fix/smtpd".
<b>FILES</b>
The Secure Mailer license must be distributed with this software.
<b>HISTORY</b>
- The <b>Delivered-To:</b> message header appears in the <b>qmail</b> system by Daniel
+ The <b>Delivered-To:</b> message header appears in the <b>qmail</b> system by Daniel
Bernstein.
- The <i>maildir</i> structure appears in the <b>qmail</b> system by Daniel Bernstein.
+ The <i>maildir</i> structure appears in the <b>qmail</b> system by Daniel Bernstein.
<b>AUTHOR(S)</b>
Wietse Venema
The maximal number of incoming connections that a Postfix daemon
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>
The process ID of a Postfix command or daemon process.
The location of the Postfix top-level queue directory.
<b><a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> (empty)</b>
- The set of characters that can separate a user name from its
- extension (example: user+foo), or a .forward file name from its
+ The set of characters that can separate a user name from its
+ extension (example: user+foo), or a .forward file name from its
extension (example: .forward+foo).
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
- The mail system name that is prepended to the process name in
- syslog records, so that "smtpd" becomes, for example, "post-
+ The mail system name that is prepended to the process name in
+ syslog records, so that "smtpd" becomes, for example, "post-
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>
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
<a href="bounce.8.html">bounce(8)</a>, delivery status reports
</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>
(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. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
-details. </p>
+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> This feature is available in Postfix 2.12 and later. </p>
(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. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
-details. </p>
+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
(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. See <a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for
-details. </p>
+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> This feature is available in Postfix 2.12 and later. </p>
<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.
- <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>
Defer mail delivery when no MX record resolves to an IP address.
will send via SMTP.
<b><a href="postconf.5.html#smtp_pix_workaround_delay_time">smtp_pix_workaround_delay_time</a> (10s)</b>
- How long the Postfix SMTP client pauses before sending
- ".<CR><LF>" in order to work around the PIX firewall
+ How long the Postfix SMTP client pauses before sending
+ ".<CR><LF>" in order to work around the PIX firewall
"<CR><LF>.<CR><LF>" bug.
<b><a href="postconf.5.html#smtp_pix_workaround_threshold_time">smtp_pix_workaround_threshold_time</a> (500s)</b>
delivery through firewalls with "smtp fixup" mode turned on.
<b><a href="postconf.5.html#smtp_pix_workarounds">smtp_pix_workarounds</a> (disable_esmtp, delay_dotcrlf)</b>
- A list that specifies zero or more workarounds for CISCO PIX
+ A list that specifies zero or more workarounds for CISCO PIX
firewall bugs.
<b><a href="postconf.5.html#smtp_pix_workaround_maps">smtp_pix_workaround_maps</a> (empty)</b>
- Lookup tables, indexed by the remote SMTP server address, with
+ Lookup tables, indexed by the remote SMTP server address, with
per-destination workarounds for CISCO PIX firewall bugs.
<b><a href="postconf.5.html#smtp_quote_rfc821_envelope">smtp_quote_rfc821_envelope</a> (yes)</b>
- Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
+ Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
commands as required by <a href="http://tools.ietf.org/html/rfc5321">RFC 5321</a>.
<b><a href="postconf.5.html#smtp_reply_filter">smtp_reply_filter</a> (empty)</b>
- A mechanism to transform replies from remote SMTP servers one
+ A mechanism to transform replies from remote SMTP servers one
line at a time.
<b><a href="postconf.5.html#smtp_skip_5xx_greeting">smtp_skip_5xx_greeting</a> (yes)</b>
Available in Postfix version 2.0 and earlier:
<b><a href="postconf.5.html#smtp_skip_4xx_greeting">smtp_skip_4xx_greeting</a> (yes)</b>
- Skip SMTP servers that greet with a 4XX status code (go away,
+ Skip SMTP servers that greet with a 4XX status code (go away,
try again later).
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_discard_ehlo_keyword_address_maps">smtp_discard_ehlo_keyword_address_maps</a> (empty)</b>
- Lookup tables, indexed by the remote SMTP server address, with
- case insensitive lists of EHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote SMTP server address, with
+ case insensitive lists of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
<b><a href="postconf.5.html#smtp_discard_ehlo_keywords">smtp_discard_ehlo_keywords</a> (empty)</b>
- A case insensitive list of EHLO keywords (pipelining, starttls,
+ A case insensitive list of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
<b><a href="postconf.5.html#smtp_generic_maps">smtp_generic_maps</a> (empty)</b>
- Optional lookup tables that perform address rewriting in the
- Postfix SMTP client, typically to transform a locally valid
- address into a globally valid address when sending mail across
+ Optional lookup tables that perform address rewriting in the
+ Postfix SMTP client, typically to transform a locally valid
+ address into a globally valid address when sending mail across
the Internet.
Available in Postfix version 2.2.9 and later:
<b><a href="postconf.5.html#smtp_cname_overrides_servername">smtp_cname_overrides_servername</a> (version dependent)</b>
- When the remote SMTP servername is a DNS CNAME, replace the
- servername with the result from CNAME expansion for the purpose
- of logging, SASL password lookup, TLS policy decisions, or TLS
+ When the remote SMTP servername is a DNS CNAME, replace the
+ servername with the result from CNAME expansion for the purpose
+ of logging, SASL password lookup, TLS policy decisions, or TLS
certificate verification.
Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#lmtp_discard_lhlo_keyword_address_maps">lmtp_discard_lhlo_keyword_address_maps</a> (empty)</b>
- Lookup tables, indexed by the remote LMTP server address, with
- case insensitive lists of LHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote LMTP server address, with
+ case insensitive lists of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
<b><a href="postconf.5.html#lmtp_discard_lhlo_keywords">lmtp_discard_lhlo_keywords</a> (empty)</b>
- A case insensitive list of LHLO keywords (pipelining, starttls,
+ A case insensitive list of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
Available in Postfix version 2.4.4 and later:
<b><a href="postconf.5.html#send_cyrus_sasl_authzid">send_cyrus_sasl_authzid</a> (no)</b>
- When authenticating to a remote SMTP or LMTP server with the
- default setting "no", send no SASL authoriZation ID (authzid);
- send only the SASL authentiCation ID (authcid) plus the auth-
+ When authenticating to a remote SMTP or LMTP server with the
+ default setting "no", send no SASL authoriZation ID (authzid);
+ send only the SASL authentiCation ID (authcid) plus the auth-
cid's password.
Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_header_checks">smtp_header_checks</a> (empty)</b>
- Restricted <a href="header_checks.5.html"><b>header_checks</b>(5)</a> tables for the Postfix SMTP client.
+ Restricted <a href="header_checks.5.html"><b>header_checks</b>(5)</a> tables for the Postfix SMTP client.
<b><a href="postconf.5.html#smtp_mime_header_checks">smtp_mime_header_checks</a> (empty)</b>
- Restricted <b><a href="postconf.5.html#mime_header_checks">mime_header_checks</a></b>(5) tables for the Postfix SMTP
+ Restricted <b><a href="postconf.5.html#mime_header_checks">mime_header_checks</a></b>(5) tables for the Postfix SMTP
client.
<b><a href="postconf.5.html#smtp_nested_header_checks">smtp_nested_header_checks</a> (empty)</b>
- Restricted <b><a href="postconf.5.html#nested_header_checks">nested_header_checks</a></b>(5) tables for the Postfix SMTP
+ Restricted <b><a href="postconf.5.html#nested_header_checks">nested_header_checks</a></b>(5) tables for the Postfix SMTP
client.
<b><a href="postconf.5.html#smtp_body_checks">smtp_body_checks</a> (empty)</b>
Available in Postfix version 2.6 and later:
<b><a href="postconf.5.html#tcp_windowsize">tcp_windowsize</a> (0)</b>
- An optional workaround for routers that break TCP window scal-
+ An optional workaround for routers that break TCP window scal-
ing.
Available in Postfix version 2.8 and later:
Available in Postfix version 2.9 and later:
<b><a href="postconf.5.html#smtp_per_record_deadline">smtp_per_record_deadline</a> (no)</b>
- Change the behavior of the smtp_*_timeout time limits, from a
- time limit per read or write system call, to a time limit to
- send or receive a complete record (an SMTP command line, SMTP
- response line, SMTP message content line, or TLS protocol mes-
+ Change the behavior of the smtp_*_timeout time limits, from a
+ time limit per read or write system call, to a time limit to
+ send or receive a complete record (an SMTP command line, SMTP
+ response line, SMTP message content line, or TLS protocol mes-
sage).
<b><a href="postconf.5.html#smtp_send_dummy_mail_auth">smtp_send_dummy_mail_auth</a> (no)</b>
- Whether or not to append the "AUTH=<>" option to the MAIL FROM
+ Whether or not to append the "AUTH=<>" option to the MAIL FROM
command in SASL-authenticated SMTP sessions.
Available in Postfix version 2.11 and later:
<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.
+ 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>
Available in Postfix version 2.0 and later:
syslog records, so that "smtpd" becomes, for example, "post-
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>
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>
<a href="qmgr.8.html">qmgr(8)</a>, queue manager
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
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. See default_bounce_defer_filter for
-details.
+soft errors and vice versa in the \fBpipe\fR(8) delivery agent. See
+default_bounce_defer_filter for details.
.PP
This feature is available in Postfix 2.12 and later.
.SH plaintext_reject_code (default: 450)
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. See default_bounce_defer_filter for
-details.
+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
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. See default_bounce_defer_filter for
-details.
+soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. See
+default_bounce_defer_filter for details.
.PP
This feature is available in Postfix 2.12 and later.
.SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit)
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
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"
.na
.nf
.IP "\fBmax_use (100)\fR"
The maximal number of incoming connections that a Postfix daemon
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"
The process ID of a Postfix command or daemon process.
.IP "\fBprocess_name (read-only)\fR"
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
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.
.SH "SEE ALSO"
.na
.nf
Always send EHLO at the start of an SMTP session.
.IP "\fBsmtp_never_send_ehlo (no)\fR"
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"
Defer mail delivery when no MX record resolves to an IP address.
.IP "\fBsmtp_line_length_limit (998)\fR"
Available in Postfix version 2.11 and later:
.IP "\fBsmtp_dns_support_level (empty)\fR"
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"
.na
.nf
.IP "\fBsyslog_name (see 'postconf -d' output)\fR"
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.
+soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
.SH "SEE ALSO"
.na
.nf
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_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;
%PARAM smtp_bounce_defer_filter $default_bounce_defer_filter
<p> Optional filter to change arbitrary hard delivery errors into
-soft errors and vice versa. See default_bounce_defer_filter for
-details. </p>
+soft errors and vice versa in the smtp(8) delivery agent. See
+default_bounce_defer_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
%PARAM pipe_bounce_defer_filter $default_bounce_defer_filter
<p> Optional filter to change arbitrary hard delivery errors into
-soft errors and vice versa. See default_bounce_defer_filter for
-details. </p>
+soft errors and vice versa in the pipe(8) delivery agent. See
+default_bounce_defer_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
<p> Optional filter to change arbitrary hard delivery errors into
-soft errors and vice versa. See default_bounce_defer_filter for
-details. </p>
+soft errors and vice versa in the virtual(8) delivery agent. See
+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>
/*
/* bounce_client_init() initializes an optional DSN filter.
/*
-/* bounce_append_intern() is for use after the DSN filter. DSN
-/* filtering is not yet supported for bounce_one().
+/* bounce_append_intern() and bounce_one_intern() are for use
+/* after the DSN filter.
/*
/* Arguments:
/* .IP flags
const char *relay, DSN *dsn)
{
DSN my_dsn = *dsn;
- int status;
+ DSN *dsn_res;
/*
* Sanity check.
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
* service database.
* based procedure.
*/
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));
}
/*
vstring_sprintf(junk, "%s or %s service failure",
var_bounce_service, var_trace_service);
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);
} else {
status = -1;
/* const char *sender;
/* const char *dsn_envid;
/* 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
/* int defer_append_intern(flags, id, stats, rcpt, relay, dsn)
/* int flags;
/* 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
+/* bounce_one() routine.
+/*
/* defer_append_intern() is for use after the DSN filter.
/*
/* Arguments:
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));
+}
const char *, const char *, int);
extern int defer_warn(int, const char *, const char *, const char *,
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.
#define DEF_VIRT_NDR_FILTER "$" VAR_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
/* .ad
/* .fi
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20140316"
+#define MAIL_RELEASE_DATE "20140318"
#define MAIL_VERSION_NUMBER "2.12"
#ifdef SNAPSHOT
/*
/* DSN *ndr_filter_lookup(
/* NDR_FILTER *fp,
-/* DSN dsn)
+/* DSN *dsn)
/*
/* void dsn_free(
/* NDR_FILTER *fp)
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)[1] == '.' && ((s)[0] == '4' || (s)[0] == '5'))
+ (dsn_valid(s) && ((s)[0] == '4' || (s)[0] == '5'))
/*
* Sanity check. We filter only bounce/defer DSNs.
/* Attributes describing alias, include or forward expansion.
/* A table with the results from expanding aliases or lists.
/* 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
/* Fatal errors: out of memory. The result is non-zero when
/* the operation should be tried again. Warnings: malformed
SET_OWNER_ATTR(state.msg_attr, STR(canon_owner), state.level);
}
myfree(owner_alias);
- if (alias_maps->error != 0)
+ if (alias_maps->error != 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),
BOUNCE_ATTR(state.msg_attr)));
+ }
}
/*
* substitute sender address, before completion of the delivery request.
*/
if (canon_owner) {
- rcpt_stat = bounce_one(BOUNCE_FLAGS(state.request),
- BOUNCE_ONE_ATTR(state.msg_attr));
+ rcpt_stat =
+ (STR(state.msg_attr.why->status)[0] == '4' ?
+ defer_one : bounce_one)
+ (BOUNCE_FLAGS(state.request),
+ BOUNCE_ONE_ATTR(state.msg_attr));
vstring_free(canon_owner);
}
* delivery request.
*/
else {
- rcpt_stat = bounce_append(BOUNCE_FLAGS(state.request),
- BOUNCE_ATTR(state.msg_attr));
+ rcpt_stat =
+ (STR(state.msg_attr.why->status)[0] == '4' ?
+ defer_append : bounce_append)
+ (BOUNCE_FLAGS(state.request),
+ BOUNCE_ATTR(state.msg_attr));
}
return (rcpt_stat);
}
break;
case PIPE_STAT_BOUNCE:
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. */
- deliver_status = bounce_workaround(state);
+ /* Account for possible owner- sender address override. */
+ deliver_status = bounce_workaround(state);
break;
case PIPE_STAT_CORRUPT:
deliver_status = DEL_STAT_DEFER;
} else if (mail_copy_status != 0) {
vstring_sprintf_prepend(why->reason,
"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. */
- deliver_status = bounce_workaround(state);
+ /* Account for possible owner- sender address override. */
+ deliver_status = bounce_workaround(state);
} else {
dsb_simple(why, "2.0.0", "delivered to file: %s", path);
deliver_status = sent(BOUNCE_FLAGS(state.request),
/* 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
/* 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
/* .ad
/* .fi
int local_deliver_hdr_mask;
int local_mbox_lock_mask;
MAPS *alias_maps;
+char *var_local_ndr_filter;
/* local_deliver - deliver message with extreme prejudice */
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,
0,
};
static const CONFIG_BOOL_TABLE bool_table[] = {
MAIL_SERVER_POST_INIT, post_init,
MAIL_SERVER_PRE_ACCEPT, pre_accept,
MAIL_SERVER_PRIVILEGED,
+ MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_NDR_FILTER,
+ &var_local_ndr_filter,
0);
}
/* .IP "\fBmax_use (100)\fR"
/* The maximal number of incoming connections that a Postfix daemon
/* 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"
/* The process ID of a Postfix command or daemon process.
/* .IP "\fBprocess_name (read-only)\fR"
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
/* 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.
/* SEE ALSO
/* qmgr(8), queue manager
/* bounce(8), delivery status reports
/* Always send EHLO at the start of an SMTP session.
/* .IP "\fBsmtp_never_send_ehlo (no)\fR"
/* 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"
/* Defer mail delivery when no MX record resolves to an IP address.
/* .IP "\fBsmtp_line_length_limit (998)\fR"
/* Available in Postfix version 2.11 and later:
/* .IP "\fBsmtp_dns_support_level (empty)\fR"
/* 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
/* .ad
/* .fi
DSN_BUF *why = state->why;
RECIPIENT *rcpt;
int status;
+ int aggregate_status;
int soft_error = (STR(why->status)[0] == '4');
int soft_bounce_error = (STR(why->status)[0] == '5' && var_soft_bounce);
int nrcpt;
GETTIMEOFDAY(&request->msg_stats.deliver_done);
(void) DSN_FROM_DSN_BUF(why);
+ aggregate_status = 0;
for (nrcpt = 0; nrcpt < SMTP_RCPT_LEFT(state); nrcpt++) {
rcpt = request->rcpt_list.info + nrcpt;
if (SMTP_RCPT_ISMARKED(rcpt))
if (status == 0)
deliver_completed(state->src, rcpt->offset);
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
- && throttle_queue && (soft_error || soft_bounce_error)
+ && throttle_queue && aggregate_status
&& request->hop_status == 0)
request->hop_status = DSN_COPY(&why->dsn);
}
/* .IP "\fBsyslog_name (see 'postconf -d' output)\fR"
/* 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.
+/* soft errors and vice versa in the \fBvirtual\fR(8) delivery agent.
/* SEE ALSO
/* qmgr(8), queue manager
/* bounce(8), delivery status reports