mirror of
https://github.com/vdukhovni/postfix
synced 2025-09-01 22:55:29 +00:00
postfix-2.7.8
This commit is contained in:
committed by
Viktor Dukhovni
parent
345f178f1b
commit
a4e5fda3c7
@@ -15989,3 +15989,34 @@ Apologies for any names omitted.
|
|||||||
checks to unknown message subtypes such as message/global*.
|
checks to unknown message subtypes such as message/global*.
|
||||||
File: global/mime_state.c.
|
File: global/mime_state.c.
|
||||||
|
|
||||||
|
20111117
|
||||||
|
|
||||||
|
Portability: Dovecot now officially supports more socket
|
||||||
|
types for its authentication server. File:
|
||||||
|
xsasl/xsasl_dovecot_server.c.
|
||||||
|
|
||||||
|
20111226
|
||||||
|
|
||||||
|
Bugfix (introduced 20110426): after lookup error with
|
||||||
|
mailbox_transport_maps, mailbox_command_maps or
|
||||||
|
fallback_transport_maps, the local delivery agent did not
|
||||||
|
log the problem before deferring mail, and produced no defer
|
||||||
|
logfile record. Files: local/mailbox.c, local/unknown.c.
|
||||||
|
|
||||||
|
20120130
|
||||||
|
|
||||||
|
Bugfix (introduced: Postfix 2.3): the trace service did not
|
||||||
|
distinguish between DSN SUCCESS notifications for a non-bounce
|
||||||
|
or a bounce message, and replied to mail from <>. This code
|
||||||
|
pre-dates DSN support and should have been updated when it
|
||||||
|
was re-purposed to handle DSN SUCCESS notifications. Problem
|
||||||
|
reported by Sabahattin Gucukoglu. File:
|
||||||
|
bounce/bounce_trace_service.c.
|
||||||
|
|
||||||
|
20120202
|
||||||
|
|
||||||
|
Bugfix (introduced: Postfix 2.3): the "change header" milter
|
||||||
|
request could replace the wrong header. A long header name
|
||||||
|
could match a shorter one, because a length check was done
|
||||||
|
on the wrong string. Reported by Vladimir Vassiliev. File:
|
||||||
|
cleanup/cleanup_milter.c.
|
||||||
|
@@ -83,8 +83,39 @@ int bounce_trace_service(int flags, char *service, char *queue_name,
|
|||||||
BOUNCE_INFO *bounce_info;
|
BOUNCE_INFO *bounce_info;
|
||||||
int bounce_status = 1;
|
int bounce_status = 1;
|
||||||
VSTREAM *bounce;
|
VSTREAM *bounce;
|
||||||
VSTRING *new_id = vstring_alloc(10);
|
int notify_mask = name_mask(VAR_NOTIFY_CLASSES, mail_error_masks,
|
||||||
|
var_notify_classes);
|
||||||
|
VSTRING *new_id;
|
||||||
int count;
|
int count;
|
||||||
|
const char *sender;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For consistency with fail/delay notifications, send notification for a
|
||||||
|
* non-bounce message as a single-bounce message, send notification for a
|
||||||
|
* single-bounce message as a double-bounce message, and drop requests to
|
||||||
|
* send notification for a double-bounce message.
|
||||||
|
*/
|
||||||
|
#define NULL_SENDER MAIL_ADDR_EMPTY /* special address */
|
||||||
|
|
||||||
|
if (strcasecmp(recipient, mail_addr_double_bounce()) == 0) {
|
||||||
|
msg_info("%s: not sending trace/success notification for "
|
||||||
|
"double-bounce message", queue_id);
|
||||||
|
return (0);
|
||||||
|
} else if (*recipient == 0) {
|
||||||
|
if ((notify_mask & MAIL_ERROR_2BOUNCE) != 0) {
|
||||||
|
recipient = var_2bounce_rcpt;
|
||||||
|
sender = mail_addr_double_bounce();
|
||||||
|
} else {
|
||||||
|
msg_info("%s: not sending trace/success notification "
|
||||||
|
"for single-bounce message", queue_id);
|
||||||
|
if (mail_queue_remove(service, queue_id) && errno != ENOENT)
|
||||||
|
msg_fatal("remove %s %s: %m", service, queue_id);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Always send notification for non-bounce message. */
|
||||||
|
sender = NULL_SENDER;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize. Open queue file, bounce log, etc.
|
* Initialize. Open queue file, bounce log, etc.
|
||||||
@@ -126,7 +157,6 @@ int bounce_trace_service(int flags, char *service, char *queue_name,
|
|||||||
bounce_mail_free(bounce_info);
|
bounce_mail_free(bounce_info);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
#define NULL_SENDER MAIL_ADDR_EMPTY /* special address */
|
|
||||||
#define NULL_TRACE_FLAGS 0
|
#define NULL_TRACE_FLAGS 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -139,7 +169,8 @@ int bounce_trace_service(int flags, char *service, char *queue_name,
|
|||||||
* there are fewer potential left-over files to remove up when we create
|
* there are fewer potential left-over files to remove up when we create
|
||||||
* a new queue file.
|
* a new queue file.
|
||||||
*/
|
*/
|
||||||
if ((bounce = post_mail_fopen_nowait(NULL_SENDER, recipient,
|
new_id = vstring_alloc(10);
|
||||||
|
if ((bounce = post_mail_fopen_nowait(sender, recipient,
|
||||||
INT_FILT_MASK_BOUNCE,
|
INT_FILT_MASK_BOUNCE,
|
||||||
NULL_TRACE_FLAGS,
|
NULL_TRACE_FLAGS,
|
||||||
new_id)) != 0) {
|
new_id)) != 0) {
|
||||||
|
@@ -840,8 +840,7 @@ static off_t cleanup_find_header_start(CLEANUP_STATE *state, ssize_t index,
|
|||||||
/* Reset the saved PTR record and update last_type. */ ;
|
/* Reset the saved PTR record and update last_type. */ ;
|
||||||
else if ((header_label == 0
|
else if ((header_label == 0
|
||||||
|| (strncasecmp(header_label, STR(buf), len) == 0
|
|| (strncasecmp(header_label, STR(buf), len) == 0
|
||||||
&& (IS_SPACE_TAB(STR(buf)[len])
|
&& (strlen(header_label) == len)))
|
||||||
|| STR(buf)[len] == ':')))
|
|
||||||
&& --index == 0) {
|
&& --index == 0) {
|
||||||
/* If we have a saved PTR record, it points to start of header. */
|
/* If we have a saved PTR record, it points to start of header. */
|
||||||
break;
|
break;
|
||||||
|
@@ -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 "20111024"
|
#define MAIL_RELEASE_DATE "20120204"
|
||||||
#define MAIL_VERSION_NUMBER "2.7.7"
|
#define MAIL_VERSION_NUMBER "2.7.8"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
||||||
|
@@ -289,7 +289,8 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp)
|
|||||||
} else if (dict_errno != 0) {
|
} else if (dict_errno != 0) {
|
||||||
/* Details in the logfile. */
|
/* Details in the logfile. */
|
||||||
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
||||||
*statusp = DEL_STAT_DEFER;
|
*statusp = defer_append(BOUNCE_FLAGS(state.request),
|
||||||
|
BOUNCE_ATTR(state.msg_attr));
|
||||||
return (YES);
|
return (YES);
|
||||||
}
|
}
|
||||||
if (*var_mailbox_transport) {
|
if (*var_mailbox_transport) {
|
||||||
@@ -333,7 +334,8 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp)
|
|||||||
} else if (dict_errno != 0) {
|
} else if (dict_errno != 0) {
|
||||||
/* Details in the logfile. */
|
/* Details in the logfile. */
|
||||||
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
||||||
status = DEL_STAT_DEFER;
|
status = defer_append(BOUNCE_FLAGS(state.request),
|
||||||
|
BOUNCE_ATTR(state.msg_attr));
|
||||||
} else if (*var_mailbox_command) {
|
} else if (*var_mailbox_command) {
|
||||||
status = deliver_command(state, usr_attr, var_mailbox_command);
|
status = deliver_command(state, usr_attr, var_mailbox_command);
|
||||||
} else if (*var_home_mailbox && LAST_CHAR(var_home_mailbox) == '/') {
|
} else if (*var_home_mailbox && LAST_CHAR(var_home_mailbox) == '/') {
|
||||||
|
@@ -120,7 +120,8 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr)
|
|||||||
} else if (dict_errno != 0) {
|
} else if (dict_errno != 0) {
|
||||||
/* Details in the logfile. */
|
/* Details in the logfile. */
|
||||||
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
dsb_simple(state.msg_attr.why, "4.3.0", "table lookup failure");
|
||||||
return (DEL_STAT_DEFER);
|
return (defer_append(BOUNCE_FLAGS(state.request),
|
||||||
|
BOUNCE_ATTR(state.msg_attr)));
|
||||||
}
|
}
|
||||||
if (*var_fallback_transport) {
|
if (*var_fallback_transport) {
|
||||||
state.msg_attr.rcpt.offset = -1L;
|
state.msg_attr.rcpt.offset = -1L;
|
||||||
|
@@ -370,11 +370,6 @@ XSASL_SERVER_IMPL *xsasl_dovecot_server_init(const char *server_type,
|
|||||||
{
|
{
|
||||||
XSASL_DOVECOT_SERVER_IMPL *xp;
|
XSASL_DOVECOT_SERVER_IMPL *xp;
|
||||||
|
|
||||||
if (strchr(path_info, '/') == 0)
|
|
||||||
msg_warn("when SASL type is \"%s\", SASL path \"%s\" "
|
|
||||||
"should be a socket pathname",
|
|
||||||
server_type, path_info);
|
|
||||||
|
|
||||||
xp = (XSASL_DOVECOT_SERVER_IMPL *) mymalloc(sizeof(*xp));
|
xp = (XSASL_DOVECOT_SERVER_IMPL *) mymalloc(sizeof(*xp));
|
||||||
xp->xsasl.create = xsasl_dovecot_server_create;
|
xp->xsasl.create = xsasl_dovecot_server_create;
|
||||||
xp->xsasl.done = xsasl_dovecot_server_done;
|
xp->xsasl.done = xsasl_dovecot_server_done;
|
||||||
|
Reference in New Issue
Block a user