2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 13:48:06 +00:00

postfix-2.5.10

This commit is contained in:
Wietse Venema
2010-03-22 00:00:00 -05:00
committed by Viktor Dukhovni
parent 9b336a8b16
commit ae550d1ad2
11 changed files with 86 additions and 13 deletions

View File

@@ -14529,3 +14529,45 @@ Apologies for any names omitted.
Bugfix: don't panic when an unexpected smtpd access map is Bugfix: don't panic when an unexpected smtpd access map is
specified. File: smtpd/smtpd_check.c. specified. File: smtpd/smtpd_check.c.
20090918
Bugfix (introduced Postfix 2.3): with Milter RCPT TO replies
turned off, there was no automatic flush-before-read on the
smtpd-to-milter stream, because the read was done on the
cleanup-to-milter stream. Problem reported by Stephen Warren.
File: milter/milter8.c.
20091005
Bugfix: core dump while printing error message for malformed
%<letter> sequence in LDAP, MySQL or PostgreSQL configuration.
File: global/db_common.c. Fix by Victor Duchovni.
20091209
Bugfix: sender_dependent_relayhost_maps did not reject an
empty lookup result, and did not recognize lookup errors,
thus treating errors as "not found". Problem found during
code maintenance. File: trivial-rewrite/resolve.c.
20100107
Bugfix: the pickup daemon did not discard messages that
were requeued after all recipients were delivered (or
bounced), and the cleanup server tried to bounce such
messages. Files: pickup/pickup.c, global/cleanup_user.h.
20100115
Bugfix: the valid_hostname() fuction did not set the
"non-numeric" flag after encountering the '-' character.
Reported by Jan Schampera. File: util/valid_hostname.c.
20100116
Workaround: as of Postfix 2.3 the VRFY command did not allow
a mailbox address inside <>, which broke expectations. RFC
2821 (and 5321) is vague about the VRFY request format, but
spends lots of text on the reply format. File: smtpd/smtpd.c.

View File

@@ -132,6 +132,8 @@ case "$SYSTEM.$RELEASE" in
;; ;;
FreeBSD.7*) SYSTYPE=FREEBSD7 FreeBSD.7*) SYSTYPE=FREEBSD7
;; ;;
FreeBSD.8*) SYSTYPE=FREEBSD8
;;
OpenBSD.2*) SYSTYPE=OPENBSD2 OpenBSD.2*) SYSTYPE=OPENBSD2
;; ;;
OpenBSD.3*) SYSTYPE=OPENBSD3 OpenBSD.3*) SYSTYPE=OPENBSD3

View File

@@ -65,7 +65,8 @@
* These are set when we can't bounce even if we were asked to. * These are set when we can't bounce even if we were asked to.
*/ */
#define CLEANUP_STAT_MASK_CANT_BOUNCE \ #define CLEANUP_STAT_MASK_CANT_BOUNCE \
(CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_DEFER) (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_DEFER \
| CLEANUP_STAT_RCPT)
/* /*
* These are set when we can't examine every record of a message. * These are set when we can't examine every record of a message.

View File

@@ -228,7 +228,7 @@ int db_common_parse(DICT *dict, void **ctxPtr, const char *format, int query
break; break;
default: default:
msg_fatal("db_common_parse: %s: Invalid %s template: %s", msg_fatal("db_common_parse: %s: Invalid %s template: %s",
dict->name, query ? "query" : "result", format); ctx->dict->name, query ? "query" : "result", format);
} }
return dynamic; return dynamic;
} }

View File

@@ -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 "20090828" #define MAIL_RELEASE_DATE "20100322"
#define MAIL_VERSION_NUMBER "2.5.9" #define MAIL_VERSION_NUMBER "2.5.10"
#ifdef SNAPSHOT #ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@@ -2528,6 +2528,13 @@ static int milter8_send(MILTER *m, VSTREAM *stream)
if (msg_verbose) if (msg_verbose)
msg_info("%s: milter %s", myname, milter->m.name); msg_info("%s: milter %s", myname, milter->m.name);
/*
* The next read on this Milter socket happens in a different process. It
* will not automatically flush the output buffer in this process.
*/
if (milter->fp)
vstream_fflush(milter->fp);
if (attr_print(stream, ATTR_FLAG_MORE, if (attr_print(stream, ATTR_FLAG_MORE,
ATTR_TYPE_STR, MAIL_ATTR_MILT_NAME, milter->m.name, ATTR_TYPE_STR, MAIL_ATTR_MILT_NAME, milter->m.name,
ATTR_TYPE_INT, MAIL_ATTR_MILT_VERS, milter->version, ATTR_TYPE_INT, MAIL_ATTR_MILT_VERS, milter->version,

View File

@@ -191,10 +191,14 @@ static int cleanup_service_error_reason(PICKUP_INFO *info, int status,
/* /*
* XXX If the cleanup server gave a reason, then it was already logged. * XXX If the cleanup server gave a reason, then it was already logged.
* Don't bother logging it another time. * Don't bother logging it another time.
*
* XXX Discard a message without recipient. This can happen with "postsuper
* -r" when a message is already delivered (or bounced). The Postfix
* sendmail command rejects submissions without recipients.
*/ */
if (reason == 0) if (reason == 0)
msg_warn("%s: %s", info->path, cleanup_strerror(status)); msg_warn("%s: %s", info->path, cleanup_strerror(status));
return ((status & CLEANUP_STAT_BAD) ? return ((status & (CLEANUP_STAT_BAD | CLEANUP_STAT_RCPT)) ?
REMOVE_MESSAGE_FILE : KEEP_MESSAGE_FILE); REMOVE_MESSAGE_FILE : KEEP_MESSAGE_FILE);
} }

View File

@@ -3051,9 +3051,9 @@ static int vrfy_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax"); smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax");
return (-1); return (-1);
} }
/* Not: state->addr_buf */ /* Use state->addr_buf, with the unquoted result from extract_addr() */
if (SMTPD_STAND_ALONE(state) == 0 if (SMTPD_STAND_ALONE(state) == 0
&& (err = smtpd_check_rcpt(state, argv[1].strval)) != 0) { && (err = smtpd_check_rcpt(state, STR(state->addr_buf))) != 0) {
smtpd_chat_reply(state, "%s", err); smtpd_chat_reply(state, "%s", err);
return (-1); return (-1);
} }

