2
0
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:
Wietse Venema 2007-11-22 00:00:00 -05:00 committed by Viktor Dukhovni
parent 261e3f8965
commit 66bc6411d2
16 changed files with 82 additions and 10 deletions

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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>

View File

@ -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>&lt;&gt;<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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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>

View File

@ -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"

View File

@ -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

View File

@ -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;

View File

@ -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))

View File

@ -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,
}; };

View File

@ -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))

View File

@ -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.