mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-31 06:05:37 +00:00
postfix-2.4.2-RC2
This commit is contained in:
committed by
Viktor Dukhovni
parent
608eba5c25
commit
5036f9ff8d
@@ -13447,3 +13447,17 @@ Apologies for any names omitted.
|
|||||||
|
|
||||||
Bugfix: Content-Transfer-Encoding: attribute values are
|
Bugfix: Content-Transfer-Encoding: attribute values are
|
||||||
case insensitive. File: src/cleanup/cleanup_message.c.
|
case insensitive. File: src/cleanup/cleanup_message.c.
|
||||||
|
|
||||||
|
20070514
|
||||||
|
|
||||||
|
Bugfix: mailbox_transport(_maps) and fallback_transport(_maps)
|
||||||
|
were broken when used with the error(8) or discard(8)
|
||||||
|
transports. Cause: insufficient documentation. Files:
|
||||||
|
error/error.c, discard/discard.c.
|
||||||
|
|
||||||
|
20070520
|
||||||
|
|
||||||
|
Bugfix (problem introduced Postfix 2.3): when DSN support
|
||||||
|
was introduced it broke "agressive" recipient duplicate
|
||||||
|
elimination with "enable_original_recipient = no". File:
|
||||||
|
cleanup/cleanup_out_recipient.c.
|
||||||
|
@@ -17,8 +17,8 @@ ERROR(8) ERROR(8)
|
|||||||
requests from the queue manager. Each request specifies a
|
requests from the queue manager. Each request specifies a
|
||||||
queue file, a sender address, the reason for non-delivery
|
queue file, a sender address, the reason for non-delivery
|
||||||
(specified as the next-hop destination), and recipient
|
(specified as the next-hop destination), and recipient
|
||||||
information. The reason may be prefixed with an RFC
|
information. The reason may be prefixed with an <a href="http://www.faqs.org/rfcs/rfc3463.html">RFC</a>
|
||||||
3463-compatible detail code. This program expects to be
|
<a href="http://www.faqs.org/rfcs/rfc3463.html">3463</a>-compatible detail code. This program expects to be
|
||||||
run from the <a href="master.8.html"><b>master</b>(8)</a> process manager.
|
run from the <a href="master.8.html"><b>master</b>(8)</a> process manager.
|
||||||
|
|
||||||
Depending on the service name in <a href="master.5.html">master.cf</a>, <b>error</b> or
|
Depending on the service name in <a href="master.5.html">master.cf</a>, <b>error</b> or
|
||||||
|
@@ -127,13 +127,20 @@ void cleanup_out_recipient(CLEANUP_STATE *state,
|
|||||||
* Distinguish between different original recipient addresses that map
|
* Distinguish between different original recipient addresses that map
|
||||||
* onto the same mailbox. The recipient will use our original recipient
|
* onto the same mailbox. The recipient will use our original recipient
|
||||||
* message header to figure things out.
|
* message header to figure things out.
|
||||||
|
*
|
||||||
|
* Postfix 2.2 compatibility: when ignoring differences in Postfix original
|
||||||
|
* recipient information, also ignore differences in DSN attributes. We
|
||||||
|
* do, however, keep the DSN attributes of the recipient that survives
|
||||||
|
* duplicate elimination.
|
||||||
*/
|
*/
|
||||||
#define STREQ(x, y) (strcmp((x), (y)) == 0)
|
#define STREQ(x, y) (strcmp((x), (y)) == 0)
|
||||||
|
|
||||||
if ((state->flags & CLEANUP_FLAG_MAP_OK) == 0
|
if ((state->flags & CLEANUP_FLAG_MAP_OK) == 0
|
||||||
|| cleanup_virt_alias_maps == 0) {
|
|| cleanup_virt_alias_maps == 0) {
|
||||||
if (been_here(state->dups, "%s\n%d\n%s\n%s",
|
if ((var_enable_orcpt ?
|
||||||
dsn_orcpt, dsn_notify, orcpt, recip) == 0) {
|
been_here(state->dups, "%s\n%d\n%s\n%s",
|
||||||
|
dsn_orcpt, dsn_notify, orcpt, recip) :
|
||||||
|
been_here_fixed(state->dups, recip)) == 0) {
|
||||||
if (dsn_notify)
|
if (dsn_notify)
|
||||||
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%d",
|
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%d",
|
||||||
MAIL_ATTR_DSN_NOTIFY, dsn_notify);
|
MAIL_ATTR_DSN_NOTIFY, dsn_notify);
|
||||||
@@ -181,6 +188,11 @@ void cleanup_out_recipient(CLEANUP_STATE *state,
|
|||||||
* notifications. The queue manager will flush the trace (and bounce)
|
* notifications. The queue manager will flush the trace (and bounce)
|
||||||
* logfile, possibly after it has generated its own success or failure
|
* logfile, possibly after it has generated its own success or failure
|
||||||
* notification records.
|
* notification records.
|
||||||
|
*
|
||||||
|
* Postfix 2.2 compatibility: when ignoring differences in Postfix original
|
||||||
|
* recipient information, also ignore differences in DSN attributes. We
|
||||||
|
* do, however, keep the DSN attributes of the recipient that survives
|
||||||
|
* duplicate elimination.
|
||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
RECIPIENT rcpt;
|
RECIPIENT rcpt;
|
||||||
@@ -198,8 +210,10 @@ void cleanup_out_recipient(CLEANUP_STATE *state,
|
|||||||
dsn_notify & ~DSN_NOTIFY_SUCCESS);
|
dsn_notify & ~DSN_NOTIFY_SUCCESS);
|
||||||
}
|
}
|
||||||
for (cpp = argv->argv; *cpp; cpp++) {
|
for (cpp = argv->argv; *cpp; cpp++) {
|
||||||
if (been_here(state->dups, "%s\n%d\n%s\n%s",
|
if ((var_enable_orcpt ?
|
||||||
dsn_orcpt, dsn_notify, orcpt, *cpp) == 0) {
|
been_here(state->dups, "%s\n%d\n%s\n%s",
|
||||||
|
dsn_orcpt, dsn_notify, orcpt, *cpp) :
|
||||||
|
been_here_fixed(state->dups, *cpp)) == 0) {
|
||||||
if (dsn_notify)
|
if (dsn_notify)
|
||||||
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%d",
|
cleanup_out_format(state, REC_TYPE_ATTR, "%s=%d",
|
||||||
MAIL_ATTR_DSN_NOTIFY, dsn_notify);
|
MAIL_ATTR_DSN_NOTIFY, dsn_notify);
|
||||||
|
@@ -174,13 +174,11 @@ static int deliver_message(DELIVER_REQUEST *request)
|
|||||||
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
|
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
|
||||||
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
|
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
|
||||||
rcpt = request->rcpt_list.info + nrcpt;
|
rcpt = request->rcpt_list.info + nrcpt;
|
||||||
if (rcpt->offset >= 0) {
|
status = sent(BOUNCE_FLAGS(request), request->queue_id,
|
||||||
status = sent(BOUNCE_FLAGS(request), request->queue_id,
|
&request->msg_stats, rcpt, "none", &dsn);
|
||||||
&request->msg_stats, rcpt, "none", &dsn);
|
if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS))
|
||||||
if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS))
|
deliver_completed(src, rcpt->offset);
|
||||||
deliver_completed(src, rcpt->offset);
|
result |= status;
|
||||||
result |= status;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -181,13 +181,11 @@ static int deliver_message(DELIVER_REQUEST *request, const char *def_dsn,
|
|||||||
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
|
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
|
||||||
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
|
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
|
||||||
rcpt = request->rcpt_list.info + nrcpt;
|
rcpt = request->rcpt_list.info + nrcpt;
|
||||||
if (rcpt->offset >= 0) {
|
status = append(BOUNCE_FLAGS(request), request->queue_id,
|
||||||
status = append(BOUNCE_FLAGS(request), request->queue_id,
|
&request->msg_stats, rcpt, "none", &dsn);
|
||||||
&request->msg_stats, rcpt, "none", &dsn);
|
if (status == 0)
|
||||||
if (status == 0)
|
deliver_completed(src, rcpt->offset);
|
||||||
deliver_completed(src, rcpt->offset);
|
result |= status;
|
||||||
result |= status;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -20,8 +20,8 @@
|
|||||||
* 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 "20070511"
|
#define MAIL_RELEASE_DATE "20070524"
|
||||||
#define MAIL_VERSION_NUMBER "2.4.2-RC1"
|
#define MAIL_VERSION_NUMBER "2.4.2-RC2"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
||||||
|
@@ -271,6 +271,7 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp)
|
|||||||
if (*var_mbox_transp_maps && transp_maps == 0)
|
if (*var_mbox_transp_maps && transp_maps == 0)
|
||||||
transp_maps = maps_create(VAR_MBOX_TRANSP_MAPS, var_mbox_transp_maps,
|
transp_maps = maps_create(VAR_MBOX_TRANSP_MAPS, var_mbox_transp_maps,
|
||||||
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
|
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
|
||||||
|
/* The -1 is a hint for the down-stream deliver_completed() function. */
|
||||||
if (*var_mbox_transp_maps
|
if (*var_mbox_transp_maps
|
||||||
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
|
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
|
||||||
DICT_FLAG_NONE)) != 0) {
|
DICT_FLAG_NONE)) != 0) {
|
||||||
|
@@ -109,9 +109,11 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr)
|
|||||||
if (*var_fbck_transp_maps && transp_maps == 0)
|
if (*var_fbck_transp_maps && transp_maps == 0)
|
||||||
transp_maps = maps_create(VAR_FBCK_TRANSP_MAPS, var_fbck_transp_maps,
|
transp_maps = maps_create(VAR_FBCK_TRANSP_MAPS, var_fbck_transp_maps,
|
||||||
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
|
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
|
||||||
|
/* The -1 is a hint for the down-stream deliver_completed() function. */
|
||||||
if (*var_fbck_transp_maps
|
if (*var_fbck_transp_maps
|
||||||
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
|
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
|
||||||
DICT_FLAG_NONE)) != 0) {
|
DICT_FLAG_NONE)) != 0) {
|
||||||
|
state.msg_attr.rcpt.offset = -1L;
|
||||||
return (deliver_pass(MAIL_CLASS_PRIVATE, map_transport,
|
return (deliver_pass(MAIL_CLASS_PRIVATE, map_transport,
|
||||||
state.request, &state.msg_attr.rcpt));
|
state.request, &state.msg_attr.rcpt));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user