View File

@@ -153,6 +153,7 @@ static void resolve_addr(RES_CONTEXT *rp, char *sender, char *addr,
char *oper; char *oper;
char *junk; char *junk;
const char *relay; const char *relay;
const char *sender_key;
*flags = 0; *flags = 0;
vstring_strcpy(channel, "CHANNEL NOT UPDATED"); vstring_strcpy(channel, "CHANNEL NOT UPDATED");
@@ -508,11 +509,21 @@ static void resolve_addr(RES_CONTEXT *rp, char *sender, char *addr,
* override the recipient domain. * override the recipient domain.
*/ */
if (rp->snd_relay_info if (rp->snd_relay_info
&& (relay = mail_addr_find(rp->snd_relay_info, *sender ? && (relay = mail_addr_find(rp->snd_relay_info,
sender : var_null_relay_maps_key, sender_key = (*sender ? sender :
(char **) 0)) != 0) var_null_relay_maps_key),
(char **) 0)) != 0) {
if (*relay == 0) {
msg_warn("%s: ignoring null lookup result for %s",
rp->snd_relay_maps_name, sender_key);
relay = rcpt_domain;
}
vstring_strcpy(nexthop, relay); vstring_strcpy(nexthop, relay);
else if (*RES_PARAM_VALUE(rp->relayhost)) } else if (dict_errno != 0) {
msg_warn("%s lookup failure", rp->snd_relay_maps_name);
*flags |= RESOLVE_FLAG_FAIL;
FREE_MEMORY_AND_RETURN;
} else if (*RES_PARAM_VALUE(rp->relayhost))
vstring_strcpy(nexthop, RES_PARAM_VALUE(rp->relayhost)); vstring_strcpy(nexthop, RES_PARAM_VALUE(rp->relayhost));
else else
vstring_strcpy(nexthop, rcpt_domain); vstring_strcpy(nexthop, rcpt_domain);

View File

@@ -25,6 +25,7 @@
*/ */
#if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4) \ #if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4) \
|| defined(FREEBSD5) || defined(FREEBSD6) || defined(FREEBSD7) \ || defined(FREEBSD5) || defined(FREEBSD6) || defined(FREEBSD7) \
|| defined(FREEBSD8) \
|| defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \ || defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \
|| defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \ || defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \
|| defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \ || defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \
@@ -110,6 +111,10 @@
#define HAS_DUPLEX_PIPE /* 4.1 breaks with kqueue(2) */ #define HAS_DUPLEX_PIPE /* 4.1 breaks with kqueue(2) */
#endif #endif
#if __FreeBSD_version >= 800098 /* commit: r194262 */
#define HAS_CLOSEFROM
#endif
/* OpenBSD version is year+month */ /* OpenBSD version is year+month */
#if OpenBSD >= 199805 /* XXX */ #if OpenBSD >= 199805 /* XXX */
@@ -1453,7 +1458,7 @@ typedef int pid_t;
* sections above. * sections above.
*/ */
#ifndef PRINTFLIKE #ifndef PRINTFLIKE
#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ == 3 #if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3
#define PRINTFLIKE(x,y) __attribute__ ((format (printf, (x), (y)))) #define PRINTFLIKE(x,y) __attribute__ ((format (printf, (x), (y))))
#else #else
#define PRINTFLIKE(x,y) #define PRINTFLIKE(x,y)
@@ -1461,7 +1466,7 @@ typedef int pid_t;
#endif #endif
#ifndef SCANFLIKE #ifndef SCANFLIKE
#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ == 3 #if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3
#define SCANFLIKE(x,y) __attribute__ ((format (scanf, (x), (y)))) #define SCANFLIKE(x,y) __attribute__ ((format (scanf, (x), (y))))
#else #else
#define SCANFLIKE(x,y) #define SCANFLIKE(x,y)

View File

@@ -116,6 +116,7 @@ int valid_hostname(const char *name, int gripe)
} }
label_length = 0; label_length = 0;
} else if (ch == '-') { } else if (ch == '-') {
non_numeric = 1;
label_length++; label_length++;
if (label_length == 1 || cp[1] == 0 || cp[1] == '.') { if (label_length == 1 || cp[1] == 0 || cp[1] == '.') {
if (gripe) if (gripe)