2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 09:57:34 +00:00

postfix-2.12-20140321

This commit is contained in:
Wietse Venema 2014-03-21 00:00:00 -05:00 committed by Viktor Dukhovni
parent 1b55748771
commit 48a0b6fc23
38 changed files with 958 additions and 840 deletions

View File

@ -19627,10 +19627,25 @@ Apologies for any names omitted.
Feature: local_bounce_defer_filter support. Files: Feature: local_bounce_defer_filter support. Files:
global/bounce.[hc], global/defer.[hc], local/command.c, global/bounce.[hc], global/defer.[hc], local/command.c,
local/file.c, local/bounce_workaround.c, local/local.c, local/file.c, local/bounce_workaround.c, local/local.c,
global/mail_params.h. global/mail_params.h, mantools/postlink.
20140318 20140318
Refinement: don't throttle an SMTP destination when the new Refinement: don't throttle an SMTP destination when the new
smtp_bounce_defer_filter feature turns a soft bounce into smtp_bounce_defer_filter feature turns a soft bounce into
a hard bounce. File: smtp/smtp_trouble.c. 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.

View File

@ -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 If you upgrade from Postfix 2.10 or earlier, read RELEASE_NOTES-2.11
before proceeding. before proceeding.
Major changes with snapshot 20140318 Major changes with snapshot 20140321
==================================== ====================================
Support to change arbitrary hard delivery errors into soft errors Delivery status filter support, to replace the delivery status codes
and vice versa, or to replace the descriptive text in non-delivery and explanatory text of successful or unsuccessful deliveries. This
notifications. This was originally implemented for sites that want was originally implemented for sites that want to turn certain soft
to bounce mail when no remote SMTP server supports STARTTLS. 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 This feature is implemented as a filter that replaces the three-number
enhanced status code and descriptive text in Postfix delivery agent enhanced status code and descriptive text in Postfix delivery agent
bounce/defer messages. 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. errors, by overriding the first number in the enhanced status code.
/etc/postfix/main.cf: /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 host \S+ refused to start TLS: .+)/ 5$1
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ 5$1 /^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ 5$1
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) 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 and virtual(8) delivery agents. That is, all delivery agents that
actually deliver mail. 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: The new main.cf parameters and default values are:
default_bounce_defer_filter = default_delivery_status_filter =
lmtp_bounce_defer_filter = $default_bounce_defer_filter lmtp_delivery_status_filter = $default_delivery_status_filter
local_bounce_defer_filter = $default_bounce_defer_filter local_delivery_status_filter = $default_delivery_status_filter
pipe_bounce_defer_filter = $default_bounce_defer_filter pipe_delivery_status_filter = $default_delivery_status_filter
smtp_bounce_defer_filter = $default_bounce_defer_filter smtp_delivery_status_filter = $default_delivery_status_filter
virtual_bounce_defer_filter = $default_bounce_defer_filter virtual_delivery_status_filter = $default_delivery_status_filter
See the postconf(5) manpage for more details. See the postconf(5) manpage for more details.

View File

