mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-29 13:18:12 +00:00
postfix-2.5-20071122
This commit is contained in:
parent
261e3f8965
commit
66bc6411d2
@ -13839,3 +13839,14 @@ Apologies for any names omitted.
|
||||
further review the number of parameters will be consolidated
|
||||
and the defaults will select the better algorithms. Files:
|
||||
qmgr/qmgr_queue.c, qmgr/qmgr_deliver.c.
|
||||
|
||||
20071121
|
||||
|
||||
Boundary condition: Patrik Rak pointed out that handling
|
||||
of negative feedback with concurrency window 1 could
|
||||
be improved.
|
||||
|
||||
Feature: support to look up null sender addresses
|
||||
in sender-dependent relayhost maps. Parameter name:
|
||||
empty_address_relayhost_maps_lookup_key (default; <>).
|
||||
Keean Schupke. File: trivial-rewrite/resolve.c.
|
||||
|
@ -33,10 +33,9 @@ number of pseudo-cohorts(*) reports connection or handshake failure.
|
||||
The drawbacks of the old +/-1 feedback scheduler are a) overshoot
|
||||
due to exponential delivery concurrency growth with each pseudo-cohort(*)
|
||||
(5-10-20...); b) throttling down to zero concurrency after a single
|
||||
pseudo-cohort(*) failure. The second problem was especially an issue
|
||||
with low-concurrency channels where a single failure could be
|
||||
sufficient to mark a destination as "dead", and suspend further
|
||||
deliveries.
|
||||
pseudo-cohort(*) failure. This was especially an issue with
|
||||
low-concurrency channels where a single failure could be sufficient
|
||||
to mark a destination as "dead", and suspend further deliveries.
|
||||
|
||||
The new code is a laboratory model with a multitude of configuration
|
||||
parameters, so that developers can experiment with different feedback
|
||||
|
@ -1,5 +1,7 @@
|
||||
Wish list:
|
||||
|
||||
document dict_get() as returning const char *
|
||||
|
||||
Make event_drain() a proper event loop; update the zero mask,
|
||||
and don't ignore a non-empty timer queue.
|
||||
|
||||
|
@ -2253,6 +2253,19 @@ created locally as the result of configuration or software error.
|
||||
</p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="empty_address_relayhost_maps_lookup_key">empty_address_relayhost_maps_lookup_key</a>
|
||||
(default: <>)</b></DT><DD>
|
||||
|
||||
<p> The <a href="postconf.5.html#sender_dependent_relayhost_maps">sender_dependent_relayhost_maps</a> search string that will be
|
||||
used instead of the null sender address. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.5 and later. With
|
||||
earlier versions, <a href="postconf.5.html#sender_dependent_relayhost_maps">sender_dependent_relayhost_maps</a> lookups were
|
||||
skipped for the null sender address. </p>
|
||||
|
||||
|
||||
</DD>
|
||||
|
||||
<DT><b><a name="enable_errors_to">enable_errors_to</a>
|
||||
|
@ -193,6 +193,13 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8)
|
||||
A sender-dependent override for the global <a href="postconf.5.html#relayhost">relay</a>-
|
||||
<a href="postconf.5.html#relayhost">host</a> parameter setting.
|
||||
|
||||
Available in Postfix version 2.5 and later:
|
||||
|
||||
<b><a href="postconf.5.html#empty_address_relayhost_maps_lookup_key">empty_address_relayhost_maps_lookup_key</a> (</b><><b>)</b>
|
||||
The <a href="postconf.5.html#sender_dependent_relayhost_maps">sender_dependent_relayhost_maps</a> search string
|
||||
that will be used instead of the null sender
|
||||
address.
|
||||
|
||||
<b>ADDRESS VERIFICATION CONTROLS</b>
|
||||
Postfix version 2.1 introduces sender and recipient
|
||||
address verification. This feature is implemented by
|
||||
|
@ -1212,6 +1212,13 @@ for \fBshowq\fR(8) queue displays.
|
||||
The recipient of mail addressed to the null address. Postfix does
|
||||
not accept such addresses in SMTP commands, but they may still be
|
||||
created locally as the result of configuration or software error.
|
||||
.SH empty_address_relayhost_maps_lookup_key (default: <>)
|
||||
The sender_dependent_relayhost_maps search string that will be
|
||||
used instead of the null sender address.
|
||||
.PP
|
||||
This feature is available in Postfix 2.5 and later. With
|
||||
earlier versions, sender_dependent_relayhost_maps lookups were
|
||||
skipped for the null sender address.
|
||||
.SH enable_errors_to (default: no)
|
||||
Report mail delivery errors to the address specified with the
|
||||
non-standard Errors-To: message header, instead of the envelope
|
||||
|
@ -172,6 +172,11 @@ Available in Postfix version 2.3 and later:
|
||||
.IP "\fBsender_dependent_relayhost_maps (empty)\fR"
|
||||
A sender-dependent override for the global relayhost parameter
|
||||
setting.
|
||||
.PP
|
||||
Available in Postfix version 2.5 and later:
|
||||
.IP "\fBempty_address_relayhost_maps_lookup_key (<>)\fR"
|
||||
The sender_dependent_relayhost_maps search string that will be
|
||||
used instead of the null sender address.
|
||||
.SH "ADDRESS VERIFICATION CONTROLS"
|
||||
.na
|
||||
.nf
|
||||
|
@ -379,6 +379,7 @@ while (<>) {
|
||||
s;\bsender_canonical_classes\b;<a href="postconf.5.html#sender_canonical_classes">$&</a>;g;
|
||||
s;\bsender_canonical_maps\b;<a href="postconf.5.html#sender_canonical_maps">$&</a>;g;
|
||||
s;\bsender_dependent_relay[-</bB>]*\n*[ <bB>]*host_maps\b;<a href="postconf.5.html#sender_dependent_relayhost_maps">$&</a>;g;
|
||||
s;\bempty_address_relayhost_maps_lookup_key\b;<a href="postconf.5.html#empty_address_relayhost_maps_lookup_key">$&</a>;g;
|
||||
s;\bsendmail_path\b;<a href="postconf.5.html#sendmail_path">$&</a>;g;
|
||||
s;\bservice_throttle_time\b;<a href="postconf.5.html#service_throttle_time">$&</a>;g;
|
||||
s;\bsetgid_group\b;<a href="postconf.5.html#setgid_group">$&</a>;g;
|
||||
|
@ -9091,6 +9091,15 @@ substitutions in regular expression maps. </p>
|
||||
This feature is available in Postfix 2.3 and later.
|
||||
</p>
|
||||
|
||||
%PARAM empty_address_relayhost_maps_lookup_key <>
|
||||
|
||||
<p> The sender_dependent_relayhost_maps search string that will be
|
||||
used instead of the null sender address. </p>
|
||||
|
||||
<p> This feature is available in Postfix 2.5 and later. With
|
||||
earlier versions, sender_dependent_relayhost_maps lookups were
|
||||
skipped for the null sender address. </p>
|
||||
|
||||
%PARAM address_verify_sender_dependent_relayhost_maps empty
|
||||
|
||||
<p>
|
||||
|
@ -192,6 +192,10 @@ extern char *var_relayhost;
|
||||
#define DEF_SND_RELAY_MAPS ""
|
||||
extern char *var_snd_relay_maps;
|
||||
|
||||
#define VAR_NULL_RELAY_MAPS_KEY "empty_address_relayhost_maps_lookup_key"
|
||||
#define DEF_NULL_RELAY_MAPS_KEY "<>"
|
||||
extern char *var_null_relay_maps_key;
|
||||
|
||||
#define VAR_SMTP_FALLBACK "smtp_fallback_relay"
|
||||
#define DEF_SMTP_FALLBACK "$fallback_relay"
|
||||
#define VAR_LMTP_FALLBACK "smtp_fallback_relay"
|
||||
|
@ -20,7 +20,7 @@
|
||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||
* patchlevel; they change the release date only.
|
||||
*/
|
||||
#define MAIL_RELEASE_DATE "20071121"
|
||||
#define MAIL_RELEASE_DATE "20071122"
|
||||
#define MAIL_VERSION_NUMBER "2.5"
|
||||
|
||||
#ifdef SNAPSHOT
|
||||
|
@ -310,8 +310,11 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, DSN *dsn)
|
||||
* adjustments on the concurrency limit itself, instead of using the
|
||||
* actual concurrency. The latter fluctuates wildly when deliveries
|
||||
* complete in bursts (artificial benchmark measurements).
|
||||
*
|
||||
* Even after reaching 1, we maintain the negative hysteresis cycle so that
|
||||
* negative feedback can cancel out positive feedback.
|
||||
*/
|
||||
if (queue->window > 1) {
|
||||
if (queue->window > 0) {
|
||||
feedback = QMGR_FEEDBACK_VAL(qmgr_neg_feedback_idx, queue->window);
|
||||
QMGR_LOG_FEEDBACK(feedback);
|
||||
queue->failure -= feedback;
|
||||
|
@ -507,8 +507,9 @@ static void resolve_addr(RES_CONTEXT *rp, char *sender, char *addr,
|
||||
* With off-host delivery, sender-dependent or global relayhost
|
||||
* override the recipient domain.
|
||||
*/
|
||||
if (rp->snd_relay_info && *sender
|
||||
&& (relay = mail_addr_find(rp->snd_relay_info, sender,
|
||||
if (rp->snd_relay_info
|
||||
&& (relay = mail_addr_find(rp->snd_relay_info, *sender ?
|
||||
sender : var_null_relay_maps_key,
|
||||
(char **) 0)) != 0)
|
||||
vstring_strcpy(nexthop, relay);
|
||||
else if (*RES_PARAM_VALUE(rp->relayhost))
|
||||
|
@ -150,6 +150,11 @@
|
||||
/* .IP "\fBsender_dependent_relayhost_maps (empty)\fR"
|
||||
/* A sender-dependent override for the global relayhost parameter
|
||||
/* setting.
|
||||
/* .PP
|
||||
/* Available in Postfix version 2.5 and later:
|
||||
/* .IP "\fBempty_address_relayhost_maps_lookup_key (<>)\fR"
|
||||
/* The sender_dependent_relayhost_maps search string that will be
|
||||
/* used instead of the null sender address.
|
||||
/* ADDRESS VERIFICATION CONTROLS
|
||||
/* .ad
|
||||
/* .fi
|
||||
@ -315,6 +320,7 @@ int var_show_unk_rcpt_table;
|
||||
int var_resolve_nulldom;
|
||||
char *var_remote_rwr_domain;
|
||||
char *var_snd_relay_maps;
|
||||
char *var_null_relay_maps_key;
|
||||
int var_resolve_num_dom;
|
||||
|
||||
/*
|
||||
@ -557,6 +563,7 @@ int main(int argc, char **argv)
|
||||
VAR_VRFY_RELAYHOST, DEF_VRFY_RELAYHOST, &var_vrfy_relayhost, 0, 0,
|
||||
VAR_REM_RWR_DOMAIN, DEF_REM_RWR_DOMAIN, &var_remote_rwr_domain, 0, 0,
|
||||
VAR_SND_RELAY_MAPS, DEF_SND_RELAY_MAPS, &var_snd_relay_maps, 0, 0,
|
||||
VAR_NULL_RELAY_MAPS_KEY, DEF_NULL_RELAY_MAPS_KEY, &var_null_relay_maps_key, 1, 0,
|
||||
VAR_VRFY_RELAY_MAPS, DEF_VRFY_RELAY_MAPS, &var_vrfy_relay_maps, 0, 0,
|
||||
0,
|
||||
};
|
||||
|
@ -137,7 +137,7 @@ extern DICT *dict_open(const char *, int, int);
|
||||
extern DICT *dict_open3(const char *, const char *, int, int);
|
||||
extern void dict_open_register(const char *, DICT *(*) (const char *, int, int));
|
||||
|
||||
#define dict_get(dp, key) (dp)->lookup((dp), (key))
|
||||
#define dict_get(dp, key) ((const char *) (dp)->lookup((dp), (key)))
|
||||
#define dict_put(dp, key, val) (dp)->update((dp), (key), (val))
|
||||
#define dict_del(dp, key) (dp)->delete((dp), (key))
|
||||
#define dict_seq(dp, f, key, val) (dp)->sequence((dp), (f), (key), (val))
|
||||
|
@ -22,7 +22,7 @@
|
||||
/* const char *key;
|
||||
/* const char *value;
|
||||
/*
|
||||
/* char *dict_get(dict, key)
|
||||
/* const char *dict_get(dict, key)
|
||||
/* DICT *dict;
|
||||
/* const char *key;
|
||||
/*
|
||||
@ -137,6 +137,9 @@
|
||||
/*
|
||||
/* dict_get() retrieves the value stored in the named dictionary
|
||||
/* under the given key. A null pointer means the value was not found.
|
||||
/* As with dict_lookup(), the result is owned by the lookup table
|
||||
/* implementation. Make a copy if the result is to be modified,
|
||||
/* or if the result is to survive multiple table lookups.
|
||||
/*
|
||||
/* dict_put() stores the specified key and value into the named
|
||||
/* dictionary.
|
||||
|
Loading…
x
Reference in New Issue
Block a user