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

postfix-2.3.14

This commit is contained in:
Wietse Venema
2008-01-31 00:00:00 -05:00
committed by Viktor Dukhovni
parent c161b0e5df
commit 6fb2e07bcb
9 changed files with 104 additions and 40 deletions

View File

@@ -13088,3 +13088,39 @@ Apologies for any names omitted.
rate of delivery attempts when the queue file system is rate of delivery attempts when the queue file system is
mounted with "noatime". File: flush/flush.c. Back-port mounted with "noatime". File: flush/flush.c. Back-port
from Postfix 2.4/2.5. from Postfix 2.4/2.5.
20071030
Bugfix (introduced Postfix 2.3): Postfix mistakenly enforced
the 64kbyte limit (for sending body parts TO Milter
applications) also while receiving packets FROM Milter
applications. The limit is now at least 1GB. File:
milter/milter8.c.
20071202
Bugfix (introduced Postfix 2.2): don't update the back-to-back
delivery time stamp while deferring mail. File: *qmgr/qmgr_entry.c.
20071211
Bugfix (introduced 19980315): the "write" equivalent of
bugfix 20030104. File: util/vstream.c.
20071213
Bugfix (introduced Postfix 2.3): the SMTP client never
marked corrupt files as corrupt. Victor Duchovni. File:
smtp/smtp_proto.c.
20071229
Bugfix: the Milter client did not replace the Postfix-specific
form for unknown host names by the Sendmail-specific form.
File: milter/milter8.c.
20080104
Workaround: minor change to the Dovecot AUTH request to
prevent dovecot-auth memory wastage. Timo Sirainen. File:
xsasl/xsasl_dovecot_server.c.

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 "20071017" #define MAIL_RELEASE_DATE "20080131"
#define MAIL_VERSION_NUMBER "2.3.13" #define MAIL_VERSION_NUMBER "2.3.14"
#ifdef SNAPSHOT #ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@@ -63,6 +63,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdarg.h> #include <stdarg.h>
#include <limits.h> /* INT_MAX */
#ifndef SHUT_RDWR #ifndef SHUT_RDWR
#define SHUT_RDWR 2 #define SHUT_RDWR 2
@@ -280,7 +281,7 @@ typedef struct {
/* /*
* We don't accept insane amounts of data. * We don't accept insane amounts of data.
*/ */
#define XXX_MAX_DATA (MILTER_CHUNK_SIZE * 2) #define XXX_MAX_DATA (INT_MAX / 2)
#define XXX_TIMEOUT 10 #define XXX_TIMEOUT 10
#ifndef USE_LIBMILTER_INCLUDES #ifndef USE_LIBMILTER_INCLUDES
@@ -1624,6 +1625,17 @@ static const char *milter8_conn_event(MILTER *m,
const char *myname = "milter8_conn_event"; const char *myname = "milter8_conn_event";
MILTER8 *milter = (MILTER8 *) m; MILTER8 *milter = (MILTER8 *) m;
int port; int port;
const char *sm_name;
char *ptr = 0;
const char *resp;
/*
* Need a global definition for "unknown" host name or address that is
* shared by smtpd, cleanup and libmilter.
*/
#define XXX_UNKNOWN "unknown"
#define STR_EQ(x,y) (strcmp((x), (y)) == 0)
#define STR_NE(x,y) (strcmp((x), (y)) != 0)
/* /*
* XXX Sendmail 8 libmilter closes the MTA-to-filter socket when it finds * XXX Sendmail 8 libmilter closes the MTA-to-filter socket when it finds
@@ -1655,40 +1667,51 @@ static const char *milter8_conn_event(MILTER *m,
port = 0; port = 0;
} }
milter->state = MILTER8_STAT_ENVELOPE; milter->state = MILTER8_STAT_ENVELOPE;
/* Transform unknown hostname from Postfix to Sendmail form. */
sm_name = (STR_NE(client_name, XXX_UNKNOWN) ? client_name :
STR_EQ(client_addr, XXX_UNKNOWN) ? client_name :
(ptr = concatenate("[", client_addr, "]", (char *) 0)));
switch (addr_family) { switch (addr_family) {
case AF_INET: case AF_INET:
return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT, resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
DONT_SKIP_REPLY, macros, DONT_SKIP_REPLY, macros,
MILTER8_DATA_STRING, client_name, MILTER8_DATA_STRING, sm_name,
MILTER8_DATA_OCTET, SMFIA_INET, MILTER8_DATA_OCTET, SMFIA_INET,
MILTER8_DATA_NSHORT, htons(port), MILTER8_DATA_NSHORT, htons(port),
MILTER8_DATA_STRING, client_addr, MILTER8_DATA_STRING, client_addr,
MILTER8_DATA_END)); MILTER8_DATA_END);
break;
#ifdef HAS_IPV6 #ifdef HAS_IPV6
case AF_INET6: case AF_INET6:
return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT, resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
DONT_SKIP_REPLY, macros, DONT_SKIP_REPLY, macros,
MILTER8_DATA_STRING, client_name, MILTER8_DATA_STRING, sm_name,
MILTER8_DATA_OCTET, SMFIA_INET6, MILTER8_DATA_OCTET, SMFIA_INET6,
MILTER8_DATA_NSHORT, htons(port), MILTER8_DATA_NSHORT, htons(port),
MILTER8_DATA_STRING, client_addr, MILTER8_DATA_STRING, client_addr,
MILTER8_DATA_END)); MILTER8_DATA_END);
break;
#endif #endif
case AF_UNIX: case AF_UNIX:
return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT, resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
DONT_SKIP_REPLY, macros, DONT_SKIP_REPLY, macros,
MILTER8_DATA_STRING, client_name, MILTER8_DATA_STRING, sm_name,
MILTER8_DATA_OCTET, SMFIA_UNIX, MILTER8_DATA_OCTET, SMFIA_UNIX,
MILTER8_DATA_NSHORT, htons(0), MILTER8_DATA_NSHORT, htons(0),
MILTER8_DATA_STRING, client_addr, MILTER8_DATA_STRING, client_addr,
MILTER8_DATA_END)); MILTER8_DATA_END);
break;
default: default:
return (milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT, resp = milter8_event(milter, SMFIC_CONNECT, SMFIP_NOCONNECT,
DONT_SKIP_REPLY, macros, DONT_SKIP_REPLY, macros,
MILTER8_DATA_STRING, client_name, MILTER8_DATA_STRING, sm_name,
MILTER8_DATA_OCTET, SMFIA_UNKNOWN, MILTER8_DATA_OCTET, SMFIA_UNKNOWN,
MILTER8_DATA_END)); MILTER8_DATA_END);
break;
} }
if (ptr != 0)
myfree(ptr);
return (resp);
default: default:
msg_panic("%s: milter %s: bad state %d", msg_panic("%s: milter %s: bad state %d",
myname, milter->m.name, milter->state); myname, milter->m.name, milter->state);