@ -292,9 +292,10 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.12 and later: 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> <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 to change arbitrary hard delivery errors into Optional filter for the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent. delivery status code or explanatory text of successful or unsuc-
cessful deliveries.
<b>MIME PROCESSING CONTROLS</b> <b>MIME PROCESSING CONTROLS</b>
Available in Postfix version 2.0 and later: Available in Postfix version 2.0 and later:
@ -312,7 +313,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
<b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b> <b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b>
Send the non-standard XFORWARD command when the Postfix SMTP Send the non-standard XFORWARD command when the Postfix SMTP
server EHLO response announces XFORWARD support. server EHLO response announces XFORWARD support.
<b>SASL AUTHENTICATION CONTROLS</b> <b>SASL AUTHENTICATION CONTROLS</b>
@ -320,62 +321,62 @@ SMTP(8) SMTP(8)
Enable SASL authentication in the Postfix SMTP client. Enable SASL authentication in the Postfix SMTP client.
<b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b>
Optional Postfix SMTP client lookup tables with one user- Optional Postfix SMTP client lookup tables with one user-
name:password entry per remote hostname or domain, or sender name:password entry per remote hostname or domain, or sender
address when sender-dependent authentication is enabled. address when sender-dependent authentication is enabled.
<b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b> <b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b>
Postfix SMTP client SASL security options; as of Postfix 2.3 the Postfix SMTP client SASL security options; as of Postfix 2.3 the
list of available features depends on the SASL client implemen- list of available features depends on the SASL client implemen-
tation that is selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>. tation that is selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>.
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a> (empty)</b>
If non-empty, a Postfix SMTP client filter for the remote SMTP If non-empty, a Postfix SMTP client filter for the remote SMTP
server's list of offered SASL mechanisms. server's list of offered SASL mechanisms.
Available in Postfix version 2.3 and later: Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b> <b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b>
Enable sender-dependent authentication in the Postfix SMTP Enable sender-dependent authentication in the Postfix SMTP
client; this is available only with SASL authentication, and client; this is available only with SASL authentication, and
disables SMTP connection caching to ensure that mail from dif- disables SMTP connection caching to ensure that mail from dif-
ferent senders will use the appropriate credentials. ferent senders will use the appropriate credentials.
<b><a href="postconf.5.html#smtp_sasl_path">smtp_sasl_path</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_path">smtp_sasl_path</a> (empty)</b>
Implementation-specific information that the Postfix SMTP client Implementation-specific information that the Postfix SMTP client
passes through to the SASL plug-in implementation that is passes through to the SASL plug-in implementation that is
selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>. selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>.
<b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a> (cyrus)</b> <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a> (cyrus)</b>
The SASL plug-in type that the Postfix SMTP client should use The SASL plug-in type that the Postfix SMTP client should use
for authentication. for authentication.
Available in Postfix version 2.5 and later: Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> (empty)</b>
An optional table to prevent repeated SASL authentication fail- An optional table to prevent repeated SASL authentication fail-
ures with the same remote SMTP server hostname, username and ures with the same remote SMTP server hostname, username and
password. password.
<b><a href="postconf.5.html#smtp_sasl_auth_cache_time">smtp_sasl_auth_cache_time</a> (90d)</b> <b><a href="postconf.5.html#smtp_sasl_auth_cache_time">smtp_sasl_auth_cache_time</a> (90d)</b>
The maximal age of an <a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> entry before it The maximal age of an <a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> entry before it
is removed. is removed.
<b><a href="postconf.5.html#smtp_sasl_auth_soft_bounce">smtp_sasl_auth_soft_bounce</a> (yes)</b> <b><a href="postconf.5.html#smtp_sasl_auth_soft_bounce">smtp_sasl_auth_soft_bounce</a> (yes)</b>
When a remote SMTP server rejects a SASL authentication request When a remote SMTP server rejects a SASL authentication request
with a 535 reply code, defer mail delivery instead of returning with a 535 reply code, defer mail delivery instead of returning
mail as undeliverable. mail as undeliverable.
Available in Postfix version 2.9 and later: Available in Postfix version 2.9 and later:
<b><a href="postconf.5.html#smtp_send_dummy_mail_auth">smtp_send_dummy_mail_auth</a> (no)</b> <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=&lt;&gt;" option to the MAIL FROM Whether or not to append the "AUTH=&lt;&gt;" option to the MAIL FROM
command in SASL-authenticated SMTP sessions. command in SASL-authenticated SMTP sessions.
<b>STARTTLS SUPPORT CONTROLS</b> <b>STARTTLS SUPPORT CONTROLS</b>
Detailed information about STARTTLS configuration may be found in the Detailed information about STARTTLS configuration may be found in the
<a href="TLS_README.html">TLS_README</a> document. <a href="TLS_README.html">TLS_README</a> document.
<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> (empty)</b>
@ -385,20 +386,20 @@ SMTP(8) SMTP(8)
<a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>. <a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>.
<b><a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_security_options</a> ($<a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a>)</b> <b><a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_security_options</a> ($<a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a>)</b>
The SASL authentication security options that the Postfix SMTP The SASL authentication security options that the Postfix SMTP
client uses for TLS encrypted SMTP sessions. client uses for TLS encrypted SMTP sessions.
<b><a href="postconf.5.html#smtp_starttls_timeout">smtp_starttls_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_starttls_timeout">smtp_starttls_timeout</a> (300s)</b>
Time limit for Postfix SMTP client write and read operations Time limit for Postfix SMTP client write and read operations
during TLS startup and shutdown handshake procedures. during TLS startup and shutdown handshake procedures.
<b><a href="postconf.5.html#smtp_tls_CAfile">smtp_tls_CAfile</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_CAfile">smtp_tls_CAfile</a> (empty)</b>
A file containing CA certificates of root CAs trusted to sign A file containing CA certificates of root CAs trusted to sign
either remote SMTP server certificates or intermediate CA cer- either remote SMTP server certificates or intermediate CA cer-
tificates. tificates.
<b><a href="postconf.5.html#smtp_tls_CApath">smtp_tls_CApath</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_CApath">smtp_tls_CApath</a> (empty)</b>
Directory with PEM format certificate authority certificates Directory with PEM format certificate authority certificates
that the Postfix SMTP client uses to verify a remote SMTP server that the Postfix SMTP client uses to verify a remote SMTP server
certificate. certificate.
@ -406,7 +407,7 @@ SMTP(8) SMTP(8)
File with the Postfix SMTP client RSA certificate in PEM format. File with the Postfix SMTP client RSA certificate in PEM format.
<b><a href="postconf.5.html#smtp_tls_mandatory_ciphers">smtp_tls_mandatory_ciphers</a> (medium)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_ciphers">smtp_tls_mandatory_ciphers</a> (medium)</b>
The minimum TLS cipher grade that the Postfix SMTP client will The minimum TLS cipher grade that the Postfix SMTP client will
use with mandatory TLS encryption. use with mandatory TLS encryption.
<b><a href="postconf.5.html#smtp_tls_exclude_ciphers">smtp_tls_exclude_ciphers</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_exclude_ciphers">smtp_tls_exclude_ciphers</a> (empty)</b>
@ -414,8 +415,8 @@ SMTP(8) SMTP(8)
client cipher list at all TLS security levels. client cipher list at all TLS security levels.
<b><a href="postconf.5.html#smtp_tls_mandatory_exclude_ciphers">smtp_tls_mandatory_exclude_ciphers</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_exclude_ciphers">smtp_tls_mandatory_exclude_ciphers</a> (empty)</b>
Additional list of ciphers or cipher types to exclude from the Additional list of ciphers or cipher types to exclude from the
Postfix SMTP client cipher list at mandatory TLS security lev- Postfix SMTP client cipher list at mandatory TLS security lev-
els. els.
<b><a href="postconf.5.html#smtp_tls_dcert_file">smtp_tls_dcert_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_dcert_file">smtp_tls_dcert_file</a> (empty)</b>
@ -431,7 +432,7 @@ SMTP(8) SMTP(8)
Enable additional Postfix SMTP client logging of TLS activity. Enable additional Postfix SMTP client logging of TLS activity.
<b><a href="postconf.5.html#smtp_tls_note_starttls_offer">smtp_tls_note_starttls_offer</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_note_starttls_offer">smtp_tls_note_starttls_offer</a> (no)</b>
Log the hostname of a remote SMTP server that offers STARTTLS, Log the hostname of a remote SMTP server that offers STARTTLS,
when TLS is not already enabled for that server. when TLS is not already enabled for that server.
<b><a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> (empty)</b>
@ -440,14 +441,14 @@ SMTP(8) SMTP(8)
fied, this overrides the obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter. fied, this overrides the obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter.
<b><a href="postconf.5.html#smtp_tls_mandatory_protocols">smtp_tls_mandatory_protocols</a> (!SSLv2)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_protocols">smtp_tls_mandatory_protocols</a> (!SSLv2)</b>
List of SSL/TLS protocols that the Postfix SMTP client will use List of SSL/TLS protocols that the Postfix SMTP client will use
with mandatory TLS encryption. with mandatory TLS encryption.
<b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (9)</b> <b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (9)</b>
The verification depth for remote SMTP server certificates. The verification depth for remote SMTP server certificates.
<b><a href="postconf.5.html#smtp_tls_secure_cert_match">smtp_tls_secure_cert_match</a> (nexthop, dot-nexthop)</b> <b><a href="postconf.5.html#smtp_tls_secure_cert_match">smtp_tls_secure_cert_match</a> (nexthop, dot-nexthop)</b>
How the Postfix SMTP client verifies the server certificate How the Postfix SMTP client verifies the server certificate
peername for the "secure" TLS security level. peername for the "secure" TLS security level.
<b><a href="postconf.5.html#smtp_tls_session_cache_database">smtp_tls_session_cache_database</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_session_cache_database">smtp_tls_session_cache_database</a> (empty)</b>
@ -455,16 +456,16 @@ SMTP(8) SMTP(8)
session cache. session cache.
<b><a href="postconf.5.html#smtp_tls_session_cache_timeout">smtp_tls_session_cache_timeout</a> (3600s)</b> <b><a href="postconf.5.html#smtp_tls_session_cache_timeout">smtp_tls_session_cache_timeout</a> (3600s)</b>
The expiration time of Postfix SMTP client TLS session cache The expiration time of Postfix SMTP client TLS session cache
information. information.
<b><a href="postconf.5.html#smtp_tls_verify_cert_match">smtp_tls_verify_cert_match</a> (hostname)</b> <b><a href="postconf.5.html#smtp_tls_verify_cert_match">smtp_tls_verify_cert_match</a> (hostname)</b>
How the Postfix SMTP client verifies the server certificate How the Postfix SMTP client verifies the server certificate
peername for the "verify" TLS security level. peername for the "verify" TLS security level.
<b><a href="postconf.5.html#tls_daemon_random_bytes">tls_daemon_random_bytes</a> (32)</b> <b><a href="postconf.5.html#tls_daemon_random_bytes">tls_daemon_random_bytes</a> (32)</b>
The number of pseudo-random bytes that an <a href="smtp.8.html"><b>smtp</b>(8)</a> or <a href="smtpd.8.html"><b>smtpd</b>(8)</a> The number of pseudo-random bytes that an <a href="smtp.8.html"><b>smtp</b>(8)</a> or <a href="smtpd.8.html"><b>smtpd</b>(8)</a>
process requests from the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> server in order to seed its process requests from the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> server in order to seed its
internal pseudo random number generator (PRNG). internal pseudo random number generator (PRNG).
<b><a href="postconf.5.html#tls_high_cipherlist">tls_high_cipherlist</a> (ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH)</b> <b><a href="postconf.5.html#tls_high_cipherlist">tls_high_cipherlist</a> (ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH)</b>
@ -480,52 +481,52 @@ SMTP(8) SMTP(8)
The OpenSSL cipherlist for "EXPORT" or higher grade ciphers. The OpenSSL cipherlist for "EXPORT" or higher grade ciphers.
<b><a href="postconf.5.html#tls_null_cipherlist">tls_null_cipherlist</a> (eNULL:!aNULL)</b> <b><a href="postconf.5.html#tls_null_cipherlist">tls_null_cipherlist</a> (eNULL:!aNULL)</b>
The OpenSSL cipherlist for "NULL" grade ciphers that provide The OpenSSL cipherlist for "NULL" grade ciphers that provide
authentication without encryption. authentication without encryption.
Available in Postfix version 2.4 and later: Available in Postfix version 2.4 and later:
<b><a href="postconf.5.html#smtp_sasl_tls_verified_security_options">smtp_sasl_tls_verified_security_options</a> ($<a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_secu</a>-</b> <b><a href="postconf.5.html#smtp_sasl_tls_verified_security_options">smtp_sasl_tls_verified_security_options</a> ($<a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_secu</a>-</b>
<b><a href="postconf.5.html#smtp_sasl_tls_security_options">rity_options</a>)</b> <b><a href="postconf.5.html#smtp_sasl_tls_security_options">rity_options</a>)</b>
The SASL authentication security options that the Postfix SMTP The SASL authentication security options that the Postfix SMTP
client uses for TLS encrypted SMTP sessions with a verified client uses for TLS encrypted SMTP sessions with a verified
server certificate. server certificate.
Available in Postfix version 2.5 and later: Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_tls_fingerprint_cert_match">smtp_tls_fingerprint_cert_match</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_fingerprint_cert_match">smtp_tls_fingerprint_cert_match</a> (empty)</b>
List of acceptable remote SMTP server certificate fingerprints List of acceptable remote SMTP server certificate fingerprints
for the "fingerprint" TLS security level (<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_secu</a>-</b> for the "fingerprint" TLS security level (<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_secu</a>-</b>
<b><a href="postconf.5.html#smtp_tls_security_level">rity_level</a></b> = fingerprint). <b><a href="postconf.5.html#smtp_tls_security_level">rity_level</a></b> = fingerprint).
<b><a href="postconf.5.html#smtp_tls_fingerprint_digest">smtp_tls_fingerprint_digest</a> (md5)</b> <b><a href="postconf.5.html#smtp_tls_fingerprint_digest">smtp_tls_fingerprint_digest</a> (md5)</b>
The message digest algorithm used to construct remote SMTP The message digest algorithm used to construct remote SMTP
server certificate fingerprints. server certificate fingerprints.
Available in Postfix version 2.6 and later: Available in Postfix version 2.6 and later:
<b><a href="postconf.5.html#smtp_tls_protocols">smtp_tls_protocols</a> (!SSLv2)</b> <b><a href="postconf.5.html#smtp_tls_protocols">smtp_tls_protocols</a> (!SSLv2)</b>
List of TLS protocols that the Postfix SMTP client will exclude List of TLS protocols that the Postfix SMTP client will exclude
or include with opportunistic TLS encryption. or include with opportunistic TLS encryption.
<b><a href="postconf.5.html#smtp_tls_ciphers">smtp_tls_ciphers</a> (export)</b> <b><a href="postconf.5.html#smtp_tls_ciphers">smtp_tls_ciphers</a> (export)</b>
The minimum TLS cipher grade that the Postfix SMTP client will The minimum TLS cipher grade that the Postfix SMTP client will
use with opportunistic TLS encryption. use with opportunistic TLS encryption.
<b><a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a> (empty)</b>
File with the Postfix SMTP client ECDSA certificate in PEM for- File with the Postfix SMTP client ECDSA certificate in PEM for-
mat. mat.
<b><a href="postconf.5.html#smtp_tls_eckey_file">smtp_tls_eckey_file</a> ($<a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a>)</b> <b><a href="postconf.5.html#smtp_tls_eckey_file">smtp_tls_eckey_file</a> ($<a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a>)</b>
File with the Postfix SMTP client ECDSA private key in PEM for- File with the Postfix SMTP client ECDSA private key in PEM for-
mat. mat.
Available in Postfix version 2.7 and later: Available in Postfix version 2.7 and later:
<b><a href="postconf.5.html#smtp_tls_block_early_mail_reply">smtp_tls_block_early_mail_reply</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_block_early_mail_reply">smtp_tls_block_early_mail_reply</a> (no)</b>
Try to detect a mail hijacking attack based on a TLS protocol Try to detect a mail hijacking attack based on a TLS protocol
vulnerability (CVE-2009-3555), where an attacker prepends mali- vulnerability (CVE-2009-3555), where an attacker prepends mali-
cious HELO, MAIL, RCPT, DATA commands to a Postfix SMTP client cious HELO, MAIL, RCPT, DATA commands to a Postfix SMTP client
TLS session. TLS session.
Available in Postfix version 2.8 and later: Available in Postfix version 2.8 and later:
@ -536,11 +537,11 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.11 and later: Available in Postfix version 2.11 and later:
<b><a href="postconf.5.html#smtp_tls_trust_anchor_file">smtp_tls_trust_anchor_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_trust_anchor_file">smtp_tls_trust_anchor_file</a> (empty)</b>
Zero or more PEM-format files with trust-anchor certificates Zero or more PEM-format files with trust-anchor certificates
and/or public keys. and/or public keys.
<b><a href="postconf.5.html#smtp_tls_force_insecure_host_tlsa_lookup">smtp_tls_force_insecure_host_tlsa_lookup</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_force_insecure_host_tlsa_lookup">smtp_tls_force_insecure_host_tlsa_lookup</a> (no)</b>
Lookup the associated DANE TLSA RRset even when a hostname is Lookup the associated DANE TLSA RRset even when a hostname is
not an alias and its address records lie in an unsigned zone. not an alias and its address records lie in an unsigned zone.
<b><a href="postconf.5.html#tls_dane_trust_anchor_digest_enable">tls_dane_trust_anchor_digest_enable</a> (yes)</b> <b><a href="postconf.5.html#tls_dane_trust_anchor_digest_enable">tls_dane_trust_anchor_digest_enable</a> (yes)</b>
@ -550,49 +551,49 @@ SMTP(8) SMTP(8)
The name of the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> service entry in <a href="master.5.html">master.cf</a>. The name of the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> service entry in <a href="master.5.html">master.cf</a>.
<b>OBSOLETE STARTTLS CONTROLS</b> <b>OBSOLETE STARTTLS CONTROLS</b>
The following configuration parameters exist for compatibility with The following configuration parameters exist for compatibility with
Postfix versions before 2.3. Support for these will be removed in a Postfix versions before 2.3. Support for these will be removed in a
future release. future release.
<b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b> <b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b>
Opportunistic mode: use TLS when a remote SMTP server announces Opportunistic mode: use TLS when a remote SMTP server announces
STARTTLS support, otherwise send the mail in the clear. STARTTLS support, otherwise send the mail in the clear.
<b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b> <b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b>
Enforcement mode: require that remote SMTP servers use TLS Enforcement mode: require that remote SMTP servers use TLS
encryption, and never send mail in the clear. encryption, and never send mail in the clear.
<b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b> <b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b>
With mandatory TLS encryption, require that the remote SMTP With mandatory TLS encryption, require that the remote SMTP
server hostname matches the information in the remote SMTP server hostname matches the information in the remote SMTP
server certificate. server certificate.
<b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b>
Optional lookup tables with the Postfix SMTP client TLS usage Optional lookup tables with the Postfix SMTP client TLS usage
policy by next-hop destination and by remote SMTP server host- policy by next-hop destination and by remote SMTP server host-
name. name.
<b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b>
Obsolete Postfix &lt; 2.3 control for the Postfix SMTP client TLS Obsolete Postfix &lt; 2.3 control for the Postfix SMTP client TLS
cipher list. cipher list.
<b>RESOURCE AND RATE CONTROLS</b> <b>RESOURCE AND RATE CONTROLS</b>
<b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b> <b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b>
<b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b> <b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b>
The maximal number of parallel deliveries to the same destina- The maximal number of parallel deliveries to the same destina-
tion via the smtp message delivery transport. tion via the smtp message delivery transport.
<b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipient_limit</a>)</b> <b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipient_limit</a>)</b>
The maximal number of recipients per message for the smtp mes- The maximal number of recipients per message for the smtp mes-
sage delivery transport. sage delivery transport.
<b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b> <b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b>
The Postfix SMTP client time limit for completing a TCP connec- The Postfix SMTP client time limit for completing a TCP connec-
tion, or zero (use the operating system built-in time limit). tion, or zero (use the operating system built-in time limit).
<b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the HELO or EHLO The Postfix SMTP client time limit for sending the HELO or EHLO
command, and for receiving the initial remote SMTP server command, and for receiving the initial remote SMTP server
response. response.
<b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b> <b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b>
@ -604,19 +605,19 @@ SMTP(8) SMTP(8)
mand, and for receiving the remote SMTP server response. mand, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the MAIL FROM The Postfix SMTP client time limit for sending the MAIL FROM
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the SMTP RCPT TO The Postfix SMTP client time limit for sending the SMTP RCPT TO
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b> <b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b>
The Postfix SMTP client time limit for sending the SMTP DATA The Postfix SMTP client time limit for sending the SMTP DATA
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b> <b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b>
The Postfix SMTP client time limit for sending the SMTP message The Postfix SMTP client time limit for sending the SMTP message
content. content.
<b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b> <b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b>
@ -630,13 +631,13 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
<b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b> <b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b>
The maximal number of MX (mail exchanger) IP addresses that can The maximal number of MX (mail exchanger) IP addresses that can
result from Postfix SMTP client mail exchanger lookups, or zero result from Postfix SMTP client mail exchanger lookups, or zero
(no limit). (no limit).
<b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b> <b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b>
The maximal number of SMTP sessions per delivery request before The maximal number of SMTP sessions per delivery request before
the Postfix SMTP client gives up or delivers to a fall-back the Postfix SMTP client gives up or delivers to a fall-back
<a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit). <a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit).
<b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b> <b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b>
@ -646,17 +647,17 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.2 and earlier: Available in Postfix version 2.2 and earlier:
<b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b> <b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b>
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a> Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
seconds. seconds.
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b> <b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b>
Permanently enable SMTP connection caching for the specified Permanently enable SMTP connection caching for the specified
destinations. destinations.
<b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b> <b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b>
Temporarily enable SMTP connection caching while a destination Temporarily enable SMTP connection caching while a destination
has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>. has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>.
<b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b> <b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b>
@ -670,37 +671,37 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.3 and later: Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b> <b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b>
Time limit for connection cache connect, send or receive opera- Time limit for connection cache connect, send or receive opera-
tions. tions.
Available in Postfix version 2.9 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> <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 Change the behavior of the smtp_*_timeout time limits, from a
time limit per read or write system call, to a time limit to time limit per read or write system call, to a time limit to
send or receive a complete record (an SMTP command line, SMTP send or receive a complete record (an SMTP command line, SMTP
response line, SMTP message content line, or TLS protocol mes- response line, SMTP message content line, or TLS protocol mes-
sage). sage).
Available in Postfix version 2.11 and later: Available in Postfix version 2.11 and later:
<b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b> <b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b>
When SMTP connection caching is enabled, the number of times When SMTP connection caching is enabled, the number of times
that an SMTP session may be reused before it is closed, or zero that an SMTP session may be reused before it is closed, or zero
(no limit). (no limit).
<b>TROUBLE SHOOTING CONTROLS</b> <b>TROUBLE SHOOTING CONTROLS</b>
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b> <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
The increment in verbose logging level when a remote client or The increment in verbose logging level when a remote client or
server matches a pattern in the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter. server matches a pattern in the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b> <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
Optional list of remote client or server hostname or network Optional list of remote client or server hostname or network
address patterns that cause the verbose logging level to address patterns that cause the verbose logging level to
increase by the amount specified in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>. increase by the amount specified in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b> <b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
The recipient of postmaster notifications about mail delivery The recipient of postmaster notifications about mail delivery
problems that are caused by policy, resource, software or proto- problems that are caused by policy, resource, software or proto-
col errors. col errors.
@ -714,46 +715,46 @@ SMTP(8) SMTP(8)
<b>MISCELLANEOUS CONTROLS</b> <b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b> <b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b>
Where the Postfix SMTP client should deliver mail when it Where the Postfix SMTP client should deliver mail when it
detects a "mail loops back to myself" error condition. detects a "mail loops back to myself" error condition.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</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. figuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b> <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. 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> <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. ging sub-second delay values.
<b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b> <b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b>
Disable DNS lookups in the Postfix SMTP and LMTP clients. Disable DNS lookups in the Postfix SMTP and LMTP clients.
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b> <b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
The network interface addresses that this mail system receives The network interface addresses that this mail system receives
mail on. mail on.
<b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (all)</b> <b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (all)</b>
The Internet protocols Postfix will attempt to use when making The Internet protocols Postfix will attempt to use when making
or accepting connections. or accepting connections.
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b> <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. internal communication channel.
<b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b> <b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b>
When a remote LMTP server announces no DSN support, assume that When a remote LMTP server announces no DSN support, assume that
the server performs final delivery, and send "delivered" deliv- the server performs final delivery, and send "delivered" deliv-
ery status notifications instead of "relayed". ery status notifications instead of "relayed".
<b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b> <b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b>
The default TCP port that the Postfix LMTP client connects to. The default TCP port that the Postfix LMTP client connects to.
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b> <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. waits for an incoming connection before terminating voluntarily.
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b> <b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
@ -767,20 +768,20 @@ SMTP(8) SMTP(8)
The process name of a Postfix command or daemon process. The process name of a Postfix command or daemon process.
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b> <b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
The network interface addresses that this mail system receives The network interface addresses that this mail system receives
mail on by way of a proxy or network address translation unit. mail on by way of a proxy or network address translation unit.
<b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b> <b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b>
The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP
client will try first, when a destination has IPv6 and IPv4 client will try first, when a destination has IPv6 and IPv4
addresses with equal MX preference. addresses with equal MX preference.
<b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b> <b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b>
An optional numerical network address that the Postfix SMTP An optional numerical network address that the Postfix SMTP
client should bind to when making an IPv4 connection. client should bind to when making an IPv4 connection.
<b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b> <b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b>
An optional numerical network address that the Postfix SMTP An optional numerical network address that the Postfix SMTP
client should bind to when making an IPv6 connection. client should bind to when making an IPv6 connection.
<b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b> <b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
@ -800,8 +801,8 @@ SMTP(8) SMTP(8)
The syslog facility of Postfix logging. The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b> <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 The mail system name that is prepended to the process name in
syslog records, so that "smtpd" becomes, for example, "post- syslog records, so that "smtpd" becomes, for example, "post-
fix/smtpd". fix/smtpd".
Available with Postfix 2.2 and earlier: Available with Postfix 2.2 and earlier:

