From: Wietse Venema Date: Sun, 13 Jun 2021 05:00:00 +0000 (-0500) Subject: postfix-3.5.11 X-Git-Tag: v3.5.11^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96a37d83ffc685d03375a7802834759c93447242;p=thirdparty%2Fpostfix.git postfix-3.5.11 --- diff --git a/postfix/HISTORY b/postfix/HISTORY index 3bc1dc74a..9c36cb4a9 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -24926,3 +24926,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. diff --git a/postfix/README_FILES/BDAT_README b/postfix/README_FILES/BDAT_README index 2dc1df35c..124880409 100644 --- a/postfix/README_FILES/BDAT_README +++ b/postfix/README_FILES/BDAT_README @@ -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. diff --git a/postfix/html/BDAT_README.html b/postfix/html/BDAT_README.html index b8feeeb14..271aa06b7 100644 --- a/postfix/html/BDAT_README.html +++ b/postfix/html/BDAT_README.html @@ -51,7 +51,7 @@ 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 diff --git a/postfix/proto/BDAT_README.html b/postfix/proto/BDAT_README.html index 60f0d1fa1..7839904ae 100644 --- a/postfix/proto/BDAT_README.html +++ b/postfix/proto/BDAT_README.html @@ -51,7 +51,7 @@ 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 diff --git a/postfix/src/global/mail_params.c b/postfix/src/global/mail_params.c index 76d7c75ee..3f5d940c0 100644 --- a/postfix/src/global/mail_params.c +++ b/postfix/src/global/mail_params.c @@ -834,6 +834,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. diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index 9ebb46eaa..a3bc58ea5 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -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.5.10" +#define MAIL_RELEASE_DATE "20210613" +#define MAIL_VERSION_NUMBER "3.5.11" #ifdef SNAPSHOT #define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff --git a/postfix/src/util/slmdb.c b/postfix/src/util/slmdb.c index cee054619..823d94033 100644 --- a/postfix/src/util/slmdb.c +++ b/postfix/src/util/slmdb.c @@ -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); } }