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
|
further review the number of parameters will be consolidated
|
||||||
and the defaults will select the better algorithms. Files:
|
and the defaults will select the better algorithms. Files:
|
||||||
qmgr/qmgr_queue.c, qmgr/qmgr_deliver.c.
|
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
|
The drawbacks of the old +/-1 feedback scheduler are a) overshoot
|
||||||
due to exponential delivery concurrency growth with each pseudo-cohort(*)
|
due to exponential delivery concurrency growth with each pseudo-cohort(*)
|
||||||
(5-10-20...); b) throttling down to zero concurrency after a single
|
(5-10-20...); b) throttling down to zero concurrency after a single
|
||||||
pseudo-cohort(*) failure. The second problem was especially an issue
|
pseudo-cohort(*) failure. This was especially an issue with
|
||||||
with low-concurrency channels where a single failure could be
|
low-concurrency channels where a single failure could be sufficient
|
||||||
sufficient to mark a destination as "dead", and suspend further
|
to mark a destination as "dead", and suspend further deliveries.
|
||||||
deliveries.
|
|
||||||
|
|
||||||
The new code is a laboratory model with a multitude of configuration
|
The new code is a laboratory model with a multitude of configuration
|
||||||
parameters, so that developers can experiment with different feedback
|
parameters, so that developers can experiment with different feedback
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
Wish list:
|
Wish list:
|
||||||
|
|
||||||
|
document dict_get() as returning const char *
|
||||||
|
|
||||||
Make event_drain() a proper event loop; update the zero mask,
|
Make event_drain() a proper event loop; update the zero mask,
|
||||||
and don't ignore a non-empty timer queue.
|
and don't ignore a non-empty timer queue.
|
||||||
|
|
||||||
|
@ -2253,6 +2253,19 @@ created locally as the result of configuration or software error.
|
|||||||
</p>
|
</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>
|
</DD>
|
||||||
|
|
||||||
<DT><b><a name="enable_errors_to">enable_errors_to</a>
|
<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 sender-dependent override for the global <a href="postconf.5.html#relayhost">relay</a>-
|
||||||
<a href="postconf.5.html#relayhost">host</a> parameter setting.
|
<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>
|
<b>ADDRESS VERIFICATION CONTROLS</b>
|
||||||
Postfix version 2.1 introduces sender and recipient
|
Postfix version 2.1 introduces sender and recipient
|
||||||
address verification. This feature is implemented by
|
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
|
The recipient of mail addressed to the null address. Postfix does
|
||||||
not accept such addresses in SMTP commands, but they may still be
|
not accept such addresses in SMTP commands, but they may still be
|
||||||
created locally as the result of configuration or software error.
|
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)
|
.SH enable_errors_to (default: no)
|
||||||
Report mail delivery errors to the address specified with the
|
Report mail delivery errors to the address specified with the
|
||||||
non-standard Errors-To: message header, instead of the envelope
|
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"
|
.IP "\fBsender_dependent_relayhost_maps (empty)\fR"
|
||||||
A sender-dependent override for the global relayhost parameter
|
A sender-dependent override for the global relayhost parameter
|
||||||
setting.
|
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"
|
.SH "ADDRESS VERIFICATION CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@ -379,6 +379,7 @@ while (<>) {
|
|||||||
s;\bsender_canonical_classes\b;<a href="postconf.5.html#sender_canonical_classes">$&</a>;g;
|
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_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;\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;\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;\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;
|
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.
|
This feature is available in Postfix 2.3 and later.
|
||||||
</p>
|
</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
|
%PARAM address_verify_sender_dependent_relayhost_maps empty
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -192,6 +192,10 @@ extern char *var_relayhost;
|
|||||||
#define DEF_SND_RELAY_MAPS ""
|
#define DEF_SND_RELAY_MAPS ""
|
||||||
extern char *var_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 VAR_SMTP_FALLBACK "smtp_fallback_relay"
|
||||||
#define DEF_SMTP_FALLBACK "$fallback_relay"
|
#define DEF_SMTP_FALLBACK "$fallback_relay"
|
||||||
#define VAR_LMTP_FALLBACK "smtp_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
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20071121"
|
#define MAIL_RELEASE_DATE "20071122"
|
||||||
#define MAIL_VERSION_NUMBER "2.5"
|
#define MAIL_VERSION_NUMBER "2.5"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#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
|
* adjustments on the concurrency limit itself, instead of using the
|
||||||
* actual concurrency. The latter fluctuates wildly when deliveries
|
* actual concurrency. The latter fluctuates wildly when deliveries
|
||||||
* complete in bursts (artificial benchmark measurements).
|
* 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);
|
feedback = QMGR_FEEDBACK_VAL(qmgr_neg_feedback_idx, queue->window);
|
||||||
QMGR_LOG_FEEDBACK(feedback);
|
QMGR_LOG_FEEDBACK(feedback);
|
||||||
queue->failure -= 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
|
* With off-host delivery, sender-dependent or global relayhost
|
||||||
* override the recipient domain.
|
* override the recipient domain.
|
||||||
*/
|
*/
|
||||||
if (rp->snd_relay_info && *sender
|
if (rp->snd_relay_info
|
||||||
&& (relay = mail_addr_find(rp->snd_relay_info, sender,
|
&& (relay = mail_addr_find(rp->snd_relay_info, *sender ?
|
||||||
|
sender : var_null_relay_maps_key,
|
||||||
(char **) 0)) != 0)
|
(char **) 0)) != 0)
|
||||||
vstring_strcpy(nexthop, relay);
|
vstring_strcpy(nexthop, relay);
|
||||||
else if (*RES_PARAM_VALUE(rp->relayhost))
|
else if (*RES_PARAM_VALUE(rp->relayhost))
|
||||||
|
@ -150,6 +150,11 @@
|
|||||||
/* .IP "\fBsender_dependent_relayhost_maps (empty)\fR"
|
/* .IP "\fBsender_dependent_relayhost_maps (empty)\fR"
|
||||||
/* A sender-dependent override for the global relayhost parameter
|
/* A sender-dependent override for the global relayhost parameter
|
||||||
/* setting.
|
/* 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
|
/* ADDRESS VERIFICATION CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@ -315,6 +320,7 @@ int var_show_unk_rcpt_table;
|
|||||||
int var_resolve_nulldom;
|
int var_resolve_nulldom;
|
||||||
char *var_remote_rwr_domain;
|
char *var_remote_rwr_domain;
|
||||||
char *var_snd_relay_maps;
|
char *var_snd_relay_maps;
|
||||||
|
char *var_null_relay_maps_key;
|
||||||
int var_resolve_num_dom;
|
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_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_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_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,
|
VAR_VRFY_RELAY_MAPS, DEF_VRFY_RELAY_MAPS, &var_vrfy_relay_maps, 0, 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 DICT *dict_open3(const char *, const char *, int, int);
|
||||||
extern void dict_open_register(const char *, DICT *(*) (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_put(dp, key, val) (dp)->update((dp), (key), (val))
|
||||||
#define dict_del(dp, key) (dp)->delete((dp), (key))
|
#define dict_del(dp, key) (dp)->delete((dp), (key))
|
||||||
#define dict_seq(dp, f, key, val) (dp)->sequence((dp), (f), (key), (val))
|
#define dict_seq(dp, f, key, val) (dp)->sequence((dp), (f), (key), (val))
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
/* const char *key;
|
/* const char *key;
|
||||||
/* const char *value;
|
/* const char *value;
|
||||||
/*
|
/*
|
||||||
/* char *dict_get(dict, key)
|
/* const char *dict_get(dict, key)
|
||||||
/* DICT *dict;
|
/* DICT *dict;
|
||||||
/* const char *key;
|
/* const char *key;
|
||||||
/*
|
/*
|
||||||
@ -137,6 +137,9 @@
|
|||||||
/*
|
/*
|
||||||
/* dict_get() retrieves the value stored in the named dictionary
|
/* dict_get() retrieves the value stored in the named dictionary
|
||||||
/* under the given key. A null pointer means the value was not found.
|
/* 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
|
/* dict_put() stores the specified key and value into the named
|
||||||
/* dictionary.
|
/* dictionary.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user