View File

@ -360,43 +360,44 @@ LOCAL(8) LOCAL(8)
Available in Postfix version 2.12 and later: 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> <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 to change arbitrary hard delivery errors into Optional filter for the <a href="local.8.html"><b>local</b>(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="local.8.html"><b>local</b>(8)</a> delivery agent. status code or explanatory text of successful or unsuccessful
deliveries.
<b>DELIVERY METHOD CONTROLS</b> <b>DELIVERY METHOD CONTROLS</b>
The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to low is: The precedence of <a href="local.8.html"><b>local</b>(8)</a> delivery methods from high to low is:
aliases, .forward files, <a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a>, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>, aliases, .forward files, <a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a>, <a href="postconf.5.html#mailbox_transport">mailbox_transport</a>,
<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>. <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> <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. 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> <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. file with user-specified delivery methods.
<b><a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a> (empty)</b> <b><a href="postconf.5.html#mailbox_transport_maps">mailbox_transport_maps</a> (empty)</b>
Optional lookup tables with per-recipient message delivery 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. the recipients are found in the UNIX passwd database.
<b><a href="postconf.5.html#mailbox_transport">mailbox_transport</a> (empty)</b> <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 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, agent should use for mailbox delivery to all local recipients,
whether or not they are found in the UNIX passwd database. 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> <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. 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> <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. should use for mailbox delivery.
<b><a href="postconf.5.html#home_mailbox">home_mailbox</a> (empty)</b> <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. user's home directory.
<b><a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a> (see 'postconf -d' output)</b> <b><a href="postconf.5.html#mail_spool_directory">mail_spool_directory</a> (see 'postconf -d' output)</b>
@ -408,17 +409,17 @@ LOCAL(8) LOCAL(8)
not find in the <a href="aliases.5.html"><b>aliases</b>(5)</a> or UNIX password database. 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> <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 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> 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. or UNIX password database.
<b><a href="postconf.5.html#luser_relay">luser_relay</a> (empty)</b> <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: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#command_execution_directory">command_execution_directory</a> (empty)</b> <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. external command.
<b>MAILBOX LOCKING CONTROLS</b> <b>MAILBOX LOCKING CONTROLS</b>
@ -427,15 +428,15 @@ LOCAL(8) LOCAL(8)
mailbox file or <a href="bounce.8.html"><b>bounce</b>(8)</a> logfile. 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> <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. 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> <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. removed.
<b><a href="postconf.5.html#mailbox_delivery_lock">mailbox_delivery_lock</a> (see 'postconf -d' output)</b> <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. delivery.
<b>RESOURCE AND RATE CONTROLS</b> <b>RESOURCE AND RATE CONTROLS</b>
@ -448,18 +449,18 @@ LOCAL(8) LOCAL(8)
<a href="showq.8.html"><b>showq</b>(8)</a> queue displays. <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> <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 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>- 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 <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>- 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> &gt; 1"). <a href="postconf.5.html#local_destination_recipient_limit">tion_recipient_limit</a> &gt; 1").
<b><a href="postconf.5.html#local_destination_recipient_limit">local_destination_recipient_limit</a> (1)</b> <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. local mail delivery transport.
<b><a href="postconf.5.html#mailbox_size_limit">mailbox_size_limit</a> (51200000)</b> <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). file, or zero (no limit).
<b>SECURITY CONTROLS</b> <b>SECURITY CONTROLS</b>
@ -470,49 +471,49 @@ LOCAL(8) LOCAL(8)
Restrict <a href="local.8.html"><b>local</b>(8)</a> mail delivery to external files. 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> <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 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>- 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>. <a href="postconf.5.html#command_execution_directory">tion_directory</a>.
<b><a href="postconf.5.html#default_privs">default_privs</a> (nobody)</b> <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. delivery to external file or command.
<b><a href="postconf.5.html#forward_expansion_filter">forward_expansion_filter</a> (see 'postconf -d' output)</b> <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>. in $name expansions of $<a href="postconf.5.html#forward_path">forward_path</a>.
Available in Postfix version 2.2 and later: 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> <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>. 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: Available in Postfix version 2.5.3 and later:
<b><a href="postconf.5.html#strict_mailbox_ownership">strict_mailbox_ownership</a> (yes)</b> <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. ent.
<b>MISCELLANEOUS CONTROLS</b> <b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</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. figuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b> <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. 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> <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. ging sub-second delay values.
<b><a href="postconf.5.html#export_environment">export_environment</a> (see 'postconf -d' output)</b> <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. export to non-Postfix processes.
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b> <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. internal communication channel.
<b><a href="postconf.5.html#local_command_shell">local_command_shell</a> (empty)</b> <b><a href="postconf.5.html#local_command_shell">local_command_shell</a> (empty)</b>
@ -520,7 +521,7 @@ LOCAL(8) LOCAL(8)
mand. mand.
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b> <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. waits for an incoming connection before terminating voluntarily.
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b> <b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
@ -528,8 +529,8 @@ LOCAL(8) LOCAL(8)
process will service before terminating voluntarily. process will service before terminating voluntarily.
<b><a href="postconf.5.html#prepend_delivered_header">prepend_delivered_header</a> (command, file, forward)</b> <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- 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 ery agent prepends a Delivered-To: message header with the
address that the mail was delivered to. address that the mail was delivered to.
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b> <b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
@ -539,15 +540,15 @@ LOCAL(8) LOCAL(8)
The process name of a Postfix command or daemon process. 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> <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. lookup key to the lookup result.
<b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b> <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. The location of the Postfix top-level queue directory.
<b><a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a> (empty)</b> <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 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: user+foo), or a .forward file name from its
extension (example: .forward+foo). extension (example: .forward+foo).
<b><a href="postconf.5.html#require_home_directory">require_home_directory</a> (no)</b> <b><a href="postconf.5.html#require_home_directory">require_home_directory</a> (no)</b>
@ -558,8 +559,8 @@ LOCAL(8) LOCAL(8)
The syslog facility of Postfix logging. The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b> <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 The mail system name that is prepended to the process name in
syslog records, so that "smtpd" becomes, for example, "post- syslog records, so that "smtpd" becomes, for example, "post-
fix/smtpd". fix/smtpd".
<b>FILES</b> <b>FILES</b>
@ -582,10 +583,10 @@ LOCAL(8) LOCAL(8)
The Secure Mailer license must be distributed with this software. The Secure Mailer license must be distributed with this software.
<b>HISTORY</b> <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. 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> <b>AUTHOR(S)</b>
Wietse Venema Wietse Venema

View File

