+-TDICT_UNION
-TABOUNCE
-TADDR_MATCH_LIST
-TADDR_PATTERN
Cleanup: postconf code to determine the default mydomain
value had not evolved since 1997, while the rest of Postfix
changed in 2000. File: postconf/postconf-dbms.c.
+
+20140922
+
+ Cleanup: the confirm_delay_cleared feature now sends no
+ notification when the sender requests NOTIFY options that
+ do not include NOTIFY=DELAY. Files: global/deliver_request,h,
+ global/sent.c, *qmgr/qmgr_active.c, *qmgr/qmgr_message.c.
+
+ Bugfix (introduced: yesterday): missing print arguments.
+ File: postconf/postconf_dbms.c.
+
+ Cleanup: simplified "nested" lookup table checks.
+
+ Cleanup: replace stress-dependent main.cf defaults with the
+ ternary form: "${stress?{x}:{y}}" File: global/mail_params.h,
+ proto/postconf.proto, postscreen/postscreen.c (comments).
The pickup daemon logs warnings only when the cleanup daemon
dit not provide a "reason" attribute. Is this logic right?
- Make the "relayed after delay" notification conditional on
- the presence of the DSN_NOTIFY_DELAY flag.
-
up-convert myhostname to UTF-8 in MIME boundary strings?
- Update postconf to recursively parse legacy-style mapnames
- in random:, pipe:, and other multimaps.
-
Introduce constants to replace all the ad-hoc ", \t\r\n"
etc. for tokenization. That will have to go into an "util"
file because match_strings(3), dict_pipe(3) and dict_random(3)
</DD>
<DT><b><a name="postscreen_command_time_limit">postscreen_command_time_limit</a>
-(default: ${stress?10}${stress:300}s)</b></DT><DD>
+(default: normal: 300s, overload: 10s)</b></DT><DD>
<p> The time limit to read an entire command line with <a href="postscreen.8.html">postscreen(8)</a>'s
built-in SMTP protocol engine. </p>
</DD>
<DT><b><a name="postscreen_greet_wait">postscreen_greet_wait</a>
-(default: ${stress?2}${stress:6}s)</b></DT><DD>
+(default: normal: 6s, overload: 2s)</b></DT><DD>
<p> The amount of time that <a href="postscreen.8.html">postscreen(8)</a> will wait for an SMTP
client to send a command before its turn, and for DNS blocklist
<b>DESCRIPTION</b>
The Postfix <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server provides additional protection against
mail server overload. One <a href="postscreen.8.html"><b>postscreen</b>(8)</a> process handles multiple
- inbound SMTP connections, and decides which clients may talk to a Post-
+ inbound SMTP connections, and decides which clients may talk to a Post‐
fix SMTP server process. By keeping spambots away, <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
leaves more SMTP server processes available for legitimate clients, and
delays the onset of server overload conditions.
This program should not be used on SMTP ports that receive mail from
end-user clients (MUAs). In a typical deployment, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> handles
the MX service on TCP port 25, while MUA clients submit mail via the
- <b>submission</b> service on TCP port 587 which requires client authentica-
+ <b>submission</b> service on TCP port 587 which requires client authentica‐
tion. Alternatively, a site could set up a dedicated, non-postscreen,
- "port 25" server that provides <b>submission</b> service and client authenti-
+ "port 25" server that provides <b>submission</b> service and client authenti‐
cation, but no MX service.
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> maintains a temporary whitelist for clients that have
Postfix SMTP server process. This minimizes the overhead for legitimate
mail.
- By default, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> logs statistics and hands off every connec-
+ By default, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> logs statistics and hands off every connec‐
tion to a Postfix SMTP server process, while excluding clients in
- <a href="postconf.5.html#mynetworks">mynetworks</a> from all tests (primarily, to avoid problems with non-stan-
+ <a href="postconf.5.html#mynetworks">mynetworks</a> from all tests (primarily, to avoid problems with non-stan‐
dard SMTP implementations in network appliances). This mode is useful
for non-destructive testing.
information.
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> is not an SMTP proxy; this is intentional. The purpose
- is to keep spambots away from Postfix SMTP server processes, while min-
+ is to keep spambots away from Postfix SMTP server processes, while min‐
imizing overhead for legitimate traffic.
<b>SECURITY</b>
the "live" connection to a Postfix SMTP server process in the middle of
a session. Instead, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> defers attempts to deliver mail with
a 4XX status, and waits for the client to disconnect. When the client
- connects again, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will allow the client to talk to a Post-
+ connects again, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will allow the client to talk to a Post‐
fix SMTP server process (provided that the whitelist status has not
expired). <a href="postscreen.8.html"><b>postscreen</b>(8)</a> mitigates the impact of this limitation by
giving the "after 220 server greeting" tests a long expiration time.
The text below provides only a parameter summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for
more details including examples.
- NOTE: Some <a href="postscreen.8.html"><b>postscreen</b>(8)</a> parameters implement stress-dependent behav-
+ NOTE: Some <a href="postscreen.8.html"><b>postscreen</b>(8)</a> parameters implement stress-dependent behav‐
ior. This is supported only when the default parameter value is
- stress-dependent (that is, it looks like ${stress?X}${stress:Y}, or it
- is the $<i>name</i> of an smtpd parameter with a stress-dependent default).
+ stress-dependent (that is, it looks like ${stress?{X}:{Y}}, or it is
+ the $<i>name</i> of an smtpd parameter with a stress-dependent default).
Other parameters always evaluate as if the <b>stress</b> parameter value is
the empty string.
<b><a href="postconf.5.html#postscreen_command_filter">postscreen_command_filter</a> ($<a href="postconf.5.html#smtpd_command_filter">smtpd_command_filter</a>)</b>
A mechanism to transform commands from remote SMTP clients.
- <b><a href="postconf.5.html#postscreen_discard_ehlo_keyword_address_maps">postscreen_discard_ehlo_keyword_address_maps</a> ($<a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">smtpd_discard_ehlo_key</a>-</b>
- <b><a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">word_address_maps</a>)</b>
+ <b><a href="postconf.5.html#postscreen_discard_ehlo_keyword_address_maps">postscreen_discard_ehlo_keyword_address_maps</a> ($smtpd_discard_ehlo_key</b>‐\b‐
+ <b>word_address_maps)</b>
Lookup tables, indexed by the remote SMTP client address, with
case insensitive lists of EHLO keywords (pipelining, starttls,
auth, etc.) that the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server will not send in the
<b><a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> (ignore)</b>
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when a remote SMTP client is
- permanently blacklisted with the <a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> parame-
+ permanently blacklisted with the <a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> parame‐
ter.
<b>MAIL EXCHANGER POLICY TESTS</b>
<b><a href="postconf.5.html#postscreen_whitelist_interfaces">postscreen_whitelist_interfaces</a> (<a href="DATABASE_README.html#types">static</a>:all)</b>
A list of local <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server IP addresses where a non-
- whitelisted remote SMTP client can obtain <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s tempo-
+ whitelisted remote SMTP client can obtain <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s tempo‐
rary whitelist status.
<b>BEFORE 220 GREETING TESTS</b>
These tests are executed before the remote SMTP client receives the
- "220 servername" greeting. If no tests remain after the successful com-
+ "220 servername" greeting. If no tests remain after the successful com‐
pletion of this phase, the client will be handed off immediately to a
Postfix SMTP server process.
text..." response, in an attempt to confuse bad SMTP clients so
that they speak before their turn (pre-greet).
- <b><a href="postconf.5.html#postscreen_greet_wait">postscreen_greet_wait</a> (${stress?2}${stress:6}s)</b>
+ <b><a href="postconf.5.html#postscreen_greet_wait">postscreen_greet_wait</a> (normal: 6s, overload: 2s)</b>
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will wait for an SMTP
client to send a command before its turn, and for DNS blocklist
lookup results to arrive (default: up to 2 seconds under stress,
up to 6 seconds otherwise).
<b><a href="postconf.5.html#smtpd_service_name">smtpd_service_name</a> (smtpd)</b>
- The internal service that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> hands off allowed con-
+ The internal service that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> hands off allowed con‐
nections to.
Available in Postfix version 2.11 and later:
Disable the SMTP VRFY command in the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> daemon.
<b><a href="postconf.5.html#postscreen_forbidden_commands">postscreen_forbidden_commands</a> ($<a href="postconf.5.html#smtpd_forbidden_commands">smtpd_forbidden_commands</a>)</b>
- List of commands that the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server considers in vio-
+ List of commands that the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server considers in vio‐
lation of the SMTP protocol.
<b><a href="postconf.5.html#postscreen_helo_required">postscreen_helo_required</a> ($<a href="postconf.5.html#smtpd_helo_required">smtpd_helo_required</a>)</b>
- Require that a remote SMTP client sends HELO or EHLO before com-
+ Require that a remote SMTP client sends HELO or EHLO before com‐
mencing a MAIL transaction.
<b><a href="postconf.5.html#postscreen_non_smtp_command_action">postscreen_non_smtp_command_action</a> (drop)</b>
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when a remote SMTP client
- sends non-SMTP commands as specified with the <a href="postconf.5.html#postscreen_forbidden_commands">postscreen_forbid</a>-
- <a href="postconf.5.html#postscreen_forbidden_commands">den_commands</a> parameter.
+ sends non-SMTP commands as specified with the postscreen_forbid‐
+ den_commands parameter.
<b><a href="postconf.5.html#postscreen_non_smtp_command_enable">postscreen_non_smtp_command_enable</a> (no)</b>
Enable "non-SMTP command" tests in the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server.
<b><a href="postconf.5.html#postscreen_pipelining_action">postscreen_pipelining_action</a> (enforce)</b>
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when a remote SMTP client
- sends multiple commands instead of sending one command and wait-
+ sends multiple commands instead of sending one command and wait‐
ing for the server to respond.
<b><a href="postconf.5.html#postscreen_pipelining_enable">postscreen_pipelining_enable</a> (no)</b>
Persistent storage for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server decisions.
<b><a href="postconf.5.html#postscreen_cache_retention_time">postscreen_cache_retention_time</a> (7d)</b>
- The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will cache an expired tem-
+ The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will cache an expired tem‐
porary whitelist entry before it is removed.
<b><a href="postconf.5.html#postscreen_bare_newline_ttl">postscreen_bare_newline_ttl</a> (30d)</b>
Upon input, long lines are chopped up into pieces of at most
this length; upon delivery, long lines are reconstructed.
- <b><a href="postconf.5.html#postscreen_client_connection_count_limit">postscreen_client_connection_count_limit</a> ($<a href="postconf.5.html#smtpd_client_connection_count_limit">smtpd_client_connec</a>-</b>
- <b><a href="postconf.5.html#smtpd_client_connection_count_limit">tion_count_limit</a>)</b>
+ <b><a href="postconf.5.html#postscreen_client_connection_count_limit">postscreen_client_connection_count_limit</a> ($smtpd_client_connec</b>‐\b‐
+ <b>tion_count_limit)</b>
How many simultaneous connections any remote SMTP client is
allowed to have with the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> daemon.
The limit on the total number of commands per SMTP session for
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine.
- <b><a href="postconf.5.html#postscreen_command_time_limit">postscreen_command_time_limit</a> (${stress?10}${stress:300}s)</b>
+ <b><a href="postconf.5.html#postscreen_command_time_limit">postscreen_command_time_limit</a> (normal: 300s, overload: 10s)</b>
The time limit to read an entire command line with
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine.
<b>STARTTLS CONTROLS</b>
<b><a href="postconf.5.html#postscreen_tls_security_level">postscreen_tls_security_level</a> ($<a href="postconf.5.html#smtpd_tls_security_level">smtpd_tls_security_level</a>)</b>
The SMTP TLS security level for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server; when a
- non-empty value is specified, this overrides the obsolete param-
+ non-empty value is specified, this overrides the obsolete param‐
eters <a href="postconf.5.html#postscreen_use_tls">postscreen_use_tls</a> and <a href="postconf.5.html#postscreen_enforce_tls">postscreen_enforce_tls</a>.
<b><a href="postconf.5.html#tlsproxy_service_name">tlsproxy_service_name</a> (tlsproxy)</b>
<b>MISCELLANEOUS CONTROLS</b>
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
- The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
+ The default location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con‐
figuration files.
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
- The maximal number of digits after the decimal point when log-
+ The maximal number of digits after the decimal point when log‐
ging sub-second delay values.
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
The mail system name that is prepended to the process name in
- syslog records, so that "smtpd" becomes, for example, "post-
+ syslog records, so that "smtpd" becomes, for example, "post‐
fix/smtpd".
<b>SEE ALSO</b>
See smtpd_command_filter for further details.
.PP
This feature is available in Postfix 2.8 and later.
-.SH postscreen_command_time_limit (default: ${stress?10}${stress:300}s)
+.SH postscreen_command_time_limit (default: normal: 300s, overload: 10s)
The time limit to read an entire command line with \fBpostscreen\fR(8)'s
built-in SMTP protocol engine.
.PP
(seconds), m (minutes), h (hours), d (days), w (weeks).
.PP
This feature is available in Postfix 2.8.
-.SH postscreen_greet_wait (default: ${stress?2}${stress:6}s)
+.SH postscreen_greet_wait (default: normal: 6s, overload: 2s)
The amount of time that \fBpostscreen\fR(8) will wait for an SMTP
client to send a command before its turn, and for DNS blocklist
lookup results to arrive (default: up to 2 seconds under stress,
NOTE: Some \fBpostscreen\fR(8) parameters implement
stress-dependent behavior. This is supported only when the
default parameter value is stress-dependent (that is, it
-looks like ${stress?X}${stress:Y}, or it is the $\fIname\fR
+looks like ${stress?{X}:{Y}}, or it is the $\fIname\fR
of an smtpd parameter with a stress-dependent default).
Other parameters always evaluate as if the \fBstress\fR
parameter value is the empty string.
\fBpostscreen\fR(8) sends ahead of the real Postfix SMTP server's "220
text..." response, in an attempt to confuse bad SMTP clients so
that they speak before their turn (pre-greet).
-.IP "\fBpostscreen_greet_wait (${stress?2}${stress:6}s)\fR"
+.IP "\fBpostscreen_greet_wait (normal: 6s, overload: 2s)\fR"
The amount of time that \fBpostscreen\fR(8) will wait for an SMTP
client to send a command before its turn, and for DNS blocklist
lookup results to arrive (default: up to 2 seconds under stress,
.IP "\fBpostscreen_command_count_limit (20)\fR"
The limit on the total number of commands per SMTP session for
\fBpostscreen\fR(8)'s built-in SMTP protocol engine.
-.IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
+.IP "\fBpostscreen_command_time_limit (normal: 300s, overload: 10s)\fR"
The time limit to read an entire command line with \fBpostscreen\fR(8)'s
built-in SMTP protocol engine.
.IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
<p> This feature is available in Postfix 2.8. </p>
-%PARAM postscreen_greet_wait ${stress?2}${stress:6}s
+%PARAM postscreen_greet_wait normal: 6s, overload: 2s
<p> The amount of time that postscreen(8) will wait for an SMTP
client to send a command before its turn, and for DNS blocklist
<p> This feature is available in Postfix 2.8. </p>
-%PARAM postscreen_command_time_limit ${stress?10}${stress:300}s
+%PARAM postscreen_command_time_limit normal: 300s, overload: 10s
<p> The time limit to read an entire command line with postscreen(8)'s
built-in SMTP protocol engine. </p>
#define DEL_REQ_FLAG_RECORD (1<<10) /* record and deliver */
#define DEL_REQ_FLAG_CONN_LOAD (1<<11) /* Consult opportunistic cache */
#define DEL_REQ_FLAG_CONN_STORE (1<<12) /* Update opportunistic cache */
-#define DEL_REQ_FLAG_REC_SENT (1<<13) /* Record if sent only */
+#define DEL_REQ_FLAG_REC_DLY_SENT (1<<13) /* Record delayed delivery */
/*
* Cache Load and Store as value or mask. Use explicit _MASK for multi-bit
*/
#define DEL_REQ_TRACE_FLAGS_MASK \
(DEL_REQ_FLAG_MTA_VRFY | DEL_REQ_FLAG_USR_VRFY | DEL_REQ_FLAG_RECORD \
- | DEL_REQ_FLAG_REC_SENT)
+ | DEL_REQ_FLAG_REC_DLY_SENT)
#define DEL_REQ_TRACE_FLAGS(f) ((f) & DEL_REQ_TRACE_FLAGS_MASK)
/*
extern char *var_smtpd_banner;
#define VAR_SMTPD_TMOUT "smtpd_timeout"
-#define DEF_SMTPD_TMOUT "${stress?10}${stress:300}s"
+#define DEF_SMTPD_TMOUT "${stress?{10}:{300}}s"
extern int var_smtpd_tmout;
#define VAR_SMTPD_STARTTLS_TMOUT "smtpd_starttls_timeout"
-#define DEF_SMTPD_STARTTLS_TMOUT "${stress?10}${stress:300}s"
+#define DEF_SMTPD_STARTTLS_TMOUT "${stress?{10}:{300}}s"
extern int var_smtpd_starttls_tmout;
#define VAR_SMTPD_RCPT_LIMIT "smtpd_recipient_limit"
extern int var_smtpd_soft_erlim;
#define VAR_SMTPD_HARD_ERLIM "smtpd_hard_error_limit"
-#define DEF_SMTPD_HARD_ERLIM "${stress?1}${stress:20}"
+#define DEF_SMTPD_HARD_ERLIM "${stress?{1}:{20}}"
extern int var_smtpd_hard_erlim;
#define VAR_SMTPD_ERR_SLEEP "smtpd_error_sleep_time"
extern int var_smtpd_err_sleep;
#define VAR_SMTPD_JUNK_CMD "smtpd_junk_command_limit"
-#define DEF_SMTPD_JUNK_CMD "${stress?1}${stress:100}"
+#define DEF_SMTPD_JUNK_CMD "${stress?{1}:{100}}"
extern int var_smtpd_junk_cmd_limit;
#define VAR_SMTPD_RCPT_OVERLIM "smtpd_recipient_overshoot_limit"
extern int var_verify_sender_ttl;
#define VAR_VERIFY_POLL_COUNT "address_verify_poll_count"
-#define DEF_VERIFY_POLL_COUNT "${stress?1}${stress:3}"
+#define DEF_VERIFY_POLL_COUNT "${stress?{1}:{3}}"
extern int var_verify_poll_count;
#define VAR_VERIFY_POLL_DELAY "address_verify_poll_delay"
extern int var_psc_cache_scan;
#define VAR_PSC_GREET_WAIT "postscreen_greet_wait"
-#define DEF_PSC_GREET_WAIT "${stress?2}${stress:6}s"
+#define DEF_PSC_GREET_WAIT "${stress?{2}:{6}}s"
extern int var_psc_greet_wait;
#define VAR_PSC_PREGR_BANNER "postscreen_greet_banner"
* Per-record time limit support.
*/
#define VAR_SMTPD_REC_DEADLINE "smtpd_per_record_deadline"
-#define DEF_SMTPD_REC_DEADLINE "${stress?yes}${stress:no}"
+#define DEF_SMTPD_REC_DEADLINE "${stress?{yes}:{no}}"
extern bool var_smtpd_rec_deadline;
#define VAR_SMTP_REC_DEADLINE "smtp_per_record_deadline"
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20140921"
+#define MAIL_RELEASE_DATE "20140922"
#define MAIL_VERSION_NUMBER "2.12"
#ifdef SNAPSHOT
* Normal mail delivery. May also send a delivery record to the user.
*/
else {
+
+ /* Readability macros: record all deliveries, or the delayed ones. */
+#define REC_ALL_SENT(flags) (flags & DEL_REQ_FLAG_RECORD)
+#define REC_DLY_SENT(flags, rcpt) \
+ ((flags & DEL_REQ_FLAG_REC_DLY_SENT) \
+ && (rcpt->dsn_notify == 0 || (rcpt->dsn_notify & DSN_NOTIFY_DELAY)))
+
if (my_dsn.action == 0 || my_dsn.action[0] == 0)
my_dsn.action = "delivered";
- if (((flags & (DEL_REQ_FLAG_RECORD | DEL_REQ_FLAG_REC_SENT)) == 0
+ if (((REC_ALL_SENT(flags) == 0 && REC_DLY_SENT(flags, recipient) == 0)
|| trace_append(flags, id, stats, recipient, relay, &my_dsn) == 0)
&& ((recipient->dsn_notify & DSN_NOTIFY_SUCCESS) == 0
|| trace_append(flags, id, stats, recipient, relay, &my_dsn) == 0)) {
* See also comments in bounce/bounce_notify_util.c.
*/
if ((message->tflags & (DEL_REQ_FLAG_USR_VRFY | DEL_REQ_FLAG_RECORD
- | DEL_REQ_FLAG_REC_SENT))
+ | DEL_REQ_FLAG_REC_DLY_SENT))
|| (message->rflags & QMGR_READ_FLAG_NOTIFY_SUCCESS)) {
atrace_flush(message->tflags,
message->queue_name,
* burst when the queue drains after a network outage.
*/
if (var_dsn_delay_cleared && message->warn_time < 0)
- message->tflags |= DEL_REQ_FLAG_REC_SENT;
+ message->tflags |= DEL_REQ_FLAG_REC_DLY_SENT;
/*
* Avoid clumsiness elsewhere in the program. When sending data across an
test58: $(PROG) test58.ref
rm -f main.cf master.cf
touch main.cf master.cf
- echo 'mydestination = foo bar pipemap:{ldap:xxx, memcache:yy} randmap:{xx' >> main.cf
+ echo 'mydestination = foo bar pipemap:{ldap:xxx, memcache:yy}x randmap:{xx' >> main.cf
echo 'xxx_domain = foo' >> main.cf
echo 'xxx_bogus = foo' >> main.cf
echo 'yy_backup = bbb' >> main.cf
0,
};
- /*
- * Pseudo-databases that wrap around other databases.
- */
-static const char *pcf_multi_dbms_names[] = {
- "pipemap", "addr_pipemap", "unionmap", 0,
-};
-
/* pcf_register_dbms_helper - parse one possible database type:name */
static void pcf_register_dbms_helper(char *str_value,
if (prefix != 0 && *prefix != '/' && *prefix != '.') {
if (*prefix == '{') {
if ((len = balpar(prefix, "{}")) > 0) {
- prefix[len - 1] = 0;
- for (cpp = pcf_multi_dbms_names; *cpp; cpp++) {
- if (strcmp(db_type, *cpp) == 0) {
- pcf_register_dbms_helper(prefix + 1, flag_parameter,
- local_scope);
- break;
- }
+ if (prefix[len] != 0) {
+ /* XXX Encapsulate this in pcf_warn() function. */
+ if (local_scope)
+ msg_warn("%s:%s: syntax error after '}' in \"%s:%s\"",
+ MASTER_CONF_FILE, local_scope->name_space,
+ db_type, prefix);
+ else
+ msg_warn("%s: syntax error after '}' in \"%s:%s\"",
+ MAIN_CONF_FILE, db_type, prefix);
}
+ prefix[len - 1] = 0;
+ pcf_register_dbms_helper(prefix + 1, flag_parameter,
+ local_scope);
} else {
+ /* XXX Encapsulate this in pcf_warn() function. */
if (local_scope)
msg_warn("%s:%s: missing '}' in parameter value: \"%s:%s\"",
- MASTER_CONF_FILE, local_scope->name_space);
+ MASTER_CONF_FILE, local_scope->name_space,
+ db_type, prefix);
else
msg_warn("%s: missing '}' in parameter value: \"%s:%s\"",
MAIN_CONF_FILE, db_type, prefix);
/* NOTE: Some \fBpostscreen\fR(8) parameters implement
/* stress-dependent behavior. This is supported only when the
/* default parameter value is stress-dependent (that is, it
-/* looks like ${stress?X}${stress:Y}, or it is the $\fIname\fR
+/* looks like ${stress?{X}:{Y}}, or it is the $\fIname\fR
/* of an smtpd parameter with a stress-dependent default).
/* Other parameters always evaluate as if the \fBstress\fR
/* parameter value is the empty string.
/* \fBpostscreen\fR(8) sends ahead of the real Postfix SMTP server's "220
/* text..." response, in an attempt to confuse bad SMTP clients so
/* that they speak before their turn (pre-greet).
-/* .IP "\fBpostscreen_greet_wait (${stress?2}${stress:6}s)\fR"
+/* .IP "\fBpostscreen_greet_wait (normal: 6s, overload: 2s)\fR"
/* The amount of time that \fBpostscreen\fR(8) will wait for an SMTP
/* client to send a command before its turn, and for DNS blocklist
/* lookup results to arrive (default: up to 2 seconds under stress,
/* .IP "\fBpostscreen_command_count_limit (20)\fR"
/* The limit on the total number of commands per SMTP session for
/* \fBpostscreen\fR(8)'s built-in SMTP protocol engine.
-/* .IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
+/* .IP "\fBpostscreen_command_time_limit (normal: 300s, overload: 10s)\fR"
/* The time limit to read an entire command line with \fBpostscreen\fR(8)'s
/* built-in SMTP protocol engine.
/* .IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
* See also comments in bounce/bounce_notify_util.c.
*/
if ((message->tflags & (DEL_REQ_FLAG_USR_VRFY | DEL_REQ_FLAG_RECORD
- | DEL_REQ_FLAG_REC_SENT))
+ | DEL_REQ_FLAG_REC_DLY_SENT))
|| (message->rflags & QMGR_READ_FLAG_NOTIFY_SUCCESS)) {
atrace_flush(message->tflags,
message->queue_name,
* burst when the queue drains after a network outage.
*/
if (var_dsn_delay_cleared && message->warn_time < 0)
- message->tflags |= DEL_REQ_FLAG_REC_SENT;
+ message->tflags |= DEL_REQ_FLAG_REC_DLY_SENT;
/*
* Remember when we have read the last recipient batch. Note that we do
/* int dict_flags;
/* DESCRIPTION
/* dict_pipe_open() opens a pipeline of one or more tables.
-/* Example: "\fBpipemap:{\fItype_1:name_1, ... ,type_n:name_n\fR}".
+/* Example: "\fBpipemap:{\fItype_1:name_1, ..., type_n:name_n\fR}".
/*
/* Each "pipemap:" query is given to the first table. Each
/* lookup result becomes the query for the next table in the