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

postfix-2.2.12

This commit is contained in:
Wietse Venema 2007-10-21 00:00:00 -05:00 committed by Viktor Dukhovni
parent 5a89ef4710
commit fdcd03baed
8 changed files with 53 additions and 4 deletions

View File

@ -11012,3 +11012,36 @@ Apologies for any names omitted.
if Postfix could somehow be forced to send HELO instead of if Postfix could somehow be forced to send HELO instead of
EHLO. Victor Duchovni. File: src/smtp/smtp_proto.c. EHLO. Victor Duchovni. File: src/smtp/smtp_proto.c.
20061203
Bugfix (introduced with Postfix 2.2): with SMTP server
tarpit delays of smtp_rset_timeout or larger, the SMTP
client could get out of sync with the server while reusing
a connection. The symptoms were "recipient rejected .. in
reply to DATA". Fix by Victor Duchovni and Wietse. File:
smtp/smtp_proto.c, smtp/smtp_connect.c. Back-ported from
Postfix 2.3.
Safety: additional error tests to prevent connection reuse
after timeout error. Files: lmtp/lmtp.c, smtp/smtp_connect.c.
Back-ported from Postfix 2.3.
20070529
Cleanup: misleading error message while discarding malformed
input after queue file write error. File postdrop/postdrop.c.
20070911
Bugfix (introduced Postfix 2.2.11): TLS client certificate
with unparsable canonical name caused the SMTP server's
policy client to allocate zero-length memory, triggering
an assertion that it shouldn't do such things. File:
smtpd/smtpd_check.c.
20070917
Workaround: the flush daemon forces an access time update
for the per-destination logfile, to prevent an excessive
rate of delivery attempts when the queue file system is
mounted with "noatime". File: flush/flush.c.

View File

@ -147,6 +147,7 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <utime.h> #include <utime.h>
@ -479,6 +480,11 @@ static int flush_send_path(const char *path, int how)
if (count > 0 && ftruncate(vstream_fileno(log), (off_t) 0) < 0) if (count > 0 && ftruncate(vstream_fileno(log), (off_t) 0) < 0)
msg_fatal("%s: truncate fast flush logfile %s: %m", myname, path); msg_fatal("%s: truncate fast flush logfile %s: %m", myname, path);
/*
* Workaround for noatime mounts. Use futimes() if available.
*/
(void) utimes(VSTREAM_PATH(log), (struct timeval *) 0);
/* /*
* Request delivery and clean up. * Request delivery and clean up.
*/ */

View File

@ -20,8 +20,8 @@
* Patches change the patchlevel and the release date. Snapshots change the * Patches change the patchlevel and the release date. Snapshots change the
* release date only. * release date only.
*/ */
#define MAIL_RELEASE_DATE "20060724" #define MAIL_RELEASE_DATE "20071021"
#define MAIL_VERSION_NUMBER "2.2.11" #define MAIL_VERSION_NUMBER "2.2.12"
#define VAR_MAIL_VERSION "mail_version" #define VAR_MAIL_VERSION "mail_version"
#ifdef SNAPSHOT #ifdef SNAPSHOT

View File

@ -443,6 +443,7 @@ static int deliver_message(DELIVER_REQUEST *request, char **unused_argv)
if (state->session != 0 if (state->session != 0
&& (!var_lmtp_cache_conn && (!var_lmtp_cache_conn
|| vstream_ferror(state->session->stream) || vstream_ferror(state->session->stream)
|| vstream_ftimeout(state->session->stream)
|| vstream_feof(state->session->stream))) || vstream_feof(state->session->stream)))
state->session = lmtp_session_free(state->session); state->session = lmtp_session_free(state->session);

View File

@ -406,6 +406,8 @@ int main(int argc, char **argv)
while ((rec_type = rec_get(VSTREAM_IN, buf, var_line_limit)) > 0 while ((rec_type = rec_get(VSTREAM_IN, buf, var_line_limit)) > 0
&& rec_type != REC_TYPE_END) && rec_type != REC_TYPE_END)
/* void */ ; /* void */ ;
if (rec_type <= 0)
msg_fatal("uid=%ld: malformed input", (long) uid);
break; break;
} }
if (rec_type == REC_TYPE_END) if (rec_type == REC_TYPE_END)

View File

@ -378,7 +378,11 @@ static void smtp_cleanup_session(SMTP_STATE *state)
* logical next-hop state, so that we won't cache connections to * logical next-hop state, so that we won't cache connections to
* less-preferred MX hosts under the logical next-hop destination. * less-preferred MX hosts under the logical next-hop destination.
*/ */
if (session->reuse_count > 0) { if (session->reuse_count > 0
/* Redundant tests for safety... */
&& vstream_ferror(session->stream) == 0
&& vstream_ftimeout(session->stream) == 0
&& vstream_feof(session->stream) == 0) {
smtp_save_session(state); smtp_save_session(state);
if (HAVE_NEXTHOP_STATE(state)) if (HAVE_NEXTHOP_STATE(state))
FREE_NEXTHOP_STATE(state); FREE_NEXTHOP_STATE(state);
@ -709,6 +713,7 @@ int smtp_connect(SMTP_STATE *state)
if ((session->features & SMTP_FEATURE_FROM_CACHE) == 0 if ((session->features & SMTP_FEATURE_FROM_CACHE) == 0
&& smtp_helo(state, misc_flags) != 0) { && smtp_helo(state, misc_flags) != 0) {
if (vstream_ferror(session->stream) == 0 if (vstream_ferror(session->stream) == 0
&& vstream_ftimeout(session->stream) == 0
&& vstream_feof(session->stream) == 0) && vstream_feof(session->stream) == 0)
smtp_quit(state); smtp_quit(state);
} else } else

View File

@ -888,6 +888,8 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state,
} while (0) } while (0)
#define RETURN(x) do { \ #define RETURN(x) do { \
if (recv_state != SMTP_STATE_LAST) \
DONT_CACHE_THIS_SESSION; \
vstring_free(next_command); \ vstring_free(next_command); \
if (session->mime_state) \ if (session->mime_state) \
session->mime_state = mime_state_free(session->mime_state); \ session->mime_state = mime_state_free(session->mime_state); \

View File

@ -3072,7 +3072,7 @@ static int check_policy_service(SMTPD_STATE *state, const char *server,
coded_CN_buf = 0; \ coded_CN_buf = 0; \
coded_CN = ""; \ coded_CN = ""; \
} else { \ } else { \
coded_CN_buf = vstring_alloc(strlen(CN)); \ coded_CN_buf = vstring_alloc(strlen(CN) + 1); \
xtext_quote(coded_CN_buf, CN, ""); \ xtext_quote(coded_CN_buf, CN, ""); \
coded_CN = STR(coded_CN_buf); \ coded_CN = STR(coded_CN_buf); \
} \ } \