@ -449,9 +449,10 @@ PIPE(8) PIPE(8)
Available in Postfix version 2.12 and later: 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> <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 to change arbitrary hard delivery errors into Optional filter for the <a href="pipe.8.html"><b>pipe</b>(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="pipe.8.html"><b>pipe</b>(8)</a> delivery agent. delivery status code or explanatory text of successful or unsuc-
cessful deliveries.
<b>SEE ALSO</b> <b>SEE ALSO</b>
<a href="qmgr.8.html">qmgr(8)</a>, queue manager <a href="qmgr.8.html">qmgr(8)</a>, queue manager

View File

@ -1756,74 +1756,6 @@ Example:
</pre> </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> </DD>
<DT><b><a name="default_database_type">default_database_type</a> <DT><b><a name="default_database_type">default_database_type</a>
@ -1952,6 +1884,93 @@ name of the message delivery transport.
</p> </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> </DD>
<DT><b><a name="default_destination_concurrency_failed_cohort_limit">default_destination_concurrency_failed_cohort_limit</a> <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> <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> </DD>
<DT><b><a name="lmtp_cache_connection">lmtp_cache_connection</a> <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> <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> </DD>
<DT><b><a name="lmtp_destination_concurrency_limit">lmtp_destination_concurrency_limit</a> <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> </p>
</DD>
<DT><b><a name="local_bounce_defer_filter">local_bounce_defer_filter</a>
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD>
<p> Optional filter to change arbitrary hard delivery errors into
soft errors and vice versa in the <a href="local.8.html">local(8)</a> delivery agent. See
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p>
<p> This feature is available in Postfix 2.12 and later. </p>
</DD> </DD>
<DT><b><a name="local_command_shell">local_command_shell</a> <DT><b><a name="local_command_shell">local_command_shell</a>
@ -5169,6 +5176,18 @@ Example:
</pre> </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> </DD>
<DT><b><a name="local_destination_concurrency_limit">local_destination_concurrency_limit</a> <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> </DD>
<DT><b><a name="pipe_bounce_defer_filter">pipe_bounce_defer_filter</a> <DT><b><a name="pipe_delivery_status_filter">pipe_delivery_status_filter</a>
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD> (default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
<p> Optional filter to change arbitrary hard delivery errors into <p> Optional filter for the <a href="pipe.8.html">pipe(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="pipe.8.html">pipe(8)</a> delivery agent. See delivery status code or explanatory text of successful or unsuccessful
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p> 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> <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> <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> </DD>
<DT><b><a name="smtp_cname_overrides_servername">smtp_cname_overrides_servername</a> <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> </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> </DD>
<DT><b><a name="smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> <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> </DD>
<DT><b><a name="virtual_bounce_defer_filter">virtual_bounce_defer_filter</a> <DT><b><a name="virtual_delivery_status_filter">virtual_delivery_status_filter</a>
(default: $<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b></DT><DD> (default: $<a href="postconf.5.html#default_delivery_status_filter">default_delivery_status_filter</a>)</b></DT><DD>
<p> Optional filter to change arbitrary hard delivery errors into <p> Optional filter for the <a href="virtual.8.html">virtual(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="virtual.8.html">virtual(8)</a> delivery agent. See delivery status code or explanatory text of successful or unsuccessful
<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a> for details. </p> 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> <p> This feature is available in Postfix 2.12 and later. </p>

View File

@ -292,9 +292,10 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.12 and later: 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> <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 to change arbitrary hard delivery errors into Optional filter for the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="smtp.8.html"><b>smtp</b>(8)</a> delivery agent. delivery status code or explanatory text of successful or unsuc-
cessful deliveries.
<b>MIME PROCESSING CONTROLS</b> <b>MIME PROCESSING CONTROLS</b>
Available in Postfix version 2.0 and later: Available in Postfix version 2.0 and later:
@ -312,7 +313,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
<b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b> <b><a href="postconf.5.html#smtp_send_xforward_command">smtp_send_xforward_command</a> (no)</b>
Send the non-standard XFORWARD command when the Postfix SMTP Send the non-standard XFORWARD command when the Postfix SMTP
server EHLO response announces XFORWARD support. server EHLO response announces XFORWARD support.
<b>SASL AUTHENTICATION CONTROLS</b> <b>SASL AUTHENTICATION CONTROLS</b>
@ -320,62 +321,62 @@ SMTP(8) SMTP(8)
Enable SASL authentication in the Postfix SMTP client. Enable SASL authentication in the Postfix SMTP client.
<b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_password_maps">smtp_sasl_password_maps</a> (empty)</b>
Optional Postfix SMTP client lookup tables with one user- Optional Postfix SMTP client lookup tables with one user-
name:password entry per remote hostname or domain, or sender name:password entry per remote hostname or domain, or sender
address when sender-dependent authentication is enabled. address when sender-dependent authentication is enabled.
<b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b> <b><a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a> (noplaintext, noanonymous)</b>
Postfix SMTP client SASL security options; as of Postfix 2.3 the Postfix SMTP client SASL security options; as of Postfix 2.3 the
list of available features depends on the SASL client implemen- list of available features depends on the SASL client implemen-
tation that is selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>. tation that is selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>.
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_mechanism_filter">smtp_sasl_mechanism_filter</a> (empty)</b>
If non-empty, a Postfix SMTP client filter for the remote SMTP If non-empty, a Postfix SMTP client filter for the remote SMTP
server's list of offered SASL mechanisms. server's list of offered SASL mechanisms.
Available in Postfix version 2.3 and later: Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b> <b><a href="postconf.5.html#smtp_sender_dependent_authentication">smtp_sender_dependent_authentication</a> (no)</b>
Enable sender-dependent authentication in the Postfix SMTP Enable sender-dependent authentication in the Postfix SMTP
client; this is available only with SASL authentication, and client; this is available only with SASL authentication, and
disables SMTP connection caching to ensure that mail from dif- disables SMTP connection caching to ensure that mail from dif-
ferent senders will use the appropriate credentials. ferent senders will use the appropriate credentials.
<b><a href="postconf.5.html#smtp_sasl_path">smtp_sasl_path</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_path">smtp_sasl_path</a> (empty)</b>
Implementation-specific information that the Postfix SMTP client Implementation-specific information that the Postfix SMTP client
passes through to the SASL plug-in implementation that is passes through to the SASL plug-in implementation that is
selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>. selected with <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a></b>.
<b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a> (cyrus)</b> <b><a href="postconf.5.html#smtp_sasl_type">smtp_sasl_type</a> (cyrus)</b>
The SASL plug-in type that the Postfix SMTP client should use The SASL plug-in type that the Postfix SMTP client should use
for authentication. for authentication.
Available in Postfix version 2.5 and later: Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> (empty)</b> <b><a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> (empty)</b>
An optional table to prevent repeated SASL authentication fail- An optional table to prevent repeated SASL authentication fail-
ures with the same remote SMTP server hostname, username and ures with the same remote SMTP server hostname, username and
password. password.
<b><a href="postconf.5.html#smtp_sasl_auth_cache_time">smtp_sasl_auth_cache_time</a> (90d)</b> <b><a href="postconf.5.html#smtp_sasl_auth_cache_time">smtp_sasl_auth_cache_time</a> (90d)</b>
The maximal age of an <a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> entry before it The maximal age of an <a href="postconf.5.html#smtp_sasl_auth_cache_name">smtp_sasl_auth_cache_name</a> entry before it
is removed. is removed.
<b><a href="postconf.5.html#smtp_sasl_auth_soft_bounce">smtp_sasl_auth_soft_bounce</a> (yes)</b> <b><a href="postconf.5.html#smtp_sasl_auth_soft_bounce">smtp_sasl_auth_soft_bounce</a> (yes)</b>
When a remote SMTP server rejects a SASL authentication request When a remote SMTP server rejects a SASL authentication request
with a 535 reply code, defer mail delivery instead of returning with a 535 reply code, defer mail delivery instead of returning
mail as undeliverable. mail as undeliverable.
Available in Postfix version 2.9 and later: Available in Postfix version 2.9 and later:
<b><a href="postconf.5.html#smtp_send_dummy_mail_auth">smtp_send_dummy_mail_auth</a> (no)</b> <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=&lt;&gt;" option to the MAIL FROM Whether or not to append the "AUTH=&lt;&gt;" option to the MAIL FROM
command in SASL-authenticated SMTP sessions. command in SASL-authenticated SMTP sessions.
<b>STARTTLS SUPPORT CONTROLS</b> <b>STARTTLS SUPPORT CONTROLS</b>
Detailed information about STARTTLS configuration may be found in the Detailed information about STARTTLS configuration may be found in the
<a href="TLS_README.html">TLS_README</a> document. <a href="TLS_README.html">TLS_README</a> document.
<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_security_level</a> (empty)</b>
@ -385,20 +386,20 @@ SMTP(8) SMTP(8)
<a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>. <a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a>.
<b><a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_security_options</a> ($<a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a>)</b> <b><a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_security_options</a> ($<a href="postconf.5.html#smtp_sasl_security_options">smtp_sasl_security_options</a>)</b>
The SASL authentication security options that the Postfix SMTP The SASL authentication security options that the Postfix SMTP
client uses for TLS encrypted SMTP sessions. client uses for TLS encrypted SMTP sessions.
<b><a href="postconf.5.html#smtp_starttls_timeout">smtp_starttls_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_starttls_timeout">smtp_starttls_timeout</a> (300s)</b>
Time limit for Postfix SMTP client write and read operations Time limit for Postfix SMTP client write and read operations
during TLS startup and shutdown handshake procedures. during TLS startup and shutdown handshake procedures.
<b><a href="postconf.5.html#smtp_tls_CAfile">smtp_tls_CAfile</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_CAfile">smtp_tls_CAfile</a> (empty)</b>
A file containing CA certificates of root CAs trusted to sign A file containing CA certificates of root CAs trusted to sign
either remote SMTP server certificates or intermediate CA cer- either remote SMTP server certificates or intermediate CA cer-
tificates. tificates.
<b><a href="postconf.5.html#smtp_tls_CApath">smtp_tls_CApath</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_CApath">smtp_tls_CApath</a> (empty)</b>
Directory with PEM format certificate authority certificates Directory with PEM format certificate authority certificates
that the Postfix SMTP client uses to verify a remote SMTP server that the Postfix SMTP client uses to verify a remote SMTP server
certificate. certificate.
@ -406,7 +407,7 @@ SMTP(8) SMTP(8)
File with the Postfix SMTP client RSA certificate in PEM format. File with the Postfix SMTP client RSA certificate in PEM format.
<b><a href="postconf.5.html#smtp_tls_mandatory_ciphers">smtp_tls_mandatory_ciphers</a> (medium)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_ciphers">smtp_tls_mandatory_ciphers</a> (medium)</b>
The minimum TLS cipher grade that the Postfix SMTP client will The minimum TLS cipher grade that the Postfix SMTP client will
use with mandatory TLS encryption. use with mandatory TLS encryption.
<b><a href="postconf.5.html#smtp_tls_exclude_ciphers">smtp_tls_exclude_ciphers</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_exclude_ciphers">smtp_tls_exclude_ciphers</a> (empty)</b>
@ -414,8 +415,8 @@ SMTP(8) SMTP(8)
client cipher list at all TLS security levels. client cipher list at all TLS security levels.
<b><a href="postconf.5.html#smtp_tls_mandatory_exclude_ciphers">smtp_tls_mandatory_exclude_ciphers</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_exclude_ciphers">smtp_tls_mandatory_exclude_ciphers</a> (empty)</b>
Additional list of ciphers or cipher types to exclude from the Additional list of ciphers or cipher types to exclude from the
Postfix SMTP client cipher list at mandatory TLS security lev- Postfix SMTP client cipher list at mandatory TLS security lev-
els. els.
<b><a href="postconf.5.html#smtp_tls_dcert_file">smtp_tls_dcert_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_dcert_file">smtp_tls_dcert_file</a> (empty)</b>
@ -431,7 +432,7 @@ SMTP(8) SMTP(8)
Enable additional Postfix SMTP client logging of TLS activity. Enable additional Postfix SMTP client logging of TLS activity.
<b><a href="postconf.5.html#smtp_tls_note_starttls_offer">smtp_tls_note_starttls_offer</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_note_starttls_offer">smtp_tls_note_starttls_offer</a> (no)</b>
Log the hostname of a remote SMTP server that offers STARTTLS, Log the hostname of a remote SMTP server that offers STARTTLS,
when TLS is not already enabled for that server. when TLS is not already enabled for that server.
<b><a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_policy_maps">smtp_tls_policy_maps</a> (empty)</b>
@ -440,14 +441,14 @@ SMTP(8) SMTP(8)
fied, this overrides the obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter. fied, this overrides the obsolete <a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> parameter.
<b><a href="postconf.5.html#smtp_tls_mandatory_protocols">smtp_tls_mandatory_protocols</a> (!SSLv2)</b> <b><a href="postconf.5.html#smtp_tls_mandatory_protocols">smtp_tls_mandatory_protocols</a> (!SSLv2)</b>
List of SSL/TLS protocols that the Postfix SMTP client will use List of SSL/TLS protocols that the Postfix SMTP client will use
with mandatory TLS encryption. with mandatory TLS encryption.
<b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (9)</b> <b><a href="postconf.5.html#smtp_tls_scert_verifydepth">smtp_tls_scert_verifydepth</a> (9)</b>
The verification depth for remote SMTP server certificates. The verification depth for remote SMTP server certificates.
<b><a href="postconf.5.html#smtp_tls_secure_cert_match">smtp_tls_secure_cert_match</a> (nexthop, dot-nexthop)</b> <b><a href="postconf.5.html#smtp_tls_secure_cert_match">smtp_tls_secure_cert_match</a> (nexthop, dot-nexthop)</b>
How the Postfix SMTP client verifies the server certificate How the Postfix SMTP client verifies the server certificate
peername for the "secure" TLS security level. peername for the "secure" TLS security level.
<b><a href="postconf.5.html#smtp_tls_session_cache_database">smtp_tls_session_cache_database</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_session_cache_database">smtp_tls_session_cache_database</a> (empty)</b>
@ -455,16 +456,16 @@ SMTP(8) SMTP(8)
session cache. session cache.
<b><a href="postconf.5.html#smtp_tls_session_cache_timeout">smtp_tls_session_cache_timeout</a> (3600s)</b> <b><a href="postconf.5.html#smtp_tls_session_cache_timeout">smtp_tls_session_cache_timeout</a> (3600s)</b>
The expiration time of Postfix SMTP client TLS session cache The expiration time of Postfix SMTP client TLS session cache
information. information.
<b><a href="postconf.5.html#smtp_tls_verify_cert_match">smtp_tls_verify_cert_match</a> (hostname)</b> <b><a href="postconf.5.html#smtp_tls_verify_cert_match">smtp_tls_verify_cert_match</a> (hostname)</b>
How the Postfix SMTP client verifies the server certificate How the Postfix SMTP client verifies the server certificate
peername for the "verify" TLS security level. peername for the "verify" TLS security level.
<b><a href="postconf.5.html#tls_daemon_random_bytes">tls_daemon_random_bytes</a> (32)</b> <b><a href="postconf.5.html#tls_daemon_random_bytes">tls_daemon_random_bytes</a> (32)</b>
The number of pseudo-random bytes that an <a href="smtp.8.html"><b>smtp</b>(8)</a> or <a href="smtpd.8.html"><b>smtpd</b>(8)</a> The number of pseudo-random bytes that an <a href="smtp.8.html"><b>smtp</b>(8)</a> or <a href="smtpd.8.html"><b>smtpd</b>(8)</a>
process requests from the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> server in order to seed its process requests from the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> server in order to seed its
internal pseudo random number generator (PRNG). internal pseudo random number generator (PRNG).
<b><a href="postconf.5.html#tls_high_cipherlist">tls_high_cipherlist</a> (ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH)</b> <b><a href="postconf.5.html#tls_high_cipherlist">tls_high_cipherlist</a> (ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH)</b>
@ -480,52 +481,52 @@ SMTP(8) SMTP(8)
The OpenSSL cipherlist for "EXPORT" or higher grade ciphers. The OpenSSL cipherlist for "EXPORT" or higher grade ciphers.
<b><a href="postconf.5.html#tls_null_cipherlist">tls_null_cipherlist</a> (eNULL:!aNULL)</b> <b><a href="postconf.5.html#tls_null_cipherlist">tls_null_cipherlist</a> (eNULL:!aNULL)</b>
The OpenSSL cipherlist for "NULL" grade ciphers that provide The OpenSSL cipherlist for "NULL" grade ciphers that provide
authentication without encryption. authentication without encryption.
Available in Postfix version 2.4 and later: Available in Postfix version 2.4 and later:
<b><a href="postconf.5.html#smtp_sasl_tls_verified_security_options">smtp_sasl_tls_verified_security_options</a> ($<a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_secu</a>-</b> <b><a href="postconf.5.html#smtp_sasl_tls_verified_security_options">smtp_sasl_tls_verified_security_options</a> ($<a href="postconf.5.html#smtp_sasl_tls_security_options">smtp_sasl_tls_secu</a>-</b>
<b><a href="postconf.5.html#smtp_sasl_tls_security_options">rity_options</a>)</b> <b><a href="postconf.5.html#smtp_sasl_tls_security_options">rity_options</a>)</b>
The SASL authentication security options that the Postfix SMTP The SASL authentication security options that the Postfix SMTP
client uses for TLS encrypted SMTP sessions with a verified client uses for TLS encrypted SMTP sessions with a verified
server certificate. server certificate.
Available in Postfix version 2.5 and later: Available in Postfix version 2.5 and later:
<b><a href="postconf.5.html#smtp_tls_fingerprint_cert_match">smtp_tls_fingerprint_cert_match</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_fingerprint_cert_match">smtp_tls_fingerprint_cert_match</a> (empty)</b>
List of acceptable remote SMTP server certificate fingerprints List of acceptable remote SMTP server certificate fingerprints
for the "fingerprint" TLS security level (<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_secu</a>-</b> for the "fingerprint" TLS security level (<b><a href="postconf.5.html#smtp_tls_security_level">smtp_tls_secu</a>-</b>
<b><a href="postconf.5.html#smtp_tls_security_level">rity_level</a></b> = fingerprint). <b><a href="postconf.5.html#smtp_tls_security_level">rity_level</a></b> = fingerprint).
<b><a href="postconf.5.html#smtp_tls_fingerprint_digest">smtp_tls_fingerprint_digest</a> (md5)</b> <b><a href="postconf.5.html#smtp_tls_fingerprint_digest">smtp_tls_fingerprint_digest</a> (md5)</b>
The message digest algorithm used to construct remote SMTP The message digest algorithm used to construct remote SMTP
server certificate fingerprints. server certificate fingerprints.
Available in Postfix version 2.6 and later: Available in Postfix version 2.6 and later:
<b><a href="postconf.5.html#smtp_tls_protocols">smtp_tls_protocols</a> (!SSLv2)</b> <b><a href="postconf.5.html#smtp_tls_protocols">smtp_tls_protocols</a> (!SSLv2)</b>
List of TLS protocols that the Postfix SMTP client will exclude List of TLS protocols that the Postfix SMTP client will exclude
or include with opportunistic TLS encryption. or include with opportunistic TLS encryption.
<b><a href="postconf.5.html#smtp_tls_ciphers">smtp_tls_ciphers</a> (export)</b> <b><a href="postconf.5.html#smtp_tls_ciphers">smtp_tls_ciphers</a> (export)</b>
The minimum TLS cipher grade that the Postfix SMTP client will The minimum TLS cipher grade that the Postfix SMTP client will
use with opportunistic TLS encryption. use with opportunistic TLS encryption.
<b><a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a> (empty)</b>
File with the Postfix SMTP client ECDSA certificate in PEM for- File with the Postfix SMTP client ECDSA certificate in PEM for-
mat. mat.
<b><a href="postconf.5.html#smtp_tls_eckey_file">smtp_tls_eckey_file</a> ($<a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a>)</b> <b><a href="postconf.5.html#smtp_tls_eckey_file">smtp_tls_eckey_file</a> ($<a href="postconf.5.html#smtp_tls_eccert_file">smtp_tls_eccert_file</a>)</b>
File with the Postfix SMTP client ECDSA private key in PEM for- File with the Postfix SMTP client ECDSA private key in PEM for-
mat. mat.
Available in Postfix version 2.7 and later: Available in Postfix version 2.7 and later:
<b><a href="postconf.5.html#smtp_tls_block_early_mail_reply">smtp_tls_block_early_mail_reply</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_block_early_mail_reply">smtp_tls_block_early_mail_reply</a> (no)</b>
Try to detect a mail hijacking attack based on a TLS protocol Try to detect a mail hijacking attack based on a TLS protocol
vulnerability (CVE-2009-3555), where an attacker prepends mali- vulnerability (CVE-2009-3555), where an attacker prepends mali-
cious HELO, MAIL, RCPT, DATA commands to a Postfix SMTP client cious HELO, MAIL, RCPT, DATA commands to a Postfix SMTP client
TLS session. TLS session.
Available in Postfix version 2.8 and later: Available in Postfix version 2.8 and later:
@ -536,11 +537,11 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.11 and later: Available in Postfix version 2.11 and later:
<b><a href="postconf.5.html#smtp_tls_trust_anchor_file">smtp_tls_trust_anchor_file</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_trust_anchor_file">smtp_tls_trust_anchor_file</a> (empty)</b>
Zero or more PEM-format files with trust-anchor certificates Zero or more PEM-format files with trust-anchor certificates
and/or public keys. and/or public keys.
<b><a href="postconf.5.html#smtp_tls_force_insecure_host_tlsa_lookup">smtp_tls_force_insecure_host_tlsa_lookup</a> (no)</b> <b><a href="postconf.5.html#smtp_tls_force_insecure_host_tlsa_lookup">smtp_tls_force_insecure_host_tlsa_lookup</a> (no)</b>
Lookup the associated DANE TLSA RRset even when a hostname is Lookup the associated DANE TLSA RRset even when a hostname is
not an alias and its address records lie in an unsigned zone. not an alias and its address records lie in an unsigned zone.
<b><a href="postconf.5.html#tls_dane_trust_anchor_digest_enable">tls_dane_trust_anchor_digest_enable</a> (yes)</b> <b><a href="postconf.5.html#tls_dane_trust_anchor_digest_enable">tls_dane_trust_anchor_digest_enable</a> (yes)</b>
@ -550,49 +551,49 @@ SMTP(8) SMTP(8)
The name of the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> service entry in <a href="master.5.html">master.cf</a>. The name of the <a href="tlsmgr.8.html"><b>tlsmgr</b>(8)</a> service entry in <a href="master.5.html">master.cf</a>.
<b>OBSOLETE STARTTLS CONTROLS</b> <b>OBSOLETE STARTTLS CONTROLS</b>
The following configuration parameters exist for compatibility with The following configuration parameters exist for compatibility with
Postfix versions before 2.3. Support for these will be removed in a Postfix versions before 2.3. Support for these will be removed in a
future release. future release.
<b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b> <b><a href="postconf.5.html#smtp_use_tls">smtp_use_tls</a> (no)</b>
Opportunistic mode: use TLS when a remote SMTP server announces Opportunistic mode: use TLS when a remote SMTP server announces
STARTTLS support, otherwise send the mail in the clear. STARTTLS support, otherwise send the mail in the clear.
<b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b> <b><a href="postconf.5.html#smtp_enforce_tls">smtp_enforce_tls</a> (no)</b>
Enforcement mode: require that remote SMTP servers use TLS Enforcement mode: require that remote SMTP servers use TLS
encryption, and never send mail in the clear. encryption, and never send mail in the clear.
<b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b> <b><a href="postconf.5.html#smtp_tls_enforce_peername">smtp_tls_enforce_peername</a> (yes)</b>
With mandatory TLS encryption, require that the remote SMTP With mandatory TLS encryption, require that the remote SMTP
server hostname matches the information in the remote SMTP server hostname matches the information in the remote SMTP
server certificate. server certificate.
<b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_per_site">smtp_tls_per_site</a> (empty)</b>
Optional lookup tables with the Postfix SMTP client TLS usage Optional lookup tables with the Postfix SMTP client TLS usage
policy by next-hop destination and by remote SMTP server host- policy by next-hop destination and by remote SMTP server host-
name. name.
<b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b> <b><a href="postconf.5.html#smtp_tls_cipherlist">smtp_tls_cipherlist</a> (empty)</b>
Obsolete Postfix &lt; 2.3 control for the Postfix SMTP client TLS Obsolete Postfix &lt; 2.3 control for the Postfix SMTP client TLS
cipher list. cipher list.
<b>RESOURCE AND RATE CONTROLS</b> <b>RESOURCE AND RATE CONTROLS</b>
<b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b> <b><a href="postconf.5.html#smtp_destination_concurrency_limit">smtp_destination_concurrency_limit</a> ($<a href="postconf.5.html#default_destination_concurrency_limit">default_destination_concur</a>-</b>
<b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b> <b><a href="postconf.5.html#default_destination_concurrency_limit">rency_limit</a>)</b>
The maximal number of parallel deliveries to the same destina- The maximal number of parallel deliveries to the same destina-
tion via the smtp message delivery transport. tion via the smtp message delivery transport.
<b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipient_limit</a>)</b> <b><a href="postconf.5.html#smtp_destination_recipient_limit">smtp_destination_recipient_limit</a> ($<a href="postconf.5.html#default_destination_recipient_limit">default_destination_recipient_limit</a>)</b>
The maximal number of recipients per message for the smtp mes- The maximal number of recipients per message for the smtp mes-
sage delivery transport. sage delivery transport.
<b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b> <b><a href="postconf.5.html#smtp_connect_timeout">smtp_connect_timeout</a> (30s)</b>
The Postfix SMTP client time limit for completing a TCP connec- The Postfix SMTP client time limit for completing a TCP connec-
tion, or zero (use the operating system built-in time limit). tion, or zero (use the operating system built-in time limit).
<b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_helo_timeout">smtp_helo_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the HELO or EHLO The Postfix SMTP client time limit for sending the HELO or EHLO
command, and for receiving the initial remote SMTP server command, and for receiving the initial remote SMTP server
response. response.
<b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b> <b><a href="postconf.5.html#lmtp_lhlo_timeout">lmtp_lhlo_timeout</a> (300s)</b>
@ -604,19 +605,19 @@ SMTP(8) SMTP(8)
mand, and for receiving the remote SMTP server response. mand, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_mail_timeout">smtp_mail_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the MAIL FROM The Postfix SMTP client time limit for sending the MAIL FROM
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b> <b><a href="postconf.5.html#smtp_rcpt_timeout">smtp_rcpt_timeout</a> (300s)</b>
The Postfix SMTP client time limit for sending the SMTP RCPT TO The Postfix SMTP client time limit for sending the SMTP RCPT TO
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b> <b><a href="postconf.5.html#smtp_data_init_timeout">smtp_data_init_timeout</a> (120s)</b>
The Postfix SMTP client time limit for sending the SMTP DATA The Postfix SMTP client time limit for sending the SMTP DATA
command, and for receiving the remote SMTP server response. command, and for receiving the remote SMTP server response.
<b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b> <b><a href="postconf.5.html#smtp_data_xfer_timeout">smtp_data_xfer_timeout</a> (180s)</b>
The Postfix SMTP client time limit for sending the SMTP message The Postfix SMTP client time limit for sending the SMTP message
content. content.
<b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b> <b><a href="postconf.5.html#smtp_data_done_timeout">smtp_data_done_timeout</a> (600s)</b>
@ -630,13 +631,13 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later: Available in Postfix version 2.1 and later:
<b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b> <b><a href="postconf.5.html#smtp_mx_address_limit">smtp_mx_address_limit</a> (5)</b>
The maximal number of MX (mail exchanger) IP addresses that can The maximal number of MX (mail exchanger) IP addresses that can
result from Postfix SMTP client mail exchanger lookups, or zero result from Postfix SMTP client mail exchanger lookups, or zero
(no limit). (no limit).
<b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b> <b><a href="postconf.5.html#smtp_mx_session_limit">smtp_mx_session_limit</a> (2)</b>
The maximal number of SMTP sessions per delivery request before The maximal number of SMTP sessions per delivery request before
the Postfix SMTP client gives up or delivers to a fall-back the Postfix SMTP client gives up or delivers to a fall-back
<a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit). <a href="postconf.5.html#relayhost">relay host</a>, or zero (no limit).
<b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b> <b><a href="postconf.5.html#smtp_rset_timeout">smtp_rset_timeout</a> (20s)</b>
@ -646,17 +647,17 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.2 and earlier: Available in Postfix version 2.2 and earlier:
<b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b> <b><a href="postconf.5.html#lmtp_cache_connection">lmtp_cache_connection</a> (yes)</b>
Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a> Keep Postfix LMTP client connections open for up to $<a href="postconf.5.html#max_idle">max_idle</a>
seconds. seconds.
Available in Postfix version 2.2 and later: Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b> <b><a href="postconf.5.html#smtp_connection_cache_destinations">smtp_connection_cache_destinations</a> (empty)</b>
Permanently enable SMTP connection caching for the specified Permanently enable SMTP connection caching for the specified
destinations. destinations.
<b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b> <b><a href="postconf.5.html#smtp_connection_cache_on_demand">smtp_connection_cache_on_demand</a> (yes)</b>
Temporarily enable SMTP connection caching while a destination Temporarily enable SMTP connection caching while a destination
has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>. has a high volume of mail in the <a href="QSHAPE_README.html#active_queue">active queue</a>.
<b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b> <b><a href="postconf.5.html#smtp_connection_reuse_time_limit">smtp_connection_reuse_time_limit</a> (300s)</b>
@ -670,37 +671,37 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.3 and later: Available in Postfix version 2.3 and later:
<b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b> <b><a href="postconf.5.html#connection_cache_protocol_timeout">connection_cache_protocol_timeout</a> (5s)</b>
Time limit for connection cache connect, send or receive opera- Time limit for connection cache connect, send or receive opera-
tions. tions.
Available in Postfix version 2.9 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> <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 Change the behavior of the smtp_*_timeout time limits, from a
time limit per read or write system call, to a time limit to time limit per read or write system call, to a time limit to
send or receive a complete record (an SMTP command line, SMTP send or receive a complete record (an SMTP command line, SMTP
response line, SMTP message content line, or TLS protocol mes- response line, SMTP message content line, or TLS protocol mes-
sage). sage).
Available in Postfix version 2.11 and later: Available in Postfix version 2.11 and later:
<b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b> <b><a href="postconf.5.html#smtp_connection_reuse_count_limit">smtp_connection_reuse_count_limit</a> (0)</b>
When SMTP connection caching is enabled, the number of times When SMTP connection caching is enabled, the number of times
that an SMTP session may be reused before it is closed, or zero that an SMTP session may be reused before it is closed, or zero
(no limit). (no limit).
<b>TROUBLE SHOOTING CONTROLS</b> <b>TROUBLE SHOOTING CONTROLS</b>
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b> <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
The increment in verbose logging level when a remote client or The increment in verbose logging level when a remote client or
server matches a pattern in the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter. server matches a pattern in the <a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b> <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
Optional list of remote client or server hostname or network Optional list of remote client or server hostname or network
address patterns that cause the verbose logging level to address patterns that cause the verbose logging level to
increase by the amount specified in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>. increase by the amount specified in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b> <b><a href="postconf.5.html#error_notice_recipient">error_notice_recipient</a> (postmaster)</b>
The recipient of postmaster notifications about mail delivery The recipient of postmaster notifications about mail delivery
problems that are caused by policy, resource, software or proto- problems that are caused by policy, resource, software or proto-
col errors. col errors.
@ -714,46 +715,46 @@ SMTP(8) SMTP(8)
<b>MISCELLANEOUS CONTROLS</b> <b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b> <b><a href="postconf.5.html#best_mx_transport">best_mx_transport</a> (empty)</b>
Where the Postfix SMTP client should deliver mail when it Where the Postfix SMTP client should deliver mail when it
detects a "mail loops back to myself" error condition. detects a "mail loops back to myself" error condition.
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</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. figuration files.
<b><a href="postconf.5.html#daemon_timeout">daemon_timeout</a> (18000s)</b> <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. 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> <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. ging sub-second delay values.
<b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b> <b><a href="postconf.5.html#disable_dns_lookups">disable_dns_lookups</a> (no)</b>
Disable DNS lookups in the Postfix SMTP and LMTP clients. Disable DNS lookups in the Postfix SMTP and LMTP clients.
<b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b> <b><a href="postconf.5.html#inet_interfaces">inet_interfaces</a> (all)</b>
The network interface addresses that this mail system receives The network interface addresses that this mail system receives
mail on. mail on.
<b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (all)</b> <b><a href="postconf.5.html#inet_protocols">inet_protocols</a> (all)</b>
The Internet protocols Postfix will attempt to use when making The Internet protocols Postfix will attempt to use when making
or accepting connections. or accepting connections.
<b><a href="postconf.5.html#ipc_timeout">ipc_timeout</a> (3600s)</b> <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. internal communication channel.
<b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b> <b><a href="postconf.5.html#lmtp_assume_final">lmtp_assume_final</a> (no)</b>
When a remote LMTP server announces no DSN support, assume that When a remote LMTP server announces no DSN support, assume that
the server performs final delivery, and send "delivered" deliv- the server performs final delivery, and send "delivered" deliv-
ery status notifications instead of "relayed". ery status notifications instead of "relayed".
<b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b> <b><a href="postconf.5.html#lmtp_tcp_port">lmtp_tcp_port</a> (24)</b>
The default TCP port that the Postfix LMTP client connects to. The default TCP port that the Postfix LMTP client connects to.
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b> <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. waits for an incoming connection before terminating voluntarily.
<b><a href="postconf.5.html#max_use">max_use</a> (100)</b> <b><a href="postconf.5.html#max_use">max_use</a> (100)</b>
@ -767,20 +768,20 @@ SMTP(8) SMTP(8)
The process name of a Postfix command or daemon process. The process name of a Postfix command or daemon process.
<b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b> <b><a href="postconf.5.html#proxy_interfaces">proxy_interfaces</a> (empty)</b>
The network interface addresses that this mail system receives The network interface addresses that this mail system receives
mail on by way of a proxy or network address translation unit. mail on by way of a proxy or network address translation unit.
<b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b> <b><a href="postconf.5.html#smtp_address_preference">smtp_address_preference</a> (any)</b>
The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP The address type ("ipv6", "ipv4" or "any") that the Postfix SMTP
client will try first, when a destination has IPv6 and IPv4 client will try first, when a destination has IPv6 and IPv4
addresses with equal MX preference. addresses with equal MX preference.
<b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b> <b><a href="postconf.5.html#smtp_bind_address">smtp_bind_address</a> (empty)</b>
An optional numerical network address that the Postfix SMTP An optional numerical network address that the Postfix SMTP
client should bind to when making an IPv4 connection. client should bind to when making an IPv4 connection.
<b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b> <b><a href="postconf.5.html#smtp_bind_address6">smtp_bind_address6</a> (empty)</b>
An optional numerical network address that the Postfix SMTP An optional numerical network address that the Postfix SMTP
client should bind to when making an IPv6 connection. client should bind to when making an IPv6 connection.
<b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b> <b><a href="postconf.5.html#smtp_helo_name">smtp_helo_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
@ -800,8 +801,8 @@ SMTP(8) SMTP(8)
The syslog facility of Postfix logging. The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b> <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 The mail system name that is prepended to the process name in
syslog records, so that "smtpd" becomes, for example, "post- syslog records, so that "smtpd" becomes, for example, "post-
fix/smtpd". fix/smtpd".
Available with Postfix 2.2 and earlier: Available with Postfix 2.2 and earlier:

View File

@ -263,9 +263,10 @@ VIRTUAL(8) VIRTUAL(8)
Available in Postfix version 2.12 and later: Available in Postfix version 2.12 and later:
<b><a href="postconf.5.html#virtual_bounce_defer_filter">virtual_bounce_defer_filter</a> ($<a href="postconf.5.html#default_bounce_defer_filter">default_bounce_defer_filter</a>)</b> <b><a href="postconf.5.html#virtual_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 to change arbitrary hard delivery errors into Optional filter for the <a href="virtual.8.html"><b>virtual</b>(8)</a> delivery agent to change the
soft errors and vice versa in the <a href="virtual.8.html"><b>virtual</b>(8)</a> delivery agent. delivery status code or explanatory text of successful or unsuc-
cessful deliveries.
<b>SEE ALSO</b> <b>SEE ALSO</b>
<a href="qmgr.8.html">qmgr(8)</a>, queue manager <a href="qmgr.8.html">qmgr(8)</a>, queue manager
@ -282,15 +283,15 @@ VIRTUAL(8) VIRTUAL(8)
The Secure Mailer license must be distributed with this software. The Secure Mailer license must be distributed with this software.
<b>HISTORY</b> <b>HISTORY</b>
This delivery agent was originally based on the Postfix local delivery This delivery agent was originally based on the Postfix local delivery
agent. Modifications mainly consisted of removing code that either was agent. Modifications mainly consisted of removing code that either was
not applicable or that was not safe in this context: aliases, not applicable or that was not safe in this context: aliases,
~user/.forward files, delivery to "|command" or to /file/name. ~user/.forward files, delivery to "|command" or to /file/name.
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. Bernstein.
The <b>maildir</b> structure appears in the <b>qmail</b> system by Daniel Bernstein. The <b>maildir</b> structure appears in the <b>qmail</b> system by Daniel Bernstein.
<b>AUTHOR(S)</b> <b>AUTHOR(S)</b>
Wietse Venema Wietse Venema

View File

@ -1021,71 +1021,6 @@ debugger_command =
.fi .fi
.ad .ad
.ft R .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) .SH default_database_type (default: see "postconf -d" output)
The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1) 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 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 Use \fItransport\fR_delivery_slot_loan to specify a
transport-specific override, where \fItransport\fR is the master.cf transport-specific override, where \fItransport\fR is the master.cf
name of the message delivery transport. 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) .SH default_destination_concurrency_failed_cohort_limit (default: 1)
How many pseudo-cohorts must suffer connection or handshake How many pseudo-cohorts must suffer connection or handshake
failure before a specific destination is considered unavailable 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. parameter. See there for details.
.PP .PP
This feature is available in Postfix 2.5 and later. This feature is available in Postfix 2.5 and later.
.SH lmtp_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) .SH lmtp_cache_connection (default: yes)
Keep Postfix LMTP client connections open for up to $max_idle Keep Postfix LMTP client connections open for up to $max_idle
seconds. When the LMTP client receives a request for the same 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. configuration parameter. See there for details.
.PP .PP
This feature is available in Postfix 2.3 and later. 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) .SH lmtp_destination_concurrency_limit (default: $default_destination_concurrency_limit)
The maximal number of parallel deliveries to the same destination The maximal number of parallel deliveries to the same destination
via the lmtp message delivery transport. This limit is enforced by 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). The default time unit is s (seconds).
.PP .PP
This feature is available in Postfix 2.1 and later. This feature is available in Postfix 2.1 and later.
.SH local_bounce_defer_filter (default: $default_bounce_defer_filter)
Optional filter to change arbitrary hard delivery errors into
soft errors and vice versa in the \fBlocal\fR(8) delivery agent. See
default_bounce_defer_filter for details.
.PP
This feature is available in Postfix 2.12 and later.
.SH local_command_shell (default: empty) .SH local_command_shell (default: empty)
Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command. Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command.
By default, non-Postfix commands are executed directly; commands By default, non-Postfix commands are executed directly; commands
@ -2959,6 +2980,12 @@ local_command_shell = /bin/bash -c
.fi .fi
.ad .ad
.ft R .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) .SH local_destination_concurrency_limit (default: 2)
The maximal number of parallel deliveries via the local mail The maximal number of parallel deliveries via the local mail
delivery transport to the same recipient (when 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. submissions from the Postfix maildrop queue.
.PP .PP
This feature is available in Postfix 2.0 and later. This feature is available in Postfix 2.0 and later.
.SH pipe_bounce_defer_filter (default: $default_bounce_defer_filter) .SH pipe_delivery_status_filter (default: $default_delivery_status_filter)
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBpipe\fR(8) delivery agent to change the
soft errors and vice versa in the \fBpipe\fR(8) delivery agent. See delivery status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. deliveries. See default_delivery_status_filter for details.
.PP .PP
This feature is available in Postfix 2.12 and later. This feature is available in Postfix 2.12 and later.
.SH plaintext_reject_code (default: 450) .SH plaintext_reject_code (default: 450)
@ -5852,16 +5879,6 @@ These tables are searched while mail is being delivered. Actions
that change the delivery time or destination are not available. that change the delivery time or destination are not available.
.PP .PP
This feature is available in Postfix 2.5 and later. This feature is available in Postfix 2.5 and later.
.SH smtp_bounce_defer_filter (default: $default_bounce_defer_filter)
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) .SH smtp_cname_overrides_servername (default: version dependent)
When the remote SMTP servername is a DNS CNAME, replace the When the remote SMTP servername is a DNS CNAME, replace the
servername with the result from CNAME expansion for the purpose of servername with the result from CNAME expansion for the purpose of
@ -6027,6 +6044,15 @@ or worse preference
than the local MTA itself. than the local MTA itself.
.PP .PP
This feature is available in Postfix 2.1 and later. 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) .SH smtp_destination_concurrency_limit (default: $default_destination_concurrency_limit)
The maximal number of parallel deliveries to the same destination The maximal number of parallel deliveries to the same destination
via the smtp message delivery transport. This limit is enforced by 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. change in the future.
.PP .PP
This feature is available in Postfix 2.1 and later. This feature is available in Postfix 2.1 and later.
.SH virtual_bounce_defer_filter (default: $default_bounce_defer_filter) .SH virtual_delivery_status_filter (default: $default_delivery_status_filter)
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBvirtual\fR(8) delivery agent to change the
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. See delivery status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. deliveries. See default_delivery_status_filter for details.
.PP .PP
This feature is available in Postfix 2.12 and later. This feature is available in Postfix 2.12 and later.
.SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit) .SH virtual_destination_concurrency_limit (default: $default_destination_concurrency_limit)

