mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-30 05:38:06 +00:00
postfix-2.7-20090428
This commit is contained in:
parent
f364bbc0e8
commit
6ab3d16b87
@ -15169,10 +15169,28 @@ Apologies for any names omitted.
|
|||||||
milter/milter.[hc], smtpd/smtpd.[hc], smtpd/smtpd_milter.c,
|
milter/milter.[hc], smtpd/smtpd.[hc], smtpd/smtpd_milter.c,
|
||||||
smtpd/smtpd_resolve.c.
|
smtpd/smtpd_resolve.c.
|
||||||
|
|
||||||
Feature: new support for SMFIP_RCPT_REJ. When a recipient
|
Feature: support to report rejected recipients to Milters
|
||||||
is rejected, Postfix reports the event as decribed in
|
(SMFIP_RCPT_REJ). Postfix reports the event as decribed in
|
||||||
Sendmail 8.14.0 documentation: {rcpt_mailer} = "error",
|
Sendmail 8.14.0 documentation: {rcpt_mailer} = "error",
|
||||||
{rcpt_host} = enhanced status code (e.g., "5.7.1"), and
|
{rcpt_host} = enhanced status code (e.g., "5.7.1"), and
|
||||||
{rcpt_addr} = reason to reject (e.g., "Relay access denied").
|
{rcpt_addr} = reason to reject (e.g., "Relay access denied").
|
||||||
Files: milter/milter.[hc], milter/milter8.c, smtpd/smtpd.[hc],
|
Files: milter/milter.[hc], milter/milter8.c, smtpd/smtpd.[hc],
|
||||||
smtpd/smtpd_milter.c.
|
smtpd/smtpd_milter.c.
|
||||||
|
|
||||||
|
20090427
|
||||||
|
|
||||||
|
Feature: Milter support for replacing the envelope sender
|
||||||
|
and adding recipients (SMFIR_CHGFROM, SMFIR_ADDRCPT_PAR).
|
||||||
|
This support currently ignores ESMTP command parameters.
|
||||||
|
Files: milter/milter8.c, cleanup/cleanup_milter.c.
|
||||||
|
|
||||||
|
20090428
|
||||||
|
|
||||||
|
Compatibility: to make all the new Milter features usable,
|
||||||
|
raise the default milter_protocol setting from 2 to 6.
|
||||||
|
This has been tested with a Sendmail 8.14 libmilter.
|
||||||
|
File: global/mail_params.h.
|
||||||
|
|
||||||
|
Bugfix: don't disable MIME parsing with smtp_header_checks,
|
||||||
|
smtp_mime_header_checks, smtp_nested_header_checks or with
|
||||||
|
smtp_body_checks. Bug reported by Victor. File: smtp/smtp_proto.c.
|
||||||
|
@ -262,10 +262,12 @@ MMiilltteerr pprroottooccooll vveerrssiioonn
|
|||||||
|
|
||||||
As Postfix is not built with the Sendmail libmilter library, you may need to
|
As Postfix is not built with the Sendmail libmilter library, you may need to
|
||||||
configure the Milter protocol version that Postfix should use. The default
|
configure the Milter protocol version that Postfix should use. The default
|
||||||
version is 2. Other protocol versions are 3 and 4 (Postfix 2.3 and later), and
|
version is 6 (before Postfix 2.6 the default version is 2).
|
||||||
6 (Postfix 2.5 an later).
|
|
||||||
|
|
||||||
/etc/postfix/main.cf:
|
/etc/postfix/main.cf:
|
||||||
|
# Postfix >= 2.6
|
||||||
|
milter_protocol = 6
|
||||||
|
# 2.3 <= Postfix <= 2.5
|
||||||
milter_protocol = 2
|
milter_protocol = 2
|
||||||
|
|
||||||
If the Postfix milter_protocol setting specifies a too low version, the
|
If the Postfix milter_protocol setting specifies a too low version, the
|
||||||
@ -313,8 +315,10 @@ with before-queue filtering.
|
|||||||
SSeennddmmaaiill mmaaccrroo eemmuullaattiioonn
|
SSeennddmmaaiill mmaaccrroo eemmuullaattiioonn
|
||||||
|
|
||||||
Postfix emulates a limited number of Sendmail macros, as shown in the table.
|
Postfix emulates a limited number of Sendmail macros, as shown in the table.
|
||||||
Different macros are available at different SMTP protocol stages (EOH = end-of-
|
Some macro values depend on whether a recipient is rejected (rejected
|
||||||
header, EOM = end-of-message); their availability is not always the same as in
|
recipients are available on request by the Milter application). Different
|
||||||
|
macros are available at different SMTP protocol stages (EOH = end-of-header,
|
||||||
|
EOM = end-of-message); their availability is not always the same as in
|
||||||
Sendmail. See the workarounds section below for solutions.
|
Sendmail. See the workarounds section below for solutions.
|
||||||
|
|
||||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||||
@ -338,15 +342,18 @@ Sendmail. See the workarounds section below for solutions.
|
|||||||
|{client_connections}|CONNECT |Connection concurrency for|
|
|{client_connections}|CONNECT |Connection concurrency for|
|
||||||
| | |this client |
|
| | |this client |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
| | |Client hostname, "unknown"|
|
| | |Client hostname |
|
||||||
|{client_name} |Always |when lookup or |
|
| | |When address -> name |
|
||||||
| | |verification fails |
|
|{client_name} |Always |lookup or name -> address |
|
||||||
|
| | |verification fails: |
|
||||||
|
| | |"unknown" |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{client_port} |Always (Postfix >=2.5) |Client TCP port |
|
|{client_port} |Always (Postfix >=2.5) |Client TCP port |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
| | |Client name from reverse |
|
| | |Client name from address -|
|
||||||
|{client_ptr} |CONNECT, HELO, MAIL, DATA|lookup, "unknown" when |
|
|{client_ptr} |CONNECT, HELO, MAIL, DATA|> name lookup |
|
||||||
| | |lookup fails |
|
| | |When address -> name |
|
||||||
|
| | |lookup fails: "unknown" |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{cert_issuer} |HELO, MAIL, DATA, EOH, |TLS client certificate |
|
|{cert_issuer} |HELO, MAIL, DATA, EOH, |TLS client certificate |
|
||||||
| |EOM |issuer |
|
| |EOM |issuer |
|
||||||
@ -371,14 +378,19 @@ Sendmail. See the workarounds section below for solutions.
|
|||||||
|{mail_mailer} |MAIL (Postfix >= 2.6) |Sender mail delivery |
|
|{mail_mailer} |MAIL (Postfix >= 2.6) |Sender mail delivery |
|
||||||
| | |transport |
|
| | |transport |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{rcpt_addr} |RCPT |Recipient address |
|
| | |Recipient address |
|
||||||
|
|{rcpt_addr} |RCPT |With rejected recipient: |
|
||||||
|
| | |descriptive text |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{rcpt_host} |RCPT (Postfix >= 2.6) |Recipient next-hop |
|
| | |Recipient next-hop |
|
||||||
| | |destination |
|
|{rcpt_host} |RCPT (Postfix >= 2.6) |destination |
|
||||||
|
| | |With rejected recpient: |
|
||||||
|
| | |enhanced status code |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
| | |Recipient mail delivery |
|
| | |Recipient mail delivery |
|
||||||
|{rcpt_mailer} |RCPT (Postfix >= 2.6) |transport, "error" for |
|
|{rcpt_mailer} |RCPT (Postfix >= 2.6) |transport |
|
||||||
| | |rejected recipient. |
|
| | |With rejected recipient: |
|
||||||
|
| | |"error" |
|
||||||
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
|
||||||
|{tls_version} |HELO, MAIL, DATA, EOH, |TLS protocol version |
|
|{tls_version} |HELO, MAIL, DATA, EOH, |TLS protocol version |
|
||||||
| |EOM | |
|
| |EOM | |
|
||||||
@ -507,26 +519,21 @@ limitations will be removed as the implementation is extended over time. Of
|
|||||||
course the usual limitations of before-queue filtering will always apply. See
|
course the usual limitations of before-queue filtering will always apply. See
|
||||||
the CONTENT_INSPECTION_README document for a discussion.
|
the CONTENT_INSPECTION_README document for a discussion.
|
||||||
|
|
||||||
* Postfix version 2.3 introduces support for Sendmail 8 milter protocol
|
* For Milter applications that are written in C, you need to use the Sendmail
|
||||||
versions 2, 3 and 4; Postfix version 2.5 adds support for protocol version
|
libmilter library.
|
||||||
6, which is available with Sendmail 8.14. Support for other protocol types
|
|
||||||
or protocol versions may be added later.
|
|
||||||
|
|
||||||
* For applications that are written in C, you need to use the Sendmail
|
|
||||||
libmilter library. A Postfix replacement may be provided in the future.
|
|
||||||
|
|
||||||
* There are TWO sets of mail filters: filters that are used for SMTP mail
|
* There are TWO sets of mail filters: filters that are used for SMTP mail
|
||||||
only (specified with the smtpd_milters parameter), and filters for non-SMTP
|
only (specified with the smtpd_milters parameter), and filters for non-SMTP
|
||||||
mail (specified with the non_smtpd_milters parameter). The non-SMTP filters
|
mail (specified with the non_smtpd_milters parameter). The non-SMTP filters
|
||||||
are primarily for local submissions.
|
are primarily for local submissions.
|
||||||
|
|
||||||
* When mail is filtered by non-SMTP filters, the Postfix cleanup(8) server
|
o When mail is filtered by non-SMTP filters, the Postfix cleanup(8)
|
||||||
has to simulate the SMTP client CONNECT and DISCONNECT events, and the SMTP
|
server has to simulate the SMTP client CONNECT and DISCONNECT events,
|
||||||
client EHLO, MAIL FROM, RCPT TO and DATA commands. This works as expected,
|
and the SMTP client EHLO, MAIL FROM, RCPT TO and DATA commands. This
|
||||||
with only one exception: non-SMTP filters must not REJECT or TEMPFAIL
|
works as expected, with only one exception: non-SMTP filters must not
|
||||||
simulated RCPT TO commands. When a non-SMTP filter REJECTs or TEMPFAILs a
|
REJECT or TEMPFAIL simulated RCPT TO commands. When a non-SMTP filter
|
||||||
recipient, Postfix will report a configuration error, and mail will stay in
|
REJECTs or TEMPFAILs a recipient, Postfix will report a configuration
|
||||||
the queue.
|
error, and mail will stay in the queue.
|
||||||
|
|
||||||
* Postfix currently does not apply content filters to mail that is forwarded
|
* Postfix currently does not apply content filters to mail that is forwarded
|
||||||
or aliased internally, or to mail that is generated internally such as
|
or aliased internally, or to mail that is generated internally such as
|
||||||
@ -538,19 +545,42 @@ the CONTENT_INSPECTION_README document for a discussion.
|
|||||||
command information; they have no access to the message header or body, and
|
command information; they have no access to the message header or body, and
|
||||||
cannot make modifications to the message or to the envelope.
|
cannot make modifications to the message or to the envelope.
|
||||||
|
|
||||||
* Postfix 2.3 does not support Milter requests to replace the message body.
|
* Postfix version 2.6 implements all Sendmail 8.14 Milter features, except it
|
||||||
Milter applications that request this unsupported operation will log a
|
ignores the optional ESMTP command parameters with requests to replace the
|
||||||
warning like this:
|
sender (SMFIR_CHGFROM), or to append a recipient (SMFIR_ADDRCPT_PAR). When
|
||||||
|
a Milter application supplies ESMTP command parameters, these are logged as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
postfix/cleanup[40629]: warning: 100B22B3293: cleanup_chg_from: ignoring
|
||||||
|
ESMTP arguments "whatever"
|
||||||
|
|
||||||
|
Specify "milter_protocol = 6" to enable all available Sendmail 8.14 and
|
||||||
|
earlier Milter features.
|
||||||
|
|
||||||
|
* Postfix version 2.5 implements all Sendmail 8.14 Milter features except:
|
||||||
|
SMFIP_RCPT_REJ (report rejected recipients to the mail filter),
|
||||||
|
SMFIR_CHGFROM (replace sender, with optional ESMTP command parameters), and
|
||||||
|
SMFIR_ADDRCPT_PAR (add recipient, with optional ESMTP command parameters).
|
||||||
|
|
||||||
|
Specify "milter_protocol = 6" to enable all available Sendmail 8.14 and
|
||||||
|
earlier Milter features.
|
||||||
|
|
||||||
|
* Postfix 2.4 implements all Sendmail 8.13 Milter features.
|
||||||
|
|
||||||
|
Specify "milter_protocol = 4" to enable all available Sendmail 8.13 and
|
||||||
|
earlier Milter features.
|
||||||
|
|
||||||
|
* Postfix 2.3 implements all Sendmail 8.13 Milter features except requests to
|
||||||
|
replace the message body. Milter applications that request this unsupported
|
||||||
|
operation will log a warning like
|
||||||
|
|
||||||
application name: st_optionneg[134563840]: 0x3d does not fulfill action
|
application name: st_optionneg[134563840]: 0x3d does not fulfill action
|
||||||
requirements 0x1e
|
requirements 0x1e
|
||||||
|
|
||||||
The solution is to use Postfix version 2.4 or later.
|
The solution is to use Postfix version 2.4 or later.
|
||||||
|
|
||||||
* Postfix version 2.5 implements the Sendmail 8.14 features except:
|
Specify "milter_protocol = 4" to enable all available Sendmail 8.13 and
|
||||||
SMFIP_RCPT_REJ (report rejected recipients to the mail filter),
|
earlier Milter features.
|
||||||
SMFIR_CHGFROM (replace sender, with optional ESMTP command parameters), and
|
|
||||||
SMFIR_ADDRCPT_PAR (add recipient, with optional ESMTP command parameters).
|
|
||||||
|
|
||||||
* Most Milter configuration options are global. Future Postfix versions may
|
* Most Milter configuration options are global. Future Postfix versions may
|
||||||
support per-Milter timeouts, per-Milter error handling, etc.
|
support per-Milter timeouts, per-Milter error handling, etc.
|
||||||
|
@ -136,8 +136,8 @@ Each restriction list is evaluated from left to right until some restriction
|
|||||||
produces a result of PERMIT, REJECT or DEFER (try again later). The end of the
|
produces a result of PERMIT, REJECT or DEFER (try again later). The end of the
|
||||||
list is equivalent to a PERMIT result. By placing a PERMIT restriction before a
|
list is equivalent to a PERMIT result. By placing a PERMIT restriction before a
|
||||||
REJECT restriction you can make exceptions for specific clients or users. This
|
REJECT restriction you can make exceptions for specific clients or users. This
|
||||||
is called whitelisting; the last example above allows mail from local networks
|
is called whitelisting; the fourth example above allows mail from local
|
||||||
but otherwise rejects mail to arbitrary destinations.
|
networks but otherwise rejects mail to arbitrary destinations.
|
||||||
|
|
||||||
The table below summarizes the purpose of each SMTP access restriction list.
|
The table below summarizes the purpose of each SMTP access restriction list.
|
||||||
All lists use the exact same syntax; they differ only in the time of evaluation
|
All lists use the exact same syntax; they differ only in the time of evaluation
|
||||||
|
@ -11,17 +11,31 @@ instead, a new snapshot is released.
|
|||||||
The mail_release_date configuration parameter (format: yyyymmdd)
|
The mail_release_date configuration parameter (format: yyyymmdd)
|
||||||
specifies the release date of a stable release or snapshot release.
|
specifies the release date of a stable release or snapshot release.
|
||||||
|
|
||||||
Incompatibility with snapshot 20090426
|
Incompatibility with snapshot 20090428
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
The Postfix SMTP client no longer tries to use the obsolete SSLv2
|
The Postfix SMTP client(!) no longer tries to use the obsolete SSLv2
|
||||||
protocol by default, as this may prevent the use of modern SSL
|
protocol by default, as this may prevent the use of modern SSL
|
||||||
features. Lack of SSLv2 support should never be a problem, since
|
features. Lack of SSLv2 support should never be a problem, since
|
||||||
SSLv3 was defined in 1996, and TLSv1 in 2006. The Postfix SMTP
|
SSLv3 was defined in 1996, and TLSv1 in 2006, but you can undo the
|
||||||
server maintains SSLv2 support for backwards compatibility with
|
change by specifying empty main.cf values for smtp_tls_protocols
|
||||||
ancient clients.
|
and lmtp_tls_protocols. The Postfix SMTP server maintains SSLv2
|
||||||
|
support for backwards compatibility with ancient clients.
|
||||||
|
|
||||||
Major changes with snapshot 20090426
|
The default Milter protocol version is increased from 2 to 6; this
|
||||||
|
enables all available features up to and including Sendmail 8.14.0.
|
||||||
|
The new milter_protocol setting may break compatibility with older
|
||||||
|
Milter libraries or applications, and may cause Postfix to log
|
||||||
|
warning messages such as:
|
||||||
|
|
||||||
|
postfix/smtpd[21045]: warning: milter inet:host:port: can't read packet
|
||||||
|
header: Unknown error : 0
|
||||||
|
postfix/cleanup[15190]: warning: milter inet:host:port: can't read packet
|
||||||
|
header: Success
|
||||||
|
|
||||||
|
To restore compatibility, specify "milter_protocol = 2" in main.cf.
|
||||||
|
|
||||||
|
Major changes with snapshot 20090428
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
The following improvements have been made to the Milter implementation:
|
The following improvements have been made to the Milter implementation:
|
||||||
@ -31,9 +45,19 @@ The following improvements have been made to the Milter implementation:
|
|||||||
- Support for the {mail_host}, {mail_mailer}, {rcpt_host} and
|
- Support for the {mail_host}, {mail_mailer}, {rcpt_host} and
|
||||||
{rcpt_mailer} macros.
|
{rcpt_mailer} macros.
|
||||||
|
|
||||||
- Milters can now request rejected recipients with the SMFIP_RCPT_REJ
|
- Milter applications can now request rejected recipients with the
|
||||||
feature. In this case, {rcpt_mailer} is "error", {rcpt_host} is an
|
SMFIP_RCPT_REJ feature. Rejected recipients are reported with
|
||||||
enhanced status code, and {rcpt_addr} is descriptive text.
|
{rcpt_mailer} = "error", {rcpt_host} = enhanced status code, and
|
||||||
|
{rcpt_addr} = descriptive text. This feature requires "milter_protocol
|
||||||
|
= 6" or higher (default as of Postfix 2.6).
|
||||||
|
|
||||||
|
- Milters can now replace the envelope sender address with the
|
||||||
|
SMFIR_CHGFROM request, and can add recipients with SMFIR_ADDRCPT_PAR.
|
||||||
|
These implementations currently ignore ESMTP command parameters
|
||||||
|
with a warning message as follows:
|
||||||
|
|
||||||
|
postfix/cleanup[40629]: warning: 100B22B3293: cleanup_chg_from:
|
||||||
|
ignoring ESMTP arguments "whatever"
|
||||||
|
|
||||||
Incompatibility with snapshot 20090330
|
Incompatibility with snapshot 20090330
|
||||||
======================================
|
======================================
|
||||||
|
@ -2,6 +2,9 @@ Wish list:
|
|||||||
|
|
||||||
Remove this file from the stable release.
|
Remove this file from the stable release.
|
||||||
|
|
||||||
|
Need to sign delivery status notifications, to avoid surprises
|
||||||
|
when eventually people start enforcing DKIM etc. signatures.
|
||||||
|
|
||||||
"postconf -N" option to print user-defined parameter names
|
"postconf -N" option to print user-defined parameter names
|
||||||
(these have no defaults, since they exist only when
|
(these have no defaults, since they exist only when
|
||||||
specified in main.cf or with "-o name=value").
|
specified in main.cf or with "-o name=value").
|
||||||
@ -25,8 +28,8 @@ Wish list:
|
|||||||
if it contains any text that is special, then rfc822_externalize
|
if it contains any text that is special, then rfc822_externalize
|
||||||
the whole thing.
|
the whole thing.
|
||||||
|
|
||||||
SMTP server: make the server_addr and server_port port
|
SMTP server: make the server_addr and server_port available
|
||||||
available to policy server, Dovecot, and perhaps Milters.
|
to policy server, Dovecot, and perhaps Milters.
|
||||||
|
|
||||||
Maybe change maps_rbl_reject_code default to 521, and
|
Maybe change maps_rbl_reject_code default to 521, and
|
||||||
update wording in STRESS_README.
|
update wording in STRESS_README.
|
||||||
@ -88,7 +91,7 @@ Wish list:
|
|||||||
Combine smtpd_peer.c and qmqpd_peer.c into a single function
|
Combine smtpd_peer.c and qmqpd_peer.c into a single function
|
||||||
that produces a client context object, and provide attribute
|
that produces a client context object, and provide attribute
|
||||||
print/scan routines that pass these client context objects
|
print/scan routines that pass these client context objects
|
||||||
around. With this, we no longer have to update a multiple
|
around. With this, we no longer have to update multiple
|
||||||
pieces of code when a client attribute is added. Ditto for
|
pieces of code when a client attribute is added. Ditto for
|
||||||
SASL and TLS context.
|
SASL and TLS context.
|
||||||
|
|
||||||
@ -189,9 +192,9 @@ Wish list:
|
|||||||
Check that "UINT32 == unsigned int" choice is ok (i.e. LP64
|
Check that "UINT32 == unsigned int" choice is ok (i.e. LP64
|
||||||
UNIX).
|
UNIX).
|
||||||
|
|
||||||
Tempfail when a Milter application wants content access,
|
Tempfail when a Milter application tries to negotiate content
|
||||||
while it is configured in an SMTP server that runs before
|
access, while it is configured in an SMTP server that runs
|
||||||
the smtpd_proxy filter.
|
before the smtpd_proxy filter.
|
||||||
|
|
||||||
Log DSN original recipient when rejecting mail.
|
Log DSN original recipient when rejecting mail.
|
||||||
|
|
||||||
|
@ -442,12 +442,15 @@ in the "<a href="QSHAPE_README.html#hold_queue">hold" queue</a>, and is availabl
|
|||||||
|
|
||||||
<p> As Postfix is not built with the Sendmail libmilter library,
|
<p> As Postfix is not built with the Sendmail libmilter library,
|
||||||
you may need to configure the Milter protocol version that Postfix
|
you may need to configure the Milter protocol version that Postfix
|
||||||
should use. The default version is 2. Other protocol versions are
|
should use. The default version is 6 (before Postfix 2.6 the default
|
||||||
3 and 4 (Postfix 2.3 and later), and 6 (Postfix 2.5 an later). </p>
|
version is 2). </p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
# Postfix ≥ 2.6
|
||||||
|
<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 6
|
||||||
|
# 2.3 ≤ Postfix ≤ 2.5
|
||||||
<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 2
|
<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 2
|
||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@ -515,7 +518,9 @@ times. This is an inherent problem with before-queue filtering. </p>
|
|||||||
<h3><a name="macros">Sendmail macro emulation</a></h3>
|
<h3><a name="macros">Sendmail macro emulation</a></h3>
|
||||||
|
|
||||||
<p> Postfix emulates a limited number of Sendmail macros, as shown
|
<p> Postfix emulates a limited number of Sendmail macros, as shown
|
||||||
in the table. Different macros are available at different SMTP
|
in the table. Some macro values depend on whether a recipient is
|
||||||
|
rejected (rejected recipients are available on request by the Milter
|
||||||
|
application). Different macros are available at different SMTP
|
||||||
protocol stages (EOH = end-of-header, EOM = end-of-message); their
|
protocol stages (EOH = end-of-header, EOM = end-of-message); their
|
||||||
availability is not
|
availability is not
|
||||||
always the same as in Sendmail. See the <a
|
always the same as in Sendmail. See the <a
|
||||||
@ -552,15 +557,16 @@ address </td> </tr>
|
|||||||
<tr> <td> {client_connections} </td> <td> CONNECT </td> <td>
|
<tr> <td> {client_connections} </td> <td> CONNECT </td> <td>
|
||||||
Connection concurrency for this client </td> </tr>
|
Connection concurrency for this client </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_name} </td> <td> Always </td> <td> Client hostname,
|
<tr> <td> {client_name} </td> <td> Always </td> <td> Client hostname
|
||||||
"unknown" when lookup or verification fails </td> </tr>
|
<br> When address → name lookup or name → address
|
||||||
|
verification fails: "unknown" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_port} </td> <td> Always (Postfix ≥2.5) </td>
|
<tr> <td> {client_port} </td> <td> Always (Postfix ≥2.5) </td>
|
||||||
<td> Client TCP port </td> </tr>
|
<td> Client TCP port </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_ptr} </td> <td> CONNECT, HELO, MAIL, DATA </td>
|
<tr> <td> {client_ptr} </td> <td> CONNECT, HELO, MAIL, DATA </td>
|
||||||
<td> Client name from reverse lookup, "unknown" when lookup fails
|
<td> Client name from address → name lookup <br> When address
|
||||||
</td> </tr>
|
→ name lookup fails: "unknown" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {cert_issuer} </td> <td> HELO, MAIL, DATA, EOH, EOM </td> <td>
|
<tr> <td> {cert_issuer} </td> <td> HELO, MAIL, DATA, EOH, EOM </td> <td>
|
||||||
TLS client certificate issuer </td> </tr>
|
TLS client certificate issuer </td> </tr>
|
||||||
@ -587,14 +593,15 @@ Sender next-hop destination </td> </tr>
|
|||||||
<td> Sender mail delivery transport </td> </tr>
|
<td> Sender mail delivery transport </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_addr} </td> <td> RCPT </td> <td> Recipient address
|
<tr> <td> {rcpt_addr} </td> <td> RCPT </td> <td> Recipient address
|
||||||
</td> </tr>
|
<br> With rejected recipient: descriptive text </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_host} </td> <td> RCPT (Postfix ≥ 2.6) </td> <td>
|
<tr> <td> {rcpt_host} </td> <td> RCPT (Postfix ≥ 2.6) </td> <td>
|
||||||
Recipient next-hop destination </td> </tr>
|
Recipient next-hop destination <br> With rejected recpient: enhanced
|
||||||
|
status code </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_mailer} </td> <td> RCPT (Postfix ≥ 2.6) </td>
|
<tr> <td> {rcpt_mailer} </td> <td> RCPT (Postfix ≥ 2.6) </td>
|
||||||
<td> Recipient mail delivery transport, "error" for rejected
|
<td> Recipient mail delivery transport <br> With rejected recipient:
|
||||||
recipient. </td> </tr>
|
"error" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {tls_version} </td> <td> HELO, MAIL, DATA, EOH, EOM </td>
|
<tr> <td> {tls_version} </td> <td> HELO, MAIL, DATA, EOH, EOM </td>
|
||||||
<td> TLS protocol version </td> </tr>
|
<td> TLS protocol version </td> </tr>
|
||||||
@ -790,15 +797,8 @@ a discussion. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> Postfix version 2.3 introduces support for Sendmail 8
|
<li> <p> For Milter applications that are written in C, you need
|
||||||
milter protocol versions 2, 3 and 4; Postfix version 2.5 adds support
|
to use the Sendmail libmilter library. </p>
|
||||||
for protocol version 6, which is available with Sendmail 8.14.
|
|
||||||
Support for other protocol types or protocol versions may be added
|
|
||||||
later. </p>
|
|
||||||
|
|
||||||
<li> <p> For applications that are written in C, you need to use
|
|
||||||
the Sendmail libmilter library. A Postfix replacement may be
|
|
||||||
provided in the future. </p>
|
|
||||||
|
|
||||||
<li> <p> There are TWO sets of mail filters: filters that are used
|
<li> <p> There are TWO sets of mail filters: filters that are used
|
||||||
for SMTP mail only (specified with the <a href="postconf.5.html#smtpd_milters">smtpd_milters</a> parameter),
|
for SMTP mail only (specified with the <a href="postconf.5.html#smtpd_milters">smtpd_milters</a> parameter),
|
||||||
@ -806,6 +806,8 @@ and filters for non-SMTP mail (specified with the <a href="postconf.5.html#non_s
|
|||||||
parameter). The non-SMTP filters are primarily for local submissions.
|
parameter). The non-SMTP filters are primarily for local submissions.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> When mail is filtered by non-SMTP filters, the Postfix
|
<li> <p> When mail is filtered by non-SMTP filters, the Postfix
|
||||||
<a href="cleanup.8.html">cleanup(8)</a> server has to simulate the SMTP client CONNECT and
|
<a href="cleanup.8.html">cleanup(8)</a> server has to simulate the SMTP client CONNECT and
|
||||||
DISCONNECT events, and the SMTP client EHLO, MAIL FROM, RCPT TO and
|
DISCONNECT events, and the SMTP client EHLO, MAIL FROM, RCPT TO and
|
||||||
@ -815,6 +817,8 @@ commands. When a non-SMTP filter REJECTs or TEMPFAILs a recipient,
|
|||||||
Postfix will report a configuration error, and mail will stay in
|
Postfix will report a configuration error, and mail will stay in
|
||||||
the queue. </p>
|
the queue. </p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
<li> <p> Postfix currently does not apply content filters to mail
|
<li> <p> Postfix currently does not apply content filters to mail
|
||||||
that is forwarded or aliased internally, or to mail that is generated
|
that is forwarded or aliased internally, or to mail that is generated
|
||||||
internally such as bounces or Postmaster notifications. This may
|
internally such as bounces or Postmaster notifications. This may
|
||||||
@ -827,9 +831,37 @@ only to the SMTP command information; they have no access to the
|
|||||||
message header or body, and cannot make modifications to the message
|
message header or body, and cannot make modifications to the message
|
||||||
or to the envelope. </p>
|
or to the envelope. </p>
|
||||||
|
|
||||||
<li> <p> Postfix 2.3 does not support Milter requests to replace
|
<li> <p> Postfix version 2.6 implements all Sendmail 8.14 Milter
|
||||||
the message body. Milter applications that request this unsupported
|
features, except it ignores the optional ESMTP command parameters
|
||||||
operation will log a warning like this: </p>
|
with requests to replace the sender (SMFIR_CHGFROM), or to append
|
||||||
|
a recipient (SMFIR_ADDRCPT_PAR). When a Milter application supplies
|
||||||
|
ESMTP command parameters, these are logged as follows: </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
postfix/cleanup[40629]: warning: 100B22B3293: cleanup_chg_from: ignoring ESMTP arguments "<i>whatever</i>"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> Specify "<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 6" to enable all available Sendmail
|
||||||
|
8.14 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 implements all Sendmail 8.14 Milter
|
||||||
|
features except: SMFIP_RCPT_REJ (report rejected recipients to the
|
||||||
|
mail filter), SMFIR_CHGFROM (replace sender, with optional ESMTP
|
||||||
|
command parameters), and SMFIR_ADDRCPT_PAR (add recipient, with
|
||||||
|
optional ESMTP command parameters). </p>
|
||||||
|
|
||||||
|
<p> Specify "<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 6" to enable all available Sendmail
|
||||||
|
8.14 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix 2.4 implements all Sendmail 8.13 Milter features.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> Specify "<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 4" to enable all available Sendmail
|
||||||
|
8.13 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix 2.3 implements all Sendmail 8.13 Milter features
|
||||||
|
except requests to replace the message body. Milter applications
|
||||||
|
that request this unsupported operation will log a warning like
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
@ -839,11 +871,8 @@ operation will log a warning like this: </p>
|
|||||||
|
|
||||||
<p> The solution is to use Postfix version 2.4 or later. </p>
|
<p> The solution is to use Postfix version 2.4 or later. </p>
|
||||||
|
|
||||||
<li> <p> Postfix version 2.5 implements the Sendmail 8.14 features
|
<p> Specify "<a href="postconf.5.html#milter_protocol">milter_protocol</a> = 4" to enable all available Sendmail
|
||||||
except: SMFIP_RCPT_REJ (report rejected recipients to the mail
|
8.13 and earlier Milter features. </p>
|
||||||
filter), SMFIR_CHGFROM (replace sender, with optional ESMTP command
|
|
||||||
parameters), and SMFIR_ADDRCPT_PAR (add recipient, with optional
|
|
||||||
ESMTP command parameters).
|
|
||||||
|
|
||||||
<li> <p> Most Milter configuration options are global. Future Postfix
|
<li> <p> Most Milter configuration options are global. Future Postfix
|
||||||
versions may support per-Milter timeouts, per-Milter error handling,
|
versions may support per-Milter timeouts, per-Milter error handling,
|
||||||
|
@ -193,8 +193,8 @@ some restriction produces a result of PERMIT, REJECT or DEFER (try
|
|||||||
again later). The end of the list is equivalent to a PERMIT result.
|
again later). The end of the list is equivalent to a PERMIT result.
|
||||||
By placing a PERMIT restriction before a REJECT restriction you
|
By placing a PERMIT restriction before a REJECT restriction you
|
||||||
can make exceptions for specific clients or users. This is called
|
can make exceptions for specific clients or users. This is called
|
||||||
whitelisting; the last example above allows mail from local networks
|
whitelisting; the fourth example above allows mail from local
|
||||||
but otherwise rejects mail to arbitrary destinations. </p>
|
networks but otherwise rejects mail to arbitrary destinations. </p>
|
||||||
|
|
||||||
<p> The table below summarizes the purpose of each SMTP access
|
<p> The table below summarizes the purpose of each SMTP access
|
||||||
restriction list. All lists use the exact same syntax; they differ
|
restriction list. All lists use the exact same syntax; they differ
|
||||||
|
@ -154,13 +154,14 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
mail that does not arrive via the Postfix <a href="smtpd.8.html"><b>smtpd</b>(8)</a>
|
mail that does not arrive via the Postfix <a href="smtpd.8.html"><b>smtpd</b>(8)</a>
|
||||||
server.
|
server.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_protocol">milter_protocol</a> (2)</b>
|
<b><a href="postconf.5.html#milter_protocol">milter_protocol</a> (6)</b>
|
||||||
The mail filter protocol version and optional pro-
|
The mail filter protocol version and optional pro-
|
||||||
tocol extensions for communication with a Milter
|
tocol extensions for communication with a Milter
|
||||||
(mail filter) application.
|
application; prior to Postfix 2.6 the default pro-
|
||||||
|
tocol is 2.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_default_action">milter_default_action</a> (tempfail)</b>
|
<b><a href="postconf.5.html#milter_default_action">milter_default_action</a> (tempfail)</b>
|
||||||
The default action when a Milter (mail filter)
|
The default action when a Milter (mail filter)
|
||||||
application is unavailable or mis-configured.
|
application is unavailable or mis-configured.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_macro_daemon_name">milter_macro_daemon_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
<b><a href="postconf.5.html#milter_macro_daemon_name">milter_macro_daemon_name</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||||
@ -172,55 +173,55 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
cations.
|
cations.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_connect_timeout">milter_connect_timeout</a> (30s)</b>
|
<b><a href="postconf.5.html#milter_connect_timeout">milter_connect_timeout</a> (30s)</b>
|
||||||
The time limit for connecting to a Milter (mail
|
The time limit for connecting to a Milter (mail
|
||||||
filter) application, and for negotiating protocol
|
filter) application, and for negotiating protocol
|
||||||
options.
|
options.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_command_timeout">milter_command_timeout</a> (30s)</b>
|
<b><a href="postconf.5.html#milter_command_timeout">milter_command_timeout</a> (30s)</b>
|
||||||
The time limit for sending an SMTP command to a
|
The time limit for sending an SMTP command to a
|
||||||
Milter (mail filter) application, and for receiving
|
Milter (mail filter) application, and for receiving
|
||||||
the response.
|
the response.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_content_timeout">milter_content_timeout</a> (300s)</b>
|
<b><a href="postconf.5.html#milter_content_timeout">milter_content_timeout</a> (300s)</b>
|
||||||
The time limit for sending message content to a
|
The time limit for sending message content to a
|
||||||
Milter (mail filter) application, and for receiving
|
Milter (mail filter) application, and for receiving
|
||||||
the response.
|
the response.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_connect_macros">milter_connect_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_connect_macros">milter_connect_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after completion of an SMTP connec-
|
applications after completion of an SMTP connec-
|
||||||
tion.
|
tion.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_helo_macros">milter_helo_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_helo_macros">milter_helo_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after the SMTP HELO or EHLO command.
|
applications after the SMTP HELO or EHLO command.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_mail_macros">milter_mail_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_mail_macros">milter_mail_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after the SMTP MAIL FROM command.
|
applications after the SMTP MAIL FROM command.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_rcpt_macros">milter_rcpt_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_rcpt_macros">milter_rcpt_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after the SMTP RCPT TO command.
|
applications after the SMTP RCPT TO command.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_data_macros">milter_data_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_data_macros">milter_data_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to version 4 or higher
|
The macros that are sent to version 4 or higher
|
||||||
Milter (mail filter) applications after the SMTP
|
Milter (mail filter) applications after the SMTP
|
||||||
DATA command.
|
DATA command.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_unknown_command_macros">milter_unknown_command_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_unknown_command_macros">milter_unknown_command_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to version 3 or higher
|
The macros that are sent to version 3 or higher
|
||||||
Milter (mail filter) applications after an unknown
|
Milter (mail filter) applications after an unknown
|
||||||
SMTP command.
|
SMTP command.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_end_of_data_macros">milter_end_of_data_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_end_of_data_macros">milter_end_of_data_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after the message end-of-data.
|
applications after the message end-of-data.
|
||||||
|
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#milter_end_of_header_macros">milter_end_of_header_macros</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#milter_end_of_header_macros">milter_end_of_header_macros</a> (see 'postconf -d' output)</b>
|
||||||
The macros that are sent to Milter (mail filter)
|
The macros that are sent to Milter (mail filter)
|
||||||
applications after the end of the message header.
|
applications after the end of the message header.
|
||||||
|
|
||||||
<b>MIME PROCESSING CONTROLS</b>
|
<b>MIME PROCESSING CONTROLS</b>
|
||||||
@ -238,27 +239,27 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
will handle.
|
will handle.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#strict_8bitmime">strict_8bitmime</a> (no)</b>
|
<b><a href="postconf.5.html#strict_8bitmime">strict_8bitmime</a> (no)</b>
|
||||||
Enable both <a href="postconf.5.html#strict_7bit_headers">strict_7bit_headers</a> and strict_8bit-
|
Enable both <a href="postconf.5.html#strict_7bit_headers">strict_7bit_headers</a> and strict_8bit-
|
||||||
mime_body.
|
mime_body.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#strict_7bit_headers">strict_7bit_headers</a> (no)</b>
|
<b><a href="postconf.5.html#strict_7bit_headers">strict_7bit_headers</a> (no)</b>
|
||||||
Reject mail with 8-bit text in message headers.
|
Reject mail with 8-bit text in message headers.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#strict_8bitmime_body">strict_8bitmime_body</a> (no)</b>
|
<b><a href="postconf.5.html#strict_8bitmime_body">strict_8bitmime_body</a> (no)</b>
|
||||||
Reject 8-bit message body text without 8-bit MIME
|
Reject 8-bit message body text without 8-bit MIME
|
||||||
content encoding information.
|
content encoding information.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#strict_mime_encoding_domain">strict_mime_encoding_domain</a> (no)</b>
|
<b><a href="postconf.5.html#strict_mime_encoding_domain">strict_mime_encoding_domain</a> (no)</b>
|
||||||
Reject mail with invalid Content-Transfer-Encoding:
|
Reject mail with invalid Content-Transfer-Encoding:
|
||||||
information for the message/* or multipart/* MIME
|
information for the message/* or multipart/* MIME
|
||||||
content types.
|
content types.
|
||||||
|
|
||||||
Available in Postfix version 2.5 and later:
|
Available in Postfix version 2.5 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#detect_8bit_encoding_header">detect_8bit_encoding_header</a> (yes)</b>
|
<b><a href="postconf.5.html#detect_8bit_encoding_header">detect_8bit_encoding_header</a> (yes)</b>
|
||||||
Automatically detect 8BITMIME body content by look-
|
Automatically detect 8BITMIME body content by look-
|
||||||
ing at Content-Transfer-Encoding: message headers;
|
ing at Content-Transfer-Encoding: message headers;
|
||||||
historically, this behavior was hard-coded to be
|
historically, this behavior was hard-coded to be
|
||||||
"always on".
|
"always on".
|
||||||
|
|
||||||
<b>AUTOMATIC BCC RECIPIENT CONTROLS</b>
|
<b>AUTOMATIC BCC RECIPIENT CONTROLS</b>
|
||||||
@ -266,31 +267,31 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
mail enters the mail system:
|
mail enters the mail system:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#always_bcc">always_bcc</a> (empty)</b>
|
<b><a href="postconf.5.html#always_bcc">always_bcc</a> (empty)</b>
|
||||||
Optional address that receives a "blind carbon
|
Optional address that receives a "blind carbon
|
||||||
copy" of each message that is received by the Post-
|
copy" of each message that is received by the Post-
|
||||||
fix mail system.
|
fix mail system.
|
||||||
|
|
||||||
Available in Postfix version 2.1 and later:
|
Available in Postfix version 2.1 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#sender_bcc_maps">sender_bcc_maps</a> (empty)</b>
|
<b><a href="postconf.5.html#sender_bcc_maps">sender_bcc_maps</a> (empty)</b>
|
||||||
Optional BCC (blind carbon-copy) address lookup
|
Optional BCC (blind carbon-copy) address lookup
|
||||||
tables, indexed by sender address.
|
tables, indexed by sender address.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#recipient_bcc_maps">recipient_bcc_maps</a> (empty)</b>
|
<b><a href="postconf.5.html#recipient_bcc_maps">recipient_bcc_maps</a> (empty)</b>
|
||||||
Optional BCC (blind carbon-copy) address lookup
|
Optional BCC (blind carbon-copy) address lookup
|
||||||
tables, indexed by recipient address.
|
tables, indexed by recipient address.
|
||||||
|
|
||||||
<b>ADDRESS TRANSFORMATION CONTROLS</b>
|
<b>ADDRESS TRANSFORMATION CONTROLS</b>
|
||||||
Address rewriting is delegated to the <a href="trivial-rewrite.8.html"><b>trivial-rewrite</b>(8)</a>
|
Address rewriting is delegated to the <a href="trivial-rewrite.8.html"><b>trivial-rewrite</b>(8)</a>
|
||||||
daemon. The <a href="cleanup.8.html"><b>cleanup</b>(8)</a> server implements table driven
|
daemon. The <a href="cleanup.8.html"><b>cleanup</b>(8)</a> server implements table driven
|
||||||
address mapping.
|
address mapping.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#empty_address_recipient">empty_address_recipient</a> (MAILER-DAEMON)</b>
|
<b><a href="postconf.5.html#empty_address_recipient">empty_address_recipient</a> (MAILER-DAEMON)</b>
|
||||||
The recipient of mail addressed to the null
|
The recipient of mail addressed to the null
|
||||||
address.
|
address.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#canonical_maps">canonical_maps</a> (empty)</b>
|
<b><a href="postconf.5.html#canonical_maps">canonical_maps</a> (empty)</b>
|
||||||
Optional address mapping lookup tables for message
|
Optional address mapping lookup tables for message
|
||||||
headers and envelopes.
|
headers and envelopes.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#recipient_canonical_maps">recipient_canonical_maps</a> (empty)</b>
|
<b><a href="postconf.5.html#recipient_canonical_maps">recipient_canonical_maps</a> (empty)</b>
|
||||||
@ -301,49 +302,49 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
Optional address mapping lookup tables for envelope
|
Optional address mapping lookup tables for envelope
|
||||||
and header sender addresses.
|
and header sender addresses.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#masquerade_classes">masquerade_classes</a> (envelope_sender, header_sender,</b>
|
<b><a href="postconf.5.html#masquerade_classes">masquerade_classes</a> (envelope_sender, header_sender,</b>
|
||||||
<b>header_recipient)</b>
|
<b>header_recipient)</b>
|
||||||
What addresses are subject to address masquerading.
|
What addresses are subject to address masquerading.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#masquerade_domains">masquerade_domains</a> (empty)</b>
|
<b><a href="postconf.5.html#masquerade_domains">masquerade_domains</a> (empty)</b>
|
||||||
Optional list of domains whose subdomain structure
|
Optional list of domains whose subdomain structure
|
||||||
will be stripped off in email addresses.
|
will be stripped off in email addresses.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#masquerade_exceptions">masquerade_exceptions</a> (empty)</b>
|
<b><a href="postconf.5.html#masquerade_exceptions">masquerade_exceptions</a> (empty)</b>
|
||||||
Optional list of user names that are not subjected
|
Optional list of user names that are not subjected
|
||||||
to address masquerading, even when their address
|
to address masquerading, even when their address
|
||||||
matches $<a href="postconf.5.html#masquerade_domains">masquerade_domains</a>.
|
matches $<a href="postconf.5.html#masquerade_domains">masquerade_domains</a>.
|
||||||
|
|
||||||
<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 exten-
|
What address lookup tables copy an address exten-
|
||||||
sion from the lookup key to the lookup result.
|
sion from the lookup key to the lookup result.
|
||||||
|
|
||||||
Available before Postfix version 2.0:
|
Available before Postfix version 2.0:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#virtual_maps">virtual_maps</a> (empty)</b>
|
<b><a href="postconf.5.html#virtual_maps">virtual_maps</a> (empty)</b>
|
||||||
Optional lookup tables with a) names of domains for
|
Optional lookup tables with a) names of domains for
|
||||||
which all addresses are aliased to addresses in
|
which all addresses are aliased to addresses in
|
||||||
other local or remote domains, and b) addresses
|
other local or remote domains, and b) addresses
|
||||||
that are aliased to addresses in other local or
|
that are aliased to addresses in other local or
|
||||||
remote domains.
|
remote domains.
|
||||||
|
|
||||||
Available in Postfix version 2.0 and later:
|
Available in Postfix version 2.0 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> ($<a href="postconf.5.html#virtual_maps">virtual_maps</a>)</b>
|
<b><a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> ($<a href="postconf.5.html#virtual_maps">virtual_maps</a>)</b>
|
||||||
Optional lookup tables that alias specific mail
|
Optional lookup tables that alias specific mail
|
||||||
addresses or domains to other local or remote
|
addresses or domains to other local or remote
|
||||||
address.
|
address.
|
||||||
|
|
||||||
Available in Postfix version 2.2 and later:
|
Available in Postfix version 2.2 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#canonical_classes">canonical_classes</a> (envelope_sender, envelope_recipient,</b>
|
<b><a href="postconf.5.html#canonical_classes">canonical_classes</a> (envelope_sender, envelope_recipient,</b>
|
||||||
<b>header_sender, header_recipient)</b>
|
<b>header_sender, header_recipient)</b>
|
||||||
What addresses are subject to <a href="postconf.5.html#canonical_maps">canonical_maps</a>
|
What addresses are subject to <a href="postconf.5.html#canonical_maps">canonical_maps</a>
|
||||||
address mapping.
|
address mapping.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#recipient_canonical_classes">recipient_canonical_classes</a> (envelope_recipient,</b>
|
<b><a href="postconf.5.html#recipient_canonical_classes">recipient_canonical_classes</a> (envelope_recipient,</b>
|
||||||
<b>header_recipient)</b>
|
<b>header_recipient)</b>
|
||||||
What addresses are subject to <a href="postconf.5.html#recipient_canonical_maps">recipient_canoni</a>-
|
What addresses are subject to <a href="postconf.5.html#recipient_canonical_maps">recipient_canoni</a>-
|
||||||
<a href="postconf.5.html#recipient_canonical_maps">cal_maps</a> address mapping.
|
<a href="postconf.5.html#recipient_canonical_maps">cal_maps</a> address mapping.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#sender_canonical_classes">sender_canonical_classes</a> (envelope_sender, header_sender)</b>
|
<b><a href="postconf.5.html#sender_canonical_classes">sender_canonical_classes</a> (envelope_sender, header_sender)</b>
|
||||||
@ -351,15 +352,15 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
address mapping.
|
address mapping.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#remote_header_rewrite_domain">remote_header_rewrite_domain</a> (empty)</b>
|
<b><a href="postconf.5.html#remote_header_rewrite_domain">remote_header_rewrite_domain</a> (empty)</b>
|
||||||
Don't rewrite message headers from remote clients
|
Don't rewrite message headers from remote clients
|
||||||
at all when this parameter is empty; otherwise, re-
|
at all when this parameter is empty; otherwise, re-
|
||||||
write message headers and append the specified
|
write message headers and append the specified
|
||||||
domain name to incomplete addresses.
|
domain name to incomplete addresses.
|
||||||
|
|
||||||
<b>RESOURCE AND RATE CONTROLS</b>
|
<b>RESOURCE AND RATE CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#duplicate_filter_limit">duplicate_filter_limit</a> (1000)</b>
|
<b><a href="postconf.5.html#duplicate_filter_limit">duplicate_filter_limit</a> (1000)</b>
|
||||||
The maximal number of addresses remembered by the
|
The maximal number of addresses remembered by the
|
||||||
address duplicate filter for <a href="aliases.5.html"><b>aliases</b>(5)</a> or <a href="virtual.5.html"><b>vir-</b></a>
|
address duplicate filter for <a href="aliases.5.html"><b>aliases</b>(5)</a> or <a href="virtual.5.html"><b>vir-</b></a>
|
||||||
<a href="virtual.5.html"><b>tual</b>(5)</a> alias expansion, or for <a href="showq.8.html"><b>showq</b>(8)</a> queue dis-
|
<a href="virtual.5.html"><b>tual</b>(5)</a> alias expansion, or for <a href="showq.8.html"><b>showq</b>(8)</a> queue dis-
|
||||||
plays.
|
plays.
|
||||||
|
|
||||||
@ -368,16 +369,16 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
message header.
|
message header.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#hopcount_limit">hopcount_limit</a> (50)</b>
|
<b><a href="postconf.5.html#hopcount_limit">hopcount_limit</a> (50)</b>
|
||||||
The maximal number of Received: message headers
|
The maximal number of Received: message headers
|
||||||
that is allowed in the primary message headers.
|
that is allowed in the primary message headers.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#in_flow_delay">in_flow_delay</a> (1s)</b>
|
<b><a href="postconf.5.html#in_flow_delay">in_flow_delay</a> (1s)</b>
|
||||||
Time to pause before accepting a new message, when
|
Time to pause before accepting a new message, when
|
||||||
the message arrival rate exceeds the message deliv-
|
the message arrival rate exceeds the message deliv-
|
||||||
ery rate.
|
ery rate.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#message_size_limit">message_size_limit</a> (10240000)</b>
|
<b><a href="postconf.5.html#message_size_limit">message_size_limit</a> (10240000)</b>
|
||||||
The maximal size in bytes of a message, including
|
The maximal size in bytes of a message, including
|
||||||
envelope information.
|
envelope information.
|
||||||
|
|
||||||
Available in Postfix version 2.0 and later:
|
Available in Postfix version 2.0 and later:
|
||||||
@ -395,35 +396,35 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
will handle.
|
will handle.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#queue_file_attribute_count_limit">queue_file_attribute_count_limit</a> (100)</b>
|
<b><a href="postconf.5.html#queue_file_attribute_count_limit">queue_file_attribute_count_limit</a> (100)</b>
|
||||||
The maximal number of (name=value) attributes that
|
The maximal number of (name=value) attributes that
|
||||||
may be stored in a Postfix queue file.
|
may be stored in a Postfix queue file.
|
||||||
|
|
||||||
Available in Postfix version 2.1 and later:
|
Available in Postfix version 2.1 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#virtual_alias_expansion_limit">virtual_alias_expansion_limit</a> (1000)</b>
|
<b><a href="postconf.5.html#virtual_alias_expansion_limit">virtual_alias_expansion_limit</a> (1000)</b>
|
||||||
The maximal number of addresses that virtual alias
|
The maximal number of addresses that virtual alias
|
||||||
expansion produces from each original recipient.
|
expansion produces from each original recipient.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#virtual_alias_recursion_limit">virtual_alias_recursion_limit</a> (1000)</b>
|
<b><a href="postconf.5.html#virtual_alias_recursion_limit">virtual_alias_recursion_limit</a> (1000)</b>
|
||||||
The maximal nesting depth of virtual alias expan-
|
The maximal nesting depth of virtual alias expan-
|
||||||
sion.
|
sion.
|
||||||
|
|
||||||
<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
|
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
||||||
<a href="master.5.html">master.cf</a> configuration files.
|
<a href="master.5.html">master.cf</a> configuration 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
|
How much time a Postfix daemon process may take to
|
||||||
handle a request before it is terminated by a
|
handle a request before it is terminated by a
|
||||||
built-in watchdog timer.
|
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
|
The maximal number of digits after the decimal
|
||||||
point when logging sub-second delay values.
|
point when logging sub-second delay values.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#delay_warning_time">delay_warning_time</a> (0h)</b>
|
<b><a href="postconf.5.html#delay_warning_time">delay_warning_time</a> (0h)</b>
|
||||||
The time after which the sender receives the mes-
|
The time after which the sender receives the mes-
|
||||||
sage headers of mail that is still queued.
|
sage headers of mail that is still queued.
|
||||||
|
|
||||||
<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>
|
||||||
@ -431,13 +432,13 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
over an internal communication channel.
|
over an internal communication channel.
|
||||||
|
|
||||||
<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
|
The maximum amount of time that an idle Postfix
|
||||||
daemon process waits for an incoming connection
|
daemon process waits for an incoming connection
|
||||||
before terminating voluntarily.
|
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>
|
||||||
The maximal number of incoming connections that a
|
The maximal number of incoming connections that a
|
||||||
Postfix daemon process will service before termi-
|
Postfix daemon process will service before termi-
|
||||||
nating voluntarily.
|
nating voluntarily.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#myhostname">myhostname</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#myhostname">myhostname</a> (see 'postconf -d' output)</b>
|
||||||
@ -445,19 +446,19 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
|
|
||||||
<b><a href="postconf.5.html#myorigin">myorigin</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
<b><a href="postconf.5.html#myorigin">myorigin</a> ($<a href="postconf.5.html#myhostname">myhostname</a>)</b>
|
||||||
The domain name that locally-posted mail appears to
|
The domain name that locally-posted mail appears to
|
||||||
come from, and that locally posted mail is deliv-
|
come from, and that locally posted mail is deliv-
|
||||||
ered to.
|
ered 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>
|
||||||
The process ID of a Postfix command or daemon
|
The process ID of a Postfix command or daemon
|
||||||
process.
|
process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b>
|
<b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b>
|
||||||
The process name of a Postfix command or daemon
|
The process name of a Postfix command or daemon
|
||||||
process.
|
process.
|
||||||
|
|
||||||
<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 direc-
|
The location of the Postfix top-level queue direc-
|
||||||
tory.
|
tory.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#soft_bounce">soft_bounce</a> (no)</b>
|
<b><a href="postconf.5.html#soft_bounce">soft_bounce</a> (no)</b>
|
||||||
@ -468,14 +469,14 @@ CLEANUP(8) CLEANUP(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
|
The mail system name that is prepended to the
|
||||||
process name in syslog records, so that "smtpd"
|
process name in syslog records, so that "smtpd"
|
||||||
becomes, for example, "postfix/smtpd".
|
becomes, for example, "postfix/smtpd".
|
||||||
|
|
||||||
Available in Postfix version 2.1 and later:
|
Available in Postfix version 2.1 and later:
|
||||||
|
|
||||||
<b><a href="postconf.5.html#enable_original_recipient">enable_original_recipient</a> (yes)</b>
|
<b><a href="postconf.5.html#enable_original_recipient">enable_original_recipient</a> (yes)</b>
|
||||||
Enable support for the X-Original-To message
|
Enable support for the X-Original-To message
|
||||||
header.
|
header.
|
||||||
|
|
||||||
<b>FILES</b>
|
<b>FILES</b>
|
||||||
@ -499,7 +500,7 @@ CLEANUP(8) CLEANUP(8)
|
|||||||
<a href="CONTENT_INSPECTION_README.html">CONTENT_INSPECTION_README</a> content inspection
|
<a href="CONTENT_INSPECTION_README.html">CONTENT_INSPECTION_README</a> content inspection
|
||||||
|
|
||||||
<b>LICENSE</b>
|
<b>LICENSE</b>
|
||||||
The Secure Mailer license must be distributed with this
|
The Secure Mailer license must be distributed with this
|
||||||
software.
|
software.
|
||||||
|
|
||||||
<b>AUTHOR(S)</b>
|
<b>AUTHOR(S)</b>
|
||||||
|
@ -308,10 +308,6 @@ LOCAL(8) LOCAL(8)
|
|||||||
<b>ward</b>+<i>foo</i> or in ~<i>name</i>/.<b>forward</b>, to the mailbox owned by the
|
<b>ward</b>+<i>foo</i> or in ~<i>name</i>/.<b>forward</b>, to the mailbox owned by the
|
||||||
user <i>name</i>, or it is sent back as undeliverable.
|
user <i>name</i>, or it is sent back as undeliverable.
|
||||||
|
|
||||||
In all cases the <a href="local.8.html"><b>local</b>(8)</a> daemon prepends an optional
|
|
||||||
`<b>Delivered-To:</b> header line with the final recipient
|
|
||||||
address.
|
|
||||||
|
|
||||||
<b>DELIVERY RIGHTS</b>
|
<b>DELIVERY RIGHTS</b>
|
||||||
Deliveries to external files and external commands are
|
Deliveries to external files and external commands are
|
||||||
made with the rights of the receiving user on whose behalf
|
made with the rights of the receiving user on whose behalf
|
||||||
|
@ -5697,10 +5697,11 @@ for a list of available macro names and their meanings. </p>
|
|||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="milter_protocol">milter_protocol</a>
|
<DT><b><a name="milter_protocol">milter_protocol</a>
|
||||||
(default: 2)</b></DT><DD>
|
(default: 6)</b></DT><DD>
|
||||||
|
|
||||||
<p> The mail filter protocol version and optional protocol extensions
|
<p> The mail filter protocol version and optional protocol extensions
|
||||||
for communication with a Milter (mail filter) application. Postfix
|
for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
the default protocol is 2. Postfix
|
||||||
sends this version number during the initial protocol handshake.
|
sends this version number during the initial protocol handshake.
|
||||||
It should match the version number that is expected by the mail
|
It should match the version number that is expected by the mail
|
||||||
filter application (or by its Milter library). </p>
|
filter application (or by its Milter library). </p>
|
||||||
@ -5710,14 +5711,15 @@ filter application (or by its Milter library). </p>
|
|||||||
<dl compact>
|
<dl compact>
|
||||||
|
|
||||||
<dt>2</dt> <dd>Use Sendmail 8 mail filter protocol version 2 (default
|
<dt>2</dt> <dd>Use Sendmail 8 mail filter protocol version 2 (default
|
||||||
as of Sendmail version 8.11).</dd>
|
with Sendmail version 8.11 .. 8.13 and Postfix version 2.3 ..
|
||||||
|
2.5).</dd>
|
||||||
|
|
||||||
<dt>3</dt> <dd>Use Sendmail 8 mail filter protocol version 3.</dd>
|
<dt>3</dt> <dd>Use Sendmail 8 mail filter protocol version 3.</dd>
|
||||||
|
|
||||||
<dt>4</dt> <dd>Use Sendmail 8 mail filter protocol version 4.</dd>
|
<dt>4</dt> <dd>Use Sendmail 8 mail filter protocol version 4.</dd>
|
||||||
|
|
||||||
<dt>6</dt> <dd>Use Sendmail 8 mail filter protocol version 6 (default
|
<dt>6</dt> <dd>Use Sendmail 8 mail filter protocol version 6 (default
|
||||||
as of Sendmail version 8.14).</dd>
|
with Sendmail version 8.14 and Postfix version 2.6).</dd>
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3162,9 +3162,10 @@ after the SMTP MAIL FROM command. See MILTER_README
|
|||||||
for a list of available macro names and their meanings.
|
for a list of available macro names and their meanings.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.3 and later.
|
This feature is available in Postfix 2.3 and later.
|
||||||
.SH milter_protocol (default: 2)
|
.SH milter_protocol (default: 6)
|
||||||
The mail filter protocol version and optional protocol extensions
|
The mail filter protocol version and optional protocol extensions
|
||||||
for communication with a Milter (mail filter) application. Postfix
|
for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
the default protocol is 2. Postfix
|
||||||
sends this version number during the initial protocol handshake.
|
sends this version number during the initial protocol handshake.
|
||||||
It should match the version number that is expected by the mail
|
It should match the version number that is expected by the mail
|
||||||
filter application (or by its Milter library).
|
filter application (or by its Milter library).
|
||||||
@ -3172,14 +3173,15 @@ filter application (or by its Milter library).
|
|||||||
Protocol versions:
|
Protocol versions:
|
||||||
.IP "2"
|
.IP "2"
|
||||||
Use Sendmail 8 mail filter protocol version 2 (default
|
Use Sendmail 8 mail filter protocol version 2 (default
|
||||||
as of Sendmail version 8.11).
|
with Sendmail version 8.11 .. 8.13 and Postfix version 2.3 ..
|
||||||
|
2.5).
|
||||||
.IP "3"
|
.IP "3"
|
||||||
Use Sendmail 8 mail filter protocol version 3.
|
Use Sendmail 8 mail filter protocol version 3.
|
||||||
.IP "4"
|
.IP "4"
|
||||||
Use Sendmail 8 mail filter protocol version 4.
|
Use Sendmail 8 mail filter protocol version 4.
|
||||||
.IP "6"
|
.IP "6"
|
||||||
Use Sendmail 8 mail filter protocol version 6 (default
|
Use Sendmail 8 mail filter protocol version 6 (default
|
||||||
as of Sendmail version 8.14).
|
with Sendmail version 8.14 and Postfix version 2.6).
|
||||||
.PP
|
.PP
|
||||||
Protocol extensions:
|
Protocol extensions:
|
||||||
.IP "no_header_reply"
|
.IP "no_header_reply"
|
||||||
|
@ -144,9 +144,10 @@ see the MILTER_README document.
|
|||||||
.IP "\fBnon_smtpd_milters (empty)\fR"
|
.IP "\fBnon_smtpd_milters (empty)\fR"
|
||||||
A list of Milter (mail filter) applications for new mail that
|
A list of Milter (mail filter) applications for new mail that
|
||||||
does not arrive via the Postfix \fBsmtpd\fR(8) server.
|
does not arrive via the Postfix \fBsmtpd\fR(8) server.
|
||||||
.IP "\fBmilter_protocol (2)\fR"
|
.IP "\fBmilter_protocol (6)\fR"
|
||||||
The mail filter protocol version and optional protocol extensions
|
The mail filter protocol version and optional protocol extensions
|
||||||
for communication with a Milter (mail filter) application.
|
for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
the default protocol is 2.
|
||||||
.IP "\fBmilter_default_action (tempfail)\fR"
|
.IP "\fBmilter_default_action (tempfail)\fR"
|
||||||
The default action when a Milter (mail filter) application is
|
The default action when a Milter (mail filter) application is
|
||||||
unavailable or mis-configured.
|
unavailable or mis-configured.
|
||||||
|
@ -320,10 +320,6 @@ or to the alias \fIname\fR, to the destinations listed in
|
|||||||
~\fIname\fR/.\fBforward\fR+\fIfoo\fR or in ~\fIname\fR/.\fBforward\fR,
|
~\fIname\fR/.\fBforward\fR+\fIfoo\fR or in ~\fIname\fR/.\fBforward\fR,
|
||||||
to the mailbox owned by the user \fIname\fR, or it is sent back as
|
to the mailbox owned by the user \fIname\fR, or it is sent back as
|
||||||
undeliverable.
|
undeliverable.
|
||||||
|
|
||||||
In all cases the \fBlocal\fR(8) daemon prepends an optional
|
|
||||||
`\fBDelivered-To:\fR header line with the final recipient
|
|
||||||
address.
|
|
||||||
.SH "DELIVERY RIGHTS"
|
.SH "DELIVERY RIGHTS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -200,9 +200,10 @@ mail is queued. For details see the MILTER_README document.
|
|||||||
.IP "\fBsmtpd_milters (empty)\fR"
|
.IP "\fBsmtpd_milters (empty)\fR"
|
||||||
A list of Milter (mail filter) applications for new mail that
|
A list of Milter (mail filter) applications for new mail that
|
||||||
arrives via the Postfix \fBsmtpd\fR(8) server.
|
arrives via the Postfix \fBsmtpd\fR(8) server.
|
||||||
.IP "\fBmilter_protocol (2)\fR"
|
.IP "\fBmilter_protocol (6)\fR"
|
||||||
The mail filter protocol version and optional protocol extensions
|
The mail filter protocol version and optional protocol extensions
|
||||||
for communication with a Milter (mail filter) application.
|
for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
the default protocol is 2.
|
||||||
.IP "\fBmilter_default_action (tempfail)\fR"
|
.IP "\fBmilter_default_action (tempfail)\fR"
|
||||||
The default action when a Milter (mail filter) application is
|
The default action when a Milter (mail filter) application is
|
||||||
unavailable or mis-configured.
|
unavailable or mis-configured.
|
||||||
|
@ -442,12 +442,15 @@ in the "hold" queue, and is available with Postfix 2.6 or later.
|
|||||||
|
|
||||||
<p> As Postfix is not built with the Sendmail libmilter library,
|
<p> As Postfix is not built with the Sendmail libmilter library,
|
||||||
you may need to configure the Milter protocol version that Postfix
|
you may need to configure the Milter protocol version that Postfix
|
||||||
should use. The default version is 2. Other protocol versions are
|
should use. The default version is 6 (before Postfix 2.6 the default
|
||||||
3 and 4 (Postfix 2.3 and later), and 6 (Postfix 2.5 an later). </p>
|
version is 2). </p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
/etc/postfix/main.cf:
|
/etc/postfix/main.cf:
|
||||||
|
# Postfix ≥ 2.6
|
||||||
|
milter_protocol = 6
|
||||||
|
# 2.3 ≤ Postfix ≤ 2.5
|
||||||
milter_protocol = 2
|
milter_protocol = 2
|
||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
@ -515,7 +518,9 @@ times. This is an inherent problem with before-queue filtering. </p>
|
|||||||
<h3><a name="macros">Sendmail macro emulation</a></h3>
|
<h3><a name="macros">Sendmail macro emulation</a></h3>
|
||||||
|
|
||||||
<p> Postfix emulates a limited number of Sendmail macros, as shown
|
<p> Postfix emulates a limited number of Sendmail macros, as shown
|
||||||
in the table. Different macros are available at different SMTP
|
in the table. Some macro values depend on whether a recipient is
|
||||||
|
rejected (rejected recipients are available on request by the Milter
|
||||||
|
application). Different macros are available at different SMTP
|
||||||
protocol stages (EOH = end-of-header, EOM = end-of-message); their
|
protocol stages (EOH = end-of-header, EOM = end-of-message); their
|
||||||
availability is not
|
availability is not
|
||||||
always the same as in Sendmail. See the <a
|
always the same as in Sendmail. See the <a
|
||||||
@ -552,15 +557,16 @@ address </td> </tr>
|
|||||||
<tr> <td> {client_connections} </td> <td> CONNECT </td> <td>
|
<tr> <td> {client_connections} </td> <td> CONNECT </td> <td>
|
||||||
Connection concurrency for this client </td> </tr>
|
Connection concurrency for this client </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_name} </td> <td> Always </td> <td> Client hostname,
|
<tr> <td> {client_name} </td> <td> Always </td> <td> Client hostname
|
||||||
"unknown" when lookup or verification fails </td> </tr>
|
<br> When address → name lookup or name → address
|
||||||
|
verification fails: "unknown" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_port} </td> <td> Always (Postfix ≥2.5) </td>
|
<tr> <td> {client_port} </td> <td> Always (Postfix ≥2.5) </td>
|
||||||
<td> Client TCP port </td> </tr>
|
<td> Client TCP port </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {client_ptr} </td> <td> CONNECT, HELO, MAIL, DATA </td>
|
<tr> <td> {client_ptr} </td> <td> CONNECT, HELO, MAIL, DATA </td>
|
||||||
<td> Client name from reverse lookup, "unknown" when lookup fails
|
<td> Client name from address → name lookup <br> When address
|
||||||
</td> </tr>
|
→ name lookup fails: "unknown" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {cert_issuer} </td> <td> HELO, MAIL, DATA, EOH, EOM </td> <td>
|
<tr> <td> {cert_issuer} </td> <td> HELO, MAIL, DATA, EOH, EOM </td> <td>
|
||||||
TLS client certificate issuer </td> </tr>
|
TLS client certificate issuer </td> </tr>
|
||||||
@ -587,14 +593,15 @@ Sender next-hop destination </td> </tr>
|
|||||||
<td> Sender mail delivery transport </td> </tr>
|
<td> Sender mail delivery transport </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_addr} </td> <td> RCPT </td> <td> Recipient address
|
<tr> <td> {rcpt_addr} </td> <td> RCPT </td> <td> Recipient address
|
||||||
</td> </tr>
|
<br> With rejected recipient: descriptive text </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_host} </td> <td> RCPT (Postfix ≥ 2.6) </td> <td>
|
<tr> <td> {rcpt_host} </td> <td> RCPT (Postfix ≥ 2.6) </td> <td>
|
||||||
Recipient next-hop destination </td> </tr>
|
Recipient next-hop destination <br> With rejected recpient: enhanced
|
||||||
|
status code </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {rcpt_mailer} </td> <td> RCPT (Postfix ≥ 2.6) </td>
|
<tr> <td> {rcpt_mailer} </td> <td> RCPT (Postfix ≥ 2.6) </td>
|
||||||
<td> Recipient mail delivery transport, "error" for rejected
|
<td> Recipient mail delivery transport <br> With rejected recipient:
|
||||||
recipient. </td> </tr>
|
"error" </td> </tr>
|
||||||
|
|
||||||
<tr> <td> {tls_version} </td> <td> HELO, MAIL, DATA, EOH, EOM </td>
|
<tr> <td> {tls_version} </td> <td> HELO, MAIL, DATA, EOH, EOM </td>
|
||||||
<td> TLS protocol version </td> </tr>
|
<td> TLS protocol version </td> </tr>
|
||||||
@ -790,15 +797,8 @@ a discussion. </p>
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> Postfix version 2.3 introduces support for Sendmail 8
|
<li> <p> For Milter applications that are written in C, you need
|
||||||
milter protocol versions 2, 3 and 4; Postfix version 2.5 adds support
|
to use the Sendmail libmilter library. </p>
|
||||||
for protocol version 6, which is available with Sendmail 8.14.
|
|
||||||
Support for other protocol types or protocol versions may be added
|
|
||||||
later. </p>
|
|
||||||
|
|
||||||
<li> <p> For applications that are written in C, you need to use
|
|
||||||
the Sendmail libmilter library. A Postfix replacement may be
|
|
||||||
provided in the future. </p>
|
|
||||||
|
|
||||||
<li> <p> There are TWO sets of mail filters: filters that are used
|
<li> <p> There are TWO sets of mail filters: filters that are used
|
||||||
for SMTP mail only (specified with the smtpd_milters parameter),
|
for SMTP mail only (specified with the smtpd_milters parameter),
|
||||||
@ -806,6 +806,8 @@ and filters for non-SMTP mail (specified with the non_smtpd_milters
|
|||||||
parameter). The non-SMTP filters are primarily for local submissions.
|
parameter). The non-SMTP filters are primarily for local submissions.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
<li> <p> When mail is filtered by non-SMTP filters, the Postfix
|
<li> <p> When mail is filtered by non-SMTP filters, the Postfix
|
||||||
cleanup(8) server has to simulate the SMTP client CONNECT and
|
cleanup(8) server has to simulate the SMTP client CONNECT and
|
||||||
DISCONNECT events, and the SMTP client EHLO, MAIL FROM, RCPT TO and
|
DISCONNECT events, and the SMTP client EHLO, MAIL FROM, RCPT TO and
|
||||||
@ -815,6 +817,8 @@ commands. When a non-SMTP filter REJECTs or TEMPFAILs a recipient,
|
|||||||
Postfix will report a configuration error, and mail will stay in
|
Postfix will report a configuration error, and mail will stay in
|
||||||
the queue. </p>
|
the queue. </p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
<li> <p> Postfix currently does not apply content filters to mail
|
<li> <p> Postfix currently does not apply content filters to mail
|
||||||
that is forwarded or aliased internally, or to mail that is generated
|
that is forwarded or aliased internally, or to mail that is generated
|
||||||
internally such as bounces or Postmaster notifications. This may
|
internally such as bounces or Postmaster notifications. This may
|
||||||
@ -827,9 +831,37 @@ only to the SMTP command information; they have no access to the
|
|||||||
message header or body, and cannot make modifications to the message
|
message header or body, and cannot make modifications to the message
|
||||||
or to the envelope. </p>
|
or to the envelope. </p>
|
||||||
|
|
||||||
<li> <p> Postfix 2.3 does not support Milter requests to replace
|
<li> <p> Postfix version 2.6 implements all Sendmail 8.14 Milter
|
||||||
the message body. Milter applications that request this unsupported
|
features, except it ignores the optional ESMTP command parameters
|
||||||
operation will log a warning like this: </p>
|
with requests to replace the sender (SMFIR_CHGFROM), or to append
|
||||||
|
a recipient (SMFIR_ADDRCPT_PAR). When a Milter application supplies
|
||||||
|
ESMTP command parameters, these are logged as follows: </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
postfix/cleanup[40629]: warning: 100B22B3293: cleanup_chg_from: ignoring ESMTP arguments "<i>whatever</i>"
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> Specify "milter_protocol = 6" to enable all available Sendmail
|
||||||
|
8.14 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix version 2.5 implements all Sendmail 8.14 Milter
|
||||||
|
features except: SMFIP_RCPT_REJ (report rejected recipients to the
|
||||||
|
mail filter), SMFIR_CHGFROM (replace sender, with optional ESMTP
|
||||||
|
command parameters), and SMFIR_ADDRCPT_PAR (add recipient, with
|
||||||
|
optional ESMTP command parameters). </p>
|
||||||
|
|
||||||
|
<p> Specify "milter_protocol = 6" to enable all available Sendmail
|
||||||
|
8.14 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix 2.4 implements all Sendmail 8.13 Milter features.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> Specify "milter_protocol = 4" to enable all available Sendmail
|
||||||
|
8.13 and earlier Milter features. </p>
|
||||||
|
|
||||||
|
<li> <p> Postfix 2.3 implements all Sendmail 8.13 Milter features
|
||||||
|
except requests to replace the message body. Milter applications
|
||||||
|
that request this unsupported operation will log a warning like
|
||||||
|
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<pre>
|
<pre>
|
||||||
@ -839,11 +871,8 @@ operation will log a warning like this: </p>
|
|||||||
|
|
||||||
<p> The solution is to use Postfix version 2.4 or later. </p>
|
<p> The solution is to use Postfix version 2.4 or later. </p>
|
||||||
|
|
||||||
<li> <p> Postfix version 2.5 implements the Sendmail 8.14 features
|
<p> Specify "milter_protocol = 4" to enable all available Sendmail
|
||||||
except: SMFIP_RCPT_REJ (report rejected recipients to the mail
|
8.13 and earlier Milter features. </p>
|
||||||
filter), SMFIR_CHGFROM (replace sender, with optional ESMTP command
|
|
||||||
parameters), and SMFIR_ADDRCPT_PAR (add recipient, with optional
|
|
||||||
ESMTP command parameters).
|
|
||||||
|
|
||||||
<li> <p> Most Milter configuration options are global. Future Postfix
|
<li> <p> Most Milter configuration options are global. Future Postfix
|
||||||
versions may support per-Milter timeouts, per-Milter error handling,
|
versions may support per-Milter timeouts, per-Milter error handling,
|
||||||
|
@ -193,8 +193,8 @@ some restriction produces a result of PERMIT, REJECT or DEFER (try
|
|||||||
again later). The end of the list is equivalent to a PERMIT result.
|
again later). The end of the list is equivalent to a PERMIT result.
|
||||||
By placing a PERMIT restriction before a REJECT restriction you
|
By placing a PERMIT restriction before a REJECT restriction you
|
||||||
can make exceptions for specific clients or users. This is called
|
can make exceptions for specific clients or users. This is called
|
||||||
whitelisting; the last example above allows mail from local networks
|
whitelisting; the fourth example above allows mail from local
|
||||||
but otherwise rejects mail to arbitrary destinations. </p>
|
networks but otherwise rejects mail to arbitrary destinations. </p>
|
||||||
|
|
||||||
<p> The table below summarizes the purpose of each SMTP access
|
<p> The table below summarizes the purpose of each SMTP access
|
||||||
restriction list. All lists use the exact same syntax; they differ
|
restriction list. All lists use the exact same syntax; they differ
|
||||||
|
@ -10454,10 +10454,11 @@ 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>
|
||||||
|
|
||||||
%PARAM milter_protocol 2
|
%PARAM milter_protocol 6
|
||||||
|
|
||||||
<p> The mail filter protocol version and optional protocol extensions
|
<p> The mail filter protocol version and optional protocol extensions
|
||||||
for communication with a Milter (mail filter) application. Postfix
|
for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
the default protocol is 2. Postfix
|
||||||
sends this version number during the initial protocol handshake.
|
sends this version number during the initial protocol handshake.
|
||||||
It should match the version number that is expected by the mail
|
It should match the version number that is expected by the mail
|
||||||
filter application (or by its Milter library). </p>
|
filter application (or by its Milter library). </p>
|
||||||
@ -10467,14 +10468,15 @@ filter application (or by its Milter library). </p>
|
|||||||
<dl compact>
|
<dl compact>
|
||||||
|
|
||||||
<dt>2</dt> <dd>Use Sendmail 8 mail filter protocol version 2 (default
|
<dt>2</dt> <dd>Use Sendmail 8 mail filter protocol version 2 (default
|
||||||
as of Sendmail version 8.11).</dd>
|
with Sendmail version 8.11 .. 8.13 and Postfix version 2.3 ..
|
||||||
|
2.5).</dd>
|
||||||
|
|
||||||
<dt>3</dt> <dd>Use Sendmail 8 mail filter protocol version 3.</dd>
|
<dt>3</dt> <dd>Use Sendmail 8 mail filter protocol version 3.</dd>
|
||||||
|
|
||||||
<dt>4</dt> <dd>Use Sendmail 8 mail filter protocol version 4.</dd>
|
<dt>4</dt> <dd>Use Sendmail 8 mail filter protocol version 4.</dd>
|
||||||
|
|
||||||
<dt>6</dt> <dd>Use Sendmail 8 mail filter protocol version 6 (default
|
<dt>6</dt> <dd>Use Sendmail 8 mail filter protocol version 6 (default
|
||||||
as of Sendmail version 8.14).</dd>
|
with Sendmail version 8.14 and Postfix version 2.6).</dd>
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ int bounce_notify_service(int flags, char *service, char *queue_name,
|
|||||||
postmaster = var_2bounce_rcpt;
|
postmaster = var_2bounce_rcpt;
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
postmaster,
|
postmaster,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ int bounce_notify_service(int flags, char *service, char *queue_name,
|
|||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ int bounce_notify_service(int flags, char *service, char *queue_name,
|
|||||||
postmaster = var_bounce_rcpt;
|
postmaster = var_bounce_rcpt;
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
postmaster,
|
postmaster,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
count = -1;
|
count = -1;
|
||||||
|
@ -160,7 +160,7 @@ int bounce_notify_verp(int flags, char *service, char *queue_name,
|
|||||||
} else {
|
} else {
|
||||||
verp_sender(verp_buf, verp_delims, recipient, rcpt);
|
verp_sender(verp_buf, verp_delims, recipient, rcpt);
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, STR(verp_buf),
|
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, STR(verp_buf),
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ int bounce_notify_verp(int flags, char *service, char *queue_name,
|
|||||||
postmaster = var_bounce_rcpt;
|
postmaster = var_bounce_rcpt;
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
postmaster,
|
postmaster,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
if (bounce_header(bounce, bounce_info, postmaster,
|
if (bounce_header(bounce, bounce_info, postmaster,
|
||||||
|
@ -147,7 +147,7 @@ int bounce_one_service(int flags, char *queue_name, char *queue_id,
|
|||||||
} else {
|
} else {
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
var_2bounce_rcpt,
|
var_2bounce_rcpt,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ int bounce_one_service(int flags, char *queue_name, char *queue_id,
|
|||||||
bounce_status = 0;
|
bounce_status = 0;
|
||||||
} else {
|
} else {
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, orig_sender,
|
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, orig_sender,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ int bounce_one_service(int flags, char *queue_name, char *queue_id,
|
|||||||
*/
|
*/
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
var_bounce_rcpt,
|
var_bounce_rcpt,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
if (bounce_header(bounce, bounce_info, var_bounce_rcpt,
|
if (bounce_header(bounce, bounce_info, var_bounce_rcpt,
|
||||||
|
@ -140,7 +140,7 @@ int bounce_trace_service(int flags, char *service, char *queue_name,
|
|||||||
* a new queue file.
|
* a new queue file.
|
||||||
*/
|
*/
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
count = -1;
|
count = -1;
|
||||||
|
@ -164,7 +164,7 @@ int bounce_warn_service(int unused_flags, char *service, char *queue_name,
|
|||||||
postmaster = var_delay_rcpt;
|
postmaster = var_delay_rcpt;
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
postmaster,
|
postmaster,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ int bounce_warn_service(int unused_flags, char *service, char *queue_name,
|
|||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ int bounce_warn_service(int unused_flags, char *service, char *queue_name,
|
|||||||
postmaster = var_delay_rcpt;
|
postmaster = var_delay_rcpt;
|
||||||
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
if ((bounce = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
postmaster,
|
postmaster,
|
||||||
INT_FILT_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
count = -1;
|
count = -1;
|
||||||
|
@ -74,7 +74,9 @@ milter_tests: cleanup_milter_test bug_tests \
|
|||||||
cleanup_milter_test5 cleanup_milter_test6 cleanup_milter_test7 \
|
cleanup_milter_test5 cleanup_milter_test6 cleanup_milter_test7 \
|
||||||
cleanup_milter_test8 cleanup_milter_test9 cleanup_milter_test10a \
|
cleanup_milter_test8 cleanup_milter_test9 cleanup_milter_test10a \
|
||||||
cleanup_milter_test10b cleanup_milter_test10c cleanup_milter_test10d \
|
cleanup_milter_test10b cleanup_milter_test10c cleanup_milter_test10d \
|
||||||
cleanup_milter_test10e cleanup_milter_test11 cleanup_milter_test12
|
cleanup_milter_test10e cleanup_milter_test11 cleanup_milter_test12 \
|
||||||
|
cleanup_milter_test13a cleanup_milter_test13b cleanup_milter_test13c \
|
||||||
|
cleanup_milter_test13d
|
||||||
|
|
||||||
root_tests:
|
root_tests:
|
||||||
|
|
||||||
@ -296,6 +298,42 @@ cleanup_milter_test12: cleanup_milter test-queue-file12 cleanup_milter.in12 \
|
|||||||
diff cleanup_milter.ref12 cleanup_milter.tmp
|
diff cleanup_milter.ref12 cleanup_milter.tmp
|
||||||
rm -f test-queue-file12.tmp cleanup_milter.tmp
|
rm -f test-queue-file12.tmp cleanup_milter.tmp
|
||||||
|
|
||||||
|
cleanup_milter_test13a: cleanup_milter test-queue-file13a cleanup_milter.in13a \
|
||||||
|
cleanup_milter.ref13a ../postcat/postcat
|
||||||
|
cp test-queue-file13a test-queue-file13a.tmp
|
||||||
|
chmod u+w test-queue-file13a.tmp
|
||||||
|
./cleanup_milter <cleanup_milter.in13a
|
||||||
|
../postcat/postcat -ov test-queue-file13a.tmp 2>/dev/null >cleanup_milter.tmp
|
||||||
|
diff cleanup_milter.ref13a cleanup_milter.tmp
|
||||||
|
rm -f test-queue-file13a.tmp cleanup_milter.tmp
|
||||||
|
|
||||||
|
cleanup_milter_test13b: cleanup_milter test-queue-file13b cleanup_milter.in13b \
|
||||||
|
cleanup_milter.ref13b ../postcat/postcat
|
||||||
|
cp test-queue-file13b test-queue-file13b.tmp
|
||||||
|
chmod u+w test-queue-file13b.tmp
|
||||||
|
./cleanup_milter <cleanup_milter.in13b
|
||||||
|
../postcat/postcat -ov test-queue-file13b.tmp 2>/dev/null >cleanup_milter.tmp
|
||||||
|
diff cleanup_milter.ref13b cleanup_milter.tmp
|
||||||
|
rm -f test-queue-file13b.tmp cleanup_milter.tmp
|
||||||
|
|
||||||
|
cleanup_milter_test13c: cleanup_milter test-queue-file13c cleanup_milter.in13c \
|
||||||
|
cleanup_milter.ref13c ../postcat/postcat
|
||||||
|
cp test-queue-file13c test-queue-file13c.tmp
|
||||||
|
chmod u+w test-queue-file13c.tmp
|
||||||
|
./cleanup_milter <cleanup_milter.in13c
|
||||||
|
../postcat/postcat -ov test-queue-file13c.tmp 2>/dev/null >cleanup_milter.tmp
|
||||||
|
diff cleanup_milter.ref13c cleanup_milter.tmp
|
||||||
|
rm -f test-queue-file13c.tmp cleanup_milter.tmp
|
||||||
|
|
||||||
|
cleanup_milter_test13d: cleanup_milter test-queue-file13d cleanup_milter.in13d \
|
||||||
|
cleanup_milter.ref13d ../postcat/postcat
|
||||||
|
cp test-queue-file13d test-queue-file13d.tmp
|
||||||
|
chmod u+w test-queue-file13d.tmp
|
||||||
|
./cleanup_milter <cleanup_milter.in13d
|
||||||
|
../postcat/postcat -ov test-queue-file13d.tmp 2>/dev/null >cleanup_milter.tmp
|
||||||
|
diff cleanup_milter.ref13d cleanup_milter.tmp
|
||||||
|
rm -f test-queue-file13d.tmp cleanup_milter.tmp
|
||||||
|
|
||||||
depend: $(MAKES)
|
depend: $(MAKES)
|
||||||
(sed '1,/^# do not edit/!d' Makefile.in; \
|
(sed '1,/^# do not edit/!d' Makefile.in; \
|
||||||
set -e; for i in [a-z][a-z0-9]*.c; do \
|
set -e; for i in [a-z][a-z0-9]*.c; do \
|
||||||
|
@ -124,9 +124,10 @@
|
|||||||
/* .IP "\fBnon_smtpd_milters (empty)\fR"
|
/* .IP "\fBnon_smtpd_milters (empty)\fR"
|
||||||
/* A list of Milter (mail filter) applications for new mail that
|
/* A list of Milter (mail filter) applications for new mail that
|
||||||
/* does not arrive via the Postfix \fBsmtpd\fR(8) server.
|
/* does not arrive via the Postfix \fBsmtpd\fR(8) server.
|
||||||
/* .IP "\fBmilter_protocol (2)\fR"
|
/* .IP "\fBmilter_protocol (6)\fR"
|
||||||
/* The mail filter protocol version and optional protocol extensions
|
/* The mail filter protocol version and optional protocol extensions
|
||||||
/* for communication with a Milter (mail filter) application.
|
/* for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
/* the default protocol is 2.
|
||||||
/* .IP "\fBmilter_default_action (tempfail)\fR"
|
/* .IP "\fBmilter_default_action (tempfail)\fR"
|
||||||
/* The default action when a Milter (mail filter) application is
|
/* The default action when a Milter (mail filter) application is
|
||||||
/* unavailable or mis-configured.
|
/* unavailable or mis-configured.
|
||||||
|
@ -72,6 +72,8 @@ typedef struct CLEANUP_STATE {
|
|||||||
off_t body_offset; /* start of body content */
|
off_t body_offset; /* start of body content */
|
||||||
off_t xtra_offset; /* start of extra segment */
|
off_t xtra_offset; /* start of extra segment */
|
||||||
off_t cont_length; /* length including Milter edits */
|
off_t cont_length; /* length including Milter edits */
|
||||||
|
off_t sender_pt_offset; /* replace sender here */
|
||||||
|
off_t sender_pt_target; /* record after sender address */
|
||||||
off_t append_rcpt_pt_offset; /* append recipient here */
|
off_t append_rcpt_pt_offset; /* append recipient here */
|
||||||
off_t append_rcpt_pt_target; /* target of above record */
|
off_t append_rcpt_pt_target; /* target of above record */
|
||||||
off_t append_hdr_pt_offset; /* append header here */
|
off_t append_hdr_pt_offset; /* append header here */
|
||||||
|
@ -377,7 +377,20 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type,
|
|||||||
state->errs |= CLEANUP_STAT_BAD;
|
state->errs |= CLEANUP_STAT_BAD;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (state->milters || cleanup_milters) {
|
||||||
|
/* Remember the sender record offset. */
|
||||||
|
if ((state->sender_pt_offset = vstream_ftell(state->dst)) < 0)
|
||||||
|
msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
|
||||||
|
}
|
||||||
cleanup_addr_sender(state, buf);
|
cleanup_addr_sender(state, buf);
|
||||||
|
if (state->milters || cleanup_milters) {
|
||||||
|
/* Make room to replace sender. */
|
||||||
|
if (len < REC_TYPE_PTR_PAYL_SIZE)
|
||||||
|
rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE - len);
|
||||||
|
/* Remember the after-sender record offset. */
|
||||||
|
if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0)
|
||||||
|
msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path);
|
||||||
|
}
|
||||||
if (cleanup_milters != 0
|
if (cleanup_milters != 0
|
||||||
&& state->milters == 0
|
&& state->milters == 0
|
||||||
&& CLEANUP_MILTER_OK(state))
|
&& CLEANUP_MILTER_OK(state))
|
||||||
|
@ -959,6 +959,99 @@ static const char *cleanup_del_header(void *context, ssize_t index,
|
|||||||
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* cleanup_chg_from - replace sender address, ignore ESMTP arguments */
|
||||||
|
|
||||||
|
static const char *cleanup_chg_from(void *context, const char *ext_from,
|
||||||
|
const char *esmtp_args)
|
||||||
|
{
|
||||||
|
const char *myname = "cleanup_chg_from";
|
||||||
|
CLEANUP_STATE *state = (CLEANUP_STATE *) context;
|
||||||
|
off_t new_sender_offset;
|
||||||
|
int addr_count;
|
||||||
|
TOK822 *tree;
|
||||||
|
TOK822 *tp;
|
||||||
|
VSTRING *int_sender_buf;
|
||||||
|
|
||||||
|
if (msg_verbose)
|
||||||
|
msg_info("%s: \"%s\" \"%s\"", myname, ext_from, esmtp_args);
|
||||||
|
|
||||||
|
if (esmtp_args[0])
|
||||||
|
msg_warn("%s: %s: ignoring ESMTP arguments \"%.100s\"",
|
||||||
|
state->queue_id, myname, esmtp_args);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The cleanup server remembers the location of the the original sender
|
||||||
|
* address record (offset in sender_pt_offset) and the file offset of the
|
||||||
|
* record that follows the sender address (offset in sender_pt_target).
|
||||||
|
* Short original sender records are padded, so that they can safely be
|
||||||
|
* overwritten with a pointer record to the new sender address record.
|
||||||
|
*/
|
||||||
|
if (state->sender_pt_offset < 0)
|
||||||
|
msg_panic("%s: no original sender record offset", myname);
|
||||||
|
if (state->sender_pt_target < 0)
|
||||||
|
msg_panic("%s: no post-sender record offset", myname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate space after the end of the queue file, and write the new
|
||||||
|
* sender record, followed by a reverse pointer record that points to the
|
||||||
|
* record that follows the original sender address record. No padding is
|
||||||
|
* needed for a "new" short sender record, since the record is not meant
|
||||||
|
* to be overwritten. When the "new" sender is replaced, we allocate a
|
||||||
|
* new record at the end of the queue file.
|
||||||
|
*
|
||||||
|
* We update the queue file in a safe manner: save the new sender after the
|
||||||
|
* end of the queue file, write the reverse pointer, and only then
|
||||||
|
* overwrite the old sender record with the forward pointer to the new
|
||||||
|
* sender.
|
||||||
|
*/
|
||||||
|
if ((new_sender_offset = vstream_fseek(state->dst, (off_t) 0, SEEK_END)) < 0) {
|
||||||
|
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||||
|
return (cleanup_milter_error(state, errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transform the address from external form to internal form. This also
|
||||||
|
* removes the enclosing <>, if present.
|
||||||
|
*
|
||||||
|
* XXX vstring_alloc() rejects zero-length requests.
|
||||||
|
*/
|
||||||
|
int_sender_buf = vstring_alloc(strlen(ext_from) + 1);
|
||||||
|
tree = tok822_parse(ext_from);
|
||||||
|
for (addr_count = 0, tp = tree; tp != 0; tp = tp->next) {
|
||||||
|
if (tp->type == TOK822_ADDR) {
|
||||||
|
if (addr_count == 0) {
|
||||||
|
tok822_internalize(int_sender_buf, tp->head, TOK822_STR_DEFL);
|
||||||
|
addr_count += 1;
|
||||||
|
} else {
|
||||||
|
msg_warn("%s: Milter request to add multi-sender: \"%s\"",
|
||||||
|
state->queue_id, ext_from);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tok822_free_tree(tree);
|
||||||
|
cleanup_addr_sender(state, STR(int_sender_buf));
|
||||||
|
vstring_free(int_sender_buf);
|
||||||
|
cleanup_out_format(state, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
|
||||||
|
(long) state->sender_pt_target);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Overwrite the original sender record with the pointer to the new
|
||||||
|
* sender address record.
|
||||||
|
*/
|
||||||
|
if (vstream_fseek(state->dst, state->sender_pt_offset, SEEK_SET) < 0) {
|
||||||
|
msg_warn("%s: seek file %s: %m", myname, cleanup_path);
|
||||||
|
return (cleanup_milter_error(state, errno));
|
||||||
|
}
|
||||||
|
cleanup_out_format(state, REC_TYPE_PTR, REC_TYPE_PTR_FORMAT,
|
||||||
|
(long) new_sender_offset);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In case of error while doing record output.
|
||||||
|
*/
|
||||||
|
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
||||||
|
}
|
||||||
|
|
||||||
/* cleanup_add_rcpt - append recipient address */
|
/* cleanup_add_rcpt - append recipient address */
|
||||||
|
|
||||||
static const char *cleanup_add_rcpt(void *context, const char *ext_rcpt)
|
static const char *cleanup_add_rcpt(void *context, const char *ext_rcpt)
|
||||||
@ -1065,6 +1158,20 @@ static const char *cleanup_add_rcpt(void *context, const char *ext_rcpt)
|
|||||||
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
return (CLEANUP_OUT_OK(state) ? 0 : cleanup_milter_error(state, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* cleanup_add_rcpt_par - append recipient address, ignore ESMTP arguments */
|
||||||
|
|
||||||
|
static const char *cleanup_add_rcpt_par(void *context, const char *ext_rcpt,
|
||||||
|
const char *esmtp_args)
|
||||||
|
{
|
||||||
|
const char *myname = "cleanup_add_rcpt";
|
||||||
|
CLEANUP_STATE *state = (CLEANUP_STATE *) context;
|
||||||
|
|
||||||
|
if (esmtp_args[0])
|
||||||
|
msg_warn("%s: %s: ignoring ESMTP arguments \"%.100s\"",
|
||||||
|
state->queue_id, myname, esmtp_args);
|
||||||
|
return (cleanup_add_rcpt(context, ext_rcpt));
|
||||||
|
}
|
||||||
|
|
||||||
/* cleanup_del_rcpt - remove recipient and all its expansions */
|
/* cleanup_del_rcpt - remove recipient and all its expansions */
|
||||||
|
|
||||||
static const char *cleanup_del_rcpt(void *context, const char *ext_rcpt)
|
static const char *cleanup_del_rcpt(void *context, const char *ext_rcpt)
|
||||||
@ -1366,7 +1473,8 @@ void cleanup_milter_receive(CLEANUP_STATE *state, int count)
|
|||||||
milter_edit_callback(state->milters,
|
milter_edit_callback(state->milters,
|
||||||
cleanup_add_header, cleanup_upd_header,
|
cleanup_add_header, cleanup_upd_header,
|
||||||
cleanup_ins_header, cleanup_del_header,
|
cleanup_ins_header, cleanup_del_header,
|
||||||
cleanup_add_rcpt, cleanup_del_rcpt,
|
cleanup_chg_from, cleanup_add_rcpt,
|
||||||
|
cleanup_add_rcpt_par, cleanup_del_rcpt,
|
||||||
cleanup_repl_body, (void *) state);
|
cleanup_repl_body, (void *) state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1538,7 +1646,8 @@ void cleanup_milter_emul_mail(CLEANUP_STATE *state,
|
|||||||
milter_edit_callback(milters,
|
milter_edit_callback(milters,
|
||||||
cleanup_add_header, cleanup_upd_header,
|
cleanup_add_header, cleanup_upd_header,
|
||||||
cleanup_ins_header, cleanup_del_header,
|
cleanup_ins_header, cleanup_del_header,
|
||||||
cleanup_add_rcpt, cleanup_del_rcpt,
|
cleanup_chg_from, cleanup_add_rcpt,
|
||||||
|
cleanup_add_rcpt_par, cleanup_del_rcpt,
|
||||||
cleanup_repl_body, (void *) state);
|
cleanup_repl_body, (void *) state);
|
||||||
if (state->client_name == 0)
|
if (state->client_name == 0)
|
||||||
cleanup_milter_client_init(state);
|
cleanup_milter_client_init(state);
|
||||||
@ -1768,6 +1877,14 @@ static void open_queue_file(CLEANUP_STATE *state, const char *path)
|
|||||||
cleanup_path, STR(buf));
|
cleanup_path, STR(buf));
|
||||||
state->data_offset = data_offset;
|
state->data_offset = data_offset;
|
||||||
state->xtra_offset = data_offset + msg_seg_len;
|
state->xtra_offset = data_offset + msg_seg_len;
|
||||||
|
} else if (rec_type == REC_TYPE_FROM) {
|
||||||
|
state->sender_pt_offset = curr_offset;
|
||||||
|
if (LEN(buf) < REC_TYPE_PTR_PAYL_SIZE
|
||||||
|
&& rec_get_raw(state->dst, buf, 0, REC_FLAG_NONE) != REC_TYPE_PTR)
|
||||||
|
msg_fatal("file %s: missing PTR record after short sender",
|
||||||
|
cleanup_path);
|
||||||
|
if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0)
|
||||||
|
msg_fatal("file %s: missing END record", cleanup_path);
|
||||||
} else if (rec_type == REC_TYPE_PTR) {
|
} else if (rec_type == REC_TYPE_PTR) {
|
||||||
if (state->data_offset < 0)
|
if (state->data_offset < 0)
|
||||||
msg_fatal("file %s: missing SIZE record", cleanup_path);
|
msg_fatal("file %s: missing SIZE record", cleanup_path);
|
||||||
@ -1826,6 +1943,8 @@ int main(int unused_argc, char **argv)
|
|||||||
int istty = isatty(vstream_fileno(VSTREAM_IN));
|
int istty = isatty(vstream_fileno(VSTREAM_IN));
|
||||||
CLEANUP_STATE *state = cleanup_state_alloc((VSTREAM *) 0);
|
CLEANUP_STATE *state = cleanup_state_alloc((VSTREAM *) 0);
|
||||||
|
|
||||||
|
state->queue_id = mystrdup("NOQUEUE");
|
||||||
|
|
||||||
msg_vstream_init(argv[0], VSTREAM_ERR);
|
msg_vstream_init(argv[0], VSTREAM_ERR);
|
||||||
var_line_limit = DEF_LINE_LIMIT;
|
var_line_limit = DEF_LINE_LIMIT;
|
||||||
var_header_limit = DEF_HEADER_LIMIT;
|
var_header_limit = DEF_HEADER_LIMIT;
|
||||||
@ -1910,12 +2029,24 @@ int main(int unused_argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
cleanup_del_header(state, index, argv->argv[2]);
|
cleanup_del_header(state, index, argv->argv[2]);
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(argv->argv[0], "chg_from") == 0) {
|
||||||
|
if (argv->argc != 3) {
|
||||||
|
msg_warn("bad chg_from argument count: %d", argv->argc);
|
||||||
|
} else {
|
||||||
|
cleanup_chg_from(state, argv->argv[1], argv->argv[2]);
|
||||||
|
}
|
||||||
} else if (strcmp(argv->argv[0], "add_rcpt") == 0) {
|
} else if (strcmp(argv->argv[0], "add_rcpt") == 0) {
|
||||||
if (argv->argc != 2) {
|
if (argv->argc != 2) {
|
||||||
msg_warn("bad add_rcpt argument count: %d", argv->argc);
|
msg_warn("bad add_rcpt argument count: %d", argv->argc);
|
||||||
} else {
|
} else {
|
||||||
cleanup_add_rcpt(state, argv->argv[1]);
|
cleanup_add_rcpt(state, argv->argv[1]);
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(argv->argv[0], "add_rcpt_par") == 0) {
|
||||||
|
if (argv->argc != 3) {
|
||||||
|
msg_warn("bad add_rcpt_par argument count: %d", argv->argc);
|
||||||
|
} else {
|
||||||
|
cleanup_add_rcpt_par(state, argv->argv[1], argv->argv[2]);
|
||||||
|
}
|
||||||
} else if (strcmp(argv->argv[0], "del_rcpt") == 0) {
|
} else if (strcmp(argv->argv[0], "del_rcpt") == 0) {
|
||||||
if (argv->argc != 2) {
|
if (argv->argc != 2) {
|
||||||
msg_warn("bad del_rcpt argument count: %d", argv->argc);
|
msg_warn("bad del_rcpt argument count: %d", argv->argc);
|
||||||
|
22
postfix/src/cleanup/cleanup_milter.in13a
Normal file
22
postfix/src/cleanup/cleanup_milter.in13a
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#verbose on
|
||||||
|
open test-queue-file13a.tmp
|
||||||
|
|
||||||
|
# Add a recipient to a message that was received with "sendmail -t"
|
||||||
|
# so that all the recipients are in the extracted queue file segment.
|
||||||
|
|
||||||
|
add_rcpt_par me@porcupine.org esmtpstuff
|
||||||
|
|
||||||
|
# Delete the recipient added above.
|
||||||
|
|
||||||
|
del_rcpt me@porcupine.org
|
||||||
|
|
||||||
|
# Add a new recipient, using a different address than above, so that
|
||||||
|
# the duplicate filter won't suppress it.
|
||||||
|
|
||||||
|
add_rcpt_par em@porcupine.org esmtpstuff
|
||||||
|
|
||||||
|
# Delete the recipient.
|
||||||
|
|
||||||
|
del_rcpt em@porcupine.org
|
||||||
|
|
||||||
|
close
|
8
postfix/src/cleanup/cleanup_milter.in13b
Normal file
8
postfix/src/cleanup/cleanup_milter.in13b
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#verbose on
|
||||||
|
open test-queue-file13b.tmp
|
||||||
|
|
||||||
|
# Change the sender.
|
||||||
|
|
||||||
|
chg_from m@porcupine.org esmtpstuff
|
||||||
|
|
||||||
|
close
|
9
postfix/src/cleanup/cleanup_milter.in13c
Normal file
9
postfix/src/cleanup/cleanup_milter.in13c
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#verbose on
|
||||||
|
open test-queue-file13c.tmp
|
||||||
|
|
||||||
|
# Change the sender.
|
||||||
|
|
||||||
|
chg_from m@porcupine.org esmtpstuff
|
||||||
|
chg_from n@porcupine.org esmtpstuff
|
||||||
|
|
||||||
|
close
|
9
postfix/src/cleanup/cleanup_milter.in13d
Normal file
9
postfix/src/cleanup/cleanup_milter.in13d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#verbose on
|
||||||
|
open test-queue-file13d.tmp
|
||||||
|
|
||||||
|
# Change the null sender, to test correct padding of short sender records.
|
||||||
|
|
||||||
|
chg_from m@porcupine.org esmtpstuff
|
||||||
|
chg_from n@porcupine.org esmtpstuff
|
||||||
|
|
||||||
|
close
|
@ -1,60 +1,66 @@
|
|||||||
*** ENVELOPE RECORDS test-queue-file11.tmp ***
|
*** ENVELOPE RECORDS test-queue-file11.tmp ***
|
||||||
0 message_size: 358 480 1 0 358
|
0 message_size: 366 605 1 0 366
|
||||||
81 message_arrival_time: Thu Jan 18 15:15:42 2007
|
81 message_arrival_time: Mon Apr 27 20:41:30 2009
|
||||||
100 create_time: Thu Jan 18 15:15:48 2007
|
100 create_time: Mon Apr 27 20:41:41 2009
|
||||||
124 named_attribute: rewrite_context=local
|
124 named_attribute: rewrite_context=local
|
||||||
147 sender:
|
147 sender:
|
||||||
149 named_attribute: log_client_name=localhost
|
149 pointer_record: 0
|
||||||
176 named_attribute: log_client_address=127.0.0.1
|
164 named_attribute: log_client_name=localhost
|
||||||
206 named_attribute: log_message_origin=localhost[127.0.0.1]
|
191 named_attribute: log_client_address=127.0.0.1
|
||||||
247 named_attribute: log_protocol_name=SMTP
|
221 named_attribute: log_client_port=51286
|
||||||
271 named_attribute: client_name=localhost
|
244 named_attribute: log_message_origin=localhost[127.0.0.1]
|
||||||
294 named_attribute: reverse_client_name=localhost
|
285 named_attribute: log_helo_name=localhost
|
||||||
325 named_attribute: client_address=127.0.0.1
|
310 named_attribute: log_protocol_name=SMTP
|
||||||
351 named_attribute: client_address_type=2
|
334 named_attribute: client_name=localhost
|
||||||
374 named_attribute: dsn_orig_rcpt=rfc822;wietse@localhost
|
357 named_attribute: reverse_client_name=localhost
|
||||||
413 original_recipient: wietse@localhost
|
388 named_attribute: client_address=127.0.0.1
|
||||||
431 recipient: wietse@localhost.example.com
|
414 named_attribute: client_port=51286
|
||||||
461 pointer_record: 0
|
433 named_attribute: helo_name=localhost
|
||||||
478 *** MESSAGE CONTENTS test-queue-file11.tmp ***
|
454 named_attribute: protocol_name=SMTP
|
||||||
480 regular_text: Received: from localhost (localhost [127.0.0.1])
|
474 named_attribute: client_address_type=2
|
||||||
530 regular_text: by foo.example.com (Postfix) with SMTP id 2ADF9290403
|
497 named_attribute: dsn_orig_rcpt=rfc822;wietse@localhost
|
||||||
586 regular_text: for <wietse@localhost>; Thu, 18 Jan 2007 15:15:42 -0500 (EST)
|
536 original_recipient: wietse@localhost
|
||||||
650 regular_text: Message-Id: <20070118201548.2ADF9290403@foo.example.com>
|
554 recipient: wietse@localhost.porcupine.org
|
||||||
708 regular_text: Date: Thu, 18 Jan 2007 15:15:42 -0500 (EST)
|
586 pointer_record: 0
|
||||||
753 regular_text: From: MAILER-DAEMON
|
603 *** MESSAGE CONTENTS test-queue-file11.tmp ***
|
||||||
774 regular_text: To: undisclosed-recipients:;
|
605 regular_text: Received: from localhost (localhost [127.0.0.1])
|
||||||
804 pointer_record: 821
|
655 regular_text: by hades.porcupine.org (Postfix) with SMTP id 382B12B3292
|
||||||
821 pointer_record: 842
|
715 regular_text: for <wietse@localhost>; Mon, 27 Apr 2009 20:41:30 -0400 (EDT)
|
||||||
842 regular_text:
|
779 regular_text: Message-Id: <20090428004141.382B12B3292@hades.porcupine.org>
|
||||||
844 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
841 regular_text: Date: Mon, 27 Apr 2009 20:41:30 -0400 (EDT)
|
||||||
909 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
886 regular_text: From: MAILER-DAEMON
|
||||||
976 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
907 regular_text: To: undisclosed-recipients:;
|
||||||
1044 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
937 pointer_record: 954
|
||||||
1113 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
954 pointer_record: 975
|
||||||
1182 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
975 regular_text:
|
||||||
1248 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
977 regular_text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem
|
||||||
1316 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
1042 regular_text: accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
|
||||||
1383 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
1109 regular_text: quae ab illo inventore veritatis et quasi architecto beatae vitae
|
||||||
1448 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
1177 regular_text: dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
|
||||||
1522 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
1246 regular_text: aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
|
||||||
1591 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
1315 regular_text: eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
|
||||||
1659 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
1381 regular_text: est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
|
||||||
1726 regular_text: pariatur?
|
1449 regular_text: velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||||
1738 regular_text:
|
1516 regular_text: et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
|
||||||
1741 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
1581 regular_text: veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
|
||||||
1806 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
1655 regular_text: nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
|
||||||
1871 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
1724 regular_text: reprehenderit qui in ea voluptate velit esse quam nihil molestiae
|
||||||
1939 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
1792 regular_text: consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
|
||||||
2006 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
1859 regular_text: pariatur?
|
||||||
2077 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
1871 regular_text:
|
||||||
2144 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
1874 regular_text: At vero eos et accusamus et iusto odio dignissimos ducimus qui
|
||||||
2211 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
1939 regular_text: blanditiis praesentium voluptatum deleniti atque corrupti quos
|
||||||
2280 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
2004 regular_text: dolores et quas molestias excepturi sint occaecati cupiditate non
|
||||||
2350 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
2072 regular_text: provident, similique sunt in culpa qui officia deserunt mollitia
|
||||||
2416 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
2139 regular_text: animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
|
||||||
2485 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
2210 regular_text: est et expedita distinctio. Nam libero tempore, cum soluta nobis
|
||||||
2551 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
2277 regular_text: est eligendi optio cumque nihil impedit quo minus id quod maxime
|
||||||
2612 pointer_record: 838
|
2344 regular_text: placeat facere possimus, omnis voluptas assumenda est, omnis dolor
|
||||||
838 *** HEADER EXTRACTED test-queue-file11.tmp ***
|
2413 regular_text: repellendus. Temporibus autem quibusdam et aut officiis debitis aut
|
||||||
840 *** MESSAGE FILE END test-queue-file11.tmp ***
|
2483 regular_text: rerum necessitatibus saepe eveniet ut et voluptates repudiandae
|
||||||
|
2549 regular_text: sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
|
||||||
|
2618 regular_text: sapiente delectus, ut aut reiciendis voluptatibus maiores alias
|
||||||
|
2684 regular_text: consequatur aut perferendis doloribus asperiores repellat.
|
||||||
|
2745 pointer_record: 971
|
||||||
|
971 *** HEADER EXTRACTED test-queue-file11.tmp ***
|
||||||
|
973 *** MESSAGE FILE END test-queue-file11.tmp ***
|
||||||
|
33
postfix/src/cleanup/cleanup_milter.ref13a
Normal file
33
postfix/src/cleanup/cleanup_milter.ref13a
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
*** ENVELOPE RECORDS test-queue-file13a.tmp ***
|
||||||
|
0 message_size: 332 182 1 0 332
|
||||||
|
81 message_arrival_time: Sun Jan 21 13:32:59 2007
|
||||||
|
100 create_time: Sun Jan 21 13:33:08 2007
|
||||||
|
124 named_attribute: rewrite_context=local
|
||||||
|
147 sender_fullname: Wietse Venema
|
||||||
|
162 sender: me@porcupine.org
|
||||||
|
180 *** MESSAGE CONTENTS test-queue-file13a.tmp ***
|
||||||
|
182 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||||
|
244 regular_text: id DE040290405; Sun, 21 Jan 2007 13:33:08 -0500 (EST)
|
||||||
|
300 regular_text: From: me@porcupine.org
|
||||||
|
324 regular_text: To: you@porcupine.org
|
||||||
|
347 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||||
|
409 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||||
|
454 regular_text: Subject: hey!
|
||||||
|
469 padding: 0
|
||||||
|
472 pointer_record: 0
|
||||||
|
489 regular_text:
|
||||||
|
491 regular_text: text
|
||||||
|
497 pointer_record: 0
|
||||||
|
514 *** HEADER EXTRACTED test-queue-file13a.tmp ***
|
||||||
|
516 original_recipient: you@porcupine.org
|
||||||
|
535 recipient: you@porcupine.org
|
||||||
|
554 pointer_record: 573
|
||||||
|
573 named_attribute: notify_flags=1
|
||||||
|
589 original_recipient: me@porcupine.org
|
||||||
|
607 canceled_recipient: me@porcupine.org
|
||||||
|
625 pointer_record: 642
|
||||||
|
642 named_attribute: notify_flags=1
|
||||||
|
658 original_recipient: em@porcupine.org
|
||||||
|
676 canceled_recipient: em@porcupine.org
|
||||||
|
694 pointer_record: 571
|
||||||
|
571 *** MESSAGE FILE END test-queue-file13a.tmp ***
|
27
postfix/src/cleanup/cleanup_milter.ref13b
Normal file
27
postfix/src/cleanup/cleanup_milter.ref13b
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
*** ENVELOPE RECORDS test-queue-file13b.tmp ***
|
||||||
|
0 message_size: 332 182 1 0 332
|
||||||
|
81 message_arrival_time: Sun Jan 21 13:32:59 2007
|
||||||
|
100 create_time: Sun Jan 21 13:33:08 2007
|
||||||
|
124 named_attribute: rewrite_context=local
|
||||||
|
147 sender_fullname: Wietse Venema
|
||||||
|
162 pointer_record: 573
|
||||||
|
573 sender: m@porcupine.org
|
||||||
|
590 pointer_record: 180
|
||||||
|
180 *** MESSAGE CONTENTS test-queue-file13b.tmp ***
|
||||||
|
182 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||||
|
244 regular_text: id DE040290405; Sun, 21 Jan 2007 13:33:08 -0500 (EST)
|
||||||
|
300 regular_text: From: me@porcupine.org
|
||||||
|
324 regular_text: To: you@porcupine.org
|
||||||
|
347 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||||
|
409 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||||
|
454 regular_text: Subject: hey!
|
||||||
|
469 padding: 0
|
||||||
|
472 pointer_record: 0
|
||||||
|
489 regular_text:
|
||||||
|
491 regular_text: text
|
||||||
|
497 pointer_record: 0
|
||||||
|
514 *** HEADER EXTRACTED test-queue-file13b.tmp ***
|
||||||
|
516 original_recipient: you@porcupine.org
|
||||||
|
535 recipient: you@porcupine.org
|
||||||
|
554 pointer_record: 0
|
||||||
|
571 *** MESSAGE FILE END test-queue-file13b.tmp ***
|
27
postfix/src/cleanup/cleanup_milter.ref13c
Normal file
27
postfix/src/cleanup/cleanup_milter.ref13c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
*** ENVELOPE RECORDS test-queue-file13c.tmp ***
|
||||||
|
0 message_size: 332 182 1 0 332
|
||||||
|
81 message_arrival_time: Sun Jan 21 13:32:59 2007
|
||||||
|
100 create_time: Sun Jan 21 13:33:08 2007
|
||||||
|
124 named_attribute: rewrite_context=local
|
||||||
|
147 sender_fullname: Wietse Venema
|
||||||
|
162 pointer_record: 607
|
||||||
|
607 sender: n@porcupine.org
|
||||||
|
624 pointer_record: 180
|
||||||
|
180 *** MESSAGE CONTENTS test-queue-file13c.tmp ***
|
||||||
|
182 regular_text: Received: by hades.porcupine.org (Postfix, from userid 1001)
|
||||||
|
244 regular_text: id DE040290405; Sun, 21 Jan 2007 13:33:08 -0500 (EST)
|
||||||
|
300 regular_text: From: me@porcupine.org
|
||||||
|
324 regular_text: To: you@porcupine.org
|
||||||
|
347 regular_text: Message-Id: <20060725192735.5EC2D29013F@hades.porcupine.org>
|
||||||
|
409 regular_text: Date: Tue, 25 Jul 2006 15:27:19 -0400 (EDT)
|
||||||
|
454 regular_text: Subject: hey!
|
||||||
|
469 padding: 0
|
||||||
|
472 pointer_record: 0
|
||||||
|
489 regular_text:
|
||||||
|
491 regular_text: text
|
||||||
|
497 pointer_record: 0
|
||||||
|
514 *** HEADER EXTRACTED test-queue-file13c.tmp ***
|
||||||
|
516 original_recipient: you@porcupine.org
|
||||||
|
535 recipient: you@porcupine.org
|
||||||
|
554 pointer_record: 0
|
||||||
|
571 *** MESSAGE FILE END test-queue-file13c.tmp ***
|
37
postfix/src/cleanup/cleanup_milter.ref13d
Normal file
37
postfix/src/cleanup/cleanup_milter.ref13d
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
*** ENVELOPE RECORDS test-queue-file13d.tmp ***
|
||||||
|
0 message_size: 366 605 1 0 366
|
||||||
|
81 message_arrival_time: Mon Apr 27 20:41:30 2009
|
||||||
|
100 create_time: Mon Apr 27 20:41:41 2009
|
||||||
|
124 named_attribute: rewrite_context=local
|
||||||
|
147 pointer_record: 1009
|
||||||
|
1009 sender: n@porcupine.org
|
||||||
|
1026 pointer_record: 164
|
||||||
|
164 named_attribute: log_client_name=localhost
|
||||||
|
191 named_attribute: log_client_address=127.0.0.1
|
||||||
|
221 named_attribute: log_client_port=51286
|
||||||
|
244 named_attribute: log_message_origin=localhost[127.0.0.1]
|
||||||
|
285 named_attribute: log_helo_name=localhost
|
||||||
|
310 named_attribute: log_protocol_name=SMTP
|
||||||
|
334 named_attribute: client_name=localhost
|
||||||
|
357 named_attribute: reverse_client_name=localhost
|
||||||
|
388 named_attribute: client_address=127.0.0.1
|
||||||
|
414 named_attribute: client_port=51286
|
||||||
|
433 named_attribute: helo_name=localhost
|
||||||
|
454 named_attribute: protocol_name=SMTP
|
||||||
|
474 named_attribute: client_address_type=2
|
||||||
|
497 named_attribute: dsn_orig_rcpt=rfc822;wietse@localhost
|
||||||
|
536 original_recipient: wietse@localhost
|
||||||
|
554 recipient: wietse@localhost.porcupine.org
|
||||||
|
586 pointer_record: 0
|
||||||
|
603 *** MESSAGE CONTENTS test-queue-file13d.tmp ***
|
||||||
|
605 regular_text: Received: from localhost (localhost [127.0.0.1])
|
||||||
|
655 regular_text: by hades.porcupine.org (Postfix) with SMTP id 382B12B3292
|
||||||
|
715 regular_text: for <wietse@localhost>; Mon, 27 Apr 2009 20:41:30 -0400 (EDT)
|
||||||
|
779 regular_text: Message-Id: <20090428004141.382B12B3292@hades.porcupine.org>
|
||||||
|
841 regular_text: Date: Mon, 27 Apr 2009 20:41:30 -0400 (EDT)
|
||||||
|
886 regular_text: From: MAILER-DAEMON
|
||||||
|
907 regular_text: To: undisclosed-recipients:;
|
||||||
|
937 pointer_record: 0
|
||||||
|
954 pointer_record: 0
|
||||||
|
971 *** HEADER EXTRACTED test-queue-file13d.tmp ***
|
||||||
|
973 *** MESSAGE FILE END test-queue-file13d.tmp ***
|
@ -91,6 +91,8 @@ CLEANUP_STATE *cleanup_state_alloc(VSTREAM *src)
|
|||||||
state->body_offset = -1;
|
state->body_offset = -1;
|
||||||
state->xtra_offset = -1;
|
state->xtra_offset = -1;
|
||||||
state->cont_length = 0;
|
state->cont_length = 0;
|
||||||
|
state->sender_pt_offset = -1;
|
||||||
|
state->sender_pt_target = -1;
|
||||||
state->append_rcpt_pt_offset = -1;
|
state->append_rcpt_pt_offset = -1;
|
||||||
state->append_rcpt_pt_target = -1;
|
state->append_rcpt_pt_target = -1;
|
||||||
state->append_hdr_pt_offset = -1;
|
state->append_hdr_pt_offset = -1;
|
||||||
|
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file13a
Normal file
BIN
postfix/src/cleanup/test-queue-file13a
Normal file
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file13b
Normal file
BIN
postfix/src/cleanup/test-queue-file13b
Normal file
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file13c
Normal file
BIN
postfix/src/cleanup/test-queue-file13c
Normal file
Binary file not shown.
BIN
postfix/src/cleanup/test-queue-file13d
Normal file
BIN
postfix/src/cleanup/test-queue-file13d
Normal file
Binary file not shown.
@ -14,12 +14,12 @@
|
|||||||
/* the internal_mail_filter_classes configuration parameter.
|
/* the internal_mail_filter_classes configuration parameter.
|
||||||
/*
|
/*
|
||||||
/* Specify one of the following:
|
/* Specify one of the following:
|
||||||
/* .IP INT_FILT_NONE
|
/* .IP INT_FILT_MASK_NONE
|
||||||
/* Mail that must be excluded from inspection (address probes, etc.).
|
/* Mail that must be excluded from inspection (address probes, etc.).
|
||||||
/* .IP INT_FILT_NOTIFY
|
/* .IP INT_FILT_MASK_NOTIFY
|
||||||
/* Postmaster notifications from the smtpd(8) and smtp(8)
|
/* Postmaster notifications from the smtpd(8) and smtp(8)
|
||||||
/* protocol adapters.
|
/* protocol adapters.
|
||||||
/* .IP INT_FILT_BOUNCE
|
/* .IP INT_FILT_MASK_BOUNCE
|
||||||
/* Delivery status notifications from the bounce(8) server.
|
/* Delivery status notifications from the bounce(8) server.
|
||||||
/* DIAGNOSTICS
|
/* DIAGNOSTICS
|
||||||
/* Fatal: invalid mail category name.
|
/* Fatal: invalid mail category name.
|
||||||
@ -54,8 +54,8 @@
|
|||||||
int int_filt_flags(int class)
|
int int_filt_flags(int class)
|
||||||
{
|
{
|
||||||
static const NAME_MASK table[] = {
|
static const NAME_MASK table[] = {
|
||||||
"notify", INT_FILT_NOTIFY,
|
INT_FILT_CLASS_NOTIFY, INT_FILT_MASK_NOTIFY,
|
||||||
"bounce", INT_FILT_BOUNCE,
|
INT_FILT_CLASS_BOUNCE, INT_FILT_MASK_BOUNCE,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
int filtered_classes = 0;
|
int filtered_classes = 0;
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
/*
|
/*
|
||||||
* External interface.
|
* External interface.
|
||||||
*/
|
*/
|
||||||
#define INT_FILT_NONE (0)
|
#define INT_FILT_MASK_NONE (0)
|
||||||
#define INT_FILT_NOTIFY (1<<1)
|
#define INT_FILT_MASK_NOTIFY (1<<1)
|
||||||
#define INT_FILT_BOUNCE (1<<2)
|
#define INT_FILT_MASK_BOUNCE (1<<2)
|
||||||
|
|
||||||
extern int int_filt_flags(int);
|
extern int int_filt_flags(int);
|
||||||
|
|
||||||
|
@ -2967,7 +2967,7 @@ extern int var_milt_cmd_time;
|
|||||||
extern int var_milt_msg_time;
|
extern int var_milt_msg_time;
|
||||||
|
|
||||||
#define VAR_MILT_PROTOCOL "milter_protocol"
|
#define VAR_MILT_PROTOCOL "milter_protocol"
|
||||||
#define DEF_MILT_PROTOCOL "2"
|
#define DEF_MILT_PROTOCOL "6"
|
||||||
extern char *var_milt_protocol;
|
extern char *var_milt_protocol;
|
||||||
|
|
||||||
#define VAR_MILT_DEF_ACTION "milter_default_action"
|
#define VAR_MILT_DEF_ACTION "milter_default_action"
|
||||||
@ -2986,8 +2986,12 @@ extern char *var_milt_v;
|
|||||||
* What internal mail do we inspect/stamp/etc.? This is not yet safe enough
|
* What internal mail do we inspect/stamp/etc.? This is not yet safe enough
|
||||||
* to enable world-wide.
|
* to enable world-wide.
|
||||||
*/
|
*/
|
||||||
|
#define INT_FILT_CLASS_NONE ""
|
||||||
|
#define INT_FILT_CLASS_NOTIFY "notify"
|
||||||
|
#define INT_FILT_CLASS_BOUNCE "bounce"
|
||||||
|
|
||||||
#define VAR_INT_FILT_CLASSES "internal_mail_filter_classes"
|
#define VAR_INT_FILT_CLASSES "internal_mail_filter_classes"
|
||||||
#define DEF_INT_FILT_CLASSES ""
|
#define DEF_INT_FILT_CLASSES INT_FILT_CLASS_NONE
|
||||||
extern char *var_int_filt_classes;
|
extern char *var_int_filt_classes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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 "20090427"
|
#define MAIL_RELEASE_DATE "20090428"
|
||||||
#define MAIL_VERSION_NUMBER "2.7"
|
#define MAIL_VERSION_NUMBER "2.7"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
|
@ -300,10 +300,6 @@
|
|||||||
/* ~\fIname\fR/.\fBforward\fR+\fIfoo\fR or in ~\fIname\fR/.\fBforward\fR,
|
/* ~\fIname\fR/.\fBforward\fR+\fIfoo\fR or in ~\fIname\fR/.\fBforward\fR,
|
||||||
/* to the mailbox owned by the user \fIname\fR, or it is sent back as
|
/* to the mailbox owned by the user \fIname\fR, or it is sent back as
|
||||||
/* undeliverable.
|
/* undeliverable.
|
||||||
/*
|
|
||||||
/* In all cases the \fBlocal\fR(8) daemon prepends an optional
|
|
||||||
/* `\fBDelivered-To:\fR header line with the final recipient
|
|
||||||
/* address.
|
|
||||||
/* DELIVERY RIGHTS
|
/* DELIVERY RIGHTS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
@ -35,14 +35,17 @@
|
|||||||
/* void *mac_context;
|
/* void *mac_context;
|
||||||
/*
|
/*
|
||||||
/* void milter_edit_callback(milters, add_header, upd_header,
|
/* void milter_edit_callback(milters, add_header, upd_header,
|
||||||
/* ins_header, del_header, add_rcpt,
|
/* ins_header, del_header, chg_from,
|
||||||
/* del_rcpt, repl_body, context)
|
/* add_rcpt, add_rcpt_par, del_rcpt,
|
||||||
|
/* repl_body, context)
|
||||||
/* MILTERS *milters;
|
/* MILTERS *milters;
|
||||||
/* MILTER_ADD_HEADER_FN add_header;
|
/* MILTER_ADD_HEADER_FN add_header;
|
||||||
/* MILTER_EDIT_HEADER_FN upd_header;
|
/* MILTER_EDIT_HEADER_FN upd_header;
|
||||||
/* MILTER_EDIT_HEADER_FN ins_header;
|
/* MILTER_EDIT_HEADER_FN ins_header;
|
||||||
/* MILTER_DEL_HEADER_FN del_header;
|
/* MILTER_DEL_HEADER_FN del_header;
|
||||||
|
/* MILTER_EDIT_FROM_FN chg_from;
|
||||||
/* MILTER_EDIT_RCPT_FN add_rcpt;
|
/* MILTER_EDIT_RCPT_FN add_rcpt;
|
||||||
|
/* MILTER_EDIT_RCPT_PAR_FN add_rcpt_par;
|
||||||
/* MILTER_EDIT_RCPT_FN del_rcpt;
|
/* MILTER_EDIT_RCPT_FN del_rcpt;
|
||||||
/* MILTER_EDIT_BODY_FN repl_body;
|
/* MILTER_EDIT_BODY_FN repl_body;
|
||||||
/* void *context;
|
/* void *context;
|
||||||
@ -294,7 +297,9 @@ void milter_edit_callback(MILTERS *milters,
|
|||||||
MILTER_EDIT_HEADER_FN upd_header,
|
MILTER_EDIT_HEADER_FN upd_header,
|
||||||
MILTER_EDIT_HEADER_FN ins_header,
|
MILTER_EDIT_HEADER_FN ins_header,
|
||||||
MILTER_DEL_HEADER_FN del_header,
|
MILTER_DEL_HEADER_FN del_header,
|
||||||
|
MILTER_EDIT_FROM_FN chg_from,
|
||||||
MILTER_EDIT_RCPT_FN add_rcpt,
|
MILTER_EDIT_RCPT_FN add_rcpt,
|
||||||
|
MILTER_EDIT_RCPT_PAR_FN add_rcpt_par,
|
||||||
MILTER_EDIT_RCPT_FN del_rcpt,
|
MILTER_EDIT_RCPT_FN del_rcpt,
|
||||||
MILTER_EDIT_BODY_FN repl_body,
|
MILTER_EDIT_BODY_FN repl_body,
|
||||||
void *chg_context)
|
void *chg_context)
|
||||||
@ -303,7 +308,9 @@ void milter_edit_callback(MILTERS *milters,
|
|||||||
milters->upd_header = upd_header;
|
milters->upd_header = upd_header;
|
||||||
milters->ins_header = ins_header;
|
milters->ins_header = ins_header;
|
||||||
milters->del_header = del_header;
|
milters->del_header = del_header;
|
||||||
|
milters->chg_from = chg_from;
|
||||||
milters->add_rcpt = add_rcpt;
|
milters->add_rcpt = add_rcpt;
|
||||||
|
milters->add_rcpt_par = add_rcpt_par;
|
||||||
milters->del_rcpt = del_rcpt;
|
milters->del_rcpt = del_rcpt;
|
||||||
milters->repl_body = repl_body;
|
milters->repl_body = repl_body;
|
||||||
milters->chg_context = chg_context;
|
milters->chg_context = chg_context;
|
||||||
|
@ -91,7 +91,9 @@ typedef const char *(*MILTER_MAC_LOOKUP_FN) (const char *, void *);
|
|||||||
typedef const char *(*MILTER_ADD_HEADER_FN) (void *, const char *, const char *, const char *);
|
typedef const char *(*MILTER_ADD_HEADER_FN) (void *, const char *, const char *, const char *);
|
||||||
typedef const char *(*MILTER_EDIT_HEADER_FN) (void *, ssize_t, const char *, const char *, const char *);
|
typedef const char *(*MILTER_EDIT_HEADER_FN) (void *, ssize_t, const char *, const char *, const char *);
|
||||||
typedef const char *(*MILTER_DEL_HEADER_FN) (void *, ssize_t, const char *);
|
typedef const char *(*MILTER_DEL_HEADER_FN) (void *, ssize_t, const char *);
|
||||||
|
typedef const char *(*MILTER_EDIT_FROM_FN) (void *, const char *, const char *);
|
||||||
typedef const char *(*MILTER_EDIT_RCPT_FN) (void *, const char *);
|
typedef const char *(*MILTER_EDIT_RCPT_FN) (void *, const char *);
|
||||||
|
typedef const char *(*MILTER_EDIT_RCPT_PAR_FN) (void *, const char *, const char *);
|
||||||
typedef const char *(*MILTER_EDIT_BODY_FN) (void *, int, VSTRING *);
|
typedef const char *(*MILTER_EDIT_BODY_FN) (void *, int, VSTRING *);
|
||||||
|
|
||||||
typedef struct MILTERS {
|
typedef struct MILTERS {
|
||||||
@ -104,7 +106,9 @@ typedef struct MILTERS {
|
|||||||
MILTER_EDIT_HEADER_FN upd_header;
|
MILTER_EDIT_HEADER_FN upd_header;
|
||||||
MILTER_DEL_HEADER_FN del_header;
|
MILTER_DEL_HEADER_FN del_header;
|
||||||
MILTER_EDIT_HEADER_FN ins_header;
|
MILTER_EDIT_HEADER_FN ins_header;
|
||||||
|
MILTER_EDIT_FROM_FN chg_from;
|
||||||
MILTER_EDIT_RCPT_FN add_rcpt;
|
MILTER_EDIT_RCPT_FN add_rcpt;
|
||||||
|
MILTER_EDIT_RCPT_PAR_FN add_rcpt_par;
|
||||||
MILTER_EDIT_RCPT_FN del_rcpt;
|
MILTER_EDIT_RCPT_FN del_rcpt;
|
||||||
MILTER_EDIT_BODY_FN repl_body;
|
MILTER_EDIT_BODY_FN repl_body;
|
||||||
} MILTERS;
|
} MILTERS;
|
||||||
@ -123,7 +127,8 @@ extern MILTERS *milter_new(const char *, int, int, int, const char *,
|
|||||||
extern void milter_macro_callback(MILTERS *, MILTER_MAC_LOOKUP_FN, void *);
|
extern void milter_macro_callback(MILTERS *, MILTER_MAC_LOOKUP_FN, void *);
|
||||||
extern void milter_edit_callback(MILTERS *milters, MILTER_ADD_HEADER_FN,
|
extern void milter_edit_callback(MILTERS *milters, MILTER_ADD_HEADER_FN,
|
||||||
MILTER_EDIT_HEADER_FN, MILTER_EDIT_HEADER_FN,
|
MILTER_EDIT_HEADER_FN, MILTER_EDIT_HEADER_FN,
|
||||||
MILTER_DEL_HEADER_FN, MILTER_EDIT_RCPT_FN,
|
MILTER_DEL_HEADER_FN, MILTER_EDIT_FROM_FN,
|
||||||
|
MILTER_EDIT_RCPT_FN, MILTER_EDIT_RCPT_PAR_FN,
|
||||||
MILTER_EDIT_RCPT_FN, MILTER_EDIT_BODY_FN,
|
MILTER_EDIT_RCPT_FN, MILTER_EDIT_BODY_FN,
|
||||||
void *);
|
void *);
|
||||||
extern const char *milter_conn_event(MILTERS *, const char *, const char *, const char *, unsigned);
|
extern const char *milter_conn_event(MILTERS *, const char *, const char *, const char *, unsigned);
|
||||||
|
@ -1412,6 +1412,30 @@ static const char *milter8_event(MILTER8 *milter, int event,
|
|||||||
STR(milter->body));
|
STR(milter->body));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Modification request: replace sender, with optional
|
||||||
|
* ESMTP args.
|
||||||
|
*/
|
||||||
|
case SMFIR_CHGFROM:
|
||||||
|
if (milter8_read_data(milter, &data_size,
|
||||||
|
MILTER8_DATA_STRING, milter->buf,
|
||||||
|
MILTER8_DATA_MORE) != 0)
|
||||||
|
MILTER8_EVENT_BREAK(milter->def_reply);
|
||||||
|
if (data_size > 0) {
|
||||||
|
if (milter8_read_data(milter, &data_size,
|
||||||
|
MILTER8_DATA_STRING, milter->body,
|
||||||
|
MILTER8_DATA_END) != 0)
|
||||||
|
MILTER8_EVENT_BREAK(milter->def_reply);
|
||||||
|
} else
|
||||||
|
STR(milter->body)[0] = 0;
|
||||||
|
/* Skip to the next request after previous edit error. */
|
||||||
|
if (edit_resp)
|
||||||
|
continue;
|
||||||
|
edit_resp = parent->chg_from(parent->chg_context,
|
||||||
|
STR(milter->buf),
|
||||||
|
STR(milter->body));
|
||||||
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Modification request: append recipient.
|
* Modification request: append recipient.
|
||||||
*/
|
*/
|
||||||
@ -1427,6 +1451,30 @@ static const char *milter8_event(MILTER8 *milter, int event,
|
|||||||
STR(milter->buf));
|
STR(milter->buf));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Modification request: append recipient, with optional
|
||||||
|
* ESMTP args.
|
||||||
|
*/
|
||||||
|
case SMFIR_ADDRCPT_PAR:
|
||||||
|
if (milter8_read_data(milter, &data_size,
|
||||||
|
MILTER8_DATA_STRING, milter->buf,
|
||||||
|
MILTER8_DATA_MORE) != 0)
|
||||||
|
MILTER8_EVENT_BREAK(milter->def_reply);
|
||||||
|
if (data_size > 0) {
|
||||||
|
if (milter8_read_data(milter, &data_size,
|
||||||
|
MILTER8_DATA_STRING, milter->body,
|
||||||
|
MILTER8_DATA_END) != 0)
|
||||||
|
MILTER8_EVENT_BREAK(milter->def_reply);
|
||||||
|
} else
|
||||||
|
STR(milter->body)[0] = 0;
|
||||||
|
/* Skip to the next request after previous edit error. */
|
||||||
|
if (edit_resp)
|
||||||
|
continue;
|
||||||
|
edit_resp = parent->add_rcpt_par(parent->chg_context,
|
||||||
|
STR(milter->buf),
|
||||||
|
STR(milter->body));
|
||||||
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Modification request: delete (expansion of) recipient.
|
* Modification request: delete (expansion of) recipient.
|
||||||
*/
|
*/
|
||||||
@ -1542,10 +1590,8 @@ static void milter8_connect(MILTER8 *milter)
|
|||||||
| SMFIF_DELRCPT | SMFIF_CHGHDRS
|
| SMFIF_DELRCPT | SMFIF_CHGHDRS
|
||||||
| SMFIF_CHGBODY
|
| SMFIF_CHGBODY
|
||||||
| SMFIF_QUARANTINE
|
| SMFIF_QUARANTINE
|
||||||
#if 0
|
|
||||||
| SMFIF_CHGFROM
|
| SMFIF_CHGFROM
|
||||||
| SMFIF_ADDRCPT_PAR
|
| SMFIF_ADDRCPT_PAR
|
||||||
#endif
|
|
||||||
| SMFIF_SETSYMLIST
|
| SMFIF_SETSYMLIST
|
||||||
);
|
);
|
||||||
UINT32_TYPE my_version = 0;
|
UINT32_TYPE my_version = 0;
|
||||||
|
@ -27,10 +27,12 @@
|
|||||||
/* .IP "\fB-c connect|helo|mail|rcpt|data|header|eoh|body|eom|unknown|close|abort\fR"
|
/* .IP "\fB-c connect|helo|mail|rcpt|data|header|eoh|body|eom|unknown|close|abort\fR"
|
||||||
/* When to send the non-default reply specified with \fB-a\fR.
|
/* When to send the non-default reply specified with \fB-a\fR.
|
||||||
/* The default protocol stage is \fBconnect\fR.
|
/* The default protocol stage is \fBconnect\fR.
|
||||||
/* .IP "\fB-d\fI level\fR"
|
|
||||||
/* Enable libmilter debugging at the specified level.
|
|
||||||
/* .IP "\fB-C\fI count\fR"
|
/* .IP "\fB-C\fI count\fR"
|
||||||
/* Terminate after \fIcount\fR connections.
|
/* Terminate after \fIcount\fR connections.
|
||||||
|
/* .IP "\fB-d\fI level\fR"
|
||||||
|
/* Enable libmilter debugging at the specified level.
|
||||||
|
/* .IP "\fB-f \fIsender\fR
|
||||||
|
/* Replace the sender by the specified address.
|
||||||
/* .IP "\fB-h \fI'index header-label header-value'\fR"
|
/* .IP "\fB-h \fI'index header-label header-value'\fR"
|
||||||
/* Replace the message header at the specified position.
|
/* Replace the message header at the specified position.
|
||||||
/* .IP "\fB-i \fI'index header-label header-value'\fR"
|
/* .IP "\fB-i \fI'index header-label header-value'\fR"
|
||||||
@ -132,6 +134,11 @@ static char *reply_code;
|
|||||||
static char *reply_dsn;
|
static char *reply_dsn;
|
||||||
static char *reply_message;
|
static char *reply_message;
|
||||||
|
|
||||||
|
#ifdef SMFIR_CHGFROM
|
||||||
|
static char *chg_from;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SMFIR_INSHEADER
|
#ifdef SMFIR_INSHEADER
|
||||||
static char *ins_hdr;
|
static char *ins_hdr;
|
||||||
static int ins_idx;
|
static int ins_idx;
|
||||||
@ -194,7 +201,7 @@ static int test_reply(SMFICTX *ctx, int code)
|
|||||||
for (cpp = macro_names; *cpp; cpp++)
|
for (cpp = macro_names; *cpp; cpp++)
|
||||||
if ((symval = smfi_getsymval(ctx, (char *) *cpp)) != 0)
|
if ((symval = smfi_getsymval(ctx, (char *) *cpp)) != 0)
|
||||||
printf("macro: %s=\"%s\"\n", *cpp, symval);
|
printf("macro: %s=\"%s\"\n", *cpp, symval);
|
||||||
(void) fflush(stdout); /* In case output redirected. */
|
(void) fflush(stdout); /* In case output redirected. */
|
||||||
|
|
||||||
if (code == SMFIR_REPLYCODE) {
|
if (code == SMFIR_REPLYCODE) {
|
||||||
if (smfi_setmlreply(ctx, reply_code, reply_dsn, reply_message, reply_message, (char *) 0) == MI_FAILURE)
|
if (smfi_setmlreply(ctx, reply_code, reply_dsn, reply_message, reply_message, (char *) 0) == MI_FAILURE)
|
||||||
@ -332,6 +339,12 @@ static sfsistat test_eom(SMFICTX *ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SMFIR_CHGFROM
|
||||||
|
if (chg_from != 0 && smfi_chgfrom(ctx, chg_from, "whatever") == MI_FAILURE)
|
||||||
|
fprintf(stderr, "smfi_chgfrom failed\n");
|
||||||
|
else
|
||||||
|
printf("smfi_chgfrom OK\n");
|
||||||
|
#endif
|
||||||
#ifdef SMFIR_INSHEADER
|
#ifdef SMFIR_INSHEADER
|
||||||
if (ins_hdr && smfi_insheader(ctx, ins_idx, ins_hdr, ins_val) == MI_FAILURE)
|
if (ins_hdr && smfi_insheader(ctx, ins_idx, ins_hdr, ins_val) == MI_FAILURE)
|
||||||
fprintf(stderr, "smfi_insheader failed\n");
|
fprintf(stderr, "smfi_insheader failed\n");
|
||||||
@ -395,7 +408,7 @@ static struct smfiDesc smfilter =
|
|||||||
{
|
{
|
||||||
"test-milter",
|
"test-milter",
|
||||||
SMFI_VERSION,
|
SMFI_VERSION,
|
||||||
SMFIF_ADDRCPT | SMFIF_DELRCPT | SMFIF_ADDHDRS | SMFIF_CHGHDRS | SMFIF_CHGBODY,
|
SMFIF_ADDRCPT | SMFIF_DELRCPT | SMFIF_ADDHDRS | SMFIF_CHGHDRS | SMFIF_CHGBODY | SMFIF_CHGFROM,
|
||||||
test_connect,
|
test_connect,
|
||||||
test_helo,
|
test_helo,
|
||||||
test_mail,
|
test_mail,
|
||||||
@ -517,7 +530,7 @@ int main(int argc, char **argv)
|
|||||||
char *noreply = 0;
|
char *noreply = 0;
|
||||||
const struct noproto_map *np;
|
const struct noproto_map *np;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "a:A:b:c:C:d:h:i:lm:M:n:N:p:rv")) > 0) {
|
while ((ch = getopt(argc, argv, "a:A:b:c:C:d:f:h:i:lm:M:n:N:p:rv")) > 0) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'a':
|
case 'a':
|
||||||
action = optarg;
|
action = optarg;
|
||||||
@ -549,6 +562,18 @@ int main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'f':
|
||||||
|
#ifdef SMFIR_CHGFROM
|
||||||
|
if (chg_from) {
|
||||||
|
fprintf(stderr, "too many -f options\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
chg_from = optarg;
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "no libmilter support to change sender\n");
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
#ifdef SMFIR_CHGHEADER
|
#ifdef SMFIR_CHGHEADER
|
||||||
if (chg_hdr) {
|
if (chg_hdr) {
|
||||||
@ -662,7 +687,7 @@ int main(int argc, char **argv)
|
|||||||
"\t[-n events] don't receive these events\n"
|
"\t[-n events] don't receive these events\n"
|
||||||
"\t[-N events] don't reply to these events\n"
|
"\t[-N events] don't reply to these events\n"
|
||||||
"\t-p port milter application\n"
|
"\t-p port milter application\n"
|
||||||
"\t-r request rejected recipients\n"
|
"\t-r request rejected recipients\n"
|
||||||
"\t[-C conn_count] when to exit\n",
|
"\t[-C conn_count] when to exit\n",
|
||||||
argv[0]);
|
argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -407,7 +407,7 @@ void smtp_chat_notify(SMTP_SESSION *session)
|
|||||||
|
|
||||||
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
var_error_rcpt,
|
var_error_rcpt,
|
||||||
INT_FILT_NOTIFY,
|
INT_FILT_MASK_NOTIFY,
|
||||||
NULL_TRACE_FLAGS, NO_QUEUE_ID);
|
NULL_TRACE_FLAGS, NO_QUEUE_ID);
|
||||||
if (notice == 0) {
|
if (notice == 0) {
|
||||||
msg_warn("postmaster notify: %m");
|
msg_warn("postmaster notify: %m");
|
||||||
|
@ -1753,12 +1753,15 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
|
|||||||
* XXX Don't downgrade just because generic_maps is turned
|
* XXX Don't downgrade just because generic_maps is turned
|
||||||
* on.
|
* on.
|
||||||
*/
|
*/
|
||||||
if (downgrading || smtp_generic_maps || smtp_header_checks
|
#define SMTP_ANY_CHECKS (smtp_header_checks || smtp_body_checks)
|
||||||
|| smtp_body_checks)
|
|
||||||
|
if (downgrading || smtp_generic_maps || SMTP_ANY_CHECKS)
|
||||||
session->mime_state = mime_state_alloc(downgrading ?
|
session->mime_state = mime_state_alloc(downgrading ?
|
||||||
MIME_OPT_DOWNGRADE
|
MIME_OPT_DOWNGRADE
|
||||||
| MIME_OPT_REPORT_NESTING :
|
| MIME_OPT_REPORT_NESTING :
|
||||||
MIME_OPT_DISABLE_MIME,
|
SMTP_ANY_CHECKS == 0 ?
|
||||||
|
MIME_OPT_DISABLE_MIME :
|
||||||
|
0,
|
||||||
smtp_generic_maps
|
smtp_generic_maps
|
||||||
|| smtp_header_checks ?
|
|| smtp_header_checks ?
|
||||||
smtp_header_rewrite :
|
smtp_header_rewrite :
|
||||||
|
@ -176,9 +176,10 @@
|
|||||||
/* .IP "\fBsmtpd_milters (empty)\fR"
|
/* .IP "\fBsmtpd_milters (empty)\fR"
|
||||||
/* A list of Milter (mail filter) applications for new mail that
|
/* A list of Milter (mail filter) applications for new mail that
|
||||||
/* arrives via the Postfix \fBsmtpd\fR(8) server.
|
/* arrives via the Postfix \fBsmtpd\fR(8) server.
|
||||||
/* .IP "\fBmilter_protocol (2)\fR"
|
/* .IP "\fBmilter_protocol (6)\fR"
|
||||||
/* The mail filter protocol version and optional protocol extensions
|
/* The mail filter protocol version and optional protocol extensions
|
||||||
/* for communication with a Milter (mail filter) application.
|
/* for communication with a Milter application; prior to Postfix 2.6
|
||||||
|
/* the default protocol is 2.
|
||||||
/* .IP "\fBmilter_default_action (tempfail)\fR"
|
/* .IP "\fBmilter_default_action (tempfail)\fR"
|
||||||
/* The default action when a Milter (mail filter) application is
|
/* The default action when a Milter (mail filter) application is
|
||||||
/* unavailable or mis-configured.
|
/* unavailable or mis-configured.
|
||||||
|
@ -246,7 +246,7 @@ void smtpd_chat_notify(SMTPD_STATE *state)
|
|||||||
|
|
||||||
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
notice = post_mail_fopen_nowait(mail_addr_double_bounce(),
|
||||||
var_error_rcpt,
|
var_error_rcpt,
|
||||||
INT_FILT_NOTIFY,
|
INT_FILT_MASK_NOTIFY,
|
||||||
NULL_TRACE_FLAGS, NO_QUEUE_ID);
|
NULL_TRACE_FLAGS, NO_QUEUE_ID);
|
||||||
if (notice == 0) {
|
if (notice == 0) {
|
||||||
msg_warn("postmaster notify: %m");
|
msg_warn("postmaster notify: %m");
|
||||||
|
@ -471,7 +471,7 @@ static void verify_query_service(VSTREAM *client_stream)
|
|||||||
STR(addr), addr_status, now, updated);
|
STR(addr), addr_status, now, updated);
|
||||||
post_mail_fopen_async(strcmp(var_verify_sender, "<>") == 0 ?
|
post_mail_fopen_async(strcmp(var_verify_sender, "<>") == 0 ?
|
||||||
"" : var_verify_sender, STR(addr),
|
"" : var_verify_sender, STR(addr),
|
||||||
INT_FILT_NONE,
|
INT_FILT_MASK_NONE,
|
||||||
DEL_REQ_FLAG_MTA_VRFY,
|
DEL_REQ_FLAG_MTA_VRFY,
|
||||||
(VSTRING *) 0,
|
(VSTRING *) 0,
|
||||||
verify_post_mail_action,
|
verify_post_mail_action,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user