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:
committed by
Viktor Dukhovni
parent
9b336a8b16
commit
ae550d1ad2
@@ -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.
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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.
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user