View File

@ -421,9 +421,10 @@ attribute, when delivering mail to a child alias that does not have
its own owner alias. its own owner alias.
.PP .PP
Available in Postfix version 2.12 and later: Available in Postfix version 2.12 and later:
.IP "\fBlocal_bounce_defer_filter ($default_bounce_defer_filter)\fR" .IP "\fBlocal_delivery_status_filter ($default_delivery_status_filter)\fR"
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBlocal\fR(8) delivery agent to change the
soft errors and vice versa in the \fBlocal\fR(8) delivery agent. status code or explanatory text of successful or unsuccessful
deliveries.
.SH "DELIVERY METHOD CONTROLS" .SH "DELIVERY METHOD CONTROLS"
.na .na
.nf .nf

View File

@ -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". records, so that "smtpd" becomes, for example, "postfix/smtpd".
.PP .PP
Available in Postfix version 2.12 and later: Available in Postfix version 2.12 and later:
.IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR" .IP "\fBpipe_delivery_status_filter ($default_delivery_status_filter)\fR"
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBpipe\fR(8) delivery agent to change the
soft errors and vice versa in the \fBpipe\fR(8) delivery agent. delivery status code or explanatory text of successful or unsuccessful
deliveries.
.SH "SEE ALSO" .SH "SEE ALSO"
.na .na
.nf .nf

