From: Wietse Venema
Date: Sat, 16 Mar 2013 05:00:00 +0000 (-0500)
Subject: postfix-2.11-20130316
X-Git-Tag: v2.11.0-RC1~51
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f62ba28458b110dc8b07507561bae69e9393228;p=thirdparty%2Fpostfix.git
postfix-2.11-20130316
---
diff --git a/postfix/HISTORY b/postfix/HISTORY
index d0d817ed3..1f3a451f6 100644
--- a/postfix/HISTORY
+++ b/postfix/HISTORY
@@ -18248,12 +18248,20 @@ Apologies for any names omitted.
Bugfix: an error handler for smtp_tls_policy_maps lookups
was never invoked. File: smtp/smtp_session.c.
+20130212
+
+ Cleanup: logfile message formatting (X: subject_CN=X,
+ issuer_CN=X, fingerprint=X, pkey_fingerprint=X). File:
+ tls/tls_client.c.
+
20130315
Feature: preliminary LMDB (memory-mapped persistent file)
- support by Howard Chu. This feature has a number of unexpected
- limitations and is therefore "snapshot only", i.e. it will
- not be part of a stable release. Files: proto/postconf.proto,
+ support by Howard Chu. This feature has unexpected limitations
+ that don't exist with other Postfix databases, and is
+ therefore "snapshot only", i.e. it will not be part of a
+ stable release without further changes to the Postfix LMDB
+ client or the Postfix dictionary API. Files: proto/postconf.proto,
proto/LMDB_README.html, proto/DATABASE_README.html,
- util/dict_lmdb.[hc], util/dict_open.c, global/mkmap_lmdb.[hc],
- global/mkmap_open.c, postconf/postconf.c.
+ proto/INSTALL.html util/dict_lmdb.[hc], util/dict_open.c,
+ global/mkmap_lmdb.[hc], global/mkmap_open.c, postconf/postconf.c.
diff --git a/postfix/README_FILES/AAAREADME b/postfix/README_FILES/AAAREADME
index 7a93a6ba4..0017b3d81 100644
--- a/postfix/README_FILES/AAAREADME
+++ b/postfix/README_FILES/AAAREADME
@@ -48,6 +48,7 @@ LLooookkuupp ttaabblleess ((ddaattaabbaasseess))
* DB_README: Berkeley DB Howto
* CDB_README: CDB Howto
* LDAP_README: LDAP Howto
+ * LMDB_README: LMDB Howto
* MEMCACHE_README: Memcache Howto
* MYSQL_README: MySQL Howto
* PCRE_README: PCRE Howto
diff --git a/postfix/README_FILES/LMDB_README b/postfix/README_FILES/LMDB_README
index 7d422e0a3..dfd131373 100644
--- a/postfix/README_FILES/LMDB_README
+++ b/postfix/README_FILES/LMDB_README
@@ -18,8 +18,11 @@ This document describes:
3. Missing pthread library trouble.
- Caution: the current Postfix LMDB client has unexpected limitations. For
- this reason, LMDB support is not part of the stable Postfix release.
+Caution:
+ The current Postfix LMDB client has unexpected limitations that don't exist
+ with other Postfix databases. For this reason, LMDB support will not be
+ part of the stable Postfix release without further changes to the Postfix
+ LMDB client or the Postfix dictionary API.
BBuuiillddiinngg PPoossttffiixx wwiitthh OOppeennLLDDAAPP LLMMDDBB ssuuppppoorrtt
@@ -64,62 +67,90 @@ information is available at http://highlandsun.com/hyc/mdb/.
LLiimmiittaattiioonnss ooff PPoossttffiixx LLMMDDBB ddaattaabbaasseess..
- * UUnneexxppeecctteedd ppoossttmmaapp//ppoossttaalliiaass ""ddaattaabbaassee ffuullll"" eerrrroorrss..
+UUnneexxppeecctteedd ppoossttmmaapp((11))//ppoossttaalliiaass((11)) ""ddaattaabbaassee ffuullll"" eerrrroorrss..
- Even if the "postmap filename" command succeeds, the exact same command,
- with the exact same input data, may fail subsequently with an MDB_MAP_FULL
- error. The reason is that unlike other Postfix databases such as "hash" or
- "btree",
+Problem:
+ Even if the "postmap lmdb:filename" command succeeds, the exact same
+ command (with the exact same input data) may fail subsequently with an
+ MDB_MAP_FULL error. This problem does not exist with other Postfix
+ databases.
- o LMDB databases have a hard size limit (configured with the
- lmdb_map_size configuration parameter).
+Background:
+ LMDB databases have a hard size limit (configured with the lmdb_map_size
+ configuration parameter).
- o The Postfix LMDB database client does not implement the "truncate"
- operation. Instead it saves all store requests to a transaction (which
- takes up space in addition to the existing data), and commits the
- transaction when the database is closed. Only then can the space for
- old data be reused.
+ When executing "postmap lmdb:filename", the Postfix LMDB database client
+ does not truncate the database file. Instead it saves the "drop" request
+ and subsequent "store" requests to a transaction (which takes up space in
+ addition to the existing data), and commits the transaction when it closes
+ the database. Only then can the space for old data be reused.
- This postmap(1) or postalias(1) command failure does not affect Postfix
- availability, because the old data still exists in the database.
+Impact:
+ This failure does not affect Postfix availability, because the old data
+ still exists in the database.
- To recover, increase the lmdb_map_size limit in main.cf, and retry the
- postmap(1) or postalias(1) command.
+Recovery:
+ Increase the lmdb_map_size limit in main.cf, and retry the postmap(1) or
+ postalias(1) command.
+
+PPoossttffiixx ddaaeemmoonn ""ddaattaabbaassee ffuullll"" eerrrroorrss..
- * PPoossttffiixx ddaaeemmoonn ""ddaattaabbaassee ffuullll"" eerrrroorrss..
+Problem:
+ "database full" errors with daemon programs such as postscreen(8), tlsmgr
+ (8) or verify(8). This problem does not exist with other Postfix databases.
- Unfortunately, "database full" problems will affect Postfix availability
- with daemon programs such as postscreen(8), tlsmgr(8) or verify(8). These
- daemon programs will continue to fail until someone increases the
- lmdb_map_size parameter value. Meanwhile, mail processing comes to a halt.
+Impact:
+ Postfix does not process mail until someone fixes the problem.
- * NNoonn--oobbvviioouuss rreeccoovveerryy ffrroomm aa ccoorrrruupptteedd ddaattaabbaassee..
+Recovery:
+ Increase the lmdb_map_size limit in main.cf, and "reload" Postfix.
- Unlike other Postfix databases such as "hash" or "btree", you can't rebuild
- a corrupted LMDB database simply by running postmap(1) or postalias(1), as
- those commands will crash, too.
+NNoonn--oobbvviioouuss rreeccoovveerryy wwiitthh ppoossttmmaapp((11))//ppoossttaalliiaass((11)) ffrroomm aa ccoorrrruupptteedd ddaattaabbaassee..
+Problem:
+ You cannot rebuild a corrupted LMDB database simply by running postmap(1)
+ or postalias(1). This problem does not exist with other Postfix databases.
+
+Background:
The reason for this limitation is that the Postfix LMDB database client
- does not implement the database "truncate" operation. Instead it tries to
- save all store requests to a transaction for later processing. That is
- obviously not possible with a corrupted database file.
-
- To recover, you must first delete the ".lmdb" file by hand, and only then
- you can retry the postmap(1) or postalias(1) command.
-
- * IInnccoommppaattiibbiilliittyy wwiitthh ttllssmmggrr((88))..
-
- The Postfix LMDB database client breaks tlsmgr(8) TLS session cache
- management. Specifically, it breaks how tlsmgr(8) clears its TLS session
- cache databases upon start-up, it breaks how tlsmgr(8) looks up new TLS
- session cache entries, and it breaks how tlsmgr(8) automatically recovers
- from a corrupted database file.
-
- The reason for these limitations is that the Postfix LMDB database client
- does not implement the database "truncate" operation. Instead it saves all
- store requests to a transaction which it commits only when the database is
- closed. Therefore, tlsmgr(8) will never find any entries that it stores
- after opening its TLS session cache databases. And when the database
- becomes corrupted, tlsmgr(8) will keep crashing until someone removes the
- file ".lmdb" file by hand.
+ does not truncate the database file. Instead it attempts to save the "drop"
+ request and subsequent "store" requests to a transaction for later
+ processing. That is obviously not possible with a corrupted database file.
+
+Recovery:
+ First delete the ".lmdb" file by hand, then rebuild the file with the
+ postmap(1) or postalias(1) command.
+
+IInnccoommppaattiibbiilliittyy wwiitthh ttllssmmggrr((88))..
+
+Problem:
+ The Postfix LMDB database client never commits any tlsmgr(8) transaction.
+ This problem does not exist with other Postfix databases.
+
+Background:
+ Instead, it creates a single transaction that accumulates a "drop" request
+ and all tlsmgr(8) "store" requests that are made during the lifetime of the
+ process.
+
+Solution:
+ This requires changes to the Postfix dictionary API, or to the Postfix LMDB
+ database client.
+
+Problem:
+ The Postfix LMDB database client breaks how tlsmgr(8) automatically
+ recovers from a corrupted database file. This problem does not exist with
+ other Postfix databases.
+
+Background:
+ The Postfix LMDB database client does not truncate the database file.
+ Instead it attempts to create a transaction which obviously is not possible
+ when the database file is corrupted.
+
+Impact:
+ The tlsmgr(8) process will keep crashing until someone removes the ".lmdb"
+ file.
+
+Recovery:
+ Remove the the ".lmdb" file by hand, and wait until the tlsmgr(8) process
+ restarts.
diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES
index 94a1a46ea..64fee86b6 100644
--- a/postfix/RELEASE_NOTES
+++ b/postfix/RELEASE_NOTES
@@ -17,7 +17,8 @@ before proceeding.
Major changes with snapshot 20130315
====================================
-Perliminary LMDB support by Howard Chu. This implementation has
-unexpected limitations that make it a poor fit, and for this reason
-the code is "snapshot only", i.e. it will not be part of the stable
-release. See LMDB_README for details.
+Preliminary LMDB support by Howard Chu. This implementation has
+unexpected limitations that don't exist with other Postfix databases,
+and therefore the code is "snapshot only", i.e. it will not be part
+of the stable release without further changes to the Postfix LMDB
+client or the Postfix dictionary API. See LMDB_README for details.
diff --git a/postfix/WISHLIST b/postfix/WISHLIST
index 1f5052d1e..8ef201348 100644
--- a/postfix/WISHLIST
+++ b/postfix/WISHLIST
@@ -8,6 +8,15 @@ Wish list:
Spellcheck and double-word check.
+ It would be nice if the result from one table lookup could
+ serve as input for another (e.g. virtual aliases before the
+ list of valid recipients). For this to work the magical
+ (bare user, domain only, etc.) lookups need to become a
+ table property, not a property of the client context.
+
+ It would be nice if "bare username" lookup is not hard-coded
+ for domains in the local address class.
+
Don't forget Apple's code donation for fetching mail from
IMAP server.
diff --git a/postfix/html/LMDB_README.html b/postfix/html/LMDB_README.html
index df4e32d83..e6f1bb984 100644
--- a/postfix/html/LMDB_README.html
+++ b/postfix/html/LMDB_README.html
@@ -39,10 +39,12 @@ LMDB support.
- Caution: the current Postfix LMDB client has unexpected limitations. For this reason,
-LMDB support is not part of the stable Postfix release.
-
+ - Caution:
-
The current Postfix LMDB client
+has unexpected limitations that don't
+exist with other Postfix databases. For this reason, LMDB support
+will not be part of the stable Postfix release without further
+changes to the Postfix LMDB client or the Postfix dictionary API.
+
@@ -109,81 +111,114 @@ undefined reference to `pthread_mutex_lock'
More information is available at
http://highlandsun.com/hyc/mdb/.
-
-
-
+
--
Unexpected postmap/postalias "database full" errors.
+ Unexpected postmap(1)/postalias(1) "database full" errors.
- Even if the "postmap filename" command succeeds, the exact same
-command, with the exact same input data, may fail subsequently with
-an MDB_MAP_FULL error. The reason is that unlike other Postfix
-databases such as "hash" or "btree",
+
-
+- Problem:
-
Even if the "postmap lmdb:filename"
+command succeeds, the exact same command (with the exact same input
+data) may fail subsequently with an MDB_MAP_FULL error. This problem
+does not exist with other Postfix databases.
--
LMDB databases have a hard size limit (configured with the
+
- Background:
+
+-
+
+
LMDB databases have a hard size limit (configured with the
lmdb_map_size configuration parameter).
--
The Postfix LMDB database client does not implement the
-"truncate" operation. Instead it saves all store requests to a
-transaction (which takes up space in addition to the existing data),
-and commits the transaction when the database is closed. Only then
-can the space for old data be reused.
+ When executing "postmap lmdb:filename", the Postfix LMDB database
+client does not truncate the database file. Instead it saves the
+"drop" request and subsequent "store" requests to a transaction
+(which takes up space in addition to the existing data), and commits
+the transaction when it closes the database. Only then can the
+space for old data be reused.
-
+
- This postmap(1) or postalias(1) command failure does not affect
-Postfix availability, because the old data still exists in the
-database.
+- Impact:
-
This failure does not affect Postfix
+availability, because the old data still exists in the database.
+
- To recover, increase the lmdb_map_size limit in main.cf, and
-retry the postmap(1) or postalias(1) command.
+- Recovery:
-
Increase the lmdb_map_size limit in
+main.cf, and retry the postmap(1) or postalias(1) command.
+
-
-
Postfix daemon "database full" errors.
+
- Unfortunately, "database full" problems will affect Postfix
-availability with daemon programs such as postscreen(8), tlsmgr(8)
-or verify(8). These daemon programs will continue to fail until
-someone increases the lmdb_map_size parameter value. Meanwhile,
-mail processing comes to a halt.
+ Postfix daemon "database full" errors.
- -
Non-obvious recovery from a corrupted database.
-
+
- Unlike other Postfix databases such as "hash" or "btree", you
-can't rebuild a corrupted LMDB database simply by running postmap(1)
-or postalias(1), as those commands will crash, too.
-
- The reason for this limitation is that the Postfix LMDB database
-client does not implement the database "truncate" operation. Instead
-it tries to save all store requests to a transaction for later
-processing. That is obviously not possible with a corrupted database
-file.
-
- To recover, you must first delete the ".lmdb" file by hand, and
-only then you can retry the postmap(1) or postalias(1) command.
-
-
-
-
Incompatibility with tlsmgr(8).
-
- The Postfix LMDB database client breaks tlsmgr(8) TLS session
-cache management. Specifically, it breaks how tlsmgr(8) clears its
-TLS session cache databases upon start-up, it breaks how tlsmgr(8)
-looks up new TLS session cache entries, and it breaks how tlsmgr(8)
-automatically recovers from a corrupted database file.
-
-
The reason for these limitations is that the Postfix LMDB
-database client does not implement the database "truncate" operation.
-Instead it saves all store requests to a transaction which it commits
-only when the database is closed. Therefore, tlsmgr(8) will never
-find any entries that it stores after opening its TLS session cache
-databases. And when the database becomes corrupted, tlsmgr(8) will
-keep crashing until someone removes the file ".lmdb" file by hand.
-
+- Problem:
-
"database full" errors with daemon
+programs such as postscreen(8), tlsmgr(8) or verify(8). This problem
+does not exist with other Postfix databases.
-
+ Impact: Postfix does not process mail until
+someone fixes the problem.
+
+ Recovery: Increase the lmdb_map_size limit in
+main.cf, and "reload" Postfix.
+
+
+
+ Non-obvious recovery with postmap(1)/postalias(1)
+from a corrupted database.
+
+
+
+- Problem:
-
You cannot rebuild a corrupted LMDB
+database simply by running postmap(1) or postalias(1). This problem
+does not exist with other Postfix databases.
+
+- Background:
-
The reason for this limitation is
+that the Postfix LMDB database client does not truncate the database
+file. Instead it attempts to save the "drop" request and subsequent
+"store" requests to a transaction for later processing. That is
+obviously not possible with a corrupted database file.
+
+- Recovery:
-
First delete the ".lmdb" file by hand,
+then rebuild the file with the postmap(1) or postalias(1) command.
+
+
+
+
+ Incompatibility with tlsmgr(8).
+
+
+
+- Problem:
-
The Postfix LMDB database client never
+commits any tlsmgr(8) transaction. This problem does not exist with
+other Postfix databases.
+
+- Background:
-
Instead, it creates a single
+transaction that accumulates a "drop" request and all tlsmgr(8)
+"store" requests that are made during the lifetime of the process.
+
+
+- Solution:
-
This requires changes to the Postfix
+dictionary API, or to the Postfix LMDB database client.
+
+- Problem:
-
The Postfix LMDB database client breaks
+how tlsmgr(8) automatically recovers from a corrupted database file.
+This problem does not exist with other Postfix databases.
+
+- Background:
-
The Postfix LMDB database client
+does not truncate the database file. Instead it attempts to create
+a transaction which obviously is not possible when the database
+file is corrupted.
+
+- Impact:
-
The tlsmgr(8) process will keep crashing
+until someone removes the ".lmdb" file.
+
+- Recovery:
-
Remove the the ".lmdb" file by hand,
+and wait until the tlsmgr(8) process restarts.
+
+