From a4e5fda3c780fef952df31dacfa84b5791f48fa2 Mon Sep 17 00:00:00 2001 From: Wietse Venema Date: Sat, 4 Feb 2012 00:00:00 -0500 Subject: [PATCH] postfix-2.7.8 --- postfix/HISTORY | 31 +++++++++++++++++++ postfix/src/bounce/bounce_trace_service.c | 37 +++++++++++++++++++++-- postfix/src/cleanup/cleanup_milter.c | 3 +- postfix/src/global/mail_version.h | 4 +-- postfix/src/local/mailbox.c | 6 ++-- postfix/src/local/unknown.c | 3 +- postfix/src/xsasl/xsasl_dovecot_server.c | 5 --- 7 files changed, 74 insertions(+), 15 deletions(-) diff --git a/postfix/HISTORY b/postfix/HISTORY index 1db4fc3a0..ea459c966 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -15989,3 +15989,34 @@ Apologies for any names omitted. checks to unknown message subtypes such as message/global*. 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. diff --git a/postfix/src/bounce/bounce_trace_service.c b/postfix/src/bounce/bounce_trace_service.c index 850515902..824931d60 100644 --- a/postfix/src/bounce/bounce_trace_service.c +++ b/postfix/src/bounce/bounce_trace_service.c @@ -83,8 +83,39 @@ int bounce_trace_service(int flags, char *service, char *queue_name, BOUNCE_INFO *bounce_info; int bounce_status = 1; 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; + 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. @@ -126,7 +157,6 @@ int bounce_trace_service(int flags, char *service, char *queue_name, bounce_mail_free(bounce_info); return (0); } -#define NULL_SENDER MAIL_ADDR_EMPTY /* special address */ #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 * 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, NULL_TRACE_FLAGS, new_id)) != 0) { diff --git a/postfix/src/cleanup/cleanup_milter.c b/postfix/src/cleanup/cleanup_milter.c index 9667dc725..fb3d836fe 100644 --- a/postfix/src/cleanup/cleanup_milter.c +++ b/postfix/src/cleanup/cleanup_milter.c @@ -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. */ ; else if ((header_label == 0 || (strncasecmp(header_label, STR(buf), len) == 0 - && (IS_SPACE_TAB(STR(buf)[len]) - || STR(buf)[len] == ':'))) + && (strlen(header_label) == len))) && --index == 0) { /* If we have a saved PTR record, it points to start of header. */ break; diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index 75fd37a56..6edb5df6d 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,8 +20,8 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20111024" -#define MAIL_VERSION_NUMBER "2.7.7" +#define MAIL_RELEASE_DATE "20120204" +#define MAIL_VERSION_NUMBER "2.7.8" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff --git a/postfix/src/local/mailbox.c b/postfix/src/local/mailbox.c index 58b01f79f..89c739274 100644 --- a/postfix/src/local/mailbox.c +++ b/postfix/src/local/mailbox.c @@ -289,7 +289,8 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp) } else if (dict_errno != 0) { /* Details in the logfile. */ 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); } 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) { /* Details in the logfile. */ 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) { status = deliver_command(state, usr_attr, var_mailbox_command); } else if (*var_home_mailbox && LAST_CHAR(var_home_mailbox) == '/') { diff --git a/postfix/src/local/unknown.c b/postfix/src/local/unknown.c index eb5bbf250..57e49af84 100644 --- a/postfix/src/local/unknown.c +++ b/postfix/src/local/unknown.c @@ -120,7 +120,8 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr) } else if (dict_errno != 0) { /* Details in the logfile. */ 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) { state.msg_attr.rcpt.offset = -1L; diff --git a/postfix/src/xsasl/xsasl_dovecot_server.c b/postfix/src/xsasl/xsasl_dovecot_server.c index 5fc1e0f7d..3e1d250ec 100644 --- a/postfix/src/xsasl/xsasl_dovecot_server.c +++ b/postfix/src/xsasl/xsasl_dovecot_server.c @@ -370,11 +370,6 @@ XSASL_SERVER_IMPL *xsasl_dovecot_server_init(const char *server_type, { 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.create = xsasl_dovecot_server_create; xp->xsasl.done = xsasl_dovecot_server_done;