View File

@ -276,9 +276,10 @@ Available in Postfix version 2.11 and later:
Level of DNS support in the Postfix SMTP client. Level of DNS support in the Postfix SMTP client.
.PP .PP
Available in Postfix version 2.12 and later: Available in Postfix version 2.12 and later:
.IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR" .IP "\fBsmtp_delivery_status_filter ($default_delivery_status_filter)\fR"
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBsmtp\fR(8) delivery agent to change the
soft errors and vice versa in the \fBsmtp\fR(8) delivery agent. delivery status code or explanatory text of successful or unsuccessful
deliveries.
.SH "MIME PROCESSING CONTROLS" .SH "MIME PROCESSING CONTROLS"
.na .na
.nf .nf

View File

@ -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". records, so that "smtpd" becomes, for example, "postfix/smtpd".
.PP .PP
Available in Postfix version 2.12 and later: Available in Postfix version 2.12 and later:
.IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR" .IP "\fBvirtual_delivery_status_filter ($default_delivery_status_filter)\fR"
Optional filter to change arbitrary hard delivery errors into Optional filter for the \fBvirtual\fR(8) delivery agent to change the
soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. delivery status code or explanatory text of successful or unsuccessful
deliveries.
.SH "SEE ALSO" .SH "SEE ALSO"
.na .na
.nf .nf

View File

@ -133,7 +133,7 @@ while (<>) {
s;\bdaemon_timeout\b;<a href="postconf.5.html#daemon_timeout">$&</a>;g; 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_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;\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_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_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; 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_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_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_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_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_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; 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_skip_quit_response\b;<a href="postconf.5.html#lmtp_skip_quit_response">$&</a>;g;
s;\blmtp_tcp_port\b;<a href="postconf.5.html#lmtp_tcp_port">$&</a>;g; s;\blmtp_tcp_port\b;<a href="postconf.5.html#lmtp_tcp_port">$&</a>;g;
s;\blmtp_xforward_timeout\b;<a href="postconf.5.html#lmtp_xforward_timeout">$&</a>;g; s;\blmtp_xforward_timeout\b;<a href="postconf.5.html#lmtp_xforward_timeout">$&</a>;g;
s;\blocal_bounce_defer_filter\b;<a href="postconf.5.html#local_bounce_defer_filter">$&</a>;g; s;\blocal_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_command_shell\b;<a href="postconf.5.html#local_command_shell">$&</a>;g;
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_concurrency_limit\b;<a href="postconf.5.html#local_destination_concurrency_limit">$&</a>;g; s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_concurrency_limit\b;<a href="postconf.5.html#local_destination_concurrency_limit">$&</a>;g;
s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g; s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g;
@ -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;\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;\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;\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;\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_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; 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_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_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_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_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; 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_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_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_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_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_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; s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_domains\b;<a href="postconf.5.html#virtual_mailbox_domains">$&</a>;g;

View File

@ -15616,12 +15616,12 @@ anchor assertion) TLSA records. </p>
<p> This feature is available in Postfix 2.11 and later. </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 <p> Optional filter to replace the delivery status code or explanatory
soft errors and vice versa. This is implemented by rewriting the text of successful or unsuccessful deliveries. This does, however,
three-number enhanced status code and the explanatory text in a not allow the replacement of a successful status code (2.X.X) with
Postfix delivery agent bounce/defer message. </p> 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 <p> Specify zero or more "type:table" lookup table names, separated
by comma or whitespace. With each bounce or defer request, the by comma or whitespace. With each bounce or defer request, the
@ -15633,27 +15633,25 @@ enhanced-status-code SPACE explanatory-text
</blockquote> </blockquote>
<p> The first table match wins. The lookup result must have the <p> The first table match wins. The lookup result must have the
same structure as the query: enhanced status codes must have a same structure as the query, a successful status code (2.X.X) must
first numerical field of 4 (defer) or 5 (bounce), and the explanatory be replaced with a successful status code, an unsuccessful status
text field must be non-empty. Other results will result in a warning. code (4.X.X or 5.X.X) must be replaced with an unsuccessful status
</p> code, and the explanatory text field must be non-empty. Other results
will result in a warning. </p>
<p> Example: </p> <p> Example 1: convert specific soft TLS errors into hard errors,
by overriding the first number in the enhanced status code. </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> <blockquote>
<pre> <pre>
/etc/postfix/main.cf: /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> </pre>
</blockquote> </blockquote>
<blockquote> <blockquote>
<pre> <pre>
/etc/postfix/smtp_ndr_filter: /etc/postfix/smtp_dsn_filter:
/^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/ /^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/
5$1 5$1
/^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/ /^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> </pre>
</blockquote> </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> <p> Notes: </p>
<ul> <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 <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 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> </ul>
<p> This feature is available in Postfix 2.12 and later. </p> <p> This feature is available in Postfix 2.12 and later. </p>
%PARAM 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 <p> Optional filter for the smtp(8) delivery agent to change the
soft errors and vice versa in the smtp(8) delivery agent. See delivery status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. </p> deliveries. See default_delivery_status_filter for details. </p>
<p> NOTE: This feature modifies error messages that are generated <p> NOTE: This feature modifies Postfix SMTP client error or non-error
by the Postfix SMTP client, and that may or may not be derived from messages that may or may not be derived from remote SMTP server
remote SMTP server responses. In contrast, the smtp_reply_filter responses. In contrast, the smtp_reply_filter feature modifies
feature modifies remote SMTP server responses that may result in remote SMTP server responses only. </p>
email non-delivery or delivery. </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> configuration parameter. See there for details. </p>
<p> This feature is available in Postfix 2.12 and later. </p> <p> This feature is available in Postfix 2.12 and later. </p>
%PARAM 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 <p> Optional filter for the pipe(8) delivery agent to change the
soft errors and vice versa in the pipe(8) delivery agent. See delivery status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. </p> deliveries. See default_delivery_status_filter for details. </p>
<p> This feature is available in Postfix 2.12 and later. </p> <p> This feature is available in Postfix 2.12 and later. </p>
%PARAM virtual_bounce_defer_filter $default_bounce_defer_filter %PARAM virtual_delivery_status_filter $default_delivery_status_filter
<p> Optional filter to change arbitrary hard delivery errors into <p> Optional filter for the virtual(8) delivery agent to change the
soft errors and vice versa in the virtual(8) delivery agent. See delivery status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. </p> deliveries. See default_delivery_status_filter for details. </p>
<p> This feature is available in Postfix 2.12 and later. </p> <p> This feature is available in Postfix 2.12 and later. </p>
%PARAM 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 <p> Optional filter for the local(8) delivery agent to change the
soft errors and vice versa in the local(8) delivery agent. See status code or explanatory text of successful or unsuccessful
default_bounce_defer_filter for details. </p> deliveries. See default_delivery_status_filter for details. </p>
<p> This feature is available in Postfix 2.12 and later. </p> <p> This feature is available in Postfix 2.12 and later. </p>

