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:
parent
5a89ef4710
commit
fdcd03baed
@ -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.
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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); \
|
||||||
|
@ -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); \
|
||||||
} \
|
} \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user