Cleanup (for change 20120824): the DSN RET attribute should
not be stored once per recipient. It is a message property
just like DSN ENVID. File: sendmail/sendmail.c.
+
+20120911
+
+ Documentation: more explicit enumeration of what happens
+ when setting a per-destination recipient limit value to 1.
+ File: proto/postconf.proto.
+
+20120918
+
+ Documentation: clarified the bounce/queue_life-time parameter
+ descriptions. File: proto/postconf.proto.
+
+20120920
+
+ Documentation: the postscreen_whitelist_interfaces parameter
+ syntax was defined only by example. File: proto/postconf.proto.
+
+20120923
+
+ Infrastructure: cleaned up the support for database
+ lock-on-open. This is needed for databases that are not
+ multi-updater safe. Files: util/dict_alloc.c, util/dict.c,
+ util/dict_open.c, util/dict.h. tls/tls_scache.c.
+
+20120924
+
+ Documentation: some people are read-challenged distribute
+ their own incorrect understanding of master.cf syntax.
+ File: proto/master.
+
+ Cleanup: don't emulate UNIX-domain sockets over FIFOs on
+ Solaris systems less than 10 years old. This allows us to
+ globally s/fifo/unix/ in master.cf. Files: makedefs,
+ util/sys_defs.h.
+
+ Laptop-friendliness: avoid disk spin-up on idle systems by
+ s/fifo/unix/ in master.cf. Files: conf/master.cf.
G\bGe\ben\bne\ber\bra\bal\bl o\bop\bpe\ber\bra\bat\bti\bio\bon\bn
-The postscreen(8) triage process involves a number of tests, in the order as
-described below. Some tests introduce a delay of a few seconds. postscreen(8)
-maintains a temporary whitelist for clients that pass its tests; by allowing
-whitelisted clients to skip tests, postscreen(8) minimizes its impact on
-legitimate email traffic.
+For each connection from an SMTP client, postscreen(8) performs a number of
+tests in the order as described below. Some tests introduce a delay of a few
+seconds. postscreen(8) maintains a temporary whitelist for clients that pass
+its tests; by allowing whitelisted clients to skip tests, postscreen(8)
+minimizes its impact on legitimate email traffic.
By default, postscreen(8) hands off all connections to a Postfix SMTP server
process after logging its findings. This mode is useful for non-destructive
Don't forget Apple's code donation for fetching mail from
IMAP server.
+ Make "rename" the default when postmapping a DB file
+ (later: use copy+rename for postmap -i, postmap -d).
+
+ On most systems, switching the qmgr and pickup services
+ from "fifo" to "unix" endpoints can avoid disk spin-up due
+ to mtime changes. However, Postfix on Solaris emulates
+ UNIX-domain sockets by sending a file handle through a FIFO.
+ Either we need to a) find out if a Solaris FIFO is a "unix"
+ or "fifo" endpoint (parsing master.cf is not an option for
+ chrooted daemons), or b) silently implement a Solaris "fifo"
+ endpoint as if master.cf says "unix", so that all Solaris
+ FIFOs are emulated UNIX-domain endpoints. Or, we bite the
+ bullet and stop emulating UNIX-domain onver FIFOs.
+
+ Service-name parameters aren't documented in daemon manpages.
+
+ When faking up the DSN ORCPT, don't send bare usernames
+ from local command-line submission.
+
+ lmtp_assume_final is broken. A 2XX response does not imply
+ final delivery. The Sieve language implements accept-then-bounce.
+
+ postscreen event-driven plug-in interface to send out a
+ query in parallel with the Pregreet and DNSBL tests, using
+ a simplified version of the policy delegation protocol.
+
Parallelized queue preprocessing: rip out the queue manager
code to read queue files and resolve recipients, and run
it in parallel processes. The queue manager then processes
compared to hundreds of mail receiving or sending processes
(especially if there is a way to scan the queue in parallel).
- mem_pool module for frequently-allocated objects
- such as postscreen VSTRINGS and STATE objects.
- Operations: create, put, get, maybe destroy.
- Call-backs: init, reset, and maybe destroy.
-
- Make "rename" the default when postmapping a DB file
- (later: use copy+rename for postmap -i, postmap -d).
+ Memory pools for same-type memory objects. This can be
+ used to either increase memory locality for frequently-allocated
+ objects (MRU allocation) or to make use-after-free bugs
+ more detectable (use LRU allocation and wipe the object
+ immediately after free(). Finally, same-type memory pools
+ prevent object type errors with use-after-free bugs.
"no-cache" option for selected postscreen tests?
Replace master(8) SIGHUP by very simple socket protocol to
allow reload of a specific service.
- Make the "trigger" service endpoint type configurable. On
- non-Solaris systems, switching from fifo to unix can avoid
- disk spin-up due to mtime changes (Postfix on Solaris
- emulates UNIX-domain sockets by sending a file handle through
- a FIFO).
-
- Service-name parameters aren't documented in daemon manpages.
-
- When faking up the DSN ORCPT, don't send bare usernames
- from local command-line submission.
-
- lmtp_assume_final is broken. A 2XX response does not imply
- final delivery. The Sieve language implements accept-then-bounce.
-
postscreen: in the dummy SMTP engine, log the protocol state
at time of violation (like smtpd, set state->where initially
to CONNECT, then update it with the name of the last "known"
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - n - - qmqpd
-pickup fifo n - n 60 1 pickup
+pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
-qmgr fifo n - n 300 1 qmgr
-#qmgr fifo n - n 300 1 oqmgr
+qmgr unix n - n 300 1 qmgr
+#qmgr unix n - n 300 1 oqmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
<h2> <a name="general"> General operation </a> </h2>
-<p> The <a href="postscreen.8.html">postscreen(8)</a> triage process involves a number of tests,
+<p> For each connection from an SMTP client, <a href="postscreen.8.html">postscreen(8)</a> performs
+a number of tests
in the order as described below. Some tests introduce a delay of
a few seconds. <a href="postscreen.8.html">postscreen(8)</a> maintains a temporary whitelist for
clients that pass its tests; by allowing whitelisted clients to
<b>-R</b> <i>return</i>
Delivery status notification control. Specify
- "hdrs" to return only the header if a message
+ "hdrs" to return only the header when a message
bounces, "full" to return a full copy (the default
behavior).
- The <b>-R</b> option specifies an upper bound; for exam-
- ple, Postfix will return only the header, when a
- full copy would exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> set-
- ting.
+ The <b>-R</b> option specifies an upper bound; Postfix
+ will return only the header, when a full copy would
+ exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> setting.
This option is ignored before Postfix version 2.10.
- <b>-q</b> Attempt to deliver all queued mail. This is imple-
+ <b>-q</b> Attempt to deliver all queued mail. This is imple-
mented by executing the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command.
Warning: flushing undeliverable mail frequently
- will result in poor delivery performance of all
+ will result in poor delivery performance of all
other mail.
<b>-q</b><i>interval</i> (ignored)
- The interval between queue runs. Use the
+ The interval between queue runs. Use the
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a></b> configuration parameter instead.
<b>-qI</b><i>queueid</i>
Schedule immediate delivery of mail with the speci-
- fied queue ID. This option is implemented by exe-
- cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
+ fied queue ID. This option is implemented by exe-
+ cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
with Postfix version 2.4 and later.
<b>-qR</b><i>site</i>
- Schedule immediate delivery of all mail that is
+ Schedule immediate delivery of all mail that is
queued for the named <i>site</i>. This option accepts only
- <i>site</i> names that are eligible for the "fast flush"
- service, and is implemented by executing the
+ <i>site</i> names that are eligible for the "fast flush"
+ service, and is implemented by executing the
<a href="postqueue.1.html"><b>postqueue</b>(1)</a> command. See <a href="flush.8.html"><b>flush</b>(8)</a> for more infor-
mation about the "fast flush" service.
<b>-qS</b><i>site</i>
- This command is not implemented. Use the slower
+ This command is not implemented. Use the slower
"<b>sendmail -q</b>" command instead.
- <b>-t</b> Extract recipients from message headers. These are
- added to any recipients specified on the command
+ <b>-t</b> Extract recipients from message headers. These are
+ added to any recipients specified on the command
line.
- With Postfix versions prior to 2.1, this option
- requires that no recipient addresses are specified
+ With Postfix versions prior to 2.1, this option
+ requires that no recipient addresses are specified
on the command line.
<b>-U</b> (ignored)
This feature is available in Postfix 2.3 and later.
<b>-XV</b> (Postfix 2.2 and earlier: <b>-V</b>)
- Variable Envelope Return Path. Given an envelope
- sender address of the form <i>owner-listname</i>@<i>origin</i>,
- each recipient <i>user</i>@<i>domain</i> receives mail with a
+ Variable Envelope Return Path. Given an envelope
+ sender address of the form <i>owner-listname</i>@<i>origin</i>,
+ each recipient <i>user</i>@<i>domain</i> receives mail with a
personalized envelope sender address.
- By default, the personalized envelope sender
- address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
- default <b>+</b> and <b>=</b> characters are configurable with
- the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
+ By default, the personalized envelope sender
+ address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
+ default <b>+</b> and <b>=</b> characters are configurable with
+ the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
ter.
<b>-XV</b><i>xy</i> (Postfix 2.2 and earlier: <b>-V</b><i>xy</i>)
- As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
- characters, instead of the characters specified
- with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
+ As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
+ characters, instead of the characters specified
+ with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
parameter.
- <b>-v</b> Send an email report of the first delivery attempt
- (Postfix versions 2.1 and later). Mail delivery
- always happens in the background. When multiple <b>-v</b>
+ <b>-v</b> Send an email report of the first delivery attempt
+ (Postfix versions 2.1 and later). Mail delivery
+ always happens in the background. When multiple <b>-v</b>
options are given, enable verbose logging for
debugging purposes.
<b>-X</b> <i>log</i><b>_</b><i>file</i> (ignored)
- Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
- <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
+ Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
+ <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
<b>SECURITY</b>
- By design, this program is not set-user (or group) id.
- However, it must handle data from untrusted, possibly
- remote, users. Thus, the usual precautions need to be
+ By design, this program is not set-user (or group) id.
+ However, it must handle data from untrusted, possibly
+ remote, users. Thus, the usual precautions need to be
taken against malicious inputs.
<b>DIAGNOSTICS</b>
- Problems are logged to <b>syslogd</b>(8) and to the standard
+ Problems are logged to <b>syslogd</b>(8) and to the standard
error stream.
<b>ENVIRONMENT</b>
<b>MAIL_DEBUG</b> (value does not matter)
Enable debugging with an external command, as spec-
- ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
+ ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
parameter.
- <b>NAME</b> The sender full name. This is used only with mes-
- sages that have no <b>From:</b> message header. See also
+ <b>NAME</b> The sender full name. This is used only with mes-
+ sages that have no <b>From:</b> message header. See also
the <b>-F</b> option above.
<b>CONFIGURATION PARAMETERS</b>
- The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
+ The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
to this program. The text below provides only a parameter
- summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
+ summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
ples.
<b>COMPATIBILITY CONTROLS</b>
Available with Postfix 2.9 and later:
<b><a href="postconf.5.html#sendmail_fix_line_endings">sendmail_fix_line_endings</a> (always)</b>
- Controls how the Postfix sendmail command converts
- email message line endings from <CR><LF> into UNIX
+ Controls how the Postfix sendmail command converts
+ email message line endings from <CR><LF> into UNIX
format (<LF>).
<b>TROUBLE SHOOTING CONTROLS</b>
- The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
+ The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
shoot a Postfix system.
<b><a href="postconf.5.html#debugger_command">debugger_command</a> (empty)</b>
mon program is invoked with the -D option.
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
- The increment in verbose logging level when a
- remote client or server matches a pattern in the
+ The increment in verbose logging level when a
+ remote client or server matches a pattern in the
<a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
- Optional list of remote client or server hostname
- or network address patterns that cause the verbose
- logging level to increase by the amount specified
+ Optional list of remote client or server hostname
+ or network address patterns that cause the verbose
+ logging level to increase by the amount specified
in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b>ACCESS CONTROLS</b>
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#authorized_flush_users">authorized_flush_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to flush the
+ List of users who are authorized to flush the
queue.
<b><a href="postconf.5.html#authorized_mailq_users">authorized_mailq_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
List of users who are authorized to view the queue.
<b><a href="postconf.5.html#authorized_submit_users">authorized_submit_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to submit mail
- with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
+ List of users who are authorized to submit mail
+ with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
leged <a href="postdrop.1.html"><b>postdrop</b>(1)</a> helper command).
<b>RESOURCE AND RATE CONTROLS</b>
sent in a non-delivery notification.
<b><a href="postconf.5.html#fork_attempts">fork_attempts</a> (5)</b>
- The maximal number of attempts to fork() a child
+ The maximal number of attempts to fork() a child
process.
<b><a href="postconf.5.html#fork_delay">fork_delay</a> (1s)</b>
process.
<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.
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a> (300s)</b>
- The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
+ The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
manager; prior to Postfix 2.4 the default value was
1000s.
<b><a href="postconf.5.html#fast_flush_domains">fast_flush_domains</a> ($<a href="postconf.5.html#relay_domains">relay_domains</a>)</b>
Optional list of destinations that are eligible for
- per-destination logfiles with mail that is queued
+ per-destination logfiles with mail that is queued
to those destinations.
<b>VERP CONTROLS</b>
The <a href="VERP_README.html">VERP_README</a> file describes configuration and operation
- details of Postfix support for variable envelope return
+ details of Postfix support for variable envelope return
path addresses.
<b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a> (+=)</b>
The two default VERP delimiter characters.
<b><a href="postconf.5.html#verp_delimiter_filter">verp_delimiter_filter</a> (-=+)</b>
- The characters Postfix accepts as VERP delimiter
- characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
+ The characters Postfix accepts as VERP delimiter
+ characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
and in SMTP commands.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#alias_database">alias_database</a> (see 'postconf -d' output)</b>
- The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
+ The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
updated with "<b>newaliases</b>" or with "<b>sendmail -bi</b>".
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
- The location of all postfix administrative com-
+ The location of all postfix administrative com-
mands.
<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.
<b><a href="postconf.5.html#daemon_directory">daemon_directory</a> (see 'postconf -d' output)</b>
- The directory with Postfix support programs and
+ The directory with Postfix support programs and
daemon programs.
<b><a href="postconf.5.html#default_database_type">default_database_type</a> (see 'postconf -d' output)</b>
<a href="postalias.1.html"><b>postalias</b>(1)</a> and <a href="postmap.1.html"><b>postmap</b>(1)</a> commands.
<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.
<b><a href="postconf.5.html#enable_errors_to">enable_errors_to</a> (no)</b>
- Report mail delivery errors to the address speci-
- fied with the non-standard Errors-To: message
- header, instead of the envelope sender address
- (this feature is removed with Postfix version 2.2,
- is turned off by default with Postfix version 2.1,
- and is always turned on with older Postfix ver-
+ Report mail delivery errors to the address speci-
+ fied with the non-standard Errors-To: message
+ header, instead of the envelope sender address
+ (this feature is removed with Postfix version 2.2,
+ is turned off by default with Postfix version 2.1,
+ and is always turned on with older Postfix ver-
sions).
<b><a href="postconf.5.html#mail_owner">mail_owner</a> (postfix)</b>
and most Postfix daemon processes.
<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.
<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-
- write message headers and append the specified
+ write message headers and append the specified
domain name to incomplete addresses.
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
- The mail system name that is prepended to the
- process name in syslog records, so that "smtpd"
+ The mail system name that is prepended to the
+ process name in syslog records, so that "smtpd"
becomes, for example, "postfix/smtpd".
<b>FILES</b>
<a href="VERP_README.html">VERP_README</a>, Postfix VERP howto
<b>LICENSE</b>
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>
<b>SYNTAX</b>
The general format of the <a href="master.5.html">master.cf</a> file is as follows:
+ <b>o</b> Empty lines and whitespace-only lines are ignored,
+ as are lines whose first non-whitespace character
+ is a `#'.
+
+ <b>o</b> A logical line starts with non-whitespace text. A
+ line that starts with whitespace continues a logi-
+ cal line.
+
<b>o</b> Each logical line defines a single Postfix service.
Each service is identified by its name and type as
described below. When multiple lines specify the
remembered. Otherwise, the order of <a href="master.5.html">master.cf</a> ser-
vice definitions does not matter.
- <b>o</b> Empty lines and whitespace-only lines are ignored,
- as are lines whose first non-whitespace character
- is a `#'.
-
- <b>o</b> A logical line starts with non-whitespace text. A
- line that starts with whitespace continues a logi-
- cal line.
-
Each logical line consists of eight fields separated by
whitespace. These are described below in the order as
they appear in the <a href="master.5.html">master.cf</a> file.
<b>-R</b> <i>return</i>
Delivery status notification control. Specify
- "hdrs" to return only the header if a message
+ "hdrs" to return only the header when a message
bounces, "full" to return a full copy (the default
behavior).
- The <b>-R</b> option specifies an upper bound; for exam-
- ple, Postfix will return only the header, when a
- full copy would exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> set-
- ting.
+ The <b>-R</b> option specifies an upper bound; Postfix
+ will return only the header, when a full copy would
+ exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> setting.
This option is ignored before Postfix version 2.10.
- <b>-q</b> Attempt to deliver all queued mail. This is imple-
+ <b>-q</b> Attempt to deliver all queued mail. This is imple-
mented by executing the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command.
Warning: flushing undeliverable mail frequently
- will result in poor delivery performance of all
+ will result in poor delivery performance of all
other mail.
<b>-q</b><i>interval</i> (ignored)
- The interval between queue runs. Use the
+ The interval between queue runs. Use the
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a></b> configuration parameter instead.
<b>-qI</b><i>queueid</i>
Schedule immediate delivery of mail with the speci-
- fied queue ID. This option is implemented by exe-
- cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
+ fied queue ID. This option is implemented by exe-
+ cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
with Postfix version 2.4 and later.
<b>-qR</b><i>site</i>
- Schedule immediate delivery of all mail that is
+ Schedule immediate delivery of all mail that is
queued for the named <i>site</i>. This option accepts only
- <i>site</i> names that are eligible for the "fast flush"
- service, and is implemented by executing the
+ <i>site</i> names that are eligible for the "fast flush"
+ service, and is implemented by executing the
<a href="postqueue.1.html"><b>postqueue</b>(1)</a> command. See <a href="flush.8.html"><b>flush</b>(8)</a> for more infor-
mation about the "fast flush" service.
<b>-qS</b><i>site</i>
- This command is not implemented. Use the slower
+ This command is not implemented. Use the slower
"<b>sendmail -q</b>" command instead.
- <b>-t</b> Extract recipients from message headers. These are
- added to any recipients specified on the command
+ <b>-t</b> Extract recipients from message headers. These are
+ added to any recipients specified on the command
line.
- With Postfix versions prior to 2.1, this option
- requires that no recipient addresses are specified
+ With Postfix versions prior to 2.1, this option
+ requires that no recipient addresses are specified
on the command line.
<b>-U</b> (ignored)
This feature is available in Postfix 2.3 and later.
<b>-XV</b> (Postfix 2.2 and earlier: <b>-V</b>)
- Variable Envelope Return Path. Given an envelope
- sender address of the form <i>owner-listname</i>@<i>origin</i>,
- each recipient <i>user</i>@<i>domain</i> receives mail with a
+ Variable Envelope Return Path. Given an envelope
+ sender address of the form <i>owner-listname</i>@<i>origin</i>,
+ each recipient <i>user</i>@<i>domain</i> receives mail with a
personalized envelope sender address.
- By default, the personalized envelope sender
- address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
- default <b>+</b> and <b>=</b> characters are configurable with
- the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
+ By default, the personalized envelope sender
+ address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
+ default <b>+</b> and <b>=</b> characters are configurable with
+ the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
ter.
<b>-XV</b><i>xy</i> (Postfix 2.2 and earlier: <b>-V</b><i>xy</i>)
- As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
- characters, instead of the characters specified
- with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
+ As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
+ characters, instead of the characters specified
+ with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
parameter.
- <b>-v</b> Send an email report of the first delivery attempt
- (Postfix versions 2.1 and later). Mail delivery
- always happens in the background. When multiple <b>-v</b>
+ <b>-v</b> Send an email report of the first delivery attempt
+ (Postfix versions 2.1 and later). Mail delivery
+ always happens in the background. When multiple <b>-v</b>
options are given, enable verbose logging for
debugging purposes.
<b>-X</b> <i>log</i><b>_</b><i>file</i> (ignored)
- Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
- <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
+ Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
+ <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
<b>SECURITY</b>
- By design, this program is not set-user (or group) id.
- However, it must handle data from untrusted, possibly
- remote, users. Thus, the usual precautions need to be
+ By design, this program is not set-user (or group) id.
+ However, it must handle data from untrusted, possibly
+ remote, users. Thus, the usual precautions need to be
taken against malicious inputs.
<b>DIAGNOSTICS</b>
- Problems are logged to <b>syslogd</b>(8) and to the standard
+ Problems are logged to <b>syslogd</b>(8) and to the standard
error stream.
<b>ENVIRONMENT</b>
<b>MAIL_DEBUG</b> (value does not matter)
Enable debugging with an external command, as spec-
- ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
+ ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
parameter.
- <b>NAME</b> The sender full name. This is used only with mes-
- sages that have no <b>From:</b> message header. See also
+ <b>NAME</b> The sender full name. This is used only with mes-
+ sages that have no <b>From:</b> message header. See also
the <b>-F</b> option above.
<b>CONFIGURATION PARAMETERS</b>
- The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
+ The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
to this program. The text below provides only a parameter
- summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
+ summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
ples.
<b>COMPATIBILITY CONTROLS</b>
Available with Postfix 2.9 and later:
<b><a href="postconf.5.html#sendmail_fix_line_endings">sendmail_fix_line_endings</a> (always)</b>
- Controls how the Postfix sendmail command converts
- email message line endings from <CR><LF> into UNIX
+ Controls how the Postfix sendmail command converts
+ email message line endings from <CR><LF> into UNIX
format (<LF>).
<b>TROUBLE SHOOTING CONTROLS</b>
- The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
+ The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
shoot a Postfix system.
<b><a href="postconf.5.html#debugger_command">debugger_command</a> (empty)</b>
mon program is invoked with the -D option.
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
- The increment in verbose logging level when a
- remote client or server matches a pattern in the
+ The increment in verbose logging level when a
+ remote client or server matches a pattern in the
<a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
- Optional list of remote client or server hostname
- or network address patterns that cause the verbose
- logging level to increase by the amount specified
+ Optional list of remote client or server hostname
+ or network address patterns that cause the verbose
+ logging level to increase by the amount specified
in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b>ACCESS CONTROLS</b>
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#authorized_flush_users">authorized_flush_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to flush the
+ List of users who are authorized to flush the
queue.
<b><a href="postconf.5.html#authorized_mailq_users">authorized_mailq_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
List of users who are authorized to view the queue.
<b><a href="postconf.5.html#authorized_submit_users">authorized_submit_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to submit mail
- with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
+ List of users who are authorized to submit mail
+ with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
leged <a href="postdrop.1.html"><b>postdrop</b>(1)</a> helper command).
<b>RESOURCE AND RATE CONTROLS</b>
sent in a non-delivery notification.
<b><a href="postconf.5.html#fork_attempts">fork_attempts</a> (5)</b>
- The maximal number of attempts to fork() a child
+ The maximal number of attempts to fork() a child
process.
<b><a href="postconf.5.html#fork_delay">fork_delay</a> (1s)</b>
process.
<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.
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a> (300s)</b>
- The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
+ The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
manager; prior to Postfix 2.4 the default value was
1000s.
<b><a href="postconf.5.html#fast_flush_domains">fast_flush_domains</a> ($<a href="postconf.5.html#relay_domains">relay_domains</a>)</b>
Optional list of destinations that are eligible for
- per-destination logfiles with mail that is queued
+ per-destination logfiles with mail that is queued
to those destinations.
<b>VERP CONTROLS</b>
The <a href="VERP_README.html">VERP_README</a> file describes configuration and operation
- details of Postfix support for variable envelope return
+ details of Postfix support for variable envelope return
path addresses.
<b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a> (+=)</b>
The two default VERP delimiter characters.
<b><a href="postconf.5.html#verp_delimiter_filter">verp_delimiter_filter</a> (-=+)</b>
- The characters Postfix accepts as VERP delimiter
- characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
+ The characters Postfix accepts as VERP delimiter
+ characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
and in SMTP commands.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#alias_database">alias_database</a> (see 'postconf -d' output)</b>
- The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
+ The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
updated with "<b>newaliases</b>" or with "<b>sendmail -bi</b>".
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
- The location of all postfix administrative com-
+ The location of all postfix administrative com-
mands.
<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.
<b><a href="postconf.5.html#daemon_directory">daemon_directory</a> (see 'postconf -d' output)</b>
- The directory with Postfix support programs and
+ The directory with Postfix support programs and
daemon programs.
<b><a href="postconf.5.html#default_database_type">default_database_type</a> (see 'postconf -d' output)</b>
<a href="postalias.1.html"><b>postalias</b>(1)</a> and <a href="postmap.1.html"><b>postmap</b>(1)</a> commands.
<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.
<b><a href="postconf.5.html#enable_errors_to">enable_errors_to</a> (no)</b>
- Report mail delivery errors to the address speci-
- fied with the non-standard Errors-To: message
- header, instead of the envelope sender address
- (this feature is removed with Postfix version 2.2,
- is turned off by default with Postfix version 2.1,
- and is always turned on with older Postfix ver-
+ Report mail delivery errors to the address speci-
+ fied with the non-standard Errors-To: message
+ header, instead of the envelope sender address
+ (this feature is removed with Postfix version 2.2,
+ is turned off by default with Postfix version 2.1,
+ and is always turned on with older Postfix ver-
sions).
<b><a href="postconf.5.html#mail_owner">mail_owner</a> (postfix)</b>
and most Postfix daemon processes.
<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.
<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-
- write message headers and append the specified
+ write message headers and append the specified
domain name to incomplete addresses.
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
- The mail system name that is prepended to the
- process name in syslog records, so that "smtpd"
+ The mail system name that is prepended to the
+ process name in syslog records, so that "smtpd"
becomes, for example, "postfix/smtpd".
<b>FILES</b>
<a href="VERP_README.html">VERP_README</a>, Postfix VERP howto
<b>LICENSE</b>
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>
<b><a href="postconf.5.html#qmgr_message_recipient_limit">qmgr_message_recipient_limit</a> (20000)</b>
The maximal number of recipients held in memory by
the Postfix queue manager, and the maximal size of
- the size of the short-term, in-memory "dead" desti-
- nation status cache.
+ the short-term, in-memory "dead" destination status
+ cache.
<b>DELIVERY CONCURRENCY CONTROLS</b>
<b><a href="postconf.5.html#qmgr_fudge_factor">qmgr_fudge_factor</a> (100)</b>
<b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
The default amount of delay that is inserted
between individual deliveries to the same destina-
- tion; with per-destination recipient limit > 1, a
- destination is a domain, otherwise it is a recipi-
- ent.
+ tion; the resulting behavior depends on the value
+ of the corresponding per-destination recipient
+ limit.
<b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
<b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
(default: 5d)</b></DT><DD>
<p>
-The maximal time a bounce message is queued before it is considered
-undeliverable. By default, this is the same as the queue life time
-for regular mail.
+Consider a bounce message as undeliverable, when delivery fails
+with a temporary error, and the time in the queue has reached the
+<a href="postconf.5.html#bounce_queue_lifetime">bounce_queue_lifetime</a> limit. By default, this limit is the same
+as for regular mail.
</p>
<p>
(default: 0s)</b></DT><DD>
<p> The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit > 1, a destination is a domain, otherwise it is a recipient.
+deliveries to the same destination; the resulting behavior depends
+on the value of the corresponding per-destination recipient limit.
</p>
+<ul>
+
+<li> <p> With a corresponding per-destination recipient limit >
+1, the rate delay specifies the time between deliveries to the
+<i>same domain</i>. Different domains are delivered in parallel,
+subject to the process limits specified in <a href="master.5.html">master.cf</a>. </p>
+
+<li> <p> With a corresponding per-destination recipient limit equal
+to 1, the rate delay specifies the time between deliveries to the
+<i>same recipient</i>. Different recipients are delivered in
+parallel, subject to the process limits specified in <a href="master.5.html">master.cf</a>.
+</p>
+
+</ul>
+
<p> To enable the delay, specify a non-zero time value (an integral
value plus an optional one-letter suffix that specifies the time
unit). </p>
<a href="smtp.8.html">smtp(8)</a> and <a href="virtual.8.html">virtual(8)</a> delivery agents.
</p>
-<p> Setting this parameter to a value of 1 changes the meaning of
-the corresponding per-destination concurrency limit from concurrency
-per domain into concurrency per recipient. </p>
+<p> Setting this parameter to a value of 1 affects email deliveries
+as follows:</p>
+
+<ul>
+
+<li> <p> It changes the meaning of the corresponding per-destination
+concurrency limit, from concurrency of deliveries to the <i>same
+domain</i> into concurrency of deliveries to the <i>same recipient</i>.
+Different recipients are delivered in parallel, subject to the
+process limits specified in <a href="master.5.html">master.cf</a>. </p>
+
+<li> <p> It changes the meaning of the corresponding per-destination
+rate delay, from the delay between deliveries to the <i>same
+domain</i> into the delay between deliveries to the <i>same
+recipient</i>. Again, different recipients are delivered in parallel,
+subject to the process limits specified in <a href="master.5.html">master.cf</a>. </p>
+
+<li> <p> It changes the meaning of other corresponding per-destination
+settings in a similar manner, from settings for delivery to the
+<i>same domain</i> into settings for delivery to the <i>same
+recipient</i>.
+
+</ul>
<p> Use <a href="postconf.5.html#transport_destination_recipient_limit"><i>transport</i>_destination_recipient_limit</a> to specify a
transport-specific override, where <i>transport</i> is the <a href="master.5.html">master.cf</a>
(default: 5d)</b></DT><DD>
<p>
-The maximal time a message is queued before it is sent back as
-undeliverable.
+Consider a message as undeliverable, when delivery fails with a
+temporary error, and the time in the queue has reached the
+<a href="postconf.5.html#maximal_queue_lifetime">maximal_queue_lifetime</a> limit.
</p>
<p>
and will never be allowed to talk to a Postfix SMTP server process.
</p>
+<p> Specify a list of network addresses or network/netmask patterns,
+separated by commas and/or whitespace. The netmask specifies the
+number of bits in the network part of a host address. Continue long
+lines by starting the next line with whitespace. </p>
+
+<p> You can also specify "/file/name" or "<a href="DATABASE_README.html">type:table</a>" patterns. A
+"/file/name" pattern is replaced by its contents; a "<a href="DATABASE_README.html">type:table</a>"
+lookup table is matched when a table entry matches a lookup string
+(the lookup result is ignored). </p>
+
+<p> The list is matched left to right, and the search stops on the
+first match. Specify "!pattern" to exclude an address or network
+block from the list. </p>
+
+<p> Note: IP version 6 address information must be specified inside
+[] in the <a href="postconf.5.html#postscreen_whitelist_interfaces">postscreen_whitelist_interfaces</a> value, and in files
+specified with "/file/name". IP version 6 addresses contain the
+":" character, and would otherwise be confused with a "<a href="DATABASE_README.html">type:table</a>"
+pattern. </p>
+
<p> Example: </p>
<pre>
(default: 20000)</b></DT><DD>
<p> The maximal number of recipients held in memory by the Postfix
-queue manager, and the maximal size of the size of the short-term,
+queue manager, and the maximal size of the short-term,
in-memory "dead" destination status cache. </p>
not found, and delivery is deferred when a destination is unreachable.
</p>
+<p> With bulk email deliveries, it can be beneficial to run the
+fallback relay MTA on the same host, so that it can reuse the sender
+IP address. This speeds up deliveries that are delayed by IP-based
+reputation systems (greylist, etc.). </p>
+
<p> The fallback relays must be SMTP destinations. Specify a domain,
host, host:port, [host]:port, [address] or [address]:port; the form
[host] turns off MX lookups. If you specify multiple SMTP
<pre>
# Bounce-never mail sink. Use <a href="postconf.5.html#notify_classes">notify_classes</a>=bounce,resource,software
# to send bounced mail to the postmaster (with message body removed).
- /^(RCPT\s+TO:.*?)\bNOTIFY=\S+\b(.*)/ $1 NOTIFY=NEVER $2
+ /^(RCPT\s+TO:<.*>.*)\s+NOTIFY=\S+(.*)/ $1 NOTIFY=NEVER$2
/^(RCPT\s+TO:.*)/ $1 NOTIFY=NEVER
</pre>
<b><a href="postconf.5.html#qmgr_message_recipient_limit">qmgr_message_recipient_limit</a> (20000)</b>
The maximal number of recipients held in memory by
the Postfix queue manager, and the maximal size of
- the size of the short-term, in-memory "dead" desti-
- nation status cache.
+ the short-term, in-memory "dead" destination status
+ cache.
<b><a href="postconf.5.html#qmgr_message_recipient_minimum">qmgr_message_recipient_minimum</a> (10)</b>
The minimal number of in-memory recipients for any
<b><a href="postconf.5.html#default_destination_rate_delay">default_destination_rate_delay</a> (0s)</b>
The default amount of delay that is inserted
between individual deliveries to the same destina-
- tion; with per-destination recipient limit > 1, a
- destination is a domain, otherwise it is a recipi-
- ent.
+ tion; the resulting behavior depends on the value
+ of the corresponding per-destination recipient
+ limit.
<b><a href="postconf.5.html#transport_destination_rate_delay"><i>transport</i>_destination_rate_delay</a> $<a href="postconf.5.html#default_destination_rate_delay">default_destina</a>-</b>
<b><a href="postconf.5.html#default_destination_rate_delay">tion_rate_delay</a></b>
<b>-R</b> <i>return</i>
Delivery status notification control. Specify
- "hdrs" to return only the header if a message
+ "hdrs" to return only the header when a message
bounces, "full" to return a full copy (the default
behavior).
- The <b>-R</b> option specifies an upper bound; for exam-
- ple, Postfix will return only the header, when a
- full copy would exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> set-
- ting.
+ The <b>-R</b> option specifies an upper bound; Postfix
+ will return only the header, when a full copy would
+ exceed the <a href="postconf.5.html#bounce_size_limit">bounce_size_limit</a> setting.
This option is ignored before Postfix version 2.10.
- <b>-q</b> Attempt to deliver all queued mail. This is imple-
+ <b>-q</b> Attempt to deliver all queued mail. This is imple-
mented by executing the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command.
Warning: flushing undeliverable mail frequently
- will result in poor delivery performance of all
+ will result in poor delivery performance of all
other mail.
<b>-q</b><i>interval</i> (ignored)
- The interval between queue runs. Use the
+ The interval between queue runs. Use the
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a></b> configuration parameter instead.
<b>-qI</b><i>queueid</i>
Schedule immediate delivery of mail with the speci-
- fied queue ID. This option is implemented by exe-
- cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
+ fied queue ID. This option is implemented by exe-
+ cuting the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command, and is available
with Postfix version 2.4 and later.
<b>-qR</b><i>site</i>
- Schedule immediate delivery of all mail that is
+ Schedule immediate delivery of all mail that is
queued for the named <i>site</i>. This option accepts only
- <i>site</i> names that are eligible for the "fast flush"
- service, and is implemented by executing the
+ <i>site</i> names that are eligible for the "fast flush"
+ service, and is implemented by executing the
<a href="postqueue.1.html"><b>postqueue</b>(1)</a> command. See <a href="flush.8.html"><b>flush</b>(8)</a> for more infor-
mation about the "fast flush" service.
<b>-qS</b><i>site</i>
- This command is not implemented. Use the slower
+ This command is not implemented. Use the slower
"<b>sendmail -q</b>" command instead.
- <b>-t</b> Extract recipients from message headers. These are
- added to any recipients specified on the command
+ <b>-t</b> Extract recipients from message headers. These are
+ added to any recipients specified on the command
line.
- With Postfix versions prior to 2.1, this option
- requires that no recipient addresses are specified
+ With Postfix versions prior to 2.1, this option
+ requires that no recipient addresses are specified
on the command line.
<b>-U</b> (ignored)
This feature is available in Postfix 2.3 and later.
<b>-XV</b> (Postfix 2.2 and earlier: <b>-V</b>)
- Variable Envelope Return Path. Given an envelope
- sender address of the form <i>owner-listname</i>@<i>origin</i>,
- each recipient <i>user</i>@<i>domain</i> receives mail with a
+ Variable Envelope Return Path. Given an envelope
+ sender address of the form <i>owner-listname</i>@<i>origin</i>,
+ each recipient <i>user</i>@<i>domain</i> receives mail with a
personalized envelope sender address.
- By default, the personalized envelope sender
- address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
- default <b>+</b> and <b>=</b> characters are configurable with
- the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
+ By default, the personalized envelope sender
+ address is <i>owner-listname</i><b>+</b><i>user</i><b>=</b><i>domain</i>@<i>origin</i>. The
+ default <b>+</b> and <b>=</b> characters are configurable with
+ the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration parame-
ter.
<b>-XV</b><i>xy</i> (Postfix 2.2 and earlier: <b>-V</b><i>xy</i>)
- As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
- characters, instead of the characters specified
- with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
+ As <b>-XV</b>, but uses <i>x</i> and <i>y</i> as the VERP delimiter
+ characters, instead of the characters specified
+ with the <b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a></b> configuration
parameter.
- <b>-v</b> Send an email report of the first delivery attempt
- (Postfix versions 2.1 and later). Mail delivery
- always happens in the background. When multiple <b>-v</b>
+ <b>-v</b> Send an email report of the first delivery attempt
+ (Postfix versions 2.1 and later). Mail delivery
+ always happens in the background. When multiple <b>-v</b>
options are given, enable verbose logging for
debugging purposes.
<b>-X</b> <i>log</i><b>_</b><i>file</i> (ignored)
- Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
- <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
+ Log mailer traffic. Use the <b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a></b> and
+ <b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a></b> configuration parameters instead.
<b>SECURITY</b>
- By design, this program is not set-user (or group) id.
- However, it must handle data from untrusted, possibly
- remote, users. Thus, the usual precautions need to be
+ By design, this program is not set-user (or group) id.
+ However, it must handle data from untrusted, possibly
+ remote, users. Thus, the usual precautions need to be
taken against malicious inputs.
<b>DIAGNOSTICS</b>
- Problems are logged to <b>syslogd</b>(8) and to the standard
+ Problems are logged to <b>syslogd</b>(8) and to the standard
error stream.
<b>ENVIRONMENT</b>
<b>MAIL_DEBUG</b> (value does not matter)
Enable debugging with an external command, as spec-
- ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
+ ified with the <b><a href="postconf.5.html#debugger_command">debugger_command</a></b> configuration
parameter.
- <b>NAME</b> The sender full name. This is used only with mes-
- sages that have no <b>From:</b> message header. See also
+ <b>NAME</b> The sender full name. This is used only with mes-
+ sages that have no <b>From:</b> message header. See also
the <b>-F</b> option above.
<b>CONFIGURATION PARAMETERS</b>
- The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
+ The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant
to this program. The text below provides only a parameter
- summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
+ summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including exam-
ples.
<b>COMPATIBILITY CONTROLS</b>
Available with Postfix 2.9 and later:
<b><a href="postconf.5.html#sendmail_fix_line_endings">sendmail_fix_line_endings</a> (always)</b>
- Controls how the Postfix sendmail command converts
- email message line endings from <CR><LF> into UNIX
+ Controls how the Postfix sendmail command converts
+ email message line endings from <CR><LF> into UNIX
format (<LF>).
<b>TROUBLE SHOOTING CONTROLS</b>
- The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
+ The <a href="DEBUG_README.html">DEBUG_README</a> file gives examples of how to trouble
shoot a Postfix system.
<b><a href="postconf.5.html#debugger_command">debugger_command</a> (empty)</b>
mon program is invoked with the -D option.
<b><a href="postconf.5.html#debug_peer_level">debug_peer_level</a> (2)</b>
- The increment in verbose logging level when a
- remote client or server matches a pattern in the
+ The increment in verbose logging level when a
+ remote client or server matches a pattern in the
<a href="postconf.5.html#debug_peer_list">debug_peer_list</a> parameter.
<b><a href="postconf.5.html#debug_peer_list">debug_peer_list</a> (empty)</b>
- Optional list of remote client or server hostname
- or network address patterns that cause the verbose
- logging level to increase by the amount specified
+ Optional list of remote client or server hostname
+ or network address patterns that cause the verbose
+ logging level to increase by the amount specified
in $<a href="postconf.5.html#debug_peer_level">debug_peer_level</a>.
<b>ACCESS CONTROLS</b>
Available in Postfix version 2.2 and later:
<b><a href="postconf.5.html#authorized_flush_users">authorized_flush_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to flush the
+ List of users who are authorized to flush the
queue.
<b><a href="postconf.5.html#authorized_mailq_users">authorized_mailq_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
List of users who are authorized to view the queue.
<b><a href="postconf.5.html#authorized_submit_users">authorized_submit_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
- List of users who are authorized to submit mail
- with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
+ List of users who are authorized to submit mail
+ with the <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
leged <a href="postdrop.1.html"><b>postdrop</b>(1)</a> helper command).
<b>RESOURCE AND RATE CONTROLS</b>
sent in a non-delivery notification.
<b><a href="postconf.5.html#fork_attempts">fork_attempts</a> (5)</b>
- The maximal number of attempts to fork() a child
+ The maximal number of attempts to fork() a child
process.
<b><a href="postconf.5.html#fork_delay">fork_delay</a> (1s)</b>
process.
<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.
<b><a href="postconf.5.html#queue_run_delay">queue_run_delay</a> (300s)</b>
- The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
+ The time between <a href="QSHAPE_README.html#deferred_queue">deferred queue</a> scans by the queue
manager; prior to Postfix 2.4 the default value was
1000s.
<b><a href="postconf.5.html#fast_flush_domains">fast_flush_domains</a> ($<a href="postconf.5.html#relay_domains">relay_domains</a>)</b>
Optional list of destinations that are eligible for
- per-destination logfiles with mail that is queued
+ per-destination logfiles with mail that is queued
to those destinations.
<b>VERP CONTROLS</b>
The <a href="VERP_README.html">VERP_README</a> file describes configuration and operation
- details of Postfix support for variable envelope return
+ details of Postfix support for variable envelope return
path addresses.
<b><a href="postconf.5.html#default_verp_delimiters">default_verp_delimiters</a> (+=)</b>
The two default VERP delimiter characters.
<b><a href="postconf.5.html#verp_delimiter_filter">verp_delimiter_filter</a> (-=+)</b>
- The characters Postfix accepts as VERP delimiter
- characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
+ The characters Postfix accepts as VERP delimiter
+ characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
and in SMTP commands.
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#alias_database">alias_database</a> (see 'postconf -d' output)</b>
- The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
+ The alias databases for <a href="local.8.html"><b>local</b>(8)</a> delivery that are
updated with "<b>newaliases</b>" or with "<b>sendmail -bi</b>".
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
- The location of all postfix administrative com-
+ The location of all postfix administrative com-
mands.
<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.
<b><a href="postconf.5.html#daemon_directory">daemon_directory</a> (see 'postconf -d' output)</b>
- The directory with Postfix support programs and
+ The directory with Postfix support programs and
daemon programs.
<b><a href="postconf.5.html#default_database_type">default_database_type</a> (see 'postconf -d' output)</b>
<a href="postalias.1.html"><b>postalias</b>(1)</a> and <a href="postmap.1.html"><b>postmap</b>(1)</a> commands.
<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.
<b><a href="postconf.5.html#enable_errors_to">enable_errors_to</a> (no)</b>
- Report mail delivery errors to the address speci-
- fied with the non-standard Errors-To: message
- header, instead of the envelope sender address
- (this feature is removed with Postfix version 2.2,
- is turned off by default with Postfix version 2.1,
- and is always turned on with older Postfix ver-
+ Report mail delivery errors to the address speci-
+ fied with the non-standard Errors-To: message
+ header, instead of the envelope sender address
+ (this feature is removed with Postfix version 2.2,
+ is turned off by default with Postfix version 2.1,
+ and is always turned on with older Postfix ver-
sions).
<b><a href="postconf.5.html#mail_owner">mail_owner</a> (postfix)</b>
and most Postfix daemon processes.
<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.
<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-
- write message headers and append the specified
+ write message headers and append the specified
domain name to incomplete addresses.
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
The syslog facility of Postfix logging.
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
- The mail system name that is prepended to the
- process name in syslog records, so that "smtpd"
+ The mail system name that is prepended to the
+ process name in syslog records, so that "smtpd"
becomes, for example, "postfix/smtpd".
<b>FILES</b>
<a href="VERP_README.html">VERP_README</a>, Postfix VERP howto
<b>LICENSE</b>
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>
5.[0-7]|5.[0-7].*) CCARGS="$CCARGS -DNO_IPV6 -DNO_DEVPOLL";;
esac
# Solaris 9 added closefrom(), futimesat() and /dev/*random
+ # and appears to have solid UNIX-domain sockets.
case $RELEASE in
- 5.[0-8]|5.[0-8].*) CCARGS="$CCARGS -DNO_CLOSEFROM -DNO_DEV_URANDOM -DNO_FUTIMESAT";;
+ 5.[0-8]|5.[0-8].*) CCARGS="$CCARGS -DNO_CLOSEFROM -DNO_DEV_URANDOM -DNO_FUTIMESAT -DSTREAM_CONNECTIONS";;
esac
# Work around broken str*casecmp(). Do it all here instead
# of having half the solution in the sys_defs.h file.
\fBErrors-To:\fR message header overrides the error return address.
.IP "\fB-R \fIreturn\fR"
Delivery status notification control. Specify "hdrs" to
-return only the header if a message bounces, "full" to
+return only the header when a message bounces, "full" to
return a full copy (the default behavior).
-The \fB-R\fR option specifies an upper bound; for example,
-Postfix will return only the header, when a full copy would
-exceed the bounce_size_limit setting.
+The \fB-R\fR option specifies an upper bound; Postfix will
+return only the header, when a full copy would exceed the
+bounce_size_limit setting.
This option is ignored before Postfix version 2.10.
.IP \fB-q\fR
.fi
The general format of the master.cf file is as follows:
.IP \(bu
-Each logical line defines a single Postfix service.
-Each service is identified by its name and type as described
-below. When multiple lines specify the same service name
-and type, only the last one is remembered. Otherwise, the
-order of master.cf service definitions does not matter.
-.IP \(bu
Empty lines and whitespace-only lines are ignored, as are
lines whose first non-whitespace character is a `#'.
.IP \(bu
A logical line starts with non-whitespace text. A line that
starts with whitespace continues a logical line.
+.IP \(bu
+Each logical line defines a single Postfix service.
+Each service is identified by its name and type as described
+below. When multiple lines specify the same service name
+and type, only the last one is remembered. Otherwise, the
+order of master.cf service definitions does not matter.
.PP
Each logical line consists of eight fields separated by
whitespace. These are described below in the order as they
transcripts of mail that Postfix did not receive. This feature is
enabled with the notify_classes parameter.
.SH bounce_queue_lifetime (default: 5d)
-The maximal time a bounce message is queued before it is considered
-undeliverable. By default, this is the same as the queue life time
-for regular mail.
+Consider a bounce message as undeliverable, when delivery fails
+with a temporary error, and the time in the queue has reached the
+bounce_queue_lifetime limit. By default, this limit is the same
+as for regular mail.
.PP
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is d (days).
This feature is available in Postfix 2.5 and later.
.SH default_destination_rate_delay (default: 0s)
The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit > 1, a destination is a domain, otherwise it is a recipient.
+deliveries to the same destination; the resulting behavior depends
+on the value of the corresponding per-destination recipient limit.
+.IP \(bu
+With a corresponding per-destination recipient limit >
+1, the rate delay specifies the time between deliveries to the
+\fIsame domain\fR. Different domains are delivered in parallel,
+subject to the process limits specified in master.cf.
+.IP \(bu
+With a corresponding per-destination recipient limit equal
+to 1, the rate delay specifies the time between deliveries to the
+\fIsame recipient\fR. Different recipients are delivered in
+parallel, subject to the process limits specified in master.cf.
.PP
To enable the delay, specify a non-zero time value (an integral
value plus an optional one-letter suffix that specifies the time
This is the default limit for delivery via the \fBlmtp\fR(8), \fBpipe\fR(8),
\fBsmtp\fR(8) and \fBvirtual\fR(8) delivery agents.
.PP
-Setting this parameter to a value of 1 changes the meaning of
-the corresponding per-destination concurrency limit from concurrency
-per domain into concurrency per recipient.
+Setting this parameter to a value of 1 affects email deliveries
+as follows:
+.IP \(bu
+It changes the meaning of the corresponding per-destination
+concurrency limit, from concurrency of deliveries to the \fIsame
+domain\fR into concurrency of deliveries to the \fIsame recipient\fR.
+Different recipients are delivered in parallel, subject to the
+process limits specified in master.cf.
+.IP \(bu
+It changes the meaning of the corresponding per-destination
+rate delay, from the delay between deliveries to the \fIsame
+domain\fR into the delay between deliveries to the \fIsame
+recipient\fR. Again, different recipients are delivered in parallel,
+subject to the process limits specified in master.cf.
+.IP \(bu
+It changes the meaning of other corresponding per-destination
+settings in a similar manner, from settings for delivery to the
+\fIsame domain\fR into settings for delivery to the \fIsame
+recipient\fR.
.PP
Use \fItransport\fR_destination_recipient_limit to specify a
transport-specific override, where \fItransport\fR is the master.cf
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is s (seconds).
.SH maximal_queue_lifetime (default: 5d)
-The maximal time a message is queued before it is sent back as
-undeliverable.
+Consider a message as undeliverable, when delivery fails with a
+temporary error, and the time in the queue has reached the
+maximal_queue_lifetime limit.
.PP
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is d (days).
that connect only to backup MX addresses will never become whitelisted,
and will never be allowed to talk to a Postfix SMTP server process.
.PP
+Specify a list of network addresses or network/netmask patterns,
+separated by commas and/or whitespace. The netmask specifies the
+number of bits in the network part of a host address. Continue long
+lines by starting the next line with whitespace.
+.PP
+You can also specify "/file/name" or "type:table" patterns. A
+"/file/name" pattern is replaced by its contents; a "type:table"
+lookup table is matched when a table entry matches a lookup string
+(the lookup result is ignored).
+.PP
+The list is matched left to right, and the search stops on the
+first match. Specify "!pattern" to exclude an address or network
+block from the list.
+.PP
+Note: IP version 6 address information must be specified inside
+[] in the postscreen_whitelist_interfaces value, and in files
+specified with "/file/name". IP version 6 addresses contain the
+":" character, and would otherwise be confused with a "type:table"
+pattern.
+.PP
Example:
.PP
.nf
The maximal number of messages in the active queue.
.SH qmgr_message_recipient_limit (default: 20000)
The maximal number of recipients held in memory by the Postfix
-queue manager, and the maximal size of the size of the short-term,
+queue manager, and the maximal size of the short-term,
in-memory "dead" destination status cache.
.SH qmgr_message_recipient_minimum (default: 10)
The minimal number of in-memory recipients for any message. This
By default, mail is returned to the sender when a destination is
not found, and delivery is deferred when a destination is unreachable.
.PP
+With bulk email deliveries, it can be beneficial to run the
+fallback relay MTA on the same host, so that it can reuse the sender
+IP address. This speeds up deliveries that are delayed by IP-based
+reputation systems (greylist, etc.).
+.PP
The fallback relays must be SMTP destinations. Specify a domain,
host, host:port, [host]:port, [address] or [address]:port; the form
[host] turns off MX lookups. If you specify multiple SMTP
.ft C
# Bounce-never mail sink. Use notify_classes=bounce,resource,software
# to send bounced mail to the postmaster (with message body removed).
- /^(RCPT\es+TO:.*?)\ebNOTIFY=\eS+\eb(.*)/ $1 NOTIFY=NEVER $2
+ /^(RCPT\es+TO:<.*>.*)\es+NOTIFY=\eS+(.*)/ $1 NOTIFY=NEVER$2
/^(RCPT\es+TO:.*)/ $1 NOTIFY=NEVER
.fi
.ad
The maximal number of messages in the active queue.
.IP "\fBqmgr_message_recipient_limit (20000)\fR"
The maximal number of recipients held in memory by the Postfix
-queue manager, and the maximal size of the size of the short-term,
+queue manager, and the maximal size of the short-term,
in-memory "dead" destination status cache.
.SH "DELIVERY CONCURRENCY CONTROLS"
.na
Available in Postfix version 2.5 and later:
.IP "\fBdefault_destination_rate_delay (0s)\fR"
The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit > 1, a destination is a domain, otherwise it is a recipient.
+deliveries to the same destination; the resulting behavior depends
+on the value of the corresponding per-destination recipient limit.
.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
Idem, for delivery via the named message \fItransport\fR.
.SH "SAFETY CONTROLS"
The maximal number of messages in the active queue.
.IP "\fBqmgr_message_recipient_limit (20000)\fR"
The maximal number of recipients held in memory by the Postfix
-queue manager, and the maximal size of the size of the short-term,
+queue manager, and the maximal size of the short-term,
in-memory "dead" destination status cache.
.IP "\fBqmgr_message_recipient_minimum (10)\fR"
The minimal number of in-memory recipients for any message.
Available in Postfix version 2.5 and later:
.IP "\fBdefault_destination_rate_delay (0s)\fR"
The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit > 1, a destination is a domain, otherwise it is a recipient.
+deliveries to the same destination; the resulting behavior depends
+on the value of the corresponding per-destination recipient limit.
.IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
Idem, for delivery via the named message \fItransport\fR.
.SH "SAFETY CONTROLS"
<h2> <a name="general"> General operation </a> </h2>
-<p> The postscreen(8) triage process involves a number of tests,
+<p> For each connection from an SMTP client, postscreen(8) performs
+a number of tests
in the order as described below. Some tests introduce a delay of
a few seconds. postscreen(8) maintains a temporary whitelist for
clients that pass its tests; by allowing whitelisted clients to
# .fi
# The general format of the master.cf file is as follows:
# .IP \(bu
-# Each logical line defines a single Postfix service.
-# Each service is identified by its name and type as described
-# below. When multiple lines specify the same service name
-# and type, only the last one is remembered. Otherwise, the
-# order of master.cf service definitions does not matter.
-# .IP \(bu
# Empty lines and whitespace-only lines are ignored, as are
# lines whose first non-whitespace character is a `#'.
# .IP \(bu
# A logical line starts with non-whitespace text. A line that
# starts with whitespace continues a logical line.
+# .IP \(bu
+# Each logical line defines a single Postfix service.
+# Each service is identified by its name and type as described
+# below. When multiple lines specify the same service name
+# and type, only the last one is remembered. Otherwise, the
+# order of master.cf service definitions does not matter.
# .PP
# Each logical line consists of eight fields separated by
# whitespace. These are described below in the order as they
%PARAM bounce_queue_lifetime 5d
<p>
-The maximal time a bounce message is queued before it is considered
-undeliverable. By default, this is the same as the queue life time
-for regular mail.
+Consider a bounce message as undeliverable, when delivery fails
+with a temporary error, and the time in the queue has reached the
+bounce_queue_lifetime limit. By default, this limit is the same
+as for regular mail.
</p>
<p>
smtp(8) and virtual(8) delivery agents.
</p>
-<p> Setting this parameter to a value of 1 changes the meaning of
-the corresponding per-destination concurrency limit from concurrency
-per domain into concurrency per recipient. </p>
+<p> Setting this parameter to a value of 1 affects email deliveries
+as follows:</p>
+
+<ul>
+
+<li> <p> It changes the meaning of the corresponding per-destination
+concurrency limit, from concurrency of deliveries to the <i>same
+domain</i> into concurrency of deliveries to the <i>same recipient</i>.
+Different recipients are delivered in parallel, subject to the
+process limits specified in master.cf. </p>
+
+<li> <p> It changes the meaning of the corresponding per-destination
+rate delay, from the delay between deliveries to the <i>same
+domain</i> into the delay between deliveries to the <i>same
+recipient</i>. Again, different recipients are delivered in parallel,
+subject to the process limits specified in master.cf. </p>
+
+<li> <p> It changes the meaning of other corresponding per-destination
+settings in a similar manner, from settings for delivery to the
+<i>same domain</i> into settings for delivery to the <i>same
+recipient</i>.
+
+</ul>
<p> Use <i>transport</i>_destination_recipient_limit to specify a
transport-specific override, where <i>transport</i> is the master.cf
not found, and delivery is deferred when a destination is unreachable.
</p>
+<p> With bulk email deliveries, it can be beneficial to run the
+fallback relay MTA on the same host, so that it can reuse the sender
+IP address. This speeds up deliveries that are delayed by IP-based
+reputation systems (greylist, etc.). </p>
+
<p> The fallback relays must be SMTP destinations. Specify a domain,
host, host:port, [host]:port, [address] or [address]:port; the form
[host] turns off MX lookups. If you specify multiple SMTP
%PARAM maximal_queue_lifetime 5d
<p>
-The maximal time a message is queued before it is sent back as
-undeliverable.
+Consider a message as undeliverable, when delivery fails with a
+temporary error, and the time in the queue has reached the
+maximal_queue_lifetime limit.
</p>
<p>
%PARAM qmgr_message_recipient_limit 20000
<p> The maximal number of recipients held in memory by the Postfix
-queue manager, and the maximal size of the size of the short-term,
+queue manager, and the maximal size of the short-term,
in-memory "dead" destination status cache. </p>
%PARAM qmgr_message_recipient_minimum 10
%PARAM default_destination_rate_delay 0s
<p> The default amount of delay that is inserted between individual
-deliveries to the same destination; with per-destination recipient
-limit > 1, a destination is a domain, otherwise it is a recipient.
+deliveries to the same destination; the resulting behavior depends
+on the value of the corresponding per-destination recipient limit.
+</p>
+
+<ul>
+
+<li> <p> With a corresponding per-destination recipient limit >
+1, the rate delay specifies the time between deliveries to the
+<i>same domain</i>. Different domains are delivered in parallel,
+subject to the process limits specified in master.cf. </p>
+
+<li> <p> With a corresponding per-destination recipient limit equal
+to 1, the rate delay specifies the time between deliveries to the
+<i>same recipient</i>. Different recipients are delivered in
+parallel, subject to the process limits specified in master.cf.
</p>
+</ul>
+
<p> To enable the delay, specify a non-zero time value (an integral
value plus an optional one-letter suffix that specifies the time
unit). </p>
<pre>
# Bounce-never mail sink. Use notify_classes=bounce,resource,software
# to send bounced mail to the postmaster (with message body removed).
- /^(RCPT\s+TO:.*?)\bNOTIFY=\S+\b(.*)/ $1 NOTIFY=NEVER $2
+ /^(RCPT\s+TO:<.*>.*)\s+NOTIFY=\S+(.*)/ $1 NOTIFY=NEVER$2
/^(RCPT\s+TO:.*)/ $1 NOTIFY=NEVER
</pre>
and will never be allowed to talk to a Postfix SMTP server process.
</p>
+<p> Specify a list of network addresses or network/netmask patterns,
+separated by commas and/or whitespace. The netmask specifies the
+number of bits in the network part of a host address. Continue long
+lines by starting the next line with whitespace. </p>
+
+<p> You can also specify "/file/name" or "type:table" patterns. A
+"/file/name" pattern is replaced by its contents; a "type:table"
+lookup table is matched when a table entry matches a lookup string
+(the lookup result is ignored). </p>
+
+<p> The list is matched left to right, and the search stops on the
+first match. Specify "!pattern" to exclude an address or network
+block from the list. </p>
+
+<p> Note: IP version 6 address information must be specified inside
+[] in the postscreen_whitelist_interfaces value, and in files
+specified with "/file/name". IP version 6 addresses contain the
+":" character, and would otherwise be confused with a "type:table"
+pattern. </p>
+
<p> Example: </p>
<pre>
cleanup.o: ../../include/milter.h
cleanup.o: ../../include/mime_state.h
cleanup.o: ../../include/msg.h
+cleanup.o: ../../include/myflock.h
cleanup.o: ../../include/mymalloc.h
cleanup.o: ../../include/nvtable.h
cleanup.o: ../../include/rec_type.h
cleanup_addr.o: ../../include/milter.h
cleanup_addr.o: ../../include/mime_state.h
cleanup_addr.o: ../../include/msg.h
+cleanup_addr.o: ../../include/myflock.h
cleanup_addr.o: ../../include/mymalloc.h
cleanup_addr.o: ../../include/nvtable.h
cleanup_addr.o: ../../include/rec_type.h
cleanup_api.o: ../../include/mime_state.h
cleanup_api.o: ../../include/msg.h
cleanup_api.o: ../../include/msg_stats.h
+cleanup_api.o: ../../include/myflock.h
cleanup_api.o: ../../include/mymalloc.h
cleanup_api.o: ../../include/nvtable.h
cleanup_api.o: ../../include/rec_type.h
cleanup_body_edit.o: ../../include/milter.h
cleanup_body_edit.o: ../../include/mime_state.h
cleanup_body_edit.o: ../../include/msg.h
+cleanup_body_edit.o: ../../include/myflock.h
cleanup_body_edit.o: ../../include/mymalloc.h
cleanup_body_edit.o: ../../include/nvtable.h
cleanup_body_edit.o: ../../include/rec_type.h
cleanup_bounce.o: ../../include/mime_state.h
cleanup_bounce.o: ../../include/msg.h
cleanup_bounce.o: ../../include/msg_stats.h
+cleanup_bounce.o: ../../include/myflock.h
cleanup_bounce.o: ../../include/mymalloc.h
cleanup_bounce.o: ../../include/nvtable.h
cleanup_bounce.o: ../../include/rec_attr_map.h
cleanup_envelope.o: ../../include/milter.h
cleanup_envelope.o: ../../include/mime_state.h
cleanup_envelope.o: ../../include/msg.h
+cleanup_envelope.o: ../../include/myflock.h
cleanup_envelope.o: ../../include/mymalloc.h
cleanup_envelope.o: ../../include/nvtable.h
cleanup_envelope.o: ../../include/qmgr_user.h
cleanup_extracted.o: ../../include/milter.h
cleanup_extracted.o: ../../include/mime_state.h
cleanup_extracted.o: ../../include/msg.h
+cleanup_extracted.o: ../../include/myflock.h
cleanup_extracted.o: ../../include/mymalloc.h
cleanup_extracted.o: ../../include/nvtable.h
cleanup_extracted.o: ../../include/qmgr_user.h
cleanup_final.o: ../../include/milter.h
cleanup_final.o: ../../include/mime_state.h
cleanup_final.o: ../../include/msg.h
+cleanup_final.o: ../../include/myflock.h
cleanup_final.o: ../../include/mymalloc.h
cleanup_final.o: ../../include/nvtable.h
cleanup_final.o: ../../include/rec_type.h
cleanup_init.o: ../../include/milter.h
cleanup_init.o: ../../include/mime_state.h
cleanup_init.o: ../../include/msg.h
+cleanup_init.o: ../../include/myflock.h
cleanup_init.o: ../../include/mymalloc.h
cleanup_init.o: ../../include/name_mask.h
cleanup_init.o: ../../include/nvtable.h
cleanup_map11.o: ../../include/milter.h
cleanup_map11.o: ../../include/mime_state.h
cleanup_map11.o: ../../include/msg.h
+cleanup_map11.o: ../../include/myflock.h
cleanup_map11.o: ../../include/mymalloc.h
cleanup_map11.o: ../../include/nvtable.h
cleanup_map11.o: ../../include/quote_822_local.h
cleanup_map1n.o: ../../include/milter.h
cleanup_map1n.o: ../../include/mime_state.h
cleanup_map1n.o: ../../include/msg.h
+cleanup_map1n.o: ../../include/myflock.h
cleanup_map1n.o: ../../include/mymalloc.h
cleanup_map1n.o: ../../include/nvtable.h
cleanup_map1n.o: ../../include/quote_822_local.h
cleanup_masquerade.o: ../../include/milter.h
cleanup_masquerade.o: ../../include/mime_state.h
cleanup_masquerade.o: ../../include/msg.h
+cleanup_masquerade.o: ../../include/myflock.h
cleanup_masquerade.o: ../../include/mymalloc.h
cleanup_masquerade.o: ../../include/nvtable.h
cleanup_masquerade.o: ../../include/quote_822_local.h
cleanup_message.o: ../../include/milter.h
cleanup_message.o: ../../include/mime_state.h
cleanup_message.o: ../../include/msg.h
+cleanup_message.o: ../../include/myflock.h
cleanup_message.o: ../../include/mymalloc.h
cleanup_message.o: ../../include/nvtable.h
cleanup_message.o: ../../include/quote_822_local.h
cleanup_milter.o: ../../include/milter.h
cleanup_milter.o: ../../include/mime_state.h
cleanup_milter.o: ../../include/msg.h
+cleanup_milter.o: ../../include/myflock.h
cleanup_milter.o: ../../include/mymalloc.h
cleanup_milter.o: ../../include/nvtable.h
cleanup_milter.o: ../../include/off_cvt.h
cleanup_out.o: ../../include/milter.h
cleanup_out.o: ../../include/mime_state.h
cleanup_out.o: ../../include/msg.h
+cleanup_out.o: ../../include/myflock.h
cleanup_out.o: ../../include/mymalloc.h
cleanup_out.o: ../../include/nvtable.h
cleanup_out.o: ../../include/rec_type.h
cleanup_out_recipient.o: ../../include/mime_state.h
cleanup_out_recipient.o: ../../include/msg.h
cleanup_out_recipient.o: ../../include/msg_stats.h
+cleanup_out_recipient.o: ../../include/myflock.h
cleanup_out_recipient.o: ../../include/mymalloc.h
cleanup_out_recipient.o: ../../include/nvtable.h
cleanup_out_recipient.o: ../../include/rec_type.h
cleanup_region.o: ../../include/milter.h
cleanup_region.o: ../../include/mime_state.h
cleanup_region.o: ../../include/msg.h
+cleanup_region.o: ../../include/myflock.h
cleanup_region.o: ../../include/mymalloc.h
cleanup_region.o: ../../include/nvtable.h
cleanup_region.o: ../../include/resolve_clnt.h
cleanup_rewrite.o: ../../include/milter.h
cleanup_rewrite.o: ../../include/mime_state.h
cleanup_rewrite.o: ../../include/msg.h
+cleanup_rewrite.o: ../../include/myflock.h
cleanup_rewrite.o: ../../include/mymalloc.h
cleanup_rewrite.o: ../../include/nvtable.h
cleanup_rewrite.o: ../../include/quote_822_local.h
cleanup_state.o: ../../include/match_list.h
cleanup_state.o: ../../include/milter.h
cleanup_state.o: ../../include/mime_state.h
+cleanup_state.o: ../../include/myflock.h
cleanup_state.o: ../../include/mymalloc.h
cleanup_state.o: ../../include/nvtable.h
cleanup_state.o: ../../include/resolve_clnt.h
cfg_parser.o: ../../include/argv.h
cfg_parser.o: ../../include/dict.h
cfg_parser.o: ../../include/msg.h
+cfg_parser.o: ../../include/myflock.h
cfg_parser.o: ../../include/mymalloc.h
cfg_parser.o: ../../include/sys_defs.h
cfg_parser.o: ../../include/vbuf.h
data_redirect.o: ../../include/dict_db.h
data_redirect.o: ../../include/dict_dbm.h
data_redirect.o: ../../include/msg.h
+data_redirect.o: ../../include/myflock.h
data_redirect.o: ../../include/name_code.h
data_redirect.o: ../../include/split_at.h
data_redirect.o: ../../include/stringops.h
db_common.o: ../../include/dict.h
db_common.o: ../../include/match_list.h
db_common.o: ../../include/msg.h
+db_common.o: ../../include/myflock.h
db_common.o: ../../include/mymalloc.h
db_common.o: ../../include/sys_defs.h
db_common.o: ../../include/vbuf.h
dict_ldap.o: ../../include/dict.h
dict_ldap.o: ../../include/match_list.h
dict_ldap.o: ../../include/msg.h
+dict_ldap.o: ../../include/myflock.h
dict_ldap.o: ../../include/mymalloc.h
dict_ldap.o: ../../include/name_code.h
dict_ldap.o: ../../include/stringops.h
dict_memcache.o: ../../include/dict.h
dict_memcache.o: ../../include/match_list.h
dict_memcache.o: ../../include/msg.h
+dict_memcache.o: ../../include/myflock.h
dict_memcache.o: ../../include/mymalloc.h
dict_memcache.o: ../../include/stringops.h
dict_memcache.o: ../../include/sys_defs.h
dict_mysql.o: ../../include/find_inet.h
dict_mysql.o: ../../include/match_list.h
dict_mysql.o: ../../include/msg.h
+dict_mysql.o: ../../include/myflock.h
dict_mysql.o: ../../include/mymalloc.h
dict_mysql.o: ../../include/myrand.h
dict_mysql.o: ../../include/split_at.h
dict_pgsql.o: ../../include/find_inet.h
dict_pgsql.o: ../../include/match_list.h
dict_pgsql.o: ../../include/msg.h
+dict_pgsql.o: ../../include/myflock.h
dict_pgsql.o: ../../include/mymalloc.h
dict_pgsql.o: ../../include/myrand.h
dict_pgsql.o: ../../include/split_at.h
dict_proxy.o: ../../include/dict.h
dict_proxy.o: ../../include/iostuff.h
dict_proxy.o: ../../include/msg.h
+dict_proxy.o: ../../include/myflock.h
dict_proxy.o: ../../include/mymalloc.h
dict_proxy.o: ../../include/stringops.h
dict_proxy.o: ../../include/sys_defs.h
dict_sqlite.o: ../../include/dict.h
dict_sqlite.o: ../../include/match_list.h
dict_sqlite.o: ../../include/msg.h
+dict_sqlite.o: ../../include/myflock.h
dict_sqlite.o: ../../include/mymalloc.h
dict_sqlite.o: ../../include/stringops.h
dict_sqlite.o: ../../include/sys_defs.h
fold_addr.o: ../../include/vstring.h
fold_addr.o: fold_addr.c
fold_addr.o: fold_addr.h
+haproxy_srvr.o: ../../include/inet_proto.h
haproxy_srvr.o: ../../include/msg.h
haproxy_srvr.o: ../../include/myaddrinfo.h
+haproxy_srvr.o: ../../include/mymalloc.h
haproxy_srvr.o: ../../include/stringops.h
haproxy_srvr.o: ../../include/sys_defs.h
haproxy_srvr.o: ../../include/valid_hostname.h
header_body_checks.o: ../../include/argv.h
header_body_checks.o: ../../include/dict.h
header_body_checks.o: ../../include/msg.h
+header_body_checks.o: ../../include/myflock.h
header_body_checks.o: ../../include/mymalloc.h
header_body_checks.o: ../../include/sys_defs.h
header_body_checks.o: ../../include/vbuf.h
mail_addr_find.o: ../../include/argv.h
mail_addr_find.o: ../../include/dict.h
mail_addr_find.o: ../../include/msg.h
+mail_addr_find.o: ../../include/myflock.h
mail_addr_find.o: ../../include/mymalloc.h
mail_addr_find.o: ../../include/stringops.h
mail_addr_find.o: ../../include/sys_defs.h
mail_addr_map.o: ../../include/argv.h
mail_addr_map.o: ../../include/dict.h
mail_addr_map.o: ../../include/msg.h
+mail_addr_map.o: ../../include/myflock.h
mail_addr_map.o: ../../include/mymalloc.h
mail_addr_map.o: ../../include/sys_defs.h
mail_addr_map.o: ../../include/vbuf.h
mail_conf.o: ../../include/argv.h
mail_conf.o: ../../include/dict.h
mail_conf.o: ../../include/msg.h
+mail_conf.o: ../../include/myflock.h
mail_conf.o: ../../include/mymalloc.h
mail_conf.o: ../../include/readlline.h
mail_conf.o: ../../include/safe.h
mail_conf_bool.o: ../../include/argv.h
mail_conf_bool.o: ../../include/dict.h
mail_conf_bool.o: ../../include/msg.h
+mail_conf_bool.o: ../../include/myflock.h
mail_conf_bool.o: ../../include/sys_defs.h
mail_conf_bool.o: ../../include/vbuf.h
mail_conf_bool.o: ../../include/vstream.h
mail_conf_int.o: ../../include/argv.h
mail_conf_int.o: ../../include/dict.h
mail_conf_int.o: ../../include/msg.h
+mail_conf_int.o: ../../include/myflock.h
mail_conf_int.o: ../../include/mymalloc.h
mail_conf_int.o: ../../include/stringops.h
mail_conf_int.o: ../../include/sys_defs.h
mail_conf_long.o: ../../include/argv.h
mail_conf_long.o: ../../include/dict.h
mail_conf_long.o: ../../include/msg.h
+mail_conf_long.o: ../../include/myflock.h
mail_conf_long.o: ../../include/mymalloc.h
mail_conf_long.o: ../../include/stringops.h
mail_conf_long.o: ../../include/sys_defs.h
mail_conf_nbool.o: ../../include/argv.h
mail_conf_nbool.o: ../../include/dict.h
mail_conf_nbool.o: ../../include/msg.h
+mail_conf_nbool.o: ../../include/myflock.h
mail_conf_nbool.o: ../../include/sys_defs.h
mail_conf_nbool.o: ../../include/vbuf.h
mail_conf_nbool.o: ../../include/vstream.h
mail_conf_nint.o: ../../include/argv.h
mail_conf_nint.o: ../../include/dict.h
mail_conf_nint.o: ../../include/msg.h
+mail_conf_nint.o: ../../include/myflock.h
mail_conf_nint.o: ../../include/mymalloc.h
mail_conf_nint.o: ../../include/stringops.h
mail_conf_nint.o: ../../include/sys_defs.h
mail_conf_time.o: ../../include/argv.h
mail_conf_time.o: ../../include/dict.h
mail_conf_time.o: ../../include/msg.h
+mail_conf_time.o: ../../include/myflock.h
mail_conf_time.o: ../../include/mymalloc.h
mail_conf_time.o: ../../include/stringops.h
mail_conf_time.o: ../../include/sys_defs.h
mail_dict.o: ../../include/argv.h
mail_dict.o: ../../include/dict.h
mail_dict.o: ../../include/msg.h
+mail_dict.o: ../../include/myflock.h
mail_dict.o: ../../include/sys_defs.h
mail_dict.o: ../../include/vbuf.h
mail_dict.o: ../../include/vstream.h
mail_params.o: ../../include/msg.h
mail_params.o: ../../include/msg_syslog.h
mail_params.o: ../../include/myaddrinfo.h
+mail_params.o: ../../include/myflock.h
mail_params.o: ../../include/mymalloc.h
mail_params.o: ../../include/safe.h
mail_params.o: ../../include/safe_open.h
maps.o: ../../include/argv.h
maps.o: ../../include/dict.h
maps.o: ../../include/msg.h
+maps.o: ../../include/myflock.h
maps.o: ../../include/mymalloc.h
maps.o: ../../include/split_at.h
maps.o: ../../include/stringops.h
mkmap_cdb.o: ../../include/argv.h
mkmap_cdb.o: ../../include/dict.h
mkmap_cdb.o: ../../include/dict_cdb.h
+mkmap_cdb.o: ../../include/myflock.h
mkmap_cdb.o: ../../include/mymalloc.h
mkmap_cdb.o: ../../include/sys_defs.h
mkmap_cdb.o: ../../include/vbuf.h
mkmap_fail.o: ../../include/argv.h
mkmap_fail.o: ../../include/dict.h
mkmap_fail.o: ../../include/dict_fail.h
+mkmap_fail.o: ../../include/myflock.h
mkmap_fail.o: ../../include/mymalloc.h
mkmap_fail.o: ../../include/sys_defs.h
mkmap_fail.o: ../../include/vbuf.h
mkmap_open.o: ../../include/dict_fail.h
mkmap_open.o: ../../include/dict_sdbm.h
mkmap_open.o: ../../include/msg.h
+mkmap_open.o: ../../include/myflock.h
mkmap_open.o: ../../include/mymalloc.h
mkmap_open.o: ../../include/sigdelay.h
mkmap_open.o: ../../include/sys_defs.h
mkmap_open.o: mkmap_open.c
mkmap_proxy.o: ../../include/argv.h
mkmap_proxy.o: ../../include/dict.h
+mkmap_proxy.o: ../../include/myflock.h
mkmap_proxy.o: ../../include/mymalloc.h
mkmap_proxy.o: ../../include/sys_defs.h
mkmap_proxy.o: ../../include/vbuf.h
resolve_local.o: ../../include/match_list.h
resolve_local.o: ../../include/msg.h
resolve_local.o: ../../include/myaddrinfo.h
+resolve_local.o: ../../include/myflock.h
resolve_local.o: ../../include/mymalloc.h
resolve_local.o: ../../include/sys_defs.h
resolve_local.o: ../../include/valid_hostname.h
server_acl.o: ../../include/dict.h
server_acl.o: ../../include/match_list.h
server_acl.o: ../../include/msg.h
+server_acl.o: ../../include/myflock.h
server_acl.o: ../../include/mymalloc.h
server_acl.o: ../../include/stringops.h
server_acl.o: ../../include/sys_defs.h
user_acl.o: ../../include/dict.h
user_acl.o: ../../include/dict_static.h
user_acl.o: ../../include/match_list.h
+user_acl.o: ../../include/myflock.h
user_acl.o: ../../include/sys_defs.h
user_acl.o: ../../include/vbuf.h
user_acl.o: ../../include/vstream.h
#define DEF_PSC_BARLF_TTL "30d"
extern int var_psc_barlf_ttl;
-#define VAR_PSC_WLIST_NETS "postscreen_whitelist_networks"
-#define DEF_PSC_WLIST_NETS "$" VAR_MYNETWORKS
-extern char *var_psc_wlist_nets;
-
-#define VAR_PSC_BLIST_NETS "postscreen_blacklist_networks"
-#define DEF_PSC_BLIST_NETS ""
-extern char *var_psc_blist_nets;
-
#define VAR_PSC_BLIST_ACTION "postscreen_blacklist_action"
#define DEF_PSC_BLIST_ACTION "ignore"
extern char *var_psc_blist_nets;
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20120908"
+#define MAIL_RELEASE_DATE "20120924"
#define MAIL_VERSION_NUMBER "2.10"
#ifdef SNAPSHOT
alias.o: ../../include/mbox_conf.h
alias.o: ../../include/msg.h
alias.o: ../../include/msg_stats.h
+alias.o: ../../include/myflock.h
alias.o: ../../include/mymalloc.h
alias.o: ../../include/mypwd.h
alias.o: ../../include/recipient_list.h
alias.o: ../../include/vstring.h
alias.o: alias.c
alias.o: local.h
+biff_notify.o: ../../include/iostuff.h
biff_notify.o: ../../include/msg.h
biff_notify.o: ../../include/sys_defs.h
biff_notify.o: biff_notify.c
bounce_workaround.o: ../../include/mbox_conf.h
bounce_workaround.o: ../../include/msg.h
bounce_workaround.o: ../../include/msg_stats.h
+bounce_workaround.o: ../../include/myflock.h
bounce_workaround.o: ../../include/mymalloc.h
bounce_workaround.o: ../../include/recipient_list.h
bounce_workaround.o: ../../include/resolve_clnt.h
command.o: ../../include/mbox_conf.h
command.o: ../../include/msg.h
command.o: ../../include/msg_stats.h
+command.o: ../../include/myflock.h
command.o: ../../include/pipe_command.h
command.o: ../../include/recipient_list.h
command.o: ../../include/resolve_clnt.h
deliver_attr.o: ../../include/mbox_conf.h
deliver_attr.o: ../../include/msg.h
deliver_attr.o: ../../include/msg_stats.h
+deliver_attr.o: ../../include/myflock.h
deliver_attr.o: ../../include/recipient_list.h
deliver_attr.o: ../../include/resolve_clnt.h
deliver_attr.o: ../../include/sys_defs.h
dotforward.o: ../../include/mbox_conf.h
dotforward.o: ../../include/msg.h
dotforward.o: ../../include/msg_stats.h
+dotforward.o: ../../include/myflock.h
dotforward.o: ../../include/mymalloc.h
dotforward.o: ../../include/mypwd.h
dotforward.o: ../../include/open_as.h
forward.o: ../../include/mbox_conf.h
forward.o: ../../include/msg.h
forward.o: ../../include/msg_stats.h
+forward.o: ../../include/myflock.h
forward.o: ../../include/mymalloc.h
forward.o: ../../include/rec_type.h
forward.o: ../../include/recipient_list.h
include.o: ../../include/mbox_conf.h
include.o: ../../include/msg.h
include.o: ../../include/msg_stats.h
+include.o: ../../include/myflock.h
include.o: ../../include/mymalloc.h
include.o: ../../include/mypwd.h
include.o: ../../include/open_as.h
indirect.o: ../../include/mbox_conf.h
indirect.o: ../../include/msg.h
indirect.o: ../../include/msg_stats.h
+indirect.o: ../../include/myflock.h
indirect.o: ../../include/recipient_list.h
indirect.o: ../../include/resolve_clnt.h
indirect.o: ../../include/sent.h
local.o: ../../include/mbox_conf.h
local.o: ../../include/msg.h
local.o: ../../include/msg_stats.h
+local.o: ../../include/myflock.h
local.o: ../../include/mymalloc.h
local.o: ../../include/name_mask.h
local.o: ../../include/recipient_list.h
local_expand.o: ../../include/maps.h
local_expand.o: ../../include/mbox_conf.h
local_expand.o: ../../include/msg_stats.h
+local_expand.o: ../../include/myflock.h
local_expand.o: ../../include/recipient_list.h
local_expand.o: ../../include/resolve_clnt.h
local_expand.o: ../../include/sys_defs.h
mailbox.o: ../../include/mbox_open.h
mailbox.o: ../../include/msg.h
mailbox.o: ../../include/msg_stats.h
+mailbox.o: ../../include/myflock.h
mailbox.o: ../../include/mymalloc.h
mailbox.o: ../../include/mypwd.h
mailbox.o: ../../include/recipient_list.h
maildir.o: ../../include/mbox_open.h
maildir.o: ../../include/msg.h
maildir.o: ../../include/msg_stats.h
+maildir.o: ../../include/myflock.h
maildir.o: ../../include/mymalloc.h
maildir.o: ../../include/recipient_list.h
maildir.o: ../../include/resolve_clnt.h
recipient.o: ../../include/mbox_conf.h
recipient.o: ../../include/msg.h
recipient.o: ../../include/msg_stats.h
+recipient.o: ../../include/myflock.h
recipient.o: ../../include/mymalloc.h
recipient.o: ../../include/mypwd.h
recipient.o: ../../include/recipient_list.h
resolve.o: ../../include/mbox_conf.h
resolve.o: ../../include/msg.h
resolve.o: ../../include/msg_stats.h
+resolve.o: ../../include/myflock.h
resolve.o: ../../include/recipient_list.h
resolve.o: ../../include/resolve_clnt.h
resolve.o: ../../include/rewrite_clnt.h
token.o: ../../include/mbox_conf.h
token.o: ../../include/msg.h
token.o: ../../include/msg_stats.h
+token.o: ../../include/myflock.h
token.o: ../../include/mymalloc.h
token.o: ../../include/readlline.h
token.o: ../../include/recipient_list.h
unknown.o: ../../include/mbox_conf.h
unknown.o: ../../include/msg.h
unknown.o: ../../include/msg_stats.h
+unknown.o: ../../include/myflock.h
unknown.o: ../../include/mymalloc.h
unknown.o: ../../include/recipient_list.h
unknown.o: ../../include/resolve_clnt.h
qmgr.o: ../../include/mail_version.h
qmgr.o: ../../include/master_proto.h
qmgr.o: ../../include/msg.h
+qmgr.o: ../../include/myflock.h
qmgr.o: ../../include/recipient_list.h
qmgr.o: ../../include/scan_dir.h
qmgr.o: ../../include/sys_defs.h
/* The maximal number of messages in the active queue.
/* .IP "\fBqmgr_message_recipient_limit (20000)\fR"
/* The maximal number of recipients held in memory by the Postfix
-/* queue manager, and the maximal size of the size of the short-term,
+/* queue manager, and the maximal size of the short-term,
/* in-memory "dead" destination status cache.
/* DELIVERY CONCURRENCY CONTROLS
/* .ad
/* Available in Postfix version 2.5 and later:
/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
/* The default amount of delay that is inserted between individual
-/* deliveries to the same destination; with per-destination recipient
-/* limit > 1, a destination is a domain, otherwise it is a recipient.
+/* deliveries to the same destination; the resulting behavior depends
+/* on the value of the corresponding per-destination recipient limit.
/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
/* Idem, for delivery via the named message \fItransport\fR.
/* SAFETY CONTROLS
pipe.o: ../../include/mail_version.h
pipe.o: ../../include/msg.h
pipe.o: ../../include/msg_stats.h
+pipe.o: ../../include/myflock.h
pipe.o: ../../include/mymalloc.h
pipe.o: ../../include/off_cvt.h
pipe.o: ../../include/pipe_command.h
postalias.o: ../../include/msg.h
postalias.o: ../../include/msg_syslog.h
postalias.o: ../../include/msg_vstream.h
+postalias.o: ../../include/myflock.h
postalias.o: ../../include/mymalloc.h
postalias.o: ../../include/readlline.h
postalias.o: ../../include/resolve_clnt.h
postconf.o: ../../include/mail_version.h
postconf.o: ../../include/msg.h
postconf.o: ../../include/msg_vstream.h
+postconf.o: ../../include/myflock.h
postconf.o: ../../include/name_mask.h
postconf.o: ../../include/stringops.h
postconf.o: ../../include/sys_defs.h
postconf_builtin.o: ../../include/mail_proto.h
postconf_builtin.o: ../../include/mail_version.h
postconf_builtin.o: ../../include/msg.h
+postconf_builtin.o: ../../include/myflock.h
postconf_builtin.o: ../../include/mymalloc.h
postconf_builtin.o: ../../include/mynetworks.h
postconf_builtin.o: ../../include/server_acl.h
postconf_dbms.o: ../../include/mac_expand.h
postconf_dbms.o: ../../include/mac_parse.h
postconf_dbms.o: ../../include/mail_conf.h
+postconf_dbms.o: ../../include/myflock.h
postconf_dbms.o: ../../include/split_at.h
postconf_dbms.o: ../../include/stringops.h
postconf_dbms.o: ../../include/sys_defs.h
postconf_edit.o: ../../include/htable.h
postconf_edit.o: ../../include/mail_params.h
postconf_edit.o: ../../include/msg.h
+postconf_edit.o: ../../include/myflock.h
postconf_edit.o: ../../include/mymalloc.h
postconf_edit.o: ../../include/readlline.h
postconf_edit.o: ../../include/stringops.h
postconf_main.o: ../../include/mail_conf.h
postconf_main.o: ../../include/mail_params.h
postconf_main.o: ../../include/msg.h
+postconf_main.o: ../../include/myflock.h
postconf_main.o: ../../include/mymalloc.h
postconf_main.o: ../../include/readlline.h
postconf_main.o: ../../include/stringops.h
postconf_master.o: ../../include/mail_params.h
postconf_master.o: ../../include/match_service.h
postconf_master.o: ../../include/msg.h
+postconf_master.o: ../../include/myflock.h
postconf_master.o: ../../include/mymalloc.h
postconf_master.o: ../../include/readlline.h
postconf_master.o: ../../include/stringops.h
postconf_misc.o: ../../include/htable.h
postconf_misc.o: ../../include/mail_conf.h
postconf_misc.o: ../../include/mail_params.h
+postconf_misc.o: ../../include/myflock.h
postconf_misc.o: ../../include/mymalloc.h
postconf_misc.o: ../../include/safe.h
postconf_misc.o: ../../include/sys_defs.h
postconf_node.o: ../../include/dict.h
postconf_node.o: ../../include/htable.h
postconf_node.o: ../../include/msg.h
+postconf_node.o: ../../include/myflock.h
postconf_node.o: ../../include/mymalloc.h
postconf_node.o: ../../include/sys_defs.h
postconf_node.o: ../../include/vbuf.h
postconf_other.o: ../../include/dict.h
postconf_other.o: ../../include/htable.h
postconf_other.o: ../../include/mbox_conf.h
+postconf_other.o: ../../include/myflock.h
postconf_other.o: ../../include/sys_defs.h
postconf_other.o: ../../include/vbuf.h
postconf_other.o: ../../include/vstream.h
postconf_service.o: ../../include/htable.h
postconf_service.o: ../../include/mail_params.h
postconf_service.o: ../../include/msg.h
+postconf_service.o: ../../include/myflock.h
postconf_service.o: ../../include/mymalloc.h
postconf_service.o: ../../include/stringops.h
postconf_service.o: ../../include/sys_defs.h
postconf_unused.o: ../../include/mail_conf.h
postconf_unused.o: ../../include/mail_params.h
postconf_unused.o: ../../include/msg.h
+postconf_unused.o: ../../include/myflock.h
postconf_unused.o: ../../include/sys_defs.h
postconf_unused.o: ../../include/vbuf.h
postconf_unused.o: ../../include/vstream.h
postconf_user.o: ../../include/mail_conf.h
postconf_user.o: ../../include/mail_params.h
postconf_user.o: ../../include/msg.h
+postconf_user.o: ../../include/myflock.h
postconf_user.o: ../../include/mymalloc.h
postconf_user.o: ../../include/stringops.h
postconf_user.o: ../../include/sys_defs.h
postmap.o: ../../include/msg.h
postmap.o: ../../include/msg_syslog.h
postmap.o: ../../include/msg_vstream.h
+postmap.o: ../../include/myflock.h
postmap.o: ../../include/mymalloc.h
postmap.o: ../../include/readlline.h
postmap.o: ../../include/rec_type.h
postscreen.o: ../../include/match_list.h
postscreen.o: ../../include/msg.h
postscreen.o: ../../include/myaddrinfo.h
+postscreen.o: ../../include/myflock.h
postscreen.o: ../../include/mymalloc.h
postscreen.o: ../../include/name_code.h
postscreen.o: ../../include/server_acl.h
postscreen_dict.o: ../../include/match_list.h
postscreen_dict.o: ../../include/msg.h
postscreen_dict.o: ../../include/myaddrinfo.h
+postscreen_dict.o: ../../include/myflock.h
postscreen_dict.o: ../../include/server_acl.h
postscreen_dict.o: ../../include/string_list.h
postscreen_dict.o: ../../include/sys_defs.h
postscreen_dnsbl.o: ../../include/match_list.h
postscreen_dnsbl.o: ../../include/msg.h
postscreen_dnsbl.o: ../../include/myaddrinfo.h
+postscreen_dnsbl.o: ../../include/myflock.h
postscreen_dnsbl.o: ../../include/mymalloc.h
postscreen_dnsbl.o: ../../include/server_acl.h
postscreen_dnsbl.o: ../../include/split_at.h
postscreen_early.o: ../../include/match_list.h
postscreen_early.o: ../../include/msg.h
postscreen_early.o: ../../include/myaddrinfo.h
+postscreen_early.o: ../../include/myflock.h
postscreen_early.o: ../../include/mymalloc.h
postscreen_early.o: ../../include/server_acl.h
postscreen_early.o: ../../include/string_list.h
postscreen_endpt.o: ../../include/events.h
postscreen_endpt.o: ../../include/haproxy_srvr.h
postscreen_endpt.o: ../../include/htable.h
+postscreen_endpt.o: ../../include/inet_proto.h
postscreen_endpt.o: ../../include/mail_params.h
postscreen_endpt.o: ../../include/maps.h
postscreen_endpt.o: ../../include/match_list.h
postscreen_endpt.o: ../../include/msg.h
postscreen_endpt.o: ../../include/myaddrinfo.h
+postscreen_endpt.o: ../../include/myflock.h
postscreen_endpt.o: ../../include/server_acl.h
postscreen_endpt.o: ../../include/string_list.h
postscreen_endpt.o: ../../include/sys_defs.h
postscreen_expand.o: ../../include/match_list.h
postscreen_expand.o: ../../include/msg.h
postscreen_expand.o: ../../include/myaddrinfo.h
+postscreen_expand.o: ../../include/myflock.h
postscreen_expand.o: ../../include/server_acl.h
postscreen_expand.o: ../../include/string_list.h
postscreen_expand.o: ../../include/stringops.h
postscreen_haproxy.o: ../../include/events.h
postscreen_haproxy.o: ../../include/haproxy_srvr.h
postscreen_haproxy.o: ../../include/htable.h
+postscreen_haproxy.o: ../../include/mail_params.h
postscreen_haproxy.o: ../../include/maps.h
postscreen_haproxy.o: ../../include/match_list.h
postscreen_haproxy.o: ../../include/msg.h
postscreen_haproxy.o: ../../include/myaddrinfo.h
+postscreen_haproxy.o: ../../include/myflock.h
postscreen_haproxy.o: ../../include/mymalloc.h
postscreen_haproxy.o: ../../include/server_acl.h
postscreen_haproxy.o: ../../include/string_list.h
postscreen_misc.o: ../../include/match_list.h
postscreen_misc.o: ../../include/msg.h
postscreen_misc.o: ../../include/myaddrinfo.h
+postscreen_misc.o: ../../include/myflock.h
postscreen_misc.o: ../../include/server_acl.h
postscreen_misc.o: ../../include/string_list.h
postscreen_misc.o: ../../include/sys_defs.h
postscreen_send.o: ../../include/match_list.h
postscreen_send.o: ../../include/msg.h
postscreen_send.o: ../../include/myaddrinfo.h
+postscreen_send.o: ../../include/myflock.h
postscreen_send.o: ../../include/server_acl.h
postscreen_send.o: ../../include/smtp_reply_footer.h
postscreen_send.o: ../../include/string_list.h
postscreen_smtpd.o: ../../include/match_list.h
postscreen_smtpd.o: ../../include/msg.h
postscreen_smtpd.o: ../../include/myaddrinfo.h
+postscreen_smtpd.o: ../../include/myflock.h
postscreen_smtpd.o: ../../include/mymalloc.h
postscreen_smtpd.o: ../../include/name_code.h
postscreen_smtpd.o: ../../include/name_mask.h
postscreen_starttls.o: ../../include/match_list.h
postscreen_starttls.o: ../../include/msg.h
postscreen_starttls.o: ../../include/myaddrinfo.h
+postscreen_starttls.o: ../../include/myflock.h
postscreen_starttls.o: ../../include/mymalloc.h
postscreen_starttls.o: ../../include/name_code.h
postscreen_starttls.o: ../../include/name_mask.h
postscreen_state.o: ../../include/match_list.h
postscreen_state.o: ../../include/msg.h
postscreen_state.o: ../../include/myaddrinfo.h
+postscreen_state.o: ../../include/myflock.h
postscreen_state.o: ../../include/mymalloc.h
postscreen_state.o: ../../include/name_mask.h
postscreen_state.o: ../../include/server_acl.h
postscreen_tests.o: ../../include/match_list.h
postscreen_tests.o: ../../include/msg.h
postscreen_tests.o: ../../include/myaddrinfo.h
+postscreen_tests.o: ../../include/myflock.h
postscreen_tests.o: ../../include/server_acl.h
postscreen_tests.o: ../../include/string_list.h
postscreen_tests.o: ../../include/sys_defs.h
proxymap.o: ../../include/mail_server.h
proxymap.o: ../../include/mail_version.h
proxymap.o: ../../include/msg.h
+proxymap.o: ../../include/myflock.h
proxymap.o: ../../include/mymalloc.h
proxymap.o: ../../include/stringops.h
proxymap.o: ../../include/sys_defs.h
qmgr.o: ../../include/mail_version.h
qmgr.o: ../../include/master_proto.h
qmgr.o: ../../include/msg.h
+qmgr.o: ../../include/myflock.h
qmgr.o: ../../include/recipient_list.h
qmgr.o: ../../include/scan_dir.h
qmgr.o: ../../include/sys_defs.h
/* The maximal number of messages in the active queue.
/* .IP "\fBqmgr_message_recipient_limit (20000)\fR"
/* The maximal number of recipients held in memory by the Postfix
-/* queue manager, and the maximal size of the size of the short-term,
+/* queue manager, and the maximal size of the short-term,
/* in-memory "dead" destination status cache.
/* .IP "\fBqmgr_message_recipient_minimum (10)\fR"
/* The minimal number of in-memory recipients for any message.
/* Available in Postfix version 2.5 and later:
/* .IP "\fBdefault_destination_rate_delay (0s)\fR"
/* The default amount of delay that is inserted between individual
-/* deliveries to the same destination; with per-destination recipient
-/* limit > 1, a destination is a domain, otherwise it is a recipient.
+/* deliveries to the same destination; the resulting behavior depends
+/* on the value of the corresponding per-destination recipient limit.
/* .IP "\fItransport\fB_destination_rate_delay $default_destination_rate_delay
/* Idem, for delivery via the named message \fItransport\fR.
/* SAFETY CONTROLS
qmqpd.o: ../../include/match_list.h
qmqpd.o: ../../include/match_parent_style.h
qmqpd.o: ../../include/msg.h
+qmqpd.o: ../../include/myflock.h
qmqpd.o: ../../include/mymalloc.h
qmqpd.o: ../../include/namadr_list.h
qmqpd.o: ../../include/netstring.h
/* \fBErrors-To:\fR message header overrides the error return address.
/* .IP "\fB-R \fIreturn\fR"
/* Delivery status notification control. Specify "hdrs" to
-/* return only the header if a message bounces, "full" to
+/* return only the header when a message bounces, "full" to
/* return a full copy (the default behavior).
/*
-/* The \fB-R\fR option specifies an upper bound; for example,
-/* Postfix will return only the header, when a full copy would
-/* exceed the bounce_size_limit setting.
+/* The \fB-R\fR option specifies an upper bound; Postfix will
+/* return only the header, when a full copy would exceed the
+/* bounce_size_limit setting.
/*
/* This option is ignored before Postfix version 2.10.
/* .IP \fB-q\fR
smtp.o: ../../include/msg.h
smtp.o: ../../include/msg_stats.h
smtp.o: ../../include/myaddrinfo.h
+smtp.o: ../../include/myflock.h
smtp.o: ../../include/mymalloc.h
smtp.o: ../../include/name_code.h
smtp.o: ../../include/name_mask.h
smtp_addr.o: ../../include/msg.h
smtp_addr.o: ../../include/msg_stats.h
smtp_addr.o: ../../include/myaddrinfo.h
+smtp_addr.o: ../../include/myflock.h
smtp_addr.o: ../../include/mymalloc.h
smtp_addr.o: ../../include/name_code.h
smtp_addr.o: ../../include/name_mask.h
smtp_chat.o: ../../include/mime_state.h
smtp_chat.o: ../../include/msg.h
smtp_chat.o: ../../include/msg_stats.h
+smtp_chat.o: ../../include/myflock.h
smtp_chat.o: ../../include/mymalloc.h
smtp_chat.o: ../../include/name_code.h
smtp_chat.o: ../../include/name_mask.h
smtp_connect.o: ../../include/msg.h
smtp_connect.o: ../../include/msg_stats.h
smtp_connect.o: ../../include/myaddrinfo.h
+smtp_connect.o: ../../include/myflock.h
smtp_connect.o: ../../include/mymalloc.h
smtp_connect.o: ../../include/name_code.h
smtp_connect.o: ../../include/name_mask.h
smtp_map11.o: ../../include/mime_state.h
smtp_map11.o: ../../include/msg.h
smtp_map11.o: ../../include/msg_stats.h
+smtp_map11.o: ../../include/myflock.h
smtp_map11.o: ../../include/name_code.h
smtp_map11.o: ../../include/name_mask.h
smtp_map11.o: ../../include/quote_822_local.h
smtp_proto.o: ../../include/mime_state.h
smtp_proto.o: ../../include/msg.h
smtp_proto.o: ../../include/msg_stats.h
+smtp_proto.o: ../../include/myflock.h
smtp_proto.o: ../../include/mymalloc.h
smtp_proto.o: ../../include/name_code.h
smtp_proto.o: ../../include/name_mask.h
smtp_rcpt.o: ../../include/mime_state.h
smtp_rcpt.o: ../../include/msg.h
smtp_rcpt.o: ../../include/msg_stats.h
+smtp_rcpt.o: ../../include/myflock.h
smtp_rcpt.o: ../../include/mymalloc.h
smtp_rcpt.o: ../../include/name_code.h
smtp_rcpt.o: ../../include/name_mask.h
smtp_reuse.o: ../../include/mime_state.h
smtp_reuse.o: ../../include/msg.h
smtp_reuse.o: ../../include/msg_stats.h
+smtp_reuse.o: ../../include/myflock.h
smtp_reuse.o: ../../include/mymalloc.h
smtp_reuse.o: ../../include/name_code.h
smtp_reuse.o: ../../include/name_mask.h
smtp_sasl_auth_cache.o: ../../include/mime_state.h
smtp_sasl_auth_cache.o: ../../include/msg.h
smtp_sasl_auth_cache.o: ../../include/msg_stats.h
+smtp_sasl_auth_cache.o: ../../include/myflock.h
smtp_sasl_auth_cache.o: ../../include/mymalloc.h
smtp_sasl_auth_cache.o: ../../include/name_code.h
smtp_sasl_auth_cache.o: ../../include/name_mask.h
smtp_sasl_glue.o: ../../include/mime_state.h
smtp_sasl_glue.o: ../../include/msg.h
smtp_sasl_glue.o: ../../include/msg_stats.h
+smtp_sasl_glue.o: ../../include/myflock.h
smtp_sasl_glue.o: ../../include/mymalloc.h
smtp_sasl_glue.o: ../../include/name_code.h
smtp_sasl_glue.o: ../../include/name_mask.h
smtp_sasl_proto.o: ../../include/mime_state.h
smtp_sasl_proto.o: ../../include/msg.h
smtp_sasl_proto.o: ../../include/msg_stats.h
+smtp_sasl_proto.o: ../../include/myflock.h
smtp_sasl_proto.o: ../../include/mymalloc.h
smtp_sasl_proto.o: ../../include/name_code.h
smtp_sasl_proto.o: ../../include/name_mask.h
smtp_session.o: ../../include/mime_state.h
smtp_session.o: ../../include/msg.h
smtp_session.o: ../../include/msg_stats.h
+smtp_session.o: ../../include/myflock.h
smtp_session.o: ../../include/mymalloc.h
smtp_session.o: ../../include/name_code.h
smtp_session.o: ../../include/name_mask.h
smtp_state.o: ../../include/mime_state.h
smtp_state.o: ../../include/msg.h
smtp_state.o: ../../include/msg_stats.h
+smtp_state.o: ../../include/myflock.h
smtp_state.o: ../../include/mymalloc.h
smtp_state.o: ../../include/name_code.h
smtp_state.o: ../../include/name_mask.h
smtp_trouble.o: ../../include/mime_state.h
smtp_trouble.o: ../../include/msg.h
smtp_trouble.o: ../../include/msg_stats.h
+smtp_trouble.o: ../../include/myflock.h
smtp_trouble.o: ../../include/name_code.h
smtp_trouble.o: ../../include/name_mask.h
smtp_trouble.o: ../../include/recipient_list.h
smtp_unalias.o: ../../include/msg.h
smtp_unalias.o: ../../include/msg_stats.h
smtp_unalias.o: ../../include/myaddrinfo.h
+smtp_unalias.o: ../../include/myflock.h
smtp_unalias.o: ../../include/name_code.h
smtp_unalias.o: ../../include/name_mask.h
smtp_unalias.o: ../../include/recipient_list.h
smtpd.o: ../../include/milter.h
smtpd.o: ../../include/msg.h
smtpd.o: ../../include/myaddrinfo.h
+smtpd.o: ../../include/myflock.h
smtpd.o: ../../include/mymalloc.h
smtpd.o: ../../include/namadr_list.h
smtpd.o: ../../include/name_code.h
smtpd_check.o: ../../include/msg.h
smtpd_check.o: ../../include/msg_stats.h
smtpd_check.o: ../../include/myaddrinfo.h
+smtpd_check.o: ../../include/myflock.h
smtpd_check.o: ../../include/mymalloc.h
smtpd_check.o: ../../include/namadr_list.h
smtpd_check.o: ../../include/name_code.h
# do not edit below this line - it is generated by 'make depend'
qmqp-sink.o: ../../include/events.h
+qmqp-sink.o: ../../include/htable.h
qmqp-sink.o: ../../include/inet_proto.h
qmqp-sink.o: ../../include/iostuff.h
qmqp-sink.o: ../../include/listen.h
smtp-sink.o: ../../include/chroot_uid.h
smtp-sink.o: ../../include/events.h
smtp-sink.o: ../../include/get_hostname.h
+smtp-sink.o: ../../include/htable.h
smtp-sink.o: ../../include/inet_proto.h
smtp-sink.o: ../../include/iostuff.h
smtp-sink.o: ../../include/listen.h
spawn.o: ../../include/mail_server.h
spawn.o: ../../include/mail_version.h
spawn.o: ../../include/msg.h
+spawn.o: ../../include/myflock.h
spawn.o: ../../include/mymalloc.h
spawn.o: ../../include/set_eugid.h
spawn.o: ../../include/spawn_command.h
tls_server.o: ../../include/iostuff.h
tls_server.o: ../../include/mail_params.h
tls_server.o: ../../include/msg.h
+tls_server.o: ../../include/myflock.h
tls_server.o: ../../include/mymalloc.h
tls_server.o: ../../include/name_code.h
tls_server.o: ../../include/name_mask.h
* opening a damaged file after some process terminated abnormally.
*/
#ifdef SINGLE_UPDATER
-#define DICT_FLAGS (DICT_FLAG_DUP_REPLACE)
+#define DICT_FLAGS (DICT_FLAG_DUP_REPLACE | DICT_FLAG_OPEN_LOCK)
#else
#define DICT_FLAGS \
(DICT_FLAG_DUP_REPLACE | DICT_FLAG_LOCK | DICT_FLAG_SYNC_UPDATE)
/*
* Sanity checks.
*/
- if (dict->lock_fd < 0)
- msg_fatal("dictionary %s is not a regular file", dbname);
-#ifdef SINGLE_UPDATER
- if (myflock(dict->lock_fd, INTERNAL_LOCK,
- MYFLOCK_OP_EXCLUSIVE | MYFLOCK_OP_NOWAIT) < 0)
- msg_fatal("cannot lock dictionary %s for exclusive use: %m", dbname);
-#endif
if (dict->update == 0)
msg_fatal("dictionary %s does not support update operations", dbname);
if (dict->delete == 0)
tlsmgr.o: ../../include/mail_version.h
tlsmgr.o: ../../include/master_proto.h
tlsmgr.o: ../../include/msg.h
+tlsmgr.o: ../../include/myflock.h
tlsmgr.o: ../../include/mymalloc.h
tlsmgr.o: ../../include/name_code.h
tlsmgr.o: ../../include/name_mask.h
resolve.o: ../../include/match_list.h
resolve.o: ../../include/match_parent_style.h
resolve.o: ../../include/msg.h
+resolve.o: ../../include/myflock.h
resolve.o: ../../include/mymalloc.h
resolve.o: ../../include/quote_822_local.h
resolve.o: ../../include/quote_flags.h
rewrite.o: ../../include/mail_proto.h
rewrite.o: ../../include/maps.h
rewrite.o: ../../include/msg.h
+rewrite.o: ../../include/myflock.h
rewrite.o: ../../include/resolve_clnt.h
rewrite.o: ../../include/resolve_local.h
rewrite.o: ../../include/split_at.h
transport.o: ../../include/match_list.h
transport.o: ../../include/match_parent_style.h
transport.o: ../../include/msg.h
+transport.o: ../../include/myflock.h
transport.o: ../../include/mymalloc.h
transport.o: ../../include/split_at.h
transport.o: ../../include/stringops.h
trivial-rewrite.o: ../../include/mail_version.h
trivial-rewrite.o: ../../include/maps.h
trivial-rewrite.o: ../../include/msg.h
+trivial-rewrite.o: ../../include/myflock.h
trivial-rewrite.o: ../../include/resolve_clnt.h
trivial-rewrite.o: ../../include/resolve_local.h
trivial-rewrite.o: ../../include/rewrite_clnt.h
dict.o: mac_expand.h
dict.o: mac_parse.h
dict.o: msg.h
+dict.o: myflock.h
dict.o: mymalloc.h
dict.o: name_mask.h
dict.o: readlline.h
dict_alloc.o: dict.h
dict_alloc.o: dict_alloc.c
dict_alloc.o: msg.h
+dict_alloc.o: myflock.h
dict_alloc.o: mymalloc.h
dict_alloc.o: sys_defs.h
dict_alloc.o: vbuf.h
dict_cache.o: dict_cache.h
dict_cache.o: events.h
dict_cache.o: msg.h
+dict_cache.o: myflock.h
dict_cache.o: mymalloc.h
dict_cache.o: sys_defs.h
dict_cache.o: vbuf.h
dict_cidr.o: dict_cidr.h
dict_cidr.o: msg.h
dict_cidr.o: myaddrinfo.h
+dict_cidr.o: myflock.h
dict_cidr.o: mymalloc.h
dict_cidr.o: readlline.h
dict_cidr.o: stringops.h
dict_debug.o: dict.h
dict_debug.o: dict_debug.c
dict_debug.o: msg.h
+dict_debug.o: myflock.h
dict_debug.o: mymalloc.h
dict_debug.o: sys_defs.h
dict_debug.o: vbuf.h
dict_env.o: dict_env.c
dict_env.o: dict_env.h
dict_env.o: msg.h
+dict_env.o: myflock.h
dict_env.o: mymalloc.h
dict_env.o: safe.h
dict_env.o: stringops.h
dict_fail.o: dict_fail.c
dict_fail.o: dict_fail.h
dict_fail.o: msg.h
+dict_fail.o: myflock.h
dict_fail.o: mymalloc.h
dict_fail.o: sys_defs.h
dict_fail.o: vbuf.h
dict_ht.o: dict_ht.c
dict_ht.o: dict_ht.h
dict_ht.o: htable.h
+dict_ht.o: myflock.h
dict_ht.o: mymalloc.h
dict_ht.o: stringops.h
dict_ht.o: sys_defs.h
dict_nis.o: dict_nis.c
dict_nis.o: dict_nis.h
dict_nis.o: msg.h
+dict_nis.o: myflock.h
dict_nis.o: mymalloc.h
dict_nis.o: stringops.h
dict_nis.o: sys_defs.h
dict_nisplus.o: dict_nisplus.c
dict_nisplus.o: dict_nisplus.h
dict_nisplus.o: msg.h
+dict_nisplus.o: myflock.h
dict_nisplus.o: mymalloc.h
dict_nisplus.o: stringops.h
dict_nisplus.o: sys_defs.h
dict_pcre.o: dict_pcre.h
dict_pcre.o: mac_parse.h
dict_pcre.o: msg.h
+dict_pcre.o: myflock.h
dict_pcre.o: mymalloc.h
dict_pcre.o: readlline.h
dict_pcre.o: safe.h
dict_regexp.o: dict_regexp.h
dict_regexp.o: mac_parse.h
dict_regexp.o: msg.h
+dict_regexp.o: myflock.h
dict_regexp.o: mymalloc.h
dict_regexp.o: readlline.h
dict_regexp.o: safe.h
dict_sockmap.o: dict_sockmap.h
dict_sockmap.o: htable.h
dict_sockmap.o: msg.h
+dict_sockmap.o: myflock.h
dict_sockmap.o: mymalloc.h
dict_sockmap.o: netstring.h
dict_sockmap.o: split_at.h
dict_static.o: dict_static.c
dict_static.o: dict_static.h
dict_static.o: msg.h
+dict_static.o: myflock.h
dict_static.o: mymalloc.h
dict_static.o: sys_defs.h
dict_static.o: vbuf.h
dict_surrogate.o: dict.h
dict_surrogate.o: dict_surrogate.c
dict_surrogate.o: msg.h
+dict_surrogate.o: myflock.h
dict_surrogate.o: mymalloc.h
dict_surrogate.o: sys_defs.h
dict_surrogate.o: vbuf.h
dict_tcp.o: hex_quote.h
dict_tcp.o: iostuff.h
dict_tcp.o: msg.h
+dict_tcp.o: myflock.h
dict_tcp.o: mymalloc.h
dict_tcp.o: stringops.h
dict_tcp.o: sys_defs.h
dict_test.o: dict_test.c
dict_test.o: msg.h
dict_test.o: msg_vstream.h
+dict_test.o: myflock.h
dict_test.o: stringops.h
dict_test.o: sys_defs.h
dict_test.o: vbuf.h
dict_thash.o: htable.h
dict_thash.o: iostuff.h
dict_thash.o: msg.h
+dict_thash.o: myflock.h
dict_thash.o: mymalloc.h
dict_thash.o: readlline.h
dict_thash.o: stringops.h
dict_unix.o: dict_unix.c
dict_unix.o: dict_unix.h
dict_unix.o: msg.h
+dict_unix.o: myflock.h
dict_unix.o: mymalloc.h
dict_unix.o: stringops.h
dict_unix.o: sys_defs.h
match_list.o: match_list.c
match_list.o: match_list.h
match_list.o: msg.h
+match_list.o: myflock.h
match_list.o: mymalloc.h
match_list.o: stringops.h
match_list.o: sys_defs.h
match_ops.o: match_ops.c
match_ops.o: msg.h
match_ops.o: myaddrinfo.h
+match_ops.o: myflock.h
match_ops.o: mymalloc.h
match_ops.o: split_at.h
match_ops.o: stringops.h
#include <vstream.h>
#include <argv.h>
#include <vstring.h>
+#include <myflock.h>
/*
* Provenance information.
int (*update) (struct DICT *, const char *, const char *);
int (*delete) (struct DICT *, const char *);
int (*sequence) (struct DICT *, int, const char **, const char **);
+ int (*lock) (struct DICT *, int);
void (*close) (struct DICT *);
int lock_fd; /* for dict_update() lock */
int stat_fd; /* change detection */
#define DICT_FLAG_TRY1NULL (1<<3) /* append 0 to key/value */
#define DICT_FLAG_FIXED (1<<4) /* fixed key map */
#define DICT_FLAG_PATTERN (1<<5) /* keys are patterns */
-#define DICT_FLAG_LOCK (1<<6) /* lock before access */
+#define DICT_FLAG_LOCK (1<<6) /* temp lock before each access */
#define DICT_FLAG_DUP_REPLACE (1<<7) /* if file, replace dups */
#define DICT_FLAG_SYNC_UPDATE (1<<8) /* if file, sync updates */
#define DICT_FLAG_DEBUG (1<<9) /* log access */
#define DICT_FLAG_FOLD_FIX (1<<14) /* case-fold key with fixed-case map */
#define DICT_FLAG_FOLD_MUL (1<<15) /* case-fold key with multi-case map */
#define DICT_FLAG_FOLD_ANY (DICT_FLAG_FOLD_FIX | DICT_FLAG_FOLD_MUL)
-#define DICT_FLAG_OPEN_LOCK (1<<16) /* open file with exclusive lock */
+#define DICT_FLAG_OPEN_LOCK (1<<16) /* perm lock if not multi-writer safe */
/* IMPORTANT: Update the dict_mask[] table when the above changes */
/* The purpose of the default methods is to trap an attempt to
/* invoke an unsupported method.
/*
+/* One exception is the default lock function. When the
+/* dictionary provides a file handle for locking, the default
+/* lock function returns the result from myflock(), otherwise
+/* it returns 0. The lock function is called to implement the
+/* DICT_FLAG_OPEN_LOCK feature (lock database on open) when
+/* a database is not multi-writer safe.
+/*
/* dict_free() releases memory and cleans up after dict_alloc().
/* It is up to the caller to dispose of any memory that was allocated
/* by the caller.
#include "msg.h"
#include "mymalloc.h"
+#include "myflock.h"
#include "dict.h"
/* dict_default_lookup - trap unimplemented operation */
dict->type, dict->name);
}
+/* dict_default_lock - default lock handler */
+
+static int dict_default_lock(DICT *dict, int operation)
+{
+ if (dict->lock_fd >= 0) {
+ return (myflock(dict->lock_fd, INTERNAL_LOCK, operation));
+ } else {
+ return (0);
+ }
+}
+
/* dict_default_close - trap unimplemented operation */
static void dict_default_close(DICT *dict)
dict->delete = dict_default_delete;
dict->sequence = dict_default_sequence;
dict->close = dict_default_close;
+ dict->lock = dict_default_lock;
dict->lock_fd = -1;
dict->stat_fd = -1;
dict->mtime = 0;
/* With maps where this is appropriate, acquire an exclusive lock
/* before writing, and acquire a shared lock before reading.
/* .IP DICT_FLAG_OPEN_LOCK
-/* With maps where this is appropriate, acquire an exclusive
-/* lock upon open, and report a fatal run-time error if the
-/* table is already locked.
+/* With databases that are not multi-writer safe, request that
+/* dict_open() acquires an exclusive lock, or that it reports
+/* a fatal run-time error otherwise.
/* .IP DICT_FLAG_FOLD_FIX
/* With databases whose lookup fields are fixed-case strings,
/* fold the search key to lower case before accessing the
if (msg_verbose)
msg_info("%s: %s:%s", myname, dict_type, dict_name);
/* XXX the choice between wait-for-lock or no-wait is hard-coded. */
- if (dict->lock_fd >= 0 && (dict_flags & DICT_FLAG_OPEN_LOCK) != 0) {
+ if (dict_flags & DICT_FLAG_OPEN_LOCK) {
if (dict_flags & DICT_FLAG_LOCK)
msg_panic("%s: attempt to open %s:%s with both \"open\" lock and \"access\" lock",
myname, dict_type, dict_name);
- if (myflock(dict->lock_fd, INTERNAL_LOCK,
- MYFLOCK_OP_EXCLUSIVE | MYFLOCK_OP_NOWAIT) < 0)
+ if (dict->lock(dict, MYFLOCK_OP_EXCLUSIVE | MYFLOCK_OP_NOWAIT) < 0)
msg_fatal("%s:%s: unable to get exclusive lock: %m",
dict_type, dict_name);
}
dict_flags |= DICT_FLAG_FOLD_ANY;
else if (strcasecmp(argv[optind + 2], "sync") == 0)
dict_flags |= DICT_FLAG_SYNC_UPDATE;
- else
+ else if (strcasecmp(argv[optind + 2], "open_lock") == 0) {
+ dict_flags |= DICT_FLAG_OPEN_LOCK;
+ dict_flags &= ~DICT_FLAG_LOCK;
+ } else
usage(argv[0]);
}
+ vstream_fflush(VSTREAM_OUT);
dict_name = argv[optind];
dict_allow_surrogate = 1;
dict = dict_open(dict_name, open_flags, dict_flags);
#define USE_STATVFS
#define STATVFS_IN_SYS_STATVFS_H
#define INT_MAX_IN_LIMITS_H
-#define STREAM_CONNECTIONS /* avoid UNIX-domain sockets */
+#ifdef STREAM_CONNECTIONS /* avoid UNIX-domain sockets */
#define LOCAL_LISTEN stream_listen
#define LOCAL_ACCEPT stream_accept
#define LOCAL_CONNECT stream_connect
#define LOCAL_TRIGGER stream_trigger
#define LOCAL_SEND_FD stream_send_fd
#define LOCAL_RECV_FD stream_recv_fd
+#endif
#define HAS_VOLATILE_LOCKS
#define BROKEN_READ_SELECT_ON_TCP_SOCKET
#define CANT_WRITE_BEFORE_SENDING_FD
verify.o: ../../include/mail_version.h
verify.o: ../../include/msg.h
verify.o: ../../include/msg_stats.h
+verify.o: ../../include/myflock.h
verify.o: ../../include/mymalloc.h
verify.o: ../../include/post_mail.h
verify.o: ../../include/recipient_list.h
deliver_attr.o: ../../include/mbox_conf.h
deliver_attr.o: ../../include/msg.h
deliver_attr.o: ../../include/msg_stats.h
+deliver_attr.o: ../../include/myflock.h
deliver_attr.o: ../../include/recipient_list.h
deliver_attr.o: ../../include/sys_defs.h
deliver_attr.o: ../../include/vbuf.h
mailbox.o: ../../include/mbox_open.h
mailbox.o: ../../include/msg.h
mailbox.o: ../../include/msg_stats.h
+mailbox.o: ../../include/myflock.h
mailbox.o: ../../include/mymalloc.h
mailbox.o: ../../include/recipient_list.h
mailbox.o: ../../include/safe_open.h
maildir.o: ../../include/mbox_open.h
maildir.o: ../../include/msg.h
maildir.o: ../../include/msg_stats.h
+maildir.o: ../../include/myflock.h
maildir.o: ../../include/mymalloc.h
maildir.o: ../../include/recipient_list.h
maildir.o: ../../include/safe_open.h
recipient.o: ../../include/mbox_conf.h
recipient.o: ../../include/msg.h
recipient.o: ../../include/msg_stats.h
+recipient.o: ../../include/myflock.h
recipient.o: ../../include/mymalloc.h
recipient.o: ../../include/recipient_list.h
recipient.o: ../../include/stringops.h
unknown.o: ../../include/mbox_conf.h
unknown.o: ../../include/msg.h
unknown.o: ../../include/msg_stats.h
+unknown.o: ../../include/myflock.h
unknown.o: ../../include/recipient_list.h
unknown.o: ../../include/sys_defs.h
unknown.o: ../../include/vbuf.h
virtual.o: ../../include/mbox_conf.h
virtual.o: ../../include/msg.h
virtual.o: ../../include/msg_stats.h
+virtual.o: ../../include/myflock.h
virtual.o: ../../include/recipient_list.h
virtual.o: ../../include/set_eugid.h
virtual.o: ../../include/sys_defs.h