View File

@ -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 \ 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 \ smtp_reply_footer.c safe_ultostr.c verify_sender_addr.c \
dict_memcache.c mail_version.c memcache_proto.c server_acl.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 \ 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 \ 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 \ 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 \ 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 \ smtp_reply_footer.o safe_ultostr.o verify_sender_addr.o \
dict_memcache.o mail_version.o memcache_proto.o server_acl.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 \ 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 \ 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 \ 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 \ fold_addr.h header_body_checks.h data_redirect.h match_service.h \
addr_match_list.h smtp_reply_footer.h safe_ultostr.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 \ 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 TESTSRC = rec2stream.c stream2rec.c recdump.c
DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE) DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE)
CFLAGS = $(DEBUG) $(OPT) $(DEFS) CFLAGS = $(DEBUG) $(OPT) $(DEFS)
@ -666,7 +666,7 @@ bounce.o: log_adhoc.h
bounce.o: mail_params.h bounce.o: mail_params.h
bounce.o: mail_proto.h bounce.o: mail_proto.h
bounce.o: msg_stats.h bounce.o: msg_stats.h
bounce.o: ndr_filter.h bounce.o: dsn_filter.h
bounce.o: rcpt_print.h bounce.o: rcpt_print.h
bounce.o: recipient_list.h bounce.o: recipient_list.h
bounce.o: trace.h bounce.o: trace.h
@ -812,7 +812,7 @@ defer.o: mail_params.h
defer.o: mail_proto.h defer.o: mail_proto.h
defer.o: mail_queue.h defer.o: mail_queue.h
defer.o: msg_stats.h defer.o: msg_stats.h
defer.o: ndr_filter.h defer.o: dsn_filter.h
defer.o: rcpt_print.h defer.o: rcpt_print.h
defer.o: recipient_list.h defer.o: recipient_list.h
defer.o: trace.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: ../../include/sys_defs.h
namadr_list.o: namadr_list.c namadr_list.o: namadr_list.c
namadr_list.o: namadr_list.h namadr_list.o: namadr_list.h
ndr_filter.o: ../../include/argv.h dsn_filter.o: ../../include/argv.h
ndr_filter.o: ../../include/dict.h dsn_filter.o: ../../include/dict.h
ndr_filter.o: ../../include/msg.h dsn_filter.o: ../../include/msg.h
ndr_filter.o: ../../include/myflock.h dsn_filter.o: ../../include/myflock.h
ndr_filter.o: ../../include/mymalloc.h dsn_filter.o: ../../include/mymalloc.h
ndr_filter.o: ../../include/sys_defs.h dsn_filter.o: ../../include/sys_defs.h
ndr_filter.o: ../../include/vbuf.h dsn_filter.o: ../../include/vbuf.h
ndr_filter.o: ../../include/vstream.h dsn_filter.o: ../../include/vstream.h
ndr_filter.o: ../../include/vstring.h dsn_filter.o: ../../include/vstring.h
ndr_filter.o: dsn.h dsn_filter.o: dsn.h
ndr_filter.o: dsn_util.h dsn_filter.o: dsn_util.h
ndr_filter.o: maps.h dsn_filter.o: maps.h
ndr_filter.o: ndr_filter.c dsn_filter.o: dsn_filter.c
ndr_filter.o: ndr_filter.h dsn_filter.o: dsn_filter.h
off_cvt.o: ../../include/msg.h off_cvt.o: ../../include/msg.h
off_cvt.o: ../../include/sys_defs.h off_cvt.o: ../../include/sys_defs.h
off_cvt.o: ../../include/vbuf.h off_cvt.o: ../../include/vbuf.h

View File

@ -53,7 +53,7 @@
/* const char *title; /* const char *title;
/* const char *maps; /* const char *maps;
/* INTERNAL API /* INTERNAL API
/* NDR_FILTER *bounce_defer_filter; /* DSN_FILTER *delivery_status_filter;
/* /*
/* int bounce_append_intern(flags, id, stats, recipient, relay, dsn) /* int bounce_append_intern(flags, id, stats, recipient, relay, dsn)
/* int flags; /* int flags;
@ -181,7 +181,7 @@
/* Global library. */ /* Global library. */
#define BOUNCE_DEFER_INTERN #define DSN_INTERN
#include <mail_params.h> #include <mail_params.h>
#include <mail_proto.h> #include <mail_proto.h>
#include <log_adhoc.h> #include <log_adhoc.h>
@ -195,7 +195,7 @@
/* Shared internally, between bounce and defer clients. */ /* 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 */ /* 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). * DSN filter (Postfix 2.12).
*/ */
if (bounce_defer_filter != 0 if (delivery_status_filter != 0
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) { && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '4') if (dsn_res->status[0] == '4')
return (defer_append_intern(flags, id, stats, rcpt, relay, dsn_res)); return (defer_append_intern(flags, id, stats, rcpt, relay, dsn_res));
my_dsn = *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). * DSN filter (Postfix 2.12).
*/ */
if (bounce_defer_filter != 0 if (delivery_status_filter != 0
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) { && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '4') if (dsn_res->status[0] == '4')
return (defer_append_intern(flags, id, stats, rcpt, relay, dsn_res)); return (defer_append_intern(flags, id, stats, rcpt, relay, dsn_res));
my_dsn = *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"; const char myname[] = "bounce_client_init";
if (bounce_defer_filter != 0) if (delivery_status_filter != 0)
msg_panic("%s: duplicate initialization", myname); msg_panic("%s: duplicate initialization", myname);
if (*maps) if (*maps)
bounce_defer_filter = ndr_filter_create(title, maps); delivery_status_filter = dsn_filter_create(title, maps);
} }

View File

@ -70,11 +70,11 @@ extern void bounce_client_init(const char *, const char *);
* Start of private API. * 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 *, extern int bounce_append_intern(int, const char *, MSG_STATS *, RECIPIENT *,
const char *, DSN *); const char *, DSN *);

View File

