]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.4.10 v3.4.10
authorWietse Venema <wietse@porcupine.org>
Thu, 12 Mar 2020 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Sun, 15 Mar 2020 23:59:10 +0000 (19:59 -0400)
postfix/HISTORY
postfix/src/global/mail_version.h
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd.h

index 5693ef436b593209a1d640c842d35105a62225c4..1ebf42abd469b4c26ecd9138fbe74d8400deeebb 100644 (file)
@@ -24339,3 +24339,10 @@ Apologies for any names omitted.
        macros were evaluated before the Milter connection itself
        had been negotiated. Problem reported by David Bürgin.
        Files: milter/milter.h, milter/milter.c, milter/milter8.c
+
+20200312
+
+       Bugfix (introduced: Postfix 2.3): panic with Postfix
+       multi-Milter configuration during MAIL FROM. Milter client
+       state was not properly reset after one of the Milters failed.
+       Reported by WeiYu Wu.
index 8076b1c401af74665d5acb46f2f113ab884d3b07..41647d36464fbccd2446f260a5a2f7dfaab350d8 100644 (file)
@@ -20,8 +20,8 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20200203"
-#define MAIL_VERSION_NUMBER    "3.4.9"
+#define MAIL_RELEASE_DATE      "20200312"
+#define MAIL_VERSION_NUMBER    "3.4.10"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index 8560dc9a9f0824486c30beb95105956bce5d258d..1c497a6e866df54549812c9b40a187ecc6fd436d 100644 (file)
@@ -2605,6 +2605,7 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
     }
     if (state->milters != 0
        && (state->saved_flags & MILTER_SKIP_FLAGS) == 0) {
+       state->flags |= SMTPD_FLAG_NEED_MILTER_ABORT;
        PUSH_STRING(saved_sender, state->sender, STR(state->addr_buf));
        err = milter_mail_event(state->milters,
                                milter_argv(state, argc - 2, argv + 2));
@@ -2720,11 +2721,14 @@ static void mail_reset(SMTPD_STATE *state)
        state->queue_id = 0;
     }
     if (state->sender) {
-       if (state->milters != 0)
-           milter_abort(state->milters);
        myfree(state->sender);
        state->sender = 0;
     }
+    /* WeiYu Wu: need to undo milter_mail_event() state change. */
+    if (state->flags & SMTPD_FLAG_NEED_MILTER_ABORT) {
+       milter_abort(state->milters);
+       state->flags &= ~SMTPD_FLAG_NEED_MILTER_ABORT;
+    }
     if (state->verp_delims) {
        myfree(state->verp_delims);
        state->verp_delims = 0;
index a584a2c83cca9c6392b33a25e60d152833de6a0b..0b1d87b2dd06f401f61c87b86cfc5ee52709806b 100644 (file)
@@ -206,6 +206,7 @@ typedef struct {
 #define SMTPD_FLAG_ILL_PIPELINING  (1<<1)      /* inappropriate pipelining */
 #define SMTPD_FLAG_AUTH_USED      (1<<2)       /* don't reuse SASL state */
 #define SMTPD_FLAG_SMTPUTF8       (1<<3)       /* RFC 6531/2 transaction */
+#define SMTPD_FLAG_NEED_MILTER_ABORT (1<<4)    /* undo milter_mail_event() */
 
  /* Security: don't reset SMTPD_FLAG_AUTH_USED. */
 #define SMTPD_MASK_MAIL_KEEP \