]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.4.21 v3.4.21
authorWietse Venema <wietse@porcupine.org>
Sun, 13 Jun 2021 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Mon, 14 Jun 2021 14:41:38 +0000 (10:41 -0400)
postfix/HISTORY
postfix/README_FILES/BDAT_README
postfix/html/BDAT_README.html
postfix/proto/BDAT_README.html
postfix/src/global/mail_params.c
postfix/src/global/mail_version.h
postfix/src/util/slmdb.c

index 3ab509d90c73ad20258aa33e05632cc1cccc0208..4de584d9f42167ce948c90edb0523a1ec8c8f959 100644 (file)
@@ -24593,3 +24593,25 @@ Apologies for any names omitted.
 
        Missing null pointer check (introduced: Postfix alpha) after
        null argv[0] value. File: global/mail_task.c.
+
+20210601
+
+       Bugfix (introduced: Postfix 2.11): the command "postmap
+       lmdb:/file/name" handled duplicate keys ungracefully,
+       discarding entries stored up to and including the duplicate
+       key, and causing a double free() call with lmdb versions
+       0.9.17 and later. Reported by Adi Prasaja; double free()
+       root cause analysis by Howard Chu. File: util/slmdb.c.
+
+20210609
+
+       Typo (introduced: Postfix 3.4): silent_discard should be
+       silent-discard. File: proto/BDAT_README.html.
+
+20210612
+
+       Support for Postfix 3.6 compatibility_level syntax, to avoid
+       fatal runtime errors when rolling back from Postfix 3.6 to
+       an earlier supported version, or when sharing Postfix 3.6
+       configuration files with an earlier supported Postfix
+       version. File: global/mail_params.c.
index 2dc1df35ce65f01f1462f82393f46c80ae16fb02..1248804099f623ef99d421a00c9074317a73f98a 100644 (file)
@@ -23,7 +23,7 @@ BDAT support is enabled by default. To disable BDAT support globally:
         # The logging alternative:
         smtpd_discard_ehlo_keywords = chunking
         # The non-logging alternative:
-        smtpd_discard_ehlo_keywords = chunking, silent_discard
+        smtpd_discard_ehlo_keywords = chunking, silent-discard
 
 Specify '-o smtpd_discard_ehlo_keywords=' in master.cf for the submission and
 smtps services, if you have clients that benefit from CHUNKING support.
index b8feeeb144eb7848c8f559efb3e0b979ca3b8f33..271aa06b78e67c9fe5a9a48e352ab1438cf214b6 100644 (file)
@@ -51,7 +51,7 @@ globally: </p>
     # The logging alternative:
     <a href="postconf.5.html#smtpd_discard_ehlo_keywords">smtpd_discard_ehlo_keywords</a> = chunking
     # The non-logging alternative:
-    <a href="postconf.5.html#smtpd_discard_ehlo_keywords">smtpd_discard_ehlo_keywords</a> = chunking, silent_discard
+    <a href="postconf.5.html#smtpd_discard_ehlo_keywords">smtpd_discard_ehlo_keywords</a> = chunking, silent-discard
 </pre>
 </blockquote>
 
index 60f0d1fa1b03e7dcaf859cad13cbcc05ae055d14..7839904aee4891901eb4541e1bd337461033468a 100644 (file)
@@ -51,7 +51,7 @@ globally: </p>
     # The logging alternative:
     smtpd_discard_ehlo_keywords = chunking
     # The non-logging alternative:
-    smtpd_discard_ehlo_keywords = chunking, silent_discard
+    smtpd_discard_ehlo_keywords = chunking, silent-discard
 </pre>
 </blockquote>
 
index 3f58ab078353d76a1986e3e67f984cef93ab3ca5..c1430141532f100e9e8d569d38052f87ab978b47 100644 (file)
@@ -831,6 +831,17 @@ void    mail_params_init()
     };
     const char *cp;
 
+    /*
+     * Ignore the Postfix >= 3.6 compatibility_level's minor and patch
+     * fields, to allow rollback from Postfix >= 3.6, and to allow
+     * configuration sharing with Postfix >= 3.6.
+     */
+    const char *compat_level_str;
+
+    if ((compat_level_str = mail_conf_lookup(VAR_COMPAT_LEVEL)) != 0
+      && ISDIGIT(compat_level_str[0]) && strchr(compat_level_str, '.') != 0)
+       set_mail_conf_int(VAR_COMPAT_LEVEL, atoi(compat_level_str));
+
     /*
      * Extract compatibility level first, so that we can determine what
      * parameters of interest are left at their legacy defaults.
index cb962876e83c8b5cbf31c7417d3828d2eda99294..7caaa6ae14c28d6adb7a268b21cc3c19015557f3 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      "20210411"
-#define MAIL_VERSION_NUMBER    "3.4.20"
+#define MAIL_RELEASE_DATE      "20210613"
+#define MAIL_VERSION_NUMBER    "3.4.21"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index cee0546192814263ad7aadef35b169a1a8e1305d..823d94033d179318c09861f3ff2b9ac67bec78d7 100644 (file)
@@ -386,12 +386,16 @@ static int slmdb_prepare(SLMDB *slmdb)
      * - With a bulk-mode transaction we commit when the database is closed.
      */
     if (slmdb->open_flags & O_TRUNC) {
-       if ((status = mdb_drop(slmdb->txn, slmdb->dbi, 0)) != 0)
+       if ((status = mdb_drop(slmdb->txn, slmdb->dbi, 0)) != 0) {
+           mdb_txn_abort(slmdb->txn);
+           slmdb->txn = 0;
            return (status);
+       }
        if ((slmdb->slmdb_flags & SLMDB_FLAG_BULK) == 0) {
-           if ((status = mdb_txn_commit(slmdb->txn)) != 0)
-               return (status);
+           status = mdb_txn_commit(slmdb->txn);
            slmdb->txn = 0;
+           if (status != 0)
+               return (status);
        }
     } else if ((slmdb->lmdb_flags & MDB_RDONLY) != 0
               || (slmdb->slmdb_flags & SLMDB_FLAG_BULK) == 0) {
@@ -582,11 +586,15 @@ int     slmdb_put(SLMDB *slmdb, MDB_val *mdb_key,
      * Do the update.
      */
     if ((status = mdb_put(txn, slmdb->dbi, mdb_key, mdb_value, flags)) != 0) {
-       mdb_txn_abort(txn);
        if (status != MDB_KEYEXIST) {
+           mdb_txn_abort(txn);
            if ((status = slmdb_recover(slmdb, status)) == 0)
                status = slmdb_put(slmdb, mdb_key, mdb_value, flags);
            SLMDB_API_RETURN(slmdb, status);
+       } else {
+           /* Abort non-bulk transaction only. */
+           if (slmdb->txn == 0)
+               mdb_txn_abort(txn);
        }
     }