@ -77,7 +77,7 @@
/* question has been deferred. The defer log is not deleted, /* question has been deferred. The defer log is not deleted,
/* and no recipients are deleted from the original queue file. /* and no recipients are deleted from the original queue file.
/* /*
/* defer_one() implements ndr_filter(3) compatibility for the /* defer_one() implements dsn_filter(3) compatibility for the
/* bounce_one() routine. /* bounce_one() routine.
/* /*
/* defer_append_intern() is for use after the DSN filter. /* defer_append_intern() is for use after the DSN filter.
@ -160,7 +160,7 @@
/* Global library. */ /* Global library. */
#define BOUNCE_DEFER_INTERN #define DSN_INTERN
#include <mail_params.h> #include <mail_params.h>
#include <mail_queue.h> #include <mail_queue.h>
#include <mail_proto.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). * DSN filter (Postfix 2.12).
*/ */
if (bounce_defer_filter != 0 if (delivery_status_filter != 0
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) { && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '5') if (dsn_res->status[0] == '5')
return (bounce_append_intern(flags, id, stats, rcpt, relay, dsn_res)); return (bounce_append_intern(flags, id, stats, rcpt, relay, dsn_res));
my_dsn = *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). * DSN filter (Postfix 2.12).
*/ */
if (bounce_defer_filter != 0 if (delivery_status_filter != 0
&& (dsn_res = ndr_filter_lookup(bounce_defer_filter, &my_dsn)) != 0) { && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '5') if (dsn_res->status[0] == '5')
return (bounce_one_intern(flags, queue, id, encoding, sender, return (bounce_one_intern(flags, queue, id, encoding, sender,
dsn_envid, dsn_ret, stats, rcpt, dsn_envid, dsn_ret, stats, rcpt,

View File

@ -33,7 +33,7 @@ extern int defer_one(int, const char *, const char *, const char *,
/* /*
* Start of private API. * Start of private API.
*/ */
#ifdef BOUNCE_DEFER_INTERN #ifdef DSN_INTERN
extern int defer_append_intern(int, const char *, MSG_STATS *, RECIPIENT *, extern int defer_append_intern(int, const char *, MSG_STATS *, RECIPIENT *,
const char *, DSN *); const char *, DSN *);

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

View File

@ -1,24 +1,24 @@
#ifndef _NDR_FILTER_H_INCLUDED_ #ifndef _DSN_FILTER_H_INCLUDED_
#define _NDR_FILTER_H_INCLUDED_ #define _DSN_FILTER_H_INCLUDED_
/*++ /*++
/* NAME /* NAME
/* ndr_filter 3h /* dsn_filter 3h
/* SUMMARY /* SUMMARY
/* bounce/defer DSN filter /* bounce/defer DSN filter
/* SYNOPSIS /* SYNOPSIS
/* #include <ndr_filter.h> /* #include <dsn_filter.h>
/* DESCRIPTION /* DESCRIPTION
/* .nf /* .nf
/* /*
* External interface. * 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_FILTER *dsn_filter_create(const char *, const char *);
extern DSN *ndr_filter_lookup(NDR_FILTER *, DSN *); extern DSN *dsn_filter_lookup(DSN_FILTER *, DSN *);
extern void ndr_filter_free(NDR_FILTER *); extern void dsn_filter_free(DSN_FILTER *);
/* LICENSE /* LICENSE
/* .ad /* .ad

View File

@ -121,7 +121,7 @@
/* bool var_multi_enable; /* bool var_multi_enable;
/* bool var_long_queue_ids; /* bool var_long_queue_ids;
/* bool var_daemon_open_fatal; /* bool var_daemon_open_fatal;
/* char *var_ndr_filter; /* char *var_dsn_filter;
/* /*
/* void mail_params_init() /* void mail_params_init()
/* /*
@ -315,7 +315,7 @@ char *var_multi_name;
bool var_multi_enable; bool var_multi_enable;
bool var_long_queue_ids; bool var_long_queue_ids;
bool var_daemon_open_fatal; bool var_daemon_open_fatal;
char *var_ndr_filter; char *var_dsn_filter;
const char null_format_string[1] = ""; 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, VAR_INT_FILT_CLASSES, DEF_INT_FILT_CLASSES, &var_int_filt_classes, 0, 0,
/* multi_instance_wrapper may have dependencies but not dependents. */ /* multi_instance_wrapper may have dependencies but not dependents. */
VAR_MULTI_WRAPPER, DEF_MULTI_WRAPPER, &var_multi_wrapper, 0, 0, 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, 0,
}; };
static const CONFIG_STR_FN_TABLE function_str_defaults_2[] = { static const CONFIG_STR_FN_TABLE function_str_defaults_2[] = {

View File

@ -3747,27 +3747,27 @@ extern bool var_daemon_open_fatal;
/* /*
* Optional DSN bounce/defer filter. * Optional DSN bounce/defer filter.
*/ */
#define VAR_NDR_FILTER "default_bounce_defer_filter" #define VAR_DSN_FILTER "default_delivery_status_filter"
#define DEF_NDR_FILTER "" #define DEF_DSN_FILTER ""
extern char *var_ndr_filter; extern char *var_dsn_filter;
#define VAR_SMTP_NDR_FILTER "smtp_bounce_defer_filter" #define VAR_SMTP_DSN_FILTER "smtp_delivery_status_filter"
#define DEF_SMTP_NDR_FILTER "$" VAR_NDR_FILTER #define DEF_SMTP_DSN_FILTER "$" VAR_DSN_FILTER
#define VAR_LMTP_NDR_FILTER "lmtp_bounce_defer_filter" #define VAR_LMTP_DSN_FILTER "lmtp_delivery_status_filter"
#define DEF_LMTP_NDR_FILTER "$" VAR_NDR_FILTER #define DEF_LMTP_DSN_FILTER "$" VAR_DSN_FILTER
extern char *var_smtp_ndr_filter; extern char *var_smtp_dsn_filter;
#define VAR_PIPE_NDR_FILTER "pipe_bounce_defer_filter" #define VAR_PIPE_DSN_FILTER "pipe_delivery_status_filter"
#define DEF_PIPE_NDR_FILTER "$" VAR_NDR_FILTER #define DEF_PIPE_DSN_FILTER "$" VAR_DSN_FILTER
extern char *var_pipe_ndr_filter; extern char *var_pipe_dsn_filter;
#define VAR_VIRT_NDR_FILTER "virtual_bounce_defer_filter" #define VAR_VIRT_DSN_FILTER "virtual_delivery_status_filter"
#define DEF_VIRT_NDR_FILTER "$" VAR_NDR_FILTER #define DEF_VIRT_DSN_FILTER "$" VAR_DSN_FILTER
extern char *var_virt_ndr_filter; extern char *var_virt_dsn_filter;
#define VAR_LOCAL_NDR_FILTER "local_bounce_defer_filter" #define VAR_LOCAL_DSN_FILTER "local_delivery_status_filter"
#define DEF_LOCAL_NDR_FILTER "$" VAR_NDR_FILTER #define DEF_LOCAL_DSN_FILTER "$" VAR_DSN_FILTER
extern char *var_local_ndr_filter; extern char *var_local_dsn_filter;
/* LICENSE /* LICENSE
/* .ad /* .ad

View File

@ -20,7 +20,7 @@
* Patches change both the patchlevel and the release date. Snapshots have no * Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only. * patchlevel; they change the release date only.
*/ */
#define MAIL_RELEASE_DATE "20140318" #define MAIL_RELEASE_DATE "20140321"
#define MAIL_VERSION_NUMBER "2.12" #define MAIL_VERSION_NUMBER "2.12"
#ifdef SNAPSHOT #ifdef SNAPSHOT

View File

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

View File

@ -19,8 +19,6 @@
/* message delivery record on request by the sender. The /* message delivery record on request by the sender. The
/* flags argument determines the action. /* flags argument determines the action.
/* /*
/* vsent() implements an alternative interface.
/*
/* Arguments: /* Arguments:
/* .IP flags /* .IP flags
/* Zero or more of the following: /* Zero or more of the following:
@ -79,6 +77,7 @@
/* Global library. */ /* Global library. */
#define DSN_INTERN
#include <mail_params.h> #include <mail_params.h>
#include <verify.h> #include <verify.h>
#include <log_adhoc.h> #include <log_adhoc.h>
@ -97,6 +96,7 @@ int sent(int flags, const char *id, MSG_STATS *stats,
DSN *dsn) DSN *dsn)
{ {
DSN my_dsn = *dsn; DSN my_dsn = *dsn;
DSN *dsn_res;
int status; int status;
/* /*
@ -107,6 +107,13 @@ int sent(int flags, const char *id, MSG_STATS *stats,
my_dsn.status = "2.0.0"; 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 * MTA-requested address verification information is stored in the verify
* service database. * service database.
@ -147,7 +154,7 @@ int sent(int flags, const char *id, MSG_STATS *stats,
vstring_sprintf(junk, "%s: %s service failed", vstring_sprintf(junk, "%s: %s service failed",
id, var_trace_service); id, var_trace_service);
my_dsn.reason = vstring_str(junk); 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); status = defer_append(flags, id, stats, recipient, relay, &my_dsn);
vstring_free(junk); vstring_free(junk);
} }

View File

@ -387,9 +387,10 @@
/* its own owner alias. /* its own owner alias.
/* .PP /* .PP
/* Available in Postfix version 2.12 and later: /* Available in Postfix version 2.12 and later:
/* .IP "\fBlocal_bounce_defer_filter ($default_bounce_defer_filter)\fR" /* .IP "\fBlocal_delivery_status_filter ($default_delivery_status_filter)\fR"
/* Optional filter to change arbitrary hard delivery errors into /* Optional filter for the \fBlocal\fR(8) delivery agent to change the
/* soft errors and vice versa in the \fBlocal\fR(8) delivery agent. /* status code or explanatory text of successful or unsuccessful
/* deliveries.
/* DELIVERY METHOD CONTROLS /* DELIVERY METHOD CONTROLS
/* .ad /* .ad
/* .fi /* .fi
@ -904,7 +905,7 @@ int main(int argc, char **argv)
VAR_DELIVER_HDR, DEF_DELIVER_HDR, &var_deliver_hdr, 0, 0, VAR_DELIVER_HDR, DEF_DELIVER_HDR, &var_deliver_hdr, 0, 0,
VAR_MAILBOX_LOCK, DEF_MAILBOX_LOCK, &var_mailbox_lock, 1, 0, VAR_MAILBOX_LOCK, DEF_MAILBOX_LOCK, &var_mailbox_lock, 1, 0,
VAR_MAILBOX_CMD_MAPS, DEF_MAILBOX_CMD_MAPS, &var_mailbox_cmd_maps, 0, 0, VAR_MAILBOX_CMD_MAPS, DEF_MAILBOX_CMD_MAPS, &var_mailbox_cmd_maps, 0, 0,
VAR_LOCAL_NDR_FILTER, DEF_LOCAL_NDR_FILTER, &var_local_ndr_filter, 0, 0, VAR_LOCAL_DSN_FILTER, DEF_LOCAL_DSN_FILTER, &var_local_ndr_filter, 0, 0,
0, 0,
}; };
static const CONFIG_BOOL_TABLE bool_table[] = { 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_POST_INIT, post_init,
MAIL_SERVER_PRE_ACCEPT, pre_accept, MAIL_SERVER_PRE_ACCEPT, pre_accept,
MAIL_SERVER_PRIVILEGED, MAIL_SERVER_PRIVILEGED,
MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_NDR_FILTER, MAIL_SERVER_BOUNCE_INIT, VAR_LOCAL_DSN_FILTER,
&var_local_ndr_filter, &var_local_ndr_filter,
0); 0);
} }

View File

@ -94,7 +94,7 @@ event_server.o: ../../include/deliver_request.h
event_server.o: ../../include/dict.h event_server.o: ../../include/dict.h
event_server.o: ../../include/dsn.h event_server.o: ../../include/dsn.h
event_server.o: ../../include/dsn_buf.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/events.h
event_server.o: ../../include/htable.h event_server.o: ../../include/htable.h
event_server.o: ../../include/iostuff.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/dict.h
multi_server.o: ../../include/dsn.h multi_server.o: ../../include/dsn.h
multi_server.o: ../../include/dsn_buf.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/events.h
multi_server.o: ../../include/htable.h multi_server.o: ../../include/htable.h
multi_server.o: ../../include/iostuff.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/dict.h
single_server.o: ../../include/dsn.h single_server.o: ../../include/dsn.h
single_server.o: ../../include/dsn_buf.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/events.h
single_server.o: ../../include/htable.h single_server.o: ../../include/htable.h
single_server.o: ../../include/iostuff.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/dict.h
trigger_server.o: ../../include/dsn.h trigger_server.o: ../../include/dsn.h
trigger_server.o: ../../include/dsn_buf.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/events.h
trigger_server.o: ../../include/htable.h trigger_server.o: ../../include/htable.h
trigger_server.o: ../../include/iostuff.h trigger_server.o: ../../include/iostuff.h

View File

@ -560,8 +560,8 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
char *generation; char *generation;
int msg_vstream_needed = 0; int msg_vstream_needed = 0;
int redo_syslog_init = 0; int redo_syslog_init = 0;
const char *ndr_filter_title; const char *dsn_filter_title;
const char **ndr_filter_maps; const char **dsn_filter_maps;
/* /*
* Process environment options as early as we can. * 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); event_server_slow_exit = va_arg(ap, MAIL_SERVER_SLOW_EXIT_FN);
break; break;
case MAIL_SERVER_BOUNCE_INIT: case MAIL_SERVER_BOUNCE_INIT:
ndr_filter_title = va_arg(ap, const char *); dsn_filter_title = va_arg(ap, const char *);
ndr_filter_maps = va_arg(ap, const char **); dsn_filter_maps = va_arg(ap, const char **);
bounce_client_init(ndr_filter_title, *ndr_filter_maps); bounce_client_init(dsn_filter_title, *dsn_filter_maps);
break; break;
default: default:
msg_panic("%s: unknown argument type: %d", myname, key); msg_panic("%s: unknown argument type: %d", myname, key);

View File

@ -556,8 +556,8 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...)
char *generation; char *generation;
int msg_vstream_needed = 0; int msg_vstream_needed = 0;
int redo_syslog_init = 0; int redo_syslog_init = 0;
const char *ndr_filter_title; const char *dsn_filter_title;
const char **ndr_filter_maps; const char **dsn_filter_maps;
/* /*
* Process environment options as early as we can. * 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); service_name);
break; break;
case MAIL_SERVER_BOUNCE_INIT: case MAIL_SERVER_BOUNCE_INIT:
ndr_filter_title = va_arg(ap, const char *); dsn_filter_title = va_arg(ap, const char *);
ndr_filter_maps = va_arg(ap, const char **); dsn_filter_maps = va_arg(ap, const char **);
bounce_client_init(ndr_filter_title, *ndr_filter_maps); bounce_client_init(dsn_filter_title, *dsn_filter_maps);
break; break;
default: default:
msg_panic("%s: unknown argument type: %d", myname, key); msg_panic("%s: unknown argument type: %d", myname, key);

View File

@ -434,8 +434,8 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...)
char *generation; char *generation;
int msg_vstream_needed = 0; int msg_vstream_needed = 0;
int redo_syslog_init = 0; int redo_syslog_init = 0;
const char *ndr_filter_title; const char *dsn_filter_title;
const char **ndr_filter_maps; const char **dsn_filter_maps;
/* /*
* Process environment options as early as we can. * 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); service_name);
break; break;
case MAIL_SERVER_BOUNCE_INIT: case MAIL_SERVER_BOUNCE_INIT:
ndr_filter_title = va_arg(ap, const char *); dsn_filter_title = va_arg(ap, const char *);
ndr_filter_maps = va_arg(ap, const char **); dsn_filter_maps = va_arg(ap, const char **);
bounce_client_init(ndr_filter_title, *ndr_filter_maps); bounce_client_init(dsn_filter_title, *dsn_filter_maps);
break; break;
default: default:
msg_panic("%s: unknown argument type: %d", myname, key); msg_panic("%s: unknown argument type: %d", myname, key);

View File

@ -437,8 +437,8 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,..
char *generation; char *generation;
int msg_vstream_needed = 0; int msg_vstream_needed = 0;
int redo_syslog_init = 0; int redo_syslog_init = 0;
const char *ndr_filter_title; const char *dsn_filter_title;
const char **ndr_filter_maps; const char **dsn_filter_maps;
/* /*
* Process environment options as early as we can. * 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 *); trigger_server_watchdog = *va_arg(ap, int *);
break; break;
case MAIL_SERVER_BOUNCE_INIT: case MAIL_SERVER_BOUNCE_INIT:
ndr_filter_title = va_arg(ap, const char *); dsn_filter_title = va_arg(ap, const char *);
ndr_filter_maps = va_arg(ap, const char **); dsn_filter_maps = va_arg(ap, const char **);
bounce_client_init(ndr_filter_title, *ndr_filter_maps); bounce_client_init(dsn_filter_title, *dsn_filter_maps);
break; break;
default: default:
msg_panic("%s: unknown argument type: %d", myname, key); msg_panic("%s: unknown argument type: %d", myname, key);

View File

@ -404,9 +404,10 @@
/* records, so that "smtpd" becomes, for example, "postfix/smtpd". /* records, so that "smtpd" becomes, for example, "postfix/smtpd".
/* .PP /* .PP
/* Available in Postfix version 2.12 and later: /* Available in Postfix version 2.12 and later:
/* .IP "\fBpipe_bounce_defer_filter ($default_bounce_defer_filter)\fR" /* .IP "\fBpipe_delivery_status_filter ($default_delivery_status_filter)\fR"
/* Optional filter to change arbitrary hard delivery errors into /* Optional filter for the \fBpipe\fR(8) delivery agent to change the
/* soft errors and vice versa in the \fBpipe\fR(8) delivery agent. /* delivery status code or explanatory text of successful or unsuccessful
/* deliveries.
/* SEE ALSO /* SEE ALSO
/* qmgr(8), queue manager /* qmgr(8), queue manager
/* bounce(8), delivery status reports /* bounce(8), delivery status reports
@ -1329,7 +1330,7 @@ int main(int argc, char **argv)
0, 0,
}; };
static const CONFIG_STR_TABLE str_table[] = { 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, 0,
}; };
@ -1344,7 +1345,7 @@ int main(int argc, char **argv)
MAIL_SERVER_POST_INIT, drop_privileges, MAIL_SERVER_POST_INIT, drop_privileges,
MAIL_SERVER_PRE_ACCEPT, pre_accept, MAIL_SERVER_PRE_ACCEPT, pre_accept,
MAIL_SERVER_PRIVILEGED, MAIL_SERVER_PRIVILEGED,
MAIL_SERVER_BOUNCE_INIT, VAR_PIPE_NDR_FILTER, MAIL_SERVER_BOUNCE_INIT, VAR_PIPE_DSN_FILTER,
&var_pipe_ndr_filter, &var_pipe_ndr_filter,
0); 0);
} }

View File

@ -57,7 +57,7 @@
VAR_LMTP_RESP_FILTER, DEF_LMTP_RESP_FILTER, &var_smtp_resp_filter, 0, 0, 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_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_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, 0,
}; };
static const CONFIG_TIME_TABLE lmtp_time_table[] = { static const CONFIG_TIME_TABLE lmtp_time_table[] = {

View File

@ -254,9 +254,10 @@
/* Level of DNS support in the Postfix SMTP client. /* Level of DNS support in the Postfix SMTP client.
/* .PP /* .PP
/* Available in Postfix version 2.12 and later: /* Available in Postfix version 2.12 and later:
/* .IP "\fBsmtp_bounce_defer_filter ($default_bounce_defer_filter)\fR" /* .IP "\fBsmtp_delivery_status_filter ($default_delivery_status_filter)\fR"
/* Optional filter to change arbitrary hard delivery errors into /* Optional filter for the \fBsmtp\fR(8) delivery agent to change the
/* soft errors and vice versa in the \fBsmtp\fR(8) delivery agent. /* delivery status code or explanatory text of successful or unsuccessful
/* deliveries.
/* MIME PROCESSING CONTROLS /* MIME PROCESSING CONTROLS
/* .ad /* .ad
/* .fi /* .fi
@ -1277,7 +1278,7 @@ int main(int argc, char **argv)
MAIL_SERVER_PRE_INIT, pre_init, MAIL_SERVER_PRE_INIT, pre_init,
MAIL_SERVER_POST_INIT, post_init, MAIL_SERVER_POST_INIT, post_init,
MAIL_SERVER_PRE_ACCEPT, pre_accept, MAIL_SERVER_PRE_ACCEPT, pre_accept,
MAIL_SERVER_BOUNCE_INIT, VAR_SMTP_NDR_FILTER, MAIL_SERVER_BOUNCE_INIT, VAR_SMTP_DSN_FILTER,
&var_smtp_ndr_filter, &var_smtp_ndr_filter,
0); 0);
} }

View File

@ -58,7 +58,7 @@
VAR_SMTP_RESP_FILTER, DEF_SMTP_RESP_FILTER, &var_smtp_resp_filter, 0, 0, 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_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_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, 0,
}; };
static const CONFIG_TIME_TABLE smtp_time_table[] = { static const CONFIG_TIME_TABLE smtp_time_table[] = {

View File

@ -247,9 +247,10 @@
/* records, so that "smtpd" becomes, for example, "postfix/smtpd". /* records, so that "smtpd" becomes, for example, "postfix/smtpd".
/* .PP /* .PP
/* Available in Postfix version 2.12 and later: /* Available in Postfix version 2.12 and later:
/* .IP "\fBvirtual_bounce_defer_filter ($default_bounce_defer_filter)\fR" /* .IP "\fBvirtual_delivery_status_filter ($default_delivery_status_filter)\fR"
/* Optional filter to change arbitrary hard delivery errors into /* Optional filter for the \fBvirtual\fR(8) delivery agent to change the
/* soft errors and vice versa in the \fBvirtual\fR(8) delivery agent. /* delivery status code or explanatory text of successful or unsuccessful
/* deliveries.
/* SEE ALSO /* SEE ALSO
/* qmgr(8), queue manager /* qmgr(8), queue manager
/* bounce(8), delivery status reports /* 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_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_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_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, 0,
}; };
static const CONFIG_BOOL_TABLE bool_table[] = { 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_POST_INIT, post_init,
MAIL_SERVER_PRE_ACCEPT, pre_accept, MAIL_SERVER_PRE_ACCEPT, pre_accept,
MAIL_SERVER_PRIVILEGED, MAIL_SERVER_PRIVILEGED,
MAIL_SERVER_BOUNCE_INIT, VAR_VIRT_NDR_FILTER, MAIL_SERVER_BOUNCE_INIT, VAR_VIRT_DSN_FILTER,
&var_virt_ndr_filter, &var_virt_ndr_filter,
0); 0);
} }