View File

@@ -203,6 +203,7 @@ void qmgr_entry_done(QMGR_ENTRY *entry, int which)
/* /*
* Maintain back-to-back delivery status. * Maintain back-to-back delivery status.
*/ */
if (which == QMGR_QUEUE_BUSY)
queue->last_done = event_time(); queue->last_done = event_time();
/* /*

View File

@@ -840,7 +840,7 @@ static void get_service_attr(PIPE_ATTR *attr, char **argv)
/* /*
* null_sender=string * null_sender=string
*/ */
else if (strncasecmp("null_sender=", *argv, sizeof("eol=") - 1) == 0) { else if (strncasecmp("null_sender=", *argv, sizeof("null_sender=") - 1) == 0) {
vstring_strcpy(attr->null_sender, *argv + sizeof("null_sender=") - 1); vstring_strcpy(attr->null_sender, *argv + sizeof("null_sender=") - 1);
} }

View File

@@ -276,6 +276,7 @@ void qmgr_entry_done(QMGR_ENTRY *entry, int which)
/* /*
* Maintain back-to-back delivery status. * Maintain back-to-back delivery status.
*/ */
if (which == QMGR_QUEUE_BUSY)
queue->last_done = event_time(); queue->last_done = event_time();
/* /*

View File

@@ -1710,7 +1710,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
fail_status = smtp_mesg_fail(state, DSN_BY_LOCAL_MTA, fail_status = smtp_mesg_fail(state, DSN_BY_LOCAL_MTA,
SMTP_RESP_FAKE(&fake, "5.3.0"), SMTP_RESP_FAKE(&fake, "5.3.0"),
"unreadable mail queue entry"); "unreadable mail queue entry");
if (fail_status == 0) if (state->status == 0)
(void) mark_corrupt(state->src); (void) mark_corrupt(state->src);
RETURN(fail_status); RETURN(fail_status);
} }

View File

@@ -477,6 +477,7 @@ static void vstream_buf_init(VBUF *bp, int flags)
static void vstream_buf_alloc(VBUF *bp, ssize_t len) static void vstream_buf_alloc(VBUF *bp, ssize_t len)
{ {
VSTREAM *stream = VBUF_TO_APPL(bp, VSTREAM, buf);
ssize_t used = bp->ptr - bp->data; ssize_t used = bp->ptr - bp->data;
const char *myname = "vstream_buf_alloc"; const char *myname = "vstream_buf_alloc";
@@ -492,10 +493,15 @@ static void vstream_buf_alloc(VBUF *bp, ssize_t len)
bp->data = (unsigned char *) bp->data = (unsigned char *)
(bp->data ? myrealloc((char *) bp->data, len) : mymalloc(len)); (bp->data ? myrealloc((char *) bp->data, len) : mymalloc(len));
bp->len = len; bp->len = len;
if (bp->flags & VSTREAM_FLAG_READ) if (bp->flags & VSTREAM_FLAG_READ) {
bp->ptr = bp->data + used; bp->ptr = bp->data + used;
else if (bp->flags & VSTREAM_FLAG_DOUBLE)
VSTREAM_SAVE_STATE(stream, read_buf, read_fd);
} else {
VSTREAM_BUF_AT_OFFSET(bp, used); VSTREAM_BUF_AT_OFFSET(bp, used);
if (bp->flags & VSTREAM_FLAG_DOUBLE)
VSTREAM_SAVE_STATE(stream, write_buf, write_fd);
}
} }
/* vstream_buf_wipe - reset buffer to initial state */ /* vstream_buf_wipe - reset buffer to initial state */
@@ -663,11 +669,8 @@ static int vstream_buf_get_ready(VBUF *bp)
* allocation gives the application a chance to override the default * allocation gives the application a chance to override the default
* buffering policy. * buffering policy.
*/ */
if (bp->data == 0) { if (bp->data == 0)
vstream_buf_alloc(bp, VSTREAM_BUFSIZE); vstream_buf_alloc(bp, VSTREAM_BUFSIZE);
if (bp->flags & VSTREAM_FLAG_DOUBLE)
VSTREAM_SAVE_STATE(stream, read_buf, read_fd);
}
/* /*
* If the stream is double-buffered and the write buffer is not empty, * If the stream is double-buffered and the write buffer is not empty,

View File

@@ -453,7 +453,7 @@ int xsasl_dovecot_server_first(XSASL_SERVER *xp, const char *sasl_method,
/* send the request */ /* send the request */
server->last_request_id = ++server->impl->request_id_counter; server->last_request_id = ++server->impl->request_id_counter;
vstream_fprintf(server->impl->sasl_stream, vstream_fprintf(server->impl->sasl_stream,
"AUTH\t%u\t%s\tservice=%s", "AUTH\t%u\t%s\tservice=%s\tnologin",
server->last_request_id, sasl_method, server->last_request_id, sasl_method,
server->service); server->service);
if (init_response) { if (init_response) {