From 3e160e27e4686620d16477a9ea9cf00141e52ce7 Mon Sep 17 00:00:00 2001
From: Daniel Baumann
Date: Sat, 13 Apr 2024 10:41:51 +0200
Subject: Adding upstream version 3.9.0.
Signed-off-by: Daniel Baumann
---
.indent.pro | 3 +
HISTORY | 777 ++++++++++++++++++++--
INSTALL | 44 +-
Makefile.in | 9 +-
README_FILES/AAAREADME | 2 +
README_FILES/ADDRESS_CLASS_README | 76 ++-
README_FILES/ADDRESS_REWRITING_README | 223 ++++---
README_FILES/COMPATIBILITY_README | 64 +-
README_FILES/DATABASE_README | 5 +-
README_FILES/DEPRECATION_README | 270 ++++++++
README_FILES/INSTALL | 44 +-
README_FILES/LOCAL_RECIPIENT_README | 2 +-
README_FILES/MAILLOG_README | 10 +
README_FILES/MILTER_README | 6 +-
README_FILES/MONGODB_README | 188 ++++++
README_FILES/POSTSCREEN_README | 4 +-
README_FILES/TLS_README | 120 ++--
RELEASE_NOTES | 334 ++++++----
RELEASE_NOTES-3.8 | 128 ++++
WISHLIST | 29 +-
conf/access | 4 +-
conf/aliases | 162 ++---
conf/canonical | 49 +-
conf/dynamicmaps.cf | 1 +
conf/generic | 10 +-
conf/header_checks | 66 +-
conf/main.cf | 4 +-
conf/post-install | 28 +-
conf/postfix-files | 7 +
conf/postfix-script | 21 +-
conf/relocated | 10 +-
conf/virtual | 202 +++---
html/ADDRESS_CLASS_README.html | 83 ++-
html/ADDRESS_REWRITING_README.html | 159 +++--
html/COMPATIBILITY_README.html | 96 +--
html/DATABASE_README.html | 9 +-
html/DEPRECATION_README.html | 411 ++++++++++++
html/INSTALL.html | 3 +
html/LOCAL_RECIPIENT_README.html | 3 +-
html/MAILLOG_README.html | 10 +
html/MILTER_README.html | 2 +-
html/MONGODB_README.html | 263 ++++++++
html/Makefile.in | 6 +-
html/POSTSCREEN_README.html | 4 +-
html/TLS_README.html | 164 +++--
html/access.5.html | 4 +-
html/aliases.5.html | 14 +-
html/canonical.5.html | 30 +-
html/cleanup.8.html | 98 +--
html/dnsblog.8.html | 4 +-
html/generic.5.html | 17 +-
html/header_checks.5.html | 59 +-
html/index.html | 4 +
html/lmtp.8.html | 248 +++----
html/local.8.html | 234 +++----
html/mailq.1.html | 8 +-
html/makedefs.1.html | 6 +-
html/master.5.html | 13 +-
html/master.8.html | 8 +-
html/mongodb_table.5.html | 215 ++++++
html/mysql_table.5.html | 188 +++---
html/newaliases.1.html | 8 +-
html/pcre_table.5.html | 8 +-
html/pgsql_table.5.html | 13 +
html/pipe.8.html | 106 +--
html/postcat.1.html | 2 +-
html/postconf.1.html | 170 ++---
html/postconf.5.html | 771 ++++++++++++++++-----
html/postdrop.1.html | 2 +-
html/postfix-manuals.html | 6 +-
html/postfix.1.html | 5 +-
html/postkick.1.html | 2 +-
html/postlock.1.html | 2 +-
html/postlog.1.html | 7 +
html/postlogd.8.html | 13 +-
html/postscreen.8.html | 32 +-
html/postsuper.1.html | 2 +-
html/posttls-finger.1.html | 12 +-
html/proxymap.8.html | 2 +-
html/qmgr.8.html | 4 +-
html/qmqpd.8.html | 2 +-
html/regexp_table.5.html | 8 +-
html/relocated.5.html | 9 +-
html/sendmail.1.html | 8 +-
html/smtp-source.1.html | 43 +-
html/smtp.8.html | 248 +++----
html/smtpd.8.html | 298 +++++----
html/socketmap_table.5.html | 2 +-
html/tlsproxy.8.html | 111 ++--
html/trivial-rewrite.8.html | 21 +-
html/virtual.5.html | 159 ++---
makedefs | 6 +-
man/Makefile.in | 7 +-
man/man1/makedefs.1 | 1 +
man/man1/postcat.1 | 2 +-
man/man1/postconf.1 | 17 +-
man/man1/postdrop.1 | 2 +-
man/man1/postfix.1 | 3 +-
man/man1/postkick.1 | 2 +-
man/man1/postlock.1 | 2 +-
man/man1/postlog.1 | 6 +
man/man1/postsuper.1 | 6 +-
man/man1/posttls-finger.1 | 11 +-
man/man1/sendmail.1 | 7 +-
man/man1/smtp-source.1 | 42 +-
man/man5/access.5 | 4 +-
man/man5/aliases.5 | 14 +-
man/man5/canonical.5 | 22 +-
man/man5/generic.5 | 6 +-
man/man5/header_checks.5 | 46 +-
man/man5/master.5 | 12 +-
man/man5/mongodb_table.5 | 259 ++++++++
man/man5/mysql_table.5 | 18 +
man/man5/pcre_table.5 | 11 +-
man/man5/pgsql_table.5 | 11 +
man/man5/postconf.5 | 719 +++++++++++++++-----
man/man5/regexp_table.5 | 11 +-
man/man5/relocated.5 | 6 +-
man/man5/socketmap_table.5 | 2 +-
man/man5/virtual.5 | 22 +-
man/man8/cleanup.8 | 24 +-
man/man8/dnsblog.8 | 3 +-
man/man8/local.8 | 31 +-
man/man8/master.8 | 8 +-
man/man8/pipe.8 | 5 +
man/man8/postlogd.8 | 14 +-
man/man8/postscreen.8 | 32 +-
man/man8/proxymap.8 | 2 +-
man/man8/qmgr.8 | 2 +-
man/man8/qmqpd.8 | 2 +-
man/man8/smtp.8 | 99 +--
man/man8/smtpd.8 | 21 +-
man/man8/tlsproxy.8 | 6 +
man/man8/trivial-rewrite.8 | 17 +-
mantools/check-see-postconf-d-output | 6 +
mantools/check-snapshot-nonprod | 13 +
mantools/dehtml | 6 +-
mantools/postlink | 12 +
postfix-install | 9 +-
proto/ADDRESS_CLASS_README.html | 83 ++-
proto/ADDRESS_REWRITING_README.html | 157 +++--
proto/COMPATIBILITY_README.html | 96 +--
proto/DATABASE_README.html | 7 +-
proto/DEPRECATION_README.html | 411 ++++++++++++
proto/INSTALL.html | 3 +
proto/LOCAL_RECIPIENT_README.html | 3 +-
proto/MAILLOG_README.html | 10 +
proto/MILTER_README.html | 2 +-
proto/MONGODB_README.html | 263 ++++++++
proto/Makefile.in | 16 +
proto/POSTSCREEN_README.html | 4 +-
proto/TLS_README.html | 164 +++--
proto/access | 4 +-
proto/aliases | 14 +-
proto/canonical | 22 +-
proto/generic | 6 +-
proto/header_checks | 46 +-
proto/master | 12 +-
proto/mongodb_table | 240 +++++++
proto/mysql_table | 18 +
proto/pcre_table | 11 +-
proto/pgsql_table | 11 +
proto/postconf.proto | 738 +++++++++++++++-----
proto/regexp_table | 11 +-
proto/relocated | 6 +-
proto/socketmap_table | 2 +-
proto/stop | 35 +-
proto/stop.double-cc | 2 +
proto/stop.double-history | 87 ++-
proto/stop.double-install-proto-text | 4 +
proto/stop.double-proto-html | 118 +++-
proto/stop.spell-cc | 42 +-
proto/stop.spell-history | 20 +
proto/stop.spell-proto-html | 17 +
proto/virtual | 22 +-
src/bounce/bounce_notify_util.c | 13 +-
src/bounce/with-msgid-with-filter-no-thread.ref | 2 +-
src/bounce/with-msgid-with-filter-with-thread.ref | 2 +-
src/cleanup/Makefile.in | 44 +-
src/cleanup/cleanup.c | 24 +-
src/cleanup/cleanup_addr.c | 6 +-
src/cleanup/cleanup_init.c | 2 +
src/cleanup/cleanup_message.c | 5 +
src/cleanup/cleanup_milter.c | 9 +
src/cleanup/cleanup_milter.in18a | 8 +
src/cleanup/cleanup_milter.in18b | 8 +
src/cleanup/cleanup_milter.in18c | 9 +
src/cleanup/cleanup_milter.in18d | 8 +
src/cleanup/cleanup_milter.ref18a1 | 1 +
src/cleanup/cleanup_milter.ref18a2 | 29 +
src/cleanup/cleanup_milter.ref18b1 | 1 +
src/cleanup/cleanup_milter.ref18b2 | 27 +
src/cleanup/cleanup_milter.ref18c1 | 1 +
src/cleanup/cleanup_milter.ref18c2 | 29 +
src/cleanup/cleanup_milter.ref18d1 | 1 +
src/cleanup/cleanup_milter.ref18d2 | 27 +
src/cleanup/test-queue-file18 | Bin 0 -> 653 bytes
src/dns/Makefile.in | 26 +-
src/dns/dns_lookup.c | 8 +-
src/dns/dns_rr_test.c | 433 ++++++++++++
src/dns/mxonly_test.ref | 2 +-
src/dns/no-mx.ref | 6 +-
src/dns/test_dns_lookup.c | 5 +-
src/dnsblog/dnsblog.c | 3 +-
src/global/Makefile.in | 31 +-
src/global/dict_ldap.c | 4 +-
src/global/dict_mongodb.c | 570 ++++++++++++++++
src/global/dict_mongodb.h | 43 ++
src/global/dict_mysql.c | 87 ++-
src/global/dict_pgsql.c | 73 +-
src/global/dict_sqlite.c | 2 +-
src/global/mail_addr_find.c | 4 +-
src/global/mail_date.c | 9 +-
src/global/mail_dict.c | 4 +
src/global/mail_params.c | 19 +-
src/global/mail_params.h | 32 +-
src/global/mail_proto.h | 7 +
src/global/mail_version.h | 4 +-
src/global/maillog_client.c | 2 +-
src/global/maps.c | 12 +-
src/global/wildcard_inet_addr.c | 2 +-
src/local/command.c | 5 +-
src/local/local.c | 31 +-
src/master/master.c | 12 +-
src/master/master_ent.c | 8 +-
src/oqmgr/qmgr_deliver.c | 4 +-
src/pipe/pipe.c | 9 +
src/postalias/postalias.c | 2 +-
src/postcat/postcat.c | 6 +-
src/postconf/Makefile.in | 85 ++-
src/postconf/postconf.c | 40 +-
src/postconf/postconf.h | 7 +-
src/postconf/postconf_dbms.c | 49 +-
src/postconf/postconf_unused.c | 112 +++-
src/postconf/postconf_user.c | 16 +-
src/postconf/test29.ref | 3 +
src/postconf/test72.ref | 3 +
src/postconf/test73.ref | 3 +
src/postconf/test74.ref | 3 +
src/postconf/test75.ref | 3 +
src/postconf/test76.ref | 9 +
src/postdrop/postdrop.c | 2 +-
src/postfix/postfix.c | 3 +-
src/postkick/postkick.c | 2 +-
src/postlock/postlock.c | 2 +-
src/postlog/postlog.c | 6 +
src/postlogd/postlogd.c | 14 +-
src/postmap/postmap.c | 2 +-
src/postqueue/showq_json.c | 79 +--
src/postscreen/postscreen.c | 32 +-
src/postscreen/postscreen_smtpd.c | 16 +-
src/postsuper/postsuper.c | 2 +-
src/posttls-finger/posttls-finger.c | 64 +-
src/proxymap/proxymap.c | 38 +-
src/qmgr/qmgr.c | 2 +-
src/qmgr/qmgr_deliver.c | 4 +-
src/qmqpd/qmqpd.c | 2 +-
src/sendmail/sendmail.c | 7 +-
src/smtp/lmtp_params.c | 2 +
src/smtp/smtp.c | 136 ++--
src/smtp/smtp.h | 2 +
src/smtp/smtp_addr.c | 2 +-
src/smtp/smtp_params.c | 2 +
src/smtp/smtp_proto.c | 2 +
src/smtp/smtp_sasl_glue.c | 4 +-
src/smtp/smtp_tls_policy.c | 56 +-
src/smtpd/Makefile.in | 11 +-
src/smtpd/smtpd.c | 117 +++-
src/smtpd/smtpd.h | 4 +
src/smtpd/smtpd_check.c | 177 ++---
src/smtpd/smtpd_check_backup.ref | 1 +
src/smtpd/smtpd_deprecated.in | 20 +
src/smtpd/smtpd_deprecated.ref | 35 +
src/smtpd/smtpd_exp.ref | 10 +-
src/smtpd/smtpd_sasl_glue.c | 4 +
src/smtpd/smtpd_state.c | 1 +
src/smtpstone/smtp-source.c | 94 ++-
src/tls/tls.h | 31 +-
src/tls/tls_client.c | 157 ++++-
src/tls/tls_dane.c | 77 ++-
src/tls/tls_fprint.c | 53 +-
src/tls/tls_misc.c | 129 +++-
src/tls/tls_proxy.h | 13 +-
src/tls/tls_proxy_client_print.c | 1 +
src/tls/tls_proxy_client_scan.c | 3 +-
src/tls/tls_proxy_context_print.c | 4 +
src/tls/tls_proxy_context_scan.c | 4 +-
src/tls/tls_server.c | 73 +-
src/tls/tls_verify.c | 18 +-
src/tlsproxy/tlsproxy.c | 11 +
src/trivial-rewrite/resolve.c | 2 +-
src/trivial-rewrite/trivial-rewrite.c | 17 +-
src/util/Makefile.in | 47 +-
src/util/argv.c | 57 +-
src/util/argv.h | 2 +
src/util/casefold.c | 2 +-
src/util/dict_inline.c | 2 +-
src/util/dict_thash.c | 6 +-
src/util/dict_utf8.c | 4 +-
src/util/inet_prefix_top.c | 1 +
src/util/logwriter.c | 34 +-
src/util/logwriter.h | 1 +
src/util/midna_domain.c | 4 +-
src/util/parse_utf8_char.h | 122 ++++
src/util/printable.c | 162 ++++-
src/util/quote_for_json.c | 218 ++++++
src/util/readlline.c | 231 ++++++-
src/util/stringops.h | 3 +
src/util/sys_defs.h | 7 +
src/util/valid_hostname.c | 13 +-
src/util/valid_hostname.in | 6 +
src/util/valid_hostname.ref | 10 +
src/util/valid_utf8_string.c | 247 +++++--
src/util/vstream.c | 34 +-
src/xsasl/xsasl_cyrus_server.c | 4 +
src/xsasl/xsasl_server.c | 9 +-
316 files changed, 12719 insertions(+), 3748 deletions(-)
create mode 100644 README_FILES/DEPRECATION_README
create mode 100644 README_FILES/MONGODB_README
create mode 100644 RELEASE_NOTES-3.8
create mode 100644 html/DEPRECATION_README.html
create mode 100644 html/MONGODB_README.html
create mode 100644 html/mongodb_table.5.html
create mode 100644 man/man5/mongodb_table.5
create mode 100755 mantools/check-see-postconf-d-output
create mode 100755 mantools/check-snapshot-nonprod
create mode 100644 proto/DEPRECATION_README.html
create mode 100644 proto/MONGODB_README.html
create mode 100644 proto/mongodb_table
create mode 100644 src/cleanup/cleanup_milter.in18a
create mode 100644 src/cleanup/cleanup_milter.in18b
create mode 100644 src/cleanup/cleanup_milter.in18c
create mode 100644 src/cleanup/cleanup_milter.in18d
create mode 100644 src/cleanup/cleanup_milter.ref18a1
create mode 100644 src/cleanup/cleanup_milter.ref18a2
create mode 100644 src/cleanup/cleanup_milter.ref18b1
create mode 100644 src/cleanup/cleanup_milter.ref18b2
create mode 100644 src/cleanup/cleanup_milter.ref18c1
create mode 100644 src/cleanup/cleanup_milter.ref18c2
create mode 100644 src/cleanup/cleanup_milter.ref18d1
create mode 100644 src/cleanup/cleanup_milter.ref18d2
create mode 100644 src/cleanup/test-queue-file18
create mode 100644 src/dns/dns_rr_test.c
create mode 100644 src/global/dict_mongodb.c
create mode 100755 src/global/dict_mongodb.h
create mode 100644 src/postconf/test72.ref
create mode 100644 src/postconf/test73.ref
create mode 100644 src/postconf/test74.ref
create mode 100644 src/postconf/test75.ref
create mode 100644 src/postconf/test76.ref
create mode 100644 src/smtpd/smtpd_deprecated.in
create mode 100644 src/smtpd/smtpd_deprecated.ref
create mode 100644 src/util/parse_utf8_char.h
create mode 100644 src/util/quote_for_json.c
diff --git a/.indent.pro b/.indent.pro
index 4ba45d0..8ee03db 100644
--- a/.indent.pro
+++ b/.indent.pro
@@ -88,6 +88,7 @@
-TDICT_LDAP
-TDICT_LMDB
-TDICT_MC
+-TDICT_MONGODB
-TDICT_MYSQL
-TDICT_NI
-TDICT_NIS
@@ -248,6 +249,7 @@
-TNVTABLE_INFO
-TOPTIONS
-TPCF_DBMS_INFO
+-TPCF_DEPR_PARAM_INFO
-TPCF_EVAL_CTX
-TPCF_MASTER_EDIT_REQ
-TPCF_MASTER_ENT
@@ -411,6 +413,7 @@
-TXSASL_SERVER_IMPL
-TXSASL_SERVER_IMPL_INFO
-Tbind_props
+-Tbson_iter_t
-Tcipher_probe_t
-Td2i_X509_t
-Tdane_digest
diff --git a/HISTORY b/HISTORY
index 3892273..959e0fa 100644
--- a/HISTORY
+++ b/HISTORY
@@ -27056,14 +27056,28 @@ Apologies for any names omitted.
sometimes incomplete) lookup table configuration info with
a reference to the corresponding *_table(5) manpage.
+20230417
+
+ Cleanup: in the MySQL client configuration file, the default
+ characterset is now configurable with the "charset" attribute.
+ Previously, the default was determined by the MySQL
+ implementation (utf8mb4 as of MySQL 8.0, latin1 with older
+ versions). This setting implicitly controls the collation
+ order. Files: proto/mysql_table, global/dict_mysql.c.
+
20230418
- Bugfix defect (introduced: Postfix 3.2): the MySQL client
- could return "not found" instead of "error" (for example,
- resulting in a 5XX SMTP status instead of 4XX) during the
- time that all MySQL server connections were turned down
- after error. Found during code maintenance. File:
- global/dict_mysql.c.
+ Bugfix (introduced: Postfix 3.2): the MySQL client could
+ return "not found" instead of "error" (for example, resulting
+ in a 5XX SMTP status instead of 4XX) during the time that
+ all MySQL server connections were turned down after error.
+ Found during code maintenance. File: global/dict_mysql.c.
+
+20230419
+
+ Cleanup: in the PostgreSQL client, cosmetic changes to make
+ the code easier to maintain (in preparation for adding new
+ functionality). File: global/dict_pgsql.c.
20230428
@@ -27091,6 +27105,74 @@ Apologies for any names omitted.
...' with a single service definition 'name2 type2 ...'.
Problem reported by SATOH Fumiyasu. File: postconf/postconf_edit.c.
+20230503
+
+ Documentation: clarified the relationship between
+ smtp_bind*address, inet_interfaces, and system-chosen source
+ IP addresses for outbound SMTP/LMTP connections. File:
+ proto/postconf.proto.
+
+20230504
+
+ Documentation: clarified the relationships between
+ local_transport, virtual_mailbox_transport, relay_transport,
+ default_transport, relay_host, sender_dependent_relayhost_maps,
+ sender_dependent_default_transport_maps, and their precedences
+ when determining a delivery transport or next-hop destination,
+ in ADDRESS_REWRITING_README and in the text that defines
+ individual configuration features. Files: proto/postconf.proto,
+ proto/ADDRESS_REWRITING_README.html.
+
+20230505
+
+ Documentation: clarified the differences between virtual
+ and local aliasing, in four places. Files: mantools/postlink,
+ proto/postconf.proto, proto/ADDRESS_REWRITING_README.html.
+ cleanup/cleanup.c, local/local.c, smtpd/smtpd.c.
+
+ Usability: improved error message when master.cf specifies
+ a wild-card network listener (like "smtp inet ... smtpd")
+ while inet_interfaces is empty. File: master/master_ent.c.
+
+ More documentation updates for local aliasing versus virtual
+ aliasing. Files: proto/aliases, proto/virtual, postfix/postfix.c.
+
+20230506
+
+ Cleanup: simplified the master code to handle an empty
+ inet_interfaces setting. it is now closer to the original
+ code. Also documented that wildcard_inet_addr_list() will
+ not return an empty list. Files: master/master_ent.c,
+ global/own_inet_addr_list.c.
+
+20230507
+
+ Documentation: fine tuning of text about local aliasing
+ versus virtual aliasing. Files: proto/postconf.proto,
+ proto/aliases, proto/virtual, proto/ADDRESS_REWRITING_README.html.
+
+20230508
+
+ Documentation: more fine tuning of text about local aliasing
+ versus virtual aliasing, and inet_interfaces. Files:
+ proto/postconf.proto, proto/aliases, proto/virtual,
+ proto/ADDRESS_REWRITING_README.html.
+
+20230516
+
+ Bugfix (defect introduced: Postfix 3.4): the postlog(1)
+ command created a logfile with permissions 0644, but the
+ postlogd(8) daemon created it with permissions 0600, for
+ example after "postfix logrotate". The discrepancy is now
+ eliminated, and the permissions when creating a file are
+ now configurable with the "maillog_file_permissions"
+ parameter, default 0600 for backwards compatibility. Files:
+ mantools/postlink, proto/MAILLOG_README.html, proto/postconf.proto,
+ global/mail_params.c, global/mail_params.h, global/Makefile.in,
+ master/master.c, postlog/postlog.c, postlogd/postlogd.c,
+ util/logwriter.c, util/logwriter.h, util/Makefile.in,
+ util/vstream.c.
+
20230517
Bugfix (defect introduced: Postfix 3.8) the posttls-finger
@@ -27101,6 +27183,17 @@ Apologies for any names omitted.
20230519
+ Cleanup: fixed postconf tests for dynamically-linked builds.
+ File: postconf/Makefile.in.
+
+20230521
+
+ Bitrot: library error messages in SMTP server tests. File:
+ smtpd/Makefile.in.
+
+ Cleanup: removed some "the the" instances. Files:
+ proto/MILTER_README.html proto/stop.double-proto-html.
+
Bitrot: preliminary support for OpenSSL configuration files,
primarily OpenSSL 1.1.1b and later. This introduces new
parameters "tls_config_file" and "tls_config_name", which
@@ -27117,13 +27210,13 @@ Apologies for any names omitted.
20230523
- Cleanup: use TLS_CLIENT_PARAMS to pass the OpensSSL 'init'
- configurations. This information is independent from the
- client or server TLS context, and therefore does not belong
- in tls_*_init() or tls_*_start() calls. The tlsproxy(8)
- server uses TLS_CLIENT_PARAMS to report differences between
- its own global TLS settings, and those from its clients.
- Files: posttls-finger/posttls-finger.c, smtp/smtp.c,
+ Cleanup: use TLS_CLIENT_PARAMS to pass the OpenSSL 'init'
+ configuration settings. These are global, i.e. apply to all
+ client TLS contexts, and they do not belong in tls_client_init()
+ or tls_client_start() calls. The tlsproxy(8) server uses
+ TLS_CLIENT_PARAMS information to warn about differences
+ between its own global TLS settings, and those from its
+ clients. Files: posttls-finger/posttls-finger.c, smtp/smtp.c,
smtp/smtp_proto.c, tls/tls.h, tls/tls_proxy_client_misc.c,
tls/tls_proxy_client_print.c, tls/tls_proxy_client_scan.c,
tls/tls_proxy.h, tlsproxy/tlsproxy.c.
@@ -27131,15 +27224,27 @@ Apologies for any names omitted.
20230524
Cleanup: reverted cosmetic-only changes to minimize the
- patch footprint for OpenSSL INI file support; updated daemon
- manpages with the new tls_config_file and tls_config_name
- configuration parameters. Files: smtp/smtp.c, smtpd/smtpd.c,
- tls/tls_client.c, tls/tls.h, tls/tls_server.c, tlsproxy/tlsproxy.c,
+ patch footprint for OpenSSL INI file support for stable
+ releases; updated daemon manpages with the new tls_config_file
+ and tls_config_name configuration parameters. Files:
+ smtp/smtp.c, smtpd/smtpd.c, tls/tls_client.c, tls/tls.h,
+ tls/tls_server.c, tlsproxy/tlsproxy.c,
+
+20230526
+
+ Documentation: clarified address class descriptions; added
+ the availability of back-ported OpenSSL INI file support
+ in stable releases. Files: proto/ADDRESS_CLASS_README.html,
+ proto/postconf.proto smtp/smtp.c, smtpd/smtpd.c,
+ tlsproxy/tlsproxy.c.
+
+ Security: in the Postfix SMTP daemon, improved pipelining
+ detection and reporting; added code to detect illegal command
+ pipelining before the server greeting. File: smtpd/smtpd.c.
20230529
- Cleanup: made OpenSSL 'default' INI file support error
- handling consistent with OpenSSL default behavior. Viktor
+ Cleanup: error handling for OpenSSL INI file support. Viktor
Dukhovni. Files: proto/postconf.proto, tls/tls_misc.c.
20230602
@@ -27150,22 +27255,64 @@ Apologies for any names omitted.
non-default tls_config_xxx settings. File: tls/tls_misc.c.
Cleanup: added a multiple initialization guard in the
- tls_library_init() function, and made an initialization
- error sticky. File: tls/tls_misc.c.
+ tls_library_init() function, and made an initialization error
+ sticky. File: tls/tls_misc.c.
-20230605
+20230603
Security: new parameter smtpd_forbid_unauth_pipelining
- (default: no) to disconnect remote SMTP clients that violate
+ (default: yes) to disconnect remote SMTP clients that violate
RFC 2920 (or 5321) command pipelining constraints. Files:
global/mail_params.h, smtpd/smtpd.c, proto/postconf.proto.
+20230610
+
+ Trouble shooting: when the postfix UID or postdrop GID is
+ also used by a non-Postfix account, log the UID or GID.
+ File: global/mail_params.c.
+
+20240703
+
+ Typo fix by Trent W. Buck. Files: proto/postconf.proto, proto/stop.
+
+20230807
+
+ Feature: optional support to request a raw public key instead
+ of a public-key certificate when a) the Postfix SMTP server
+ requests TLS authentication from a remote SMTP client, or
+ b) when the Postfix SMTP client initiates a TLS handshake
+ with a remote SMTP server. See RELEASE_NOTES for details.
+ Viktor Dukhovni. Files: mantools/postlink, proto/TLS_README.html,
+ proto/postconf.proto, RELEASE_NOTES, global/mail_params.h,
+ posttls-finger/posttls-finger.c, smtp/lmtp_params.c,
+ smtp/smtp.c, smtp/smtp.h, smtp/smtp_params.c, smtp/smtp_proto.c,
+ smtp/smtp_tls_policy.c, smtpd/smtpd.c, smtpd/smtpd_check.c,
+ tls/tls.h, tls/tls_client.c, tls/tls_dane.c, tls/tls_fprint.c,
+ tls/tls_misc.c, tls/tls_proxy.h, tls/tls_proxy_client_print.c,
+ tls/tls_proxy_client_scan.c, tls/tls_proxy_context_print.c,
+ tls/tls_proxy_context_scan.c, tls/tls_server.c, tls/tls_verify.c,
+ tlsproxy/tlsproxy.c.
+
+20230808
+
+ Documentation loose ends. Files: proto/postconf.proto,
+ RELEASE_NOTES.
+
20230815
- Bugfix (bug introduced: 20140218): when opportunistic TLS fails
- during or after the handshake, don't require that a probe
- message spent a minimum time-in-queue before falling back to
- plaintext. Problem reported by Serg. File: smtp/smtp.h.
+ Bugfix (defect introduced: 20140218): when an address
+ verification probe fails during or after an opportunistic
+ TLS handshake, immediately fall back to plaintext, without
+ enforcing a minimum time-in-queue. Problem reported by Serg.
+ File: smtp/smtp.h.
+
+20230820
+
+ Feature: smtp_sasl_password_result_delimiter, for the rare
+ case that the ":" character needs to be part of the username.
+ mantools/postlink, proto/postconf.proto, global/mail_params.h,
+ smtp/lmtp_params.c, smtp/smtp.c, smtp/smtp_params.c,
+ smtp/smtp_sasl_glue.c.
20230819
@@ -27179,12 +27326,81 @@ Apologies for any names omitted.
*.other.example IN A 10.0.0.1
*.other.example IN TLSA ..certificate info...
- Such syntax is blesed in RFC 1034 section 4.3.3.
+ Such syntax is blessed in RFC 1034 section 4.3.3.
This problem was reported first in the context of TLSA
record lookups. Files: util/valid_hostname.[hc],
dns/dns_lookup.c.
+20230831
+
+ Documentation: clarify the scope of local_recipient_maps.
+ Files: proto/LOCAL_RECIPIENT_README.html, proto/postconf.proto.
+
+ Documentation loose ends. Files: HISTORY, dns/dns_lookup.c.
+
+20230901
+
+ Feature: force_mime_input_conversion (default: no) to
+ convert content that claims to be 8-bit into quoted-printable,
+ before header_checks, body_checks, Milters, and before
+ after-queue content filters. The typical use case is an MTA
+ that applies this conversion before signing outbound messages,
+ so that the signatures will remain valid when a message is
+ later delivered to an MTA that does not announce 8BITMIME
+ support, or when a message line exceeds the SMTP length
+ limit. Files: global/mail_params.c, cleanup/cleanup_message.c,
+ cleanup/cleanup.c, cleanup/cleanup_init.c, proto/postconf.proto,
+ mantools/postlink.
+
+20230902
+
+ Cleanup: renamed enforce_mime_input_conversion to
+ force_mime_input_conversion.
+
+20230903
+
+ Cleanup: removed support for MySQL < 4.0 (released 2003),
+ removed the deprecated mysql_escape_string() call, added
+ the preferred mysql_real_escape_string_quote() call, and
+ added error handling for the unlikely case that the legacy
+ mysql_real_escape_string() returns an error. File:
+ global/dict_mysql.c.
+
+20230906
+
+ Documentation: the postconf(5) manpage did not document
+ that the force_mime_input_conversion feature was introduced
+ in Postfix 3.9. Viktor Dukhovni. File: proto/postconf.proto.
+
+20230912
+
+ Cleanup: record the use of a raw public key in Received:
+ headers, when the Postfix SMTP server or the remote SMTP
+ client presents a raw public key. Viktor Dukhovni. File:
+ smtpd/smtpd.c.
+
+20230923
+
+ Documentation: updated descriptions of the postscreen_*_ttl
+ and postscreen_dnsbl_allowlist_threshold parameters. Files:
+ proto/postconf.proto, postscreen/postscreen.c.
+
+20230916
+
+ Documentation: fixed missing and misplaced quotes in "see
+ 'postconf -d' output". Reported by наб. Files: Makefile.in,
+ mantools/check-see-postconf-d-output, proto/postconf.proto,
+ global/maillog_client.c, master/master.c, smtp/smtp.c,
+ smtpd/smtpd.c.
+
+20230917
+
+ Documentation: added a note to smtp_tls_security_level and
+ smtp_tls_policy_maps, that the level "MAY" will fall back
+ to plaintext after TLS failure, when a message has spent
+ minimal_backoff_time in the mail queue. File: proto/postconf.proto.
+
20230929
Bugfix (defect introduced Postfix 2.5, 20080104): the Postfix
@@ -27193,6 +27409,35 @@ Apologies for any names omitted.
error in TLS wrappermode. Reported by Andreas Kinzler. File:
smtpd/smtpd.c.
+20230923
+
+ This changes the smtp-source test program, to avoid the
+ need to configure a large number of "valid" recipient
+ addresses in Postfix, by using a recipient address extension
+ in the form of a sequence number. The change is to append
+ the optional recipient address sequence number to the
+ recipient address localpart, instead of prepending it. To
+ use that sequence number as a recipient address extension,
+ specify an explicit address delimiter in the address
+ localpart, as in "-t localpart+@domain" or "-t localpart+"
+ where "+" is the Postfix recipient address delimiter. File:
+ smtpstone/smtp-source.c.
+
+20230924
+
+ Cleanup: simplified the smtp-source numbered recipient
+ implementation and documentation. File: smtpstone/smtp-source.c.
+
+ Documentation: added smtp_balance_inet_protocols to the
+ text with smtp_address_preference caveats. File:
+ proto/postconf.proto.
+
+20230926
+
+ Documentation: added a section to smtp_balance_inet_protocols
+ to address the problem that servers may flag mail received
+ over IPv6 as more spammy. File: proto/postconf.proto.
+
20231006
Usability: the Postfix SMTP server now attempts to log the
@@ -27204,6 +27449,62 @@ Apologies for any names omitted.
on code by Jozsef Kadlecsik. Files: xsasl/xsasl_server.c,
xsasl/xsasl_cyrus_server.c, smtpd/smtpd_sasl_glue.c.
+20231008
+
+ Cleanup: enforce stricter UTF8 checks in printable(). Factor
+ out the UTF8 parser, so that it can be shared between
+ valid_utf8_string() and printable(). Wietse Venema, with
+ tests by Viktor Dukhovni. Files: util/valid_utf8_string.c,
+ util/printable.c, util/parse_utf8_char.h, util/printable.in,
+ util/printable.ref.
+
+20231010
+
+ Cleanup: printable() uses once again a single-pass algorithm.
+ Converted printable() test files to built-in test cases with
+ proper logging, and removed the printable() test files and
+ git metadata. Added similar tests for the valid_utf8_string()
+ function. Files: util/valid_utf8_string.c, util/printable.c,
+ util/parse_utf8_char.h, util/Makefile.in.
+
+20231011
+
+ Documentation: fixed some instances of "." instead of ",".
+ Files: proto/POSTSCREEN_README.html, proto/socketmap_table.
+
+ Cleanup: finer-grained unit tests for valid_utf8_string().
+ File: util/valid_utf8_string.c.
+
+ Style: converted failed test reports to "got before want"
+ order, and converted tests to "fail before pass" order.
+ Files: util/valid_utf8_string.c, util/printable.c.
+
+ Cleanup: added a valid_utf8_stringz() function to simplify
+ most calls to validate null-terminated strings, eliminating
+ the runtime cost and code maintenance cost of 17 strlen()
+ calls. Files: src/bounce/bounce_notify_util.c,
+ src/cleanup/cleanup_addr.c, src/global/dict_ldap.c,
+ src/global/dict_mysql.c, src/global/dict_pgsql.c,
+ src/global/dict_sqlite.c, src/oqmgr/qmgr_deliver.c,
+ src/postalias/postalias.c, src/postmap/postmap.c,
+ src/postscreen/postscreen_smtpd.c, src/qmgr/qmgr_deliver.c,
+ src/smtpd/smtpd.c, src/smtpd/smtpd_check.c,
+ src/trivial-rewrite/resolve.c, src/util/casefold.c,
+ src/util/dict_inline.c, src/util/dict_thash.c,
+ src/util/dict_utf8.c, src/util/midna_domain.c,
+ src/util/printable.c, src/util/stringops.h,
+ src/util/valid_utf8_string.c.
+
+ Cleanup: added unit tests to the readlline module, with
+ multiline input that contains embedded comments, input that
+ contains a null byte, text not ending in newline. File:
+ readlline.c.
+
+20231024
+
+ Cleanup: emit place holder text when no SASL authentication
+ failure reason is available. File: smtpd/smtpd_sasl_glue.c.
+
20231026
Bugfix (defect introduced: Postfix 2.11): in forward_path,
@@ -27213,39 +27514,15 @@ Apologies for any names omitted.
a configured recipient delimiter value. Reported by Tod
A. Sandman. Files: proto/postconf.proto, local/local_expand.c.
-20240109
-
- Security (outbound SMTP smuggling): with the default setting
- "cleanup_replace_stray_cr_lf = yes" Postfix will replace
- stray or characters in message content with a
- space character. This prevents Postfix from enabling
- outbound (remote) SMTP smuggling, and it also makes evaluation
- of Postfix-added DKIM etc. signatures independent from how
- a remote mail server handles stray or characters.
- Files: global/mail_params.h, cleanup/cleanup.c,
- cleanup/cleanup_message.c, mantools/postlink, proto/postconf.proto.
+20231027
-20240112
+ Cleanup: missing 'smtpd_tls_enable_rpk' parameter definition
+ in test driver. File: smtpd/smtpd_check.c.
- Security (inbound SMTP smuggling): with "smtpd_forbid_bare_newline
- = normalize" (default "no" for Postfix < 3.9), the Postfix
- SMTP server requires the standard End-of-DATA sequence
- ., and otherwise allows command or message
- content lines ending in the non-standard , processing
- them as if the client sent the standard .
+20231030
- The alternative setting, "smtpd_forbid_bare_newline = reject"
- will reject any command or message that contains a bare
- , and is more likely to cause problems with legitimate
- clients.
-
- For backwards compatibility, local clients are excluded by
- default with "smtpd_forbid_bare_newline_exclusions =
- $mynetworks".
-
- Files: mantools/postlink, proto/postconf.proto,
- global/mail_params.h, global/smtp_stream.c, global/smtp_stream.h,
- smtpd/smtpd.c, smtpd/smtpd_check.[hc].
+ Cleanup: explicit %.100s limits for client-controlled strings
+ in SASL error logging. File: smtpd/smtpd_sasl_glue.c.
20231102
@@ -27260,6 +27537,55 @@ Apologies for any names omitted.
Cleanup: Postfix SMTP server response with an empty
authentication failure reason. File: smtpd/smtpd_sasl_glue.c.
+ Cleanup: proxymap error message when the service name is
+ not "proxymap" or "proxywrite". File: proxymap/proxymap.c.
+
+20231109
+
+ Portability: MariaDB emulates MySQL >= 5.7.6, but does not
+ implement mysql_real_escape_string_quote(). Fix by Levente
+ Birta. File: global/dict_mysql.c.
+
+ Portability: more precise MYSQL_VERSION_ID check. File:
+ global/dict_mysql.c.
+
+20231112
+
+ Robustness: don't loop on an 'unfinished' queue file that
+ still has its all-zero SIZE record. File: postcat/postcat.c.
+
+20231126
+
+ Cleanup: implementation and documentation for the selection
+ of SMTP versus LMTP client protocol and parameters, based
+ on process name. Files: smtp/smtp.c, global/mail_proto.h,
+ proto/postconf.proto.
+
+ Cleanup: documented (in proxymap source code) the complexities
+ of determining the optimal proxywrite service process limit,
+ and make the 'invalid' proxymap service name error message
+ more similar to the error message for an invalid SMTP/LMTP
+ client process name. File: proxymap/proxymap.c.
+
+20231127
+
+ Documentation: in the stock main.cf file, mailbox_command
+ uses $default_privs, not $default_user. Vijay Sarvepalli,
+ Cert/CC. File: conf/main.cf.
+
+20231202
+
+ Bugfix: posttls-finger certificate match expectations for
+ opportunistic DANE incorrectly defaulted to ("nexthop",
+ "hostname") instead of ("nexthop", "dot-nexthop"), when no
+ TLSA records were found. Viktor Dukhovni. File: posttls-finger.c.
+
+20231204
+
+ Documentation: updated comments on address validation in
+ smtpd_check.c, making them consistent with the implementation.
+ File: smtpd/smtpd_check.c.
+
20231208
Bugfix (defect introduced: Postfix 3.1, date: 20151128):
@@ -27267,6 +27593,17 @@ Apologies for any names omitted.
character as \uXXXX. Found during code maintenance. File:
postqueue/showq_json.c.
+20231209
+
+ Feature: the local(8) delivery agent exports an ENVID
+ environment variable with the RFC 3461 envelope ID if
+ available. Files: local/command.c, local/local.c,
+ proto/postconf.proto.
+
+ Feature: the pipe(8) delivery agent supports an ${envid}
+ command-line attribute that expands to the RFC 3461 envelope
+ ID if available. File: pipe/pipe.c.
+
20231211
Cleanup: posttls-finger certificate match expectations for
@@ -27289,31 +27626,296 @@ Apologies for any names omitted.
Received: header) when handling requests from a Milter to
delete or update an existing header. Problem report by
Carlos Velasco. This change was verified to have no effect
- on requests from a Milter to add or insert a header. File:
- cleanup/cleanup_milter.c.
+ on requests from a Milter to add or insert a header. Files:
+ cleanup/cleanup_milter.c, cleanup/Makefile.in,
+ cleanup/test-queue-file18, cleanup/cleanup_milter.in18[a-d],
+ cleanup/cleanup_milter.ref18[a-d][12].
+
+20231221
+
+ Security: with "smtpd_forbid_bare_newline = yes" (the default
+ for Postfix 3.9), reply with "Error: bare received"
+ and disconnect when an SMTP client sends a line ending in
+ , violating the RFC 5321 requirement that lines must
+ end in . This prevents SMTP smuggling attacks that
+ target a recipient at a Postfix server. For backwards
+ compatibility, local clients are excluded by default with
+ "smtpd_forbid_bare_newline_exclusions = $mynetworks". Files:
+ mantools/postlink, proto/postconf.proto, global/mail_params.h,
+ global/smtp_stream.c, global/smtp_stream.h, smtpd/smtpd.c.
+
+20240104
+
+ Cleanup: when the Postfix SMTP server rejects bare ,
+ log the helo, mail and rcpt information if available. Files:
+ smtpd/smtpd.c, smtpd/smtpd_check.c.
+
+ Cleanup: when the Postfix SMTP server rejects bare ,
+ keep reading message content after an unexpected .
+ or ., before responding. This increases the
+ likelihood that the client will actually see the Postfix
+ response and remove the attack from their mail queue. Files:
+ smtpd/smtpd.c, global/smtp_stream.[hc], global/cleanup_user.h.
+
+ Cleanup: added smtpd_forbid_bare_newline settings "reject"
+ and "normalize". The default setting "normalize" (and "yes")
+ will accept bare newlines from local or remote SMTP clients,
+ but if any DATA content line ends in , require the
+ standard End-of-DATA form . and skip
+ non-standard End-of-DATA forms. This may fail to receive
+ email from legitimate clients that send a mix of lines
+ ending in and . If such clients exist, they
+ need to be excluded with smtpd_forbid_bare_newline_exclusions.
+ Files: proto/postconf.proto, global/mail_params.h,
+ smtpd/smtpd.c.
+
+ Tooling: mantools/dehtml was breaking words in code examples,
+ causing false spellchecker errors. File: mantools/dehtml,
+ proto/stop.double-proto-html.
+
+20240105
+
+ Cleanup: don't spam the log with unexpected End-of-DATA
+ forms. Files: proto/postconf.proto, smtpd/smtpd.c,
+ RELEASE_NOTES.
+
+20240106
+
+ Inbound smuggling: with smtpd_forbid_bare_newline enabled,
+ do not "strip" extra characters before . This avoids
+ ambiguity when a client sends extra characters as in
+ .. There is no smuggling vulnerability
+ because there is no mail system will send the above
+ sequence (mail systems send .. instead).
+ But this change will silence some testing tools. More at
+ https://www.postfix.org/false-smuggling-claims.html. File:
+ global/smtp_stream.c.
+
+20240109
+
+ Outbound smuggling: with "cleanup_replace_stray_cr_lf =
+ yes" (the default) Postfix will replace stray or
+ characters in message content with a space character. This
+ prevents Postfix from enabling outbound (remote) SMTP
+ smuggling, and it also makes evaluation of Postfix-added
+ DKIM etc. signatures independent from how a remote mail
+ server handles stray or characters. Files:
+ global/mail_params.h, cleanup/cleanup.c, cleanup/cleanup_message.c,
+ mantools/postlink, proto/postconf.proto.
+
+20240110
+
+ Cleanup: the smtpd_forbid_bare_newline settings "normalize"
+ and "reject" are now more similar. Both now unconditionally
+ require the standard End-of-DATA sequence ..
+ Files: smtpd/smtpd.c, proto/postconf.proto, RELEASE_NOTES.
+
+20240112
+
+ Cleanup: updated comments and identifiers because the bare
+ newline handling has evolved. Files: global/smtp_stream.[hc],
+ Files: global/smtp_stream.[hc], smtpd/smtpd.c.
+
+20240116
+
+ Reverted some changes after postfix-3.9-20240112, and updated
+ documentation.
+
+20240121
+
+ Documentation: "smtpd_forbid_bare_newline = reject" will
+ reject email from services that use BDAT to send MIME text
+ containing a bare newline (RFC 3030 Section 3 requires
+ canonical MIME format for text message types, defined in
+ RFC 2045 Sections 2.7 and 2.8) Files: proto/postconf.proto,
+ RELEASE_NOTES.
+
+ Baseline for back porting the SMTP smuggling fixes to Postfix
+ 3.8.5, 3.7.10, 3.6.14, and 3.5.24.
20240124
+ Feature: with "smtpd_forbid_bare_newline = note", the Postfix
+ SMTP server notes in the log if it received any lines with
+ bare LF. Otherwise, "note" is like "normalize". The
+ information is formatted as "disconnect from name[address]
+ ... notes=bare_lf". The new value is expected to become
+ a list of comma-separated names. Files: smtpd/smtpd.[hc].
+
+ Cleanup: require that a stable release disables SNAPSHOT
+ and NONPROD features. File: mantools/check-snapshot-nonprod.
+
+ Bugfix (defect introduced: Postfix 3.4): the SMTP server's
+ BDAT command handler could be tricked to read $message_size_limit
+ bytes into memory. Found during code maintenance. File:
+ smtpd/smtpd.c.
+
+ Feature: never too late, an SMTP server HELP command that
+ lists the implemented commands. Some commands may be
+ implemented but not available due to smtpd_discard_ehlo_keywords
+ or access control limitations. Files: smtpd/smtpd.[hc],
+ util/argv.[hc].
+
Workaround: tlsmgr logfile spam. Some OS lies under load:
it says that a socket is readable, then it says that the
socket has unread data, and then it says that read returns
EOF, causing Postfix to spam the log with a warning message.
File: tlsmgr/tlsmgr.c.
- Bugfix (defect introduced: Postfix 3.4): the SMTP server's
- BDAT command handler could be tricked to read $message_size_limit
- bytes into memory. Found during code maintenance. File:
- smtpd/smtpd.c.
+20240125
+
+ Cleanup: tlsmgr.c fix 20240124. File: tlsmgr/tlsmgr.c.
+
+ Documentation: updated obsolete "CONFIGURATION PARAMETERS"
+ summaries in Postfix manpages, with current text from the
+ postconf(5) manpage. Files: proto/generic, proto/header_checks,
+ proto/aliases, proto/canonical, proto/relocated,
+ postdrop/postdrop.c, postsuper/postsuper.c, sendmail/sendmail.c,
+ dnsblog/dnsblog.c, postkick/postkick.c, postlock/postlock.c,
+ qmgr/qmgr.c, qmqpd/qmqpd.c, trivial-rewrite/trivial-rewrite.c.
+
+20240129
+
+ Documentation: be more precise about server lookups with
+ MX or SRV records. File: smtp/smtp.c.
+
+ Documentation: postlogd is not a short-running process. It
+ wil keep running until it reaches the max_idle limit. File:
+ postlogd/postlogd.c.
+
+ Cleanup (no semantic change): in the mysql: and pgsql:
+ clients, made the hard-coded idle and retry timer settings
+ configurable, and updated the mysql_table(5) and pgsql_table(5)
+ manpages. Files: global/dict_mysql.c, global/dict_pgsql.c,
+ proto/mysql_table, proto/pgsql_table.
+
+20230130
+
+ Reproducible build: added LC_ALL=C to the top of the makedefs
+ script.
+
+20240206
+
+ Documentation: in COMPATIBILITY_README, the descriptions
+ of smtpd_relay_restrictions and smtputf8_enable were grouped
+ under the wrong compatibility level value. Reported by Rune
+ Philosof. File: proto/COMPATIBILITY_README.html.
+
+ Compatibility: the RFC 5322 date and time specification
+ recommends (i.e. should) that a single space be used in
+ each place that FWS appears. To avoid a breaking change,
+ Postfix now formats numerical days as two-digit days, i.e.
+ days 1-9 have a leading zero instead of a leading space.
+ Files: util/sys_defs.h global/mail_date.c.
+
+ Documentation: the post-install(1) manpage now lists
+ $config_directory/makedefs.out as one of the installed
+ files. File: postfix-install.
+
+20240208
+
+ Refactored the JSON string quoting function, so that it can
+ be shared between the postqueue command and the MongoDB
+ client implementation. Files: util.quote_for_json.c,
+ util/stringops.h, postqueue/showq_json.c.
+
+ MongoDB client support, contributed by Hamid Maadani, based
+ on earlier code by Stephan Ferraro. Files: conf/dynamicmaps.cf,
+ conf/postfix-files, makedefs, mantools/postlink,
+ proto/DATABASE_README.html, proto/Makefile.in,
+ proto/MONGODB_README.html, proto/mongodb_table,
+ global/dict_mongodb.c, global/dict_mongodb.h, global/mail_dict.c,
+ global/Makefile.in, postconf/Makefile.in, proto/INSTALL.html,
+ postfix/postfix.c.
20240209
Performance: eliminate worst-case behavior where the queue
- manager defers delivery to all destinations over a specific
+ manager deferred delivery to all destinations over a specific
delivery transport, after only a single delivery agent
failure. The scheduler now throttles one destination, and
allows deliveries to other destinations to keep making
progress. Files: *qmgr/qmgr_deliver.c.
+20240210
+
+ Documentation: introductory text for SMTP and LMTP lookup
+ strategies. File: smtp/smtp.c.
+
+20240211
+
+ Documentation: updated the text for the new "notes=" attribute
+ in SMTP server "disconnect" logging. File: proto/postconf.proto.
+
+20240212
+
+ Documentation: emphasize that email address patterns and
+ host name/address patterns for indexed etc. files are really
+ for indexed etc. files. File: proto/access.
+
+ Documentation: mail_date(3) manpage. File: global/mail_date.c.
+
+20240213
+
+ Tests: updated tests that had suffered from bit rot. Files:
+ bounce/with-msgid-with-filter-no-thread.ref,
+ bounce/with-msgid-with-filter-with-thread.ref,
+ src/dns/mxonly_test.ref, dns/no-mx.ref.
+
+ Logging: indicate which (usually, substring) lookups are
+ skipped. File: global/maps.c.
+
+20240215
+
+ Portability: Clang versions that predate support for the
+ C23 standard do not allow a declaration immediately after
+ a (switch) label. The workaround is to add a null statement
+ between label and declaration. File: global/dict_mongodb.c.
+
+ Documentation: minor edits. Files: proto/mongodb_README.html,
+ proto/mongodb_table.html.
+
+20240216
+
+ Documentation: dropped text about partial matches from the
+ check_{client,helo,sender,recipient,etrn}_access summaries,
+ deferring to the access(5) manpage for details, for consistency
+ with the check_xx_yy_access features. File: proto/postconf.proto.
+
+ Cleanup: missing mongodb checks in the postconf command,
+ missing mongodb under "postconf -m" manpage entry. Files:
+ postconf/postconf.c, postconf/postconf_dbms.c.
+
+20240218
+
+ Deprecation: the Postfix SMTP server logs a warning when
+ "permit_mx_backup" is used (support for restriction
+ "permit_mx_backup" will be removed from Postfix; instead,
+ use "relay_domains"). File: smtpd/smtpd_check.c.
+
+ Deprecation: the postconf command logs a warning when the
+ following parameters are specified in main.cf or master.cf:
+ xxx_use_tls, xxx_enforce_tls (use the corresponding
+ xxx_security_level setting instead); xxx_per_site (use the
+ corresponding xxx_policy_maps setting instead); disable_dns_lookups
+ (use smtp_dns_support_level instead); smtpd_tls_dh1024_param_file,
+ smtpd_tls_eecdh_grade (do not specify, leave at default).
+ Files: postconf/postconf.c, postconf/postconf_unused.c.
+ proto/postconf.proto.
+
+ Cleanup: add "postconf -q" option to avoid redundant warnings
+ about unused or deprecated parameter settings when upgrading
+ or installing Postfix. Such warnings are still logged with
+ the commands postfix start, start-fg, check, reload, or
+ status. Files: postconf/postconf.c, postconf/postconf_dbms.c,
+ postconf/postconf.h, conf/postfix-script, conf/post-install,
+ postfix-install.
+
+20240221
+
+ Documentation: the text for TLS loglevel 2 was incomplete.
+ File: proto/postconf.proto.
+
20240226
Safety: drop and log over-size DNS responses resulting in
@@ -27326,3 +27928,48 @@ Apologies for any names omitted.
restrictions. Files: dns/dns.h, dns/dns_lookup.c, dns/dns_rr.c,
dns/test_dns_lookup.c, posttls-finger/posttls-finger.c,
smtp/smtp_addr.c, smtpd/smtpd_check.c.
+
+20240227
+
+ Documentation: document the need to disable regular expression
+ special characters when using $name inside an inlined
+ pattern. Files: proto/pcre_table, proto/regexp_table.
+
+20240228
+
+ Cleanups. Fixed some dns_rr_create() calls in test code,
+ and reverted a workaround in the DNS record formatter;
+ files: dns/dns_rr_test.c, dns/dns_strrecord.c. Code formatting;
+ file: global/mail_addr_find.c. Added missing test reference;
+ file: postconf/test76.ref.
+
+20240229
+
+ Compatibility: moved the new DNS_RR.flags structure member
+ to the location of a "padding" hole (two bytes for ILP32
+ systems, 6 bytes for LP64). File: dns/dns.h.
+
+ Deprecation: removed permit_naked_ip_address, reject_maps_rbl,
+ and check_relay_domains. These have been logging deprecation
+ warnings since 2005 or earlier, and were removed from Postfix
+ documentation in 2004 (but who reads logs and documentation?).
+ Files: smtpd/smtpd_check.c, smtpd/smtpd_check_backup.ref,
+ smtpd/smtpd_exp.ref, smtpd/smtpd_deprecated.in,
+ smtpd/smtpd_deprecated.ref.
+
+20240302
+
+ Cleanup: fixed inconsistent formatting of deprecation warning
+ messages. Files: postconf/postconf_unused.c, postconf/test76.ref,
+ smtpd/smtpd_check.
+
+ Documentation: DEPRECATION_README suggests replacements for
+ features that will be removed or than have been removed.
+ Files: proto/DEPRECATION_README.html, conf/postfix-files,
+ html/index.html, proto/Makefile.in.
+
+20240305
+
+ Documentation: in the master.cf documentation, added text
+ for "quoting" a command-line argument that starts with "{".
+ File: proto/master.
diff --git a/INSTALL b/INSTALL
index 5939a99..90b1b2d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -376,27 +376,29 @@ whistles. Support for third-party databases etc. must be configured when
Postfix is compiled. The following documents describe how to build Postfix with
support for optional features:
- _____________________________________________________________
- |Optional feature |Document |Availability|
- |__________________________________|_____________|____________|
- |Berkeley DB database |DB_README |Postfix 1.0 |
- |__________________________________|_____________|____________|
- |LMDB database |LMDB_README |Postfix 2.11|
- |__________________________________|_____________|____________|
- |LDAP database |LDAP_README |Postfix 1.0 |
- |__________________________________|_____________|____________|
- |MySQL database |MYSQL_README |Postfix 1.0 |
- |__________________________________|_____________|____________|
- |Perl compatible regular expression|PCRE_README |Postfix 1.0 |
- |__________________________________|_____________|____________|
- |PostgreSQL database |PGSQL_README |Postfix 2.0 |
- |__________________________________|_____________|____________|
- |SASL authentication |SASL_README |Postfix 1.0 |
- |__________________________________|_____________|____________|
- |SQLite database |SQLITE_README|Postfix 2.8 |
- |__________________________________|_____________|____________|
- |STARTTLS session encryption |TLS_README |Postfix 2.2 |
- |__________________________________|_____________|____________|
+ ______________________________________________________________
+ |Optional feature |Document |Availability|
+ |__________________________________|______________|____________|
+ |Berkeley DB database |DB_README |Postfix 1.0 |
+ |__________________________________|______________|____________|
+ |LMDB database |LMDB_README |Postfix 2.11|
+ |__________________________________|______________|____________|
+ |LDAP database |LDAP_README |Postfix 1.0 |
+ |__________________________________|______________|____________|
+ |MongoDB database |MONGODB_README|Postfix 3.9 |
+ |__________________________________|______________|____________|
+ |MySQL database |MYSQL_README |Postfix 1.0 |
+ |__________________________________|______________|____________|
+ |Perl compatible regular expression|PCRE_README |Postfix 1.0 |
+ |__________________________________|______________|____________|
+ |PostgreSQL database |PGSQL_README |Postfix 2.0 |
+ |__________________________________|______________|____________|
+ |SASL authentication |SASL_README |Postfix 1.0 |
+ |__________________________________|______________|____________|
+ |SQLite database |SQLITE_README |Postfix 2.8 |
+ |__________________________________|______________|____________|
+ |STARTTLS session encryption |TLS_README |Postfix 2.2 |
+ |__________________________________|______________|____________|
Note: IP version 6 support is compiled into Postfix on operating systems that
have IPv6 support. See the IPV6_README file for details.
diff --git a/Makefile.in b/Makefile.in
index 474e9b5..4b1fb33 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -117,7 +117,8 @@ manpages:
# Some checks require a bin/postconf executable.
pre-release-checks: typo-check missing-proxy-read-maps-check \
postlink-check postfix-files-check check-spell-history \
- check-double-history check-table-proto
+ check-double-history check-table-proto check-see-postconf-d-output \
+ check-snapshot-nonprod
postfix-files-check:
mantools/check-postfix-files | diff /dev/null -
@@ -158,6 +159,12 @@ check-double-history:
check-table-proto:
mantools/check-table-proto | diff /dev/null -
+check-see-postconf-d-output:
+ mantools/check-see-postconf-d-output | diff /dev/null -
+
+check-snapshot-nonprod:
+ mantools/check-snapshot-nonprod
+
# The build-time shlib_directory setting must take precedence over
# the installed main.cf settings, otherwise we can't update an
# installed system from dynamicmaps=yes<->dynamicmaps=no or from
diff --git a/README_FILES/AAAREADME b/README_FILES/AAAREADME
index 9afa3b7..94d552e 100644
--- a/README_FILES/AAAREADME
+++ b/README_FILES/AAAREADME
@@ -15,6 +15,7 @@ GGeenneerraall ccoonnffiigguurraattiioonn
* SMTPUTF8_README: SMTPUTF8 Support
* MAILLOG_README: Postfix logging to file or stdout
* COMPATIBILITY_README: Backwards-Compatibility Safety Net
+ * DEPRECATION_README: Deprecated features and alternatives
* INSTALL: Installation from source code
PPrroobblleemm ssoollvviinngg
@@ -52,6 +53,7 @@ LLooookkuupp ttaabblleess ((ddaattaabbaasseess))
* LDAP_README: LDAP Howto
* LMDB_README: LMDB Howto
* MEMCACHE_README: Memcache Howto
+ * MONGODB_README: MongoDB Howto
* MYSQL_README: MySQL Howto
* PCRE_README: PCRE Howto
* PGSQL_README: PostgreSQL Howto
diff --git a/README_FILES/ADDRESS_CLASS_README b/README_FILES/ADDRESS_CLASS_README
index 7605aa2..774976e 100644
--- a/README_FILES/ADDRESS_CLASS_README
+++ b/README_FILES/ADDRESS_CLASS_README
@@ -25,18 +25,23 @@ important for the operation of Postfix.
An address class is defined by three items.
- * The list of domains that are a member of that address class: for example,
- all local domains, or all relay domains.
+ * The list of domains that are a member of that address class.
- * The default delivery transport for that address class. For example, the
- local, virtual or relay delivery transport (delivery transports are defined
- in master.cf). This helps to keep Postfix configurations simple, by
- avoiding the need for explicit routing information in transport maps.
+ Examples: all local domains, or all relay domains.
- * The list of valid recipient addresses for that address class. The Postfix
- SMTP server rejects invalid recipients with "User unknown in table". This helps to keep the Postfix queue free of
- undeliverable MAILER-DAEMON messages.
+ * The default delivery transport for domains in that address class.
+
+ Examples: local_transport or relay_transport (these point to services
+ defined in master.cf).
+
+ Benefit: this avoids the need for explicit routing information in transport
+ maps.
+
+ * The list of valid recipient addresses for that address class.
+
+ Benefit: the Postfix SMTP server rejects an invalid recipient with "User
+ unknown in table", and avoids sending a MAILER-
+ DAEMON message with backscatter spam.
WWhhaatt aaddddrreessss ccllaasssseess ddooeess PPoossttffiixx iimmpplleemmeenntt??
@@ -56,11 +61,11 @@ The local domain class.
also includes mail for user@[ipaddress] when the IP address is listed with
the inet_interfaces or proxy_interfaces parameters.
- * Valid recipient addresses are listed with the local_recipient_maps
- parameter, as described in LOCAL_RECIPIENT_README. The Postfix SMTP server
- rejects invalid recipients with "User unknown in local recipient table". If
- the local_recipient_maps parameter value is empty, then the Postfix SMTP
- server accepts any address in the local domain class.
+ * Valid recipient addresses for those domains are listed with the
+ local_recipient_maps parameter, as described in LOCAL_RECIPIENT_README. The
+ Postfix SMTP server rejects invalid recipients with "User unknown in local
+ recipient table". If the local_recipient_maps parameter value is empty,
+ then the Postfix SMTP server accepts any address in the local domain class.
* The mail delivery transport is specified with the local_transport
parameter. The default value is llooccaall::$$mmyyhhoossttnnaammee for delivery with the
@@ -69,20 +74,23 @@ The local domain class.
The virtual alias domain class.
* Purpose: hosted domains where each recipient address is aliased to an
- address in a different domain, for example, a local UNIX system account or
- a remote address. A virtual alias example is given in the VIRTUAL_README
- file.
+ address in a different domain class, for example, a local UNIX system
+ account or a remote address. A virtual alias example is given in the
+ VIRTUAL_README file.
* Domain names are listed in virtual_alias_domains. The default value is
$virtual_alias_maps for Postfix 1.1 compatibility.
- * Valid recipient addresses are listed with the virtual_alias_maps parameter.
- The Postfix SMTP server rejects invalid recipients with "User unknown in
- virtual alias table". The default value is $virtual_maps for Postfix 1.1
- compatibility.
+ * Valid recipient addresses for those domains are listed with the
+ virtual_alias_maps parameter. The Postfix SMTP server rejects invalid
+ recipients with "User unknown in virtual alias table". The default value is
+ $virtual_maps for Postfix 1.1 compatibility.
+
+ Note: for historical reasons, virtual_alias_maps apply to recipients in
+ all domain classes, not only the virtual alias domain class.
- * There is no mail delivery transport parameter. Every address must be
- aliased to an address in some other domain.
+ * There is no configurable mail delivery transport. Every address must be
+ aliased to an address in some other domain class.
The virtual mailbox domain class.
@@ -93,11 +101,11 @@ The virtual mailbox domain class.
* Domain names are listed with the virtual_mailbox_domains parameter. The
default value is $virtual_mailbox_maps for Postfix 1.1 compatibility.
- * Valid recipient addresses are listed with the virtual_mailbox_maps
- parameter. The Postfix SMTP server rejects invalid recipients with "User
- unknown in virtual mailbox table". If this parameter value is empty, the
- Postfix SMTP server accepts all recipients for domains listed in
- $virtual_mailbox_domains.
+ * Valid recipient addresses for those domains are listed with the
+ virtual_mailbox_maps parameter. The Postfix SMTP server rejects invalid
+ recipients with "User unknown in virtual mailbox table". If this parameter
+ value is empty, the Postfix SMTP server accepts all recipients for domains
+ listed in $virtual_mailbox_domains.
* The mail delivery transport is specified with the virtual_transport
parameter. The default value is vviirrttuuaall for delivery with the virtual(8)
@@ -113,11 +121,11 @@ The relay domain class.
* Domain names are listed with the relay_domains parameter.
- * Valid recipient addresses are listed with the relay_recipient_maps
- parameter. The Postfix SMTP server rejects invalid recipients with "User
- unknown in relay recipient table". If this parameter value is empty, the
- Postfix SMTP server accepts all recipients for domains listed with the
- relay_domains parameter.
+ * Valid recipient addresses for those domains are listed with the
+ relay_recipient_maps parameter. The Postfix SMTP server rejects invalid
+ recipients with "User unknown in relay recipient table". If this parameter
+ value is empty, the Postfix SMTP server accepts all recipients for domains
+ listed with the relay_domains parameter.
* The mail delivery transport is specified with the relay_transport
parameter. The default value is rreellaayy which is a clone of the smtp(8)
diff --git a/README_FILES/ADDRESS_REWRITING_README b/README_FILES/ADDRESS_REWRITING_README
index 78237b9..4c24287 100644
--- a/README_FILES/ADDRESS_REWRITING_README
+++ b/README_FILES/ADDRESS_REWRITING_README
@@ -51,8 +51,7 @@ Topics covered in this document:
* Address rewriting when mail is delivered
- o Resolve address to destination
- o Mail transport switch
+ o Resolve address to (transport, next-hop destination)
o Relocated users table
* Address rewriting with remote delivery
@@ -131,59 +130,57 @@ this document for the first time, skip forward to "Address rewriting when mail
is received". Once you've finished reading the remainder of this document, the
table will help you to quickly find what you need.
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- |AAddddrreessss |SSccooppee |DDaaeemmoonn |GGlloobbaall ttuurrnn--oonn |SSeelleeccttiivvee ttuurrnn--ooffff ccoonnttrrooll |
- |mmaanniippuullaattiioonn| | |ccoonnttrrooll | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Rewrite | |trivial-|append_at_myorigin, | |
- |addresses to|all mail|rewrite |append_dot_mydomain,|local_header_rewrite_clients,|
- |standard | |(8) |swap_bangpath, |remote_header_rewrite_domain |
- |form | | |allow_percent_hack | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Canonical | |cleanup | |receive_override_options, |
- |address |all mail|(8) |canonical_maps |local_header_rewrite_clients,|
- |mapping | | | |remote_header_rewrite_domain |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Address | |cleanup | |receive_override_options, |
- |masquerading|all mail|(8) |masquerade_domains |local_header_rewrite_clients,|
- | | | | |remote_header_rewrite_domain |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Automatic | |cleanup |always_bcc, | |
- |BCC |new mail|(8) |sender_bcc_maps, |receive_override_options |
- |recipients | | |recipient_bcc_maps | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Virtual |all mail|cleanup |virtual_alias_maps |receive_override_options |
- |aliasing | |(8) | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Resolve | |trivial-| | |
- |address to |all mail|rewrite |none |none |
- |destination | |(8) | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Mail | |trivial-| | |
- |transport |all mail|rewrite |transport_maps |none |
- |switch | |(8) | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Relocated | |trivial-| | |
- |users table |all mail|rewrite |relocated_maps |none |
- | | |(8) | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Generic |outgoing| | | |
- |mapping |SMTP |smtp(8) |smtp_generic_maps |none |
- |table |mail | | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Local alias |local | | | |
- |database |mail |local(8)|alias_maps |none |
- | |only | | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Local per- |local | | | |
- |user |mail |local(8)|forward_path |none |
- |.forward |only | | | |
- |files | | | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
- |Local catch-|local | | | |
- |all address |mail |local(8)|luser_relay |none |
- | |only | | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |AAddddrreessss |SSccooppee |DDaaeemmoonn |TTuurrnn--oonn ccoonnttrroollss |TTuurrnn--ooffff ccoonnttrroollss |
+ |mmaanniippuullaattiioonn| | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Rewrite | |trivial-|append_at_myorigin, | |
+ |addresses to|all mail|rewrite |append_dot_mydomain, swap_bangpath, |local_header_rewrite_clients,|
+ |standard | |(8) |allow_percent_hack |remote_header_rewrite_domain |
+ |form | | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Canonical | |cleanup | |receive_override_options, |
+ |address |all mail|(8) |canonical_maps |local_header_rewrite_clients,|
+ |mapping | | | |remote_header_rewrite_domain |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Address | |cleanup | |receive_override_options, |
+ |masquerading|all mail|(8) |masquerade_domains |local_header_rewrite_clients,|
+ | | | | |remote_header_rewrite_domain |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Automatic | |cleanup |always_bcc, sender_bcc_maps, | |
+ |BCC |new mail|(8) |recipient_bcc_maps |receive_override_options |
+ |recipients | | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Virtual |all mail|cleanup |virtual_alias_maps |receive_override_options |
+ |aliasing | |(8) | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Resolve | | |local_transport, virtual_transport, | |
+ |address to | |trivial-|relay_transport, default_transport, | |
+ |(transport, |all mail|rewrite |relayhost, |content_filter |
+ |next-hop | |(8) |sender_dependent_relayhost_maps, | |
+ |destination)| | |sender_dependent_default_transport_maps| |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Relocated | |trivial-| | |
+ |users table |all mail|rewrite |relocated_maps |none |
+ | | |(8) | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Generic |outgoing| | | |
+ |mapping |SMTP |smtp(8) |smtp_generic_maps |none |
+ |table |mail | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Local alias |local | | | |
+ |database |mail |local(8)|alias_maps |none |
+ | |only | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Local per- |local | | | |
+ |user |mail |local(8)|forward_path |none |
+ |.forward |only | | | |
+ |files | | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Local catch-|local | | | |
+ |all address |mail |local(8)|luser_relay |none |
+ | |only | | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
AAddddrreessss rreewwrriittiinngg wwhheenn mmaaiill iiss rreecceeiivveedd
@@ -492,6 +489,10 @@ transform " Firstname.Lastname " back into UNIX login names, although it seems
that local aliases may be a more appropriate vehicle. See the VIRTUAL_README
document for an overview of methods to host virtual domains with Postfix.
+Note: virtual aliasing (virtual_alias_maps) applies to all recipients: local
+(8), virtual, and remote. This is unlike local aliasing (alias_maps) which
+applies only to local(8) recipients.
+
Virtual aliasing is disabled by default. To enable, edit the virtual_alias_maps
parameter in the main.cf file and specify one or more lookup tables, separated
by whitespace or commas.
@@ -537,8 +538,7 @@ manipulations to the trivial-rewrite(8) server.
Address manipulations at this stage are:
- * Resolve address to destination
- * Mail transport switch
+ * Resolve address to (transport, next-hop destination)
* Relocated users table
Each Postfix delivery agent tries to deliver the mail to its destination, while
@@ -560,49 +560,82 @@ Address manipulations when mail is delivered via the local(8) delivery agent:
The remainder of this document presents each address manipulation step in more
detail, with specific examples or with pointers to documentation with examples.
-RReessoollvvee aaddddrreessss ttoo ddeessttiinnaattiioonn
+RReessoollvvee aaddddrreessss ttoo ((ttrraannssppoorrtt,, nneexxtt--hhoopp ddeessttiinnaattiioonn))
The Postfix qmgr(8) queue manager selects new mail from the incoming queue or
-old mail from the deferred queue, and asks the trivial-rewrite(8) address
-rewriting and resolving daemon where it should be delivered.
-
-As of version 2.0, Postfix distinguishes four major address classes. Each class
-has its own list of domain names, and each class has its own default delivery
+old mail from the deferred queue. First it looks for overrides:
+
+ * The REDIRECT action in access(5), header_checks(5) or body_checks(5)
+ overrides all recipients of the message, and overrides a content_filter
+ setting, and FILTER action in access(5), header_checks(5) or body_checks
+ (5). The REDIRECT action was implemented as a short-cut to retaliate for
+ abuse.
+
+ * A content_filter setting and FILTER action in access(5), header_checks(5)
+ or body_checks(5) provide their own (transport, next-hop destination)
+ information. This bypasses all the steps that are described in the
+ remainder of this section.
+
+When there is no content filter override, the qmgr(8) queue manager asks the
+trivial-rewrite(8) address rewriting and resolving daemon for each recipient
+how to deliver it (which message delivery transport) and where to deliver it
+(what next-hop destination).
+
+As of version 2.0, Postfix distinguishes four major domain classes. Each class
+has its own list of recipient domain names, and each class has its own delivery
method, as shown in the table below. See the ADDRESS_CLASS_README document for
the fine details. Postfix versions before 2.0 only distinguish between local
delivery and everything else.
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- |DDeessttiinnaattiioonn ddoommaaiinn lliisstt |DDeeffaauulltt ddeelliivveerryy mmeetthhoodd|AAvvaaiillaabbiilliittyy|
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |$mydestination, $inet_interfaces,|$local_transport |Postfix 1.0 |
- |$proxy_interfaces | | |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |$virtual_mailbox_domains |$virtual_transport |Postfix 2.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |$relay_domains |$relay_transport |Postfix 2.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |none |$default_transport |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
-
-MMaaiill ttrraannssppoorrtt sswwiittcchh
-
-Once the trivial-rewrite(8) daemon has determined a default delivery method it
-searches the optional transport(5) table for information that overrides the
-message destination and/or delivery method. Typical use of the transport(5)
-table is to send mail to a system that is not connected to the Internet, or to
-use a special SMTP client configuration for destinations that have special
-requirements. See, for example, the STANDARD_CONFIGURATION_README and
-UUCP_README documents, and the examples in the transport(5) manual page.
-
-Transport table lookups are disabled by default. To enable, edit the
-transport_maps parameter in the main.cf file and specify one or more lookup
-tables, separated by whitespace or commas.
+Note that the table does not match recipients against virtual_alias_domains.
+The reason is that all valid recipients in a virtual alias domain must be
+aliased to an address in a different domain. All other recipients in a virtual
+alias domain are by definition undeliverable, and do not need to be considered
+here.
-Example:
-
- /etc/postfix/main.cf:
- transport_maps = hash:/etc/postfix/transport
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |DDoommaaiinn ccllaassss |RReecciippiieenntt ddoommaaiinn mmaattcchh |DDeelliivveerryy mmeetthhoodd |AAvvaaiillaabbiilliittyy|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ | |mydestination, | | |
+ |Local |inet_interfaces, |local_transport |Postfix 1.0 |
+ | |proxy_interfaces | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |Virtual mailbox|virtual_mailbox_domains|virtual_transport|Postfix 2.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |Relay |relay_domains |relay_transport |Postfix 2.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |Default |none |default_transport|Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+
+The delivery methods in the above table may include a next-hop destination in
+addition to a delivery transport. This may override the next-hop destination
+that is by default taken from the recipient domain.
+
+Over time, features have been added to override the above transport and/or
+next-hop destination information. The following table lists where a transport
+or next-hop destination may be taken from, depending on the recipient domain
+class.
+
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |DDoommaaiinn |TTrraannssppoorrtt ssoouurrcceess ((iinn oorrddeerr ooff |NNeexxtt hhoopp ssoouurrcceess ((iinn oorrddeerr ooff ddeesscceennddiinngg|
+ |ccllaassss |ddeesscceennddiinngg pprreecceeddeennccee)) |pprreecceeddeennccee)) |
+ |_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Local |transport_maps, local_transport |transport_maps, local_transport, |
+ | | |recipient domain |
+ |_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |Virtual|transport_maps, virtual_transport |transport_maps, virtual_transport, |
+ |mailbox| |recipient domain |
+ |_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ | | |transport_maps, relay_transport, |
+ |Relay |transport_maps, relay_transport |sender_dependent_relayhost_maps, |
+ | | |relayhost, recipient domain |
+ |_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ | | |transport_maps, |
+ | |transport_maps, |sender_dependent_default_transport_maps,|
+ |Default|sender_dependent_default_transport_maps,|default_transport, |
+ | |default_transport |sender_dependent_relayhost_maps, |
+ | | |relayhost, recipient domain |
+ |_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
RReellooccaatteedd uusseerrss ttaabbllee
@@ -674,6 +707,10 @@ implement distribution lists, or to direct mail for standard aliases such as
postmaster to real people. The table can also be used to map
"Firstname.Lastname" addresses to login names.
+Note: local aliasing (alias_maps) applies only to local(8) recipients. This is
+unlike virtual aliasing (virtual_alias_maps) which applies to all recipients:
+local(8), virtual, and remote.
+
Alias lookups are enabled by default. The default configuration depends on the
operating system environment, but it is typically one of the following:
diff --git a/README_FILES/COMPATIBILITY_README b/README_FILES/COMPATIBILITY_README
index 55182b7..aa9e7f6 100644
--- a/README_FILES/COMPATIBILITY_README
+++ b/README_FILES/COMPATIBILITY_README
@@ -33,17 +33,17 @@ Logged with compatibility_level < 1:
* Using backwards-compatible default setting chroot=y
-Logged with compatibility_level < 2:
-
* Using backwards-compatible default setting "smtpd_relay_restrictions =
(empty)"
+ * Using backwards-compatible default setting smtputf8_enable=no
+
+Logged with compatibility_level < 2:
+
* Using backwards-compatible default setting mynetworks_style=subnet
* Using backwards-compatible default setting relay_domains=$mydestination
- * Using backwards-compatible default setting smtputf8_enable=no
-
Logged with compatibility_level < 3.6:
* Using backwards-compatible default setting smtpd_tls_fingerprint_digest=md5
@@ -152,6 +152,34 @@ permanent in main.cf:
# ppoossttccoonnff ssmmttppdd__rreellaayy__rreessttrriiccttiioonnss==
# ppoossttffiixx rreellooaadd
+UUssiinngg bbaacckkwwaarrddss--ccoommppaattiibbllee ddeeffaauulltt sseettttiinngg ssmmttppuuttff88__eennaabbllee==nnoo
+
+The smtputf8_enable default value has changed from "no" to "yes". With the new
+"yes" setting, the Postfix SMTP server rejects non-ASCII addresses from clients
+that don't request SMTPUTF8 support, after Postfix is updated from an older
+version. The backwards-compatibility safety net is designed to prevent such
+surprises.
+
+As long as the smtputf8_enable parameter is left at its implicit default value,
+and the compatibility_level setting is less than 1, Postfix logs a warning each
+time an SMTP command uses a non-ASCII address localpart without requesting
+SMTPUTF8 support:
+
+ postfix/smtpd[27560]: using backwards-compatible default setting
+ smtputf8_enable=no to accept non-ASCII sender address
+ "??@example.org" from localhost[127.0.0.1]
+
+ postfix/smtpd[27560]: using backwards-compatible default setting
+ smtputf8_enable=no to accept non-ASCII recipient address
+ "??@example.com" from localhost[127.0.0.1]
+
+If the address should not be rejected, and the client cannot be updated to use
+SMTPUTF8, then the system administrator should make the backwards-compatible
+setting "smtputf8_enable = no" permanent in main.cf:
+
+ # ppoossttccoonnff ssmmttppuuttff88__eennaabbllee==nnoo
+ # ppoossttffiixx rreellooaadd
+
UUssiinngg bbaacckkwwaarrddss--ccoommppaattiibbllee ddeeffaauulltt sseettttiinngg mmyynneettwwoorrkkss__ssttyyllee==ssuubbnneett
The mynetworks_style default value has changed from "subnet" to "host". This
@@ -223,34 +251,6 @@ Note: quotes are required as indicated above.
Instead of $mydestination, it may be better to specify an explicit list of
domain names.
-UUssiinngg bbaacckkwwaarrddss--ccoommppaattiibbllee ddeeffaauulltt sseettttiinngg ssmmttppuuttff88__eennaabbllee==nnoo
-
-The smtputf8_enable default value has changed from "no" to "yes". With the new
-"yes" setting, the Postfix SMTP server rejects non-ASCII addresses from clients
-that don't request SMTPUTF8 support, after Postfix is updated from an older
-version. The backwards-compatibility safety net is designed to prevent such
-surprises.
-
-As long as the smtputf8_enable parameter is left at its implicit default value,
-and the compatibility_level setting is less than 1, Postfix logs a warning each
-time an SMTP command uses a non-ASCII address localpart without requesting
-SMTPUTF8 support:
-
- postfix/smtpd[27560]: using backwards-compatible default setting
- smtputf8_enable=no to accept non-ASCII sender address
- "??@example.org" from localhost[127.0.0.1]
-
- postfix/smtpd[27560]: using backwards-compatible default setting
- smtputf8_enable=no to accept non-ASCII recipient address
- "??@example.com" from localhost[127.0.0.1]
-
-If the address should not be rejected, and the client cannot be updated to use
-SMTPUTF8, then the system administrator should make the backwards-compatible
-setting "smtputf8_enable = no" permanent in main.cf:
-
- # ppoossttccoonnff ssmmttppuuttff88__eennaabbllee==nnoo
- # ppoossttffiixx rreellooaadd
-
UUssiinngg bbaacckkwwaarrddss--ccoommppaattiibbllee ddeeffaauulltt sseettttiinngg ssmmttppdd__ttllss__ffiinnggeerrpprriinntt__ddiiggeesstt==mmdd55
The smtpd_tls_fingerprint_digest default value has changed from "md5" to
diff --git a/README_FILES/DATABASE_README b/README_FILES/DATABASE_README
index 3fd88c3..f1629e9 100644
--- a/README_FILES/DATABASE_README
+++ b/README_FILES/DATABASE_README
@@ -28,7 +28,7 @@ Examples of lookup tables that appear often in the Postfix documentation:
alias_maps = hash:/etc/postfix/aliases (local aliasing)
header_checks = regexp:/etc/postfix/header_checks (content filtering)
transport_maps = hash:/etc/postfix/transport (routing table)
- virtual_alias_maps = hash:/etc/postfix/virtual (address rewriting)
+ virtual_alias_maps = hash:/etc/postfix/virtual (virtual aliasing)
All Postfix lookup tables store information as (key, value) pairs. This
interface may seem simplistic at first, but it turns out to be very powerful.
@@ -236,6 +236,9 @@ To find out what database types your Postfix system supports, use the "ppooss
mmeemmccaacchhee
Memcache database client. Configuration details are given in
memcache_table(5).
+ mmoonnggooddbb (read-only)
+ MongoDB database client. Configuration details are given in
+ mongodb_table(5), with examples in MONGODB_README.
mmyyssqqll (read-only)
MySQL database client. Configuration details are given in mysql_table
(5).
diff --git a/README_FILES/DEPRECATION_README b/README_FILES/DEPRECATION_README
new file mode 100644
index 0000000..87cf247
--- /dev/null
+++ b/README_FILES/DEPRECATION_README
@@ -0,0 +1,270 @@
+PPoossttffiixx RReeppllaacceemmeennttss ffoorr DDeepprreeccaatteedd FFeeaattuurreess
+
+-------------------------------------------------------------------------------
+
+PPuurrppoossee ooff tthhiiss ddooccuummeenntt
+
+This document describes Postfix features that are deprecated (will be removed)
+or that have already been removed. It also has tips for making an existing
+Postfix configuration more future-proof.
+
+Overview:
+
+ * Why deprecate?
+ * Deprecation process
+ * Deprecated features
+
+WWhhyy ddeepprreeccaattee??
+
+Sometimes, a Postfix feature needs to be replaced with a different one. To give
+an example:
+
+ * The initial Postfix TLS implementation used multiple boolean parameters:
+ one parameter to enable opportunistic TLS (for example, "smtp_enforce_tls =
+ yes") and one parameter to enable mandatory TLS (for example,
+ "smtp_require_tls = yes").
+
+ * As we added support more features such as fingerprint, dane, and so on, we
+ decided not to add more boolean parameters. Instead we introduced one
+ configuration parameter to select from multiple deployment models (for
+ example, smtp_tls_security_level = may | encrypt | dane, etc...).
+
+Having both the "old" and "new" way to configure Postfix is convenient for
+existing Postfix installations, because their configuration does not break
+after an upgrade to a new version. Unfortunately, there are also disadvantages.
+Having multiple ways to do similar things is not only confusing for newcomers,
+it also makes Postfix harder to change.
+
+DDeepprreeccaattiioonn pprroocceessss
+
+The basic process steps are:
+
+ 1. Inform humans that a feature will be removed, and suggest replacements, in
+ logging and documentation.
+
+ 2. Remove the feature, and update logging and documentation.
+
+Disclaimer: it has taken 20 years for some features to be removed. This past is
+not a guarantee for the future.
+
+DDeepprreeccaatteedd ffeeaattuurreess
+
+The table summarizes removed or deprecated features and replacements. Click on
+the "obsolete feature" name for a more detailed description.
+
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ | |WWaarrnniinngg| | |
+ |OObbssoolleettee ffeeaattuurree nnaammee |aass |RReemmoovveedd |RReeppllaacceemmeenntt |
+ | |ooff |iinn vveerrssiioonn| |
+ | |vveerrssiioonn| | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |disable_dns_lookups | 3.9 | - |smtp_dns_support_level |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |xxx_use_tls | 3.9 | - |xxx_tls_security_level |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |xxx_enforce_tls | 3.9 | - |xxx_tls_security_level |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |xxx_per_site | 3.9 | - |xxx_policy_maps |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |smtpd_tls_dh1024_param_file| 3.9 | - |do not specify (leave at |
+ | | | |default) |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |smtpd_tls_eecdh_grade | 3.9 | - |do not specify (leave at |
+ | | | |default) |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |permit_mx_backup | 3.9 | - |relay_domains |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |check_relay_domains | 2.2 | 3.9 |permit_mynetworks, |
+ | | | |reject_unauth_destination|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |reject_maps_rbl | 2.1 | 3.9 |reject_rbl_client |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |permit_naked_ip_address | 2.0 | 3.9 |permit_mynetworks, |
+ | | | |permit_sasl_authenticated|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+
+OObbssoolleettee DDNNSS oonn//ooffff ccoonnffiigguurraattiioonn
+
+The postconf(1) command logs the following:
+
+ * support for parameter "disable_dns_lookups" will be removed; instead,
+ specify "smtp_dns_support_level"
+
+Replace obsolete configuration with its replacement:
+
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |GGooaall |OObbssoolleettee ccoonnffiigguurraattiioonn |RReeppllaacceemmeenntt |
+ | | |ccoonnffiigguurraattiioonn |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |To disable DNS lookups|disable_dns_lookups = |smtp_dns_support_level =|
+ |in the Postfix SMTP/ |yes |disabled |
+ |LMTP client | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ | | |Leave |
+ | | |smtp_dns_support_level |
+ |To enable DNS lookups | |at the implicit default |
+ |in the Postfix SMTP/ |disable_dns_lookups = no|which is empty, unless |
+ |LMTP client | |you need a higher |
+ | | |support level such as |
+ | | |DNSSEC. |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+
+OObbssoolleettee ooppppoorrttuunniissttiicc TTLLSS ccoonnffiigguurraattiioonn
+
+The postconf(1) command logs one of the following:
+
+ * support for parameter "lmtp_use_tls" will be removed; instead, specify
+ "lmtp_tls_security_level"
+ * support for parameter "smtp_use_tls" will be removed; instead, specify
+ "smtp_tls_security_level"
+ * support for parameter "smtpd_use_tls" will be removed; instead, specify
+ "smtpd_tls_security_level"
+
+There are similarly-named parameters and warnings for postscreen(8) and
+tlsproxy(8), but those parameters should rarely be specified by hand.
+
+Replace obsolete configuration with its replacement:
+
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |GGooaall |OObbssoolleettee ccoonnffiigguurraattiioonn|RReeppllaacceemmeenntt ccoonnffiigguurraattiioonn|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |To turn off TLS |xxx_use_tls = no |xxx_security_level = none|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |To turn on opportunistic|xxx_use_tls = yes |xxx_security_level = may |
+ |TLS | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+
+OObbssoolleettee mmaannddaattoorryy TTLLSS ccoonnffiigguurraattiioonn
+
+The postconf(1) command logs one of the following:
+
+ * support for parameter "lmtp_enforce_tls" will be removed; instead, specify
+ "lmtp_tls_security_level"
+ * support for parameter "smtp_enforce_tls" will be removed; instead, specify
+ "smtp_tls_security_level"
+ * support for parameter "smtpd_enforce_tls" will be removed; instead, specify
+ "smtpd_tls_security_level"
+
+There are similarly-named parameters and warnings for postscreen(8) and
+tlsproxy(8), but those parameters should rarely be specified by hand.
+
+Replace obsolete configuration with its replacement:
+
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |GGooaall |OObbssoolleettee ccoonnffiigguurraattiioonn|RReeppllaacceemmeenntt ccoonnffiigguurraattiioonn|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |To turn off mandatory |xxx_enforce_tls = no |xxx_security_level = may |
+ |TLS | | |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+ |To turn on mandatory TLS|xxx_enforce_tls = yes |xxx_security_level = |
+ | | |encrypt |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
+
+OObbssoolleettee TTLLSS ppoolliiccyy ttaabbllee ccoonnffiigguurraattiioonn
+
+The postconf(1) command logs one of the following:
+
+ * support for parameter "lmtp_tls_per_site" will be removed; instead, specify
+ "lmtp_tls_policy_maps"
+ * support for parameter "smtp_tls_per_site" will be removed; instead, specify
+ "smtp_tls_policy_maps"
+
+There is similarly-named parameter and warning for tlsproxy(8), but that
+parameter should rarely be specified by hand.
+
+Unfortunately, this is more than a name change: the table format has changed
+too, as has the table search process. There is no simple conversion of the
+obsolete form to its replacement.
+
+cchheecckk__rreellaayy__ddoommaaiinnss
+
+Depending on the Postfix version, the Postfix SMTP daemon logs following
+warning:
+
+ * support for restriction "check_relay_domains" has been removed in Postfix
+ 3.9"; instead, specify "reject_unauth_destination"
+ * support for restriction "check_relay_domains" will be removed from Postfix;
+ use "reject_unauth_destination" instead
+
+This feature was removed because it would relay based on the client domain
+name, which is not robust.
+
+Recommended configuration to prevent an "open relay" problem with the SMTP
+service on port 25:
+
+ main.cf:
+ smtpd_recipient_restrictions =
+ permit_mynetworks,
+ permit_sasl_authenticated,
+ reject_unauth_destination
+ ...other restrictions...
+
+Or equivalent in smtpd_relay_restrictions.
+
+ppeerrmmiitt__mmxx__bbaacckkuupp
+
+The Postfix version 3.9 and later SMTP daemon logs the following warning:
+
+ * support for restriction "permit_mx_backup" will be removed from Postfix;
+ instead, specify "relay_domains"
+
+This feature will be removed because it is too difficult to configure recipient
+address validation, making Postfix a source of backscatter bounces.
+
+To specify the domains that Postfix will provide MX backup service for, see
+Configuring Postfix as primary or backup MX host for a remote site.
+
+rreejjeecctt__mmaappss__rrbbll
+
+Depending on the Postfix version, the SMTP daemon logs one of the following
+warnings:
+
+ * support for restriction "reject_maps_rbl" has been removed in Postfix 3.9";
+ instead, specify "reject_rbl_client domain-name"
+ * support for restriction "reject_maps_rbl" will be removed from Postfix; use
+ "reject_rbl_client domain-name" instead
+
+This feature was replaced because "MAPS RBL" is the name of a specific
+reputation service. The reject_rbl_client feature provides a superset of the
+reject_maps_rbl functionality.
+
+Recommended configuration:
+
+ main.cf:
+ smtpd_recipient_restrictions =
+ permit_mynetworks,
+ permit_sasl_authenticated,
+ reject_unauth_destination
+ reject_rbl_client domain-name
+ ...other restrictions...
+
+Where domain-name is the domain name of a DNS reputation service.
+
+ppeerrmmiitt__nnaakkeedd__iipp__aaddddrreessss
+
+Depending on the Postfix version, the SMTP daemon logs one of the following
+warnings:
+
+ * support for restriction "permit_naked_ip_address" has been removed in
+ Postfix 3.9"; instead, specify "permit_mynetworks" or
+ "permit_sasl_authenticated"
+ * restriction permit_naked_ip_address is deprecated. Use permit_mynetworks or
+ permit_sasl_authenticated instead
+
+This feature was removed because it was easy to get a false match when
+smtpd_recipient_restrictions was intended to match a remote SMTP client IP
+address.
+
+Recommended configuration:
+
+ main.cf:
+ smtpd_recipient_restrictions =
+ permit_mynetworks,
+ permit_sasl_authenticated,
+ reject_unauth_destination
+ reject_rbl_client domain-name
+ ...other restrictions...
+
+That is, no restriction on HELO or EHLO syntax. Such restrictions ar rarely
+useful nowadays.
+
diff --git a/README_FILES/INSTALL b/README_FILES/INSTALL
index 09d0f80..85ed2cc 100644
--- a/README_FILES/INSTALL
+++ b/README_FILES/INSTALL
@@ -376,27 +376,29 @@ whistles. Support for third-party databases etc. must be configured when
Postfix is compiled. The following documents describe how to build Postfix with
support for optional features:
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- |OOppttiioonnaall ffeeaattuurree |DDooccuummeenntt |AAvvaaiillaabbiilliittyy|
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |Berkeley DB database |DB_README |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |LMDB database |LMDB_README |Postfix 2.11|
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |LDAP database |LDAP_README |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |MySQL database |MYSQL_README |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |Perl compatible regular expression|PCRE_README |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |PostgreSQL database |PGSQL_README |Postfix 2.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |SASL authentication |SASL_README |Postfix 1.0 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |SQLite database |SQLITE_README|Postfix 2.8 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
- |STARTTLS session encryption |TLS_README |Postfix 2.2 |
- |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ |OOppttiioonnaall ffeeaattuurree |DDooccuummeenntt |AAvvaaiillaabbiilliittyy|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |Berkeley DB database |DB_README |Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |LMDB database |LMDB_README |Postfix 2.11|
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |LDAP database |LDAP_README |Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |MongoDB database |MONGODB_README|Postfix 3.9 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |MySQL database |MYSQL_README |Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |Perl compatible regular expression|PCRE_README |Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |PostgreSQL database |PGSQL_README |Postfix 2.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |SASL authentication |SASL_README |Postfix 1.0 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |SQLite database |SQLITE_README |Postfix 2.8 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
+ |STARTTLS session encryption |TLS_README |Postfix 2.2 |
+ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ |
Note: IP version 6 support is compiled into Postfix on operating systems that
have IPv6 support. See the IPV6_README file for details.
diff --git a/README_FILES/LOCAL_RECIPIENT_README b/README_FILES/LOCAL_RECIPIENT_README
index ea4ce25..c8b97bd 100644
--- a/README_FILES/LOCAL_RECIPIENT_README
+++ b/README_FILES/LOCAL_RECIPIENT_README
@@ -30,7 +30,7 @@ addresses of local recipients. A recipient address is local when its domain
matches $mydestination, $inet_interfaces or $proxy_interfaces. If a local
username or address is not listed in $local_recipient_maps, then the Postfix
SMTP server will reject the address with "User unknown in local recipient
-table".
+table". Other Postfix interfaces may still accept an "unknown" recipient.
The default setting, shown below, assumes that you use the default Postfix
local(8) delivery agent for local delivery, where recipients are either UNIX
diff --git a/README_FILES/MAILLOG_README b/README_FILES/MAILLOG_README
index 6f8fead..75fa4b5 100644
--- a/README_FILES/MAILLOG_README
+++ b/README_FILES/MAILLOG_README
@@ -30,8 +30,14 @@ problems for systemd-based systems.
2. Configure Postfix to write logging, to, for example, /var/log/postfix.log.
See also the "Logfile rotation" section below for logfile management.
+ In the example below, specifying maillog_file_permissions is optional
+ (Postfix 3.9 and later). The default value is 0600, i.e., only the super-
+ user can access the file; the value 0644 also adds 'group' and 'other' read
+ access.
+
# postfix stop
# postconf maillog_file=/var/log/postfix.log
+ # postconf maillog_file_permissions=0644 # (Postfix 3.9 and later)
# postfix start
By default, the logfile name must start with "/var" or "/dev/stdout" (the
@@ -71,6 +77,10 @@ implements the following steps:
* After a brief pause, compress the old logfile. The compression program is
configured with the maillog_file_compressor parameter (default: gzip).
+ * The next time it logs an event, postlogd(8) will create a new logfile, with
+ permissions specified with the maillog_file_permissions parameter (default:
+ 0600).
+
Notes:
* This command will not rotate a logfile with a pathname under the /dev
diff --git a/README_FILES/MILTER_README b/README_FILES/MILTER_README
index 4ace868..7d9e938 100644
--- a/README_FILES/MILTER_README
+++ b/README_FILES/MILTER_README
@@ -392,9 +392,9 @@ ccoommmmaa wwiitthhiinn aa vvaalluuee oorr aarroouunndd
DDiiffffeerreenntt sseettttiinnggss ffoorr ddiiffffeerreenntt SSMMTTPP cclliieennttss
The smtpd_milter_maps feature supports different Milter settings for different
-client IP addresses. Lookup results override the the global smtpd_milters
-setting, and have the same syntax. For example, to disable Milter settings for
-local address ranges:
+client IP addresses. Lookup results override the global smtpd_milters setting,
+and have the same syntax. For example, to disable Milter settings for local
+address ranges:
/etc/postfix/main.cf:
smtpd_milter_maps = cidr:/etc/postfix/smtpd_milter_map
diff --git a/README_FILES/MONGODB_README b/README_FILES/MONGODB_README
new file mode 100644
index 0000000..c8b8fc6
--- /dev/null
+++ b/README_FILES/MONGODB_README
@@ -0,0 +1,188 @@
+PPoossttffiixx MMoonnggooDDBB HHoowwttoo
+
+-------------------------------------------------------------------------------
+
+MMoonnggooDDBB SSuuppppoorrtt iinn PPoossttffiixx
+
+Postfix can use MongoDB as a source for any of its lookups: aliases(5), virtual
+(5), canonical(5), etc. This allows you to keep information for your mail
+service in a replicated noSQL database with fine-grained access controls. By
+not storing it locally on the mail server, the administrators can maintain it
+from anywhere, and the users can control whatever bits of it you think
+appropriate. You can have multiple mail servers using the same information,
+without the hassle and delay of having to copy it to each.
+
+Topics covered in this document:
+
+ * Building Postfix with MongoDB support
+ * Configuring MongoDB lookups
+ * Example: virtual alias maps
+ * Example: Mailing lists
+ * Example: MongoDB projections
+ * Feedback
+ * Credits
+
+BBuuiillddiinngg PPoossttffiixx wwiitthh MMoonnggooDDBB ssuuppppoorrtt
+
+These instructions assume that you build Postfix from source code as described
+in the INSTALL document. Some modification may be required if you build Postfix
+from a vendor-specific source package.
+
+The Postfix MongoDB client requires the mmoonnggoo--cc--ddrriivveerr library. This can be
+built from source code from the mongod-c project, or this can be installed as a
+binary package from your OS distribution, typically named mmoonnggoo--cc--ddrriivveerr,
+mmoonnggoo--cc--ddrriivveerr--ddeevveell or lliibbmmoonnggoocc--ddeevv. Installing the mongo-c-driver library
+may also install lliibbbbssoonn as a dependency.
+
+To build Postfix with mongodb map support, add to the CCARGS environment
+variable the options -DHAS_MONGODB and -I for the directory containing the
+mongodb headers, and specify the AUXLIBS_MONGODB with the libmongoc and libbson
+libraries, for example:
+
+ % make tidy
+ % make -f Makefile.init makefiles \
+ CCARGS="$CCARGS -DHAS_MONGODB -I/usr/include/libmongoc-1.0 \
+ -I/usr/include/libbson-1.0" \
+ AUXLIBS_MONGODB="-lmongoc-1.0 -lbson-1.0"
+
+The 'make tidy' command is needed only if you have previously built Postfix
+without MongoDB support.
+
+If your MongoDB shared library is in a directory that the RUN-TIME linker does
+not know about, add a "-Wl,-R,/path/to/directory" option after "-lbson-1.0".
+Then, just run 'make'.
+
+CCoonnffiigguurriinngg MMoonnggooDDBB llooookkuuppss
+
+In order to use MongoDB lookups, define a MongoDB source as a table lookup in
+main.cf, for example:
+
+ alias_maps = hash:/etc/aliases, proxy:mongodb:/etc/postfix/mongo-aliases.cf
+
+The file /etc/postfix/mongo-aliases.cf can specify a number of parameters. For
+a complete description, see the mongodb_table(5) manual page.
+
+EExxaammppllee:: vviirrttuuaall((55)) aalliiaass mmaappss
+
+Here's a basic example for using MongoDB to look up virtual(5) aliases. Assume
+that in main.cf, you have:
+
+ virtual_alias_maps = hash:/etc/postfix/virtual_aliases,
+ proxy:mongodb:/etc/postfix/mongo-virtual-aliases.cf
+
+and in mongodb:/etc/postfix/mongo-virtual-aliases.cf you have:
+
+ uri = mongodb+srv://user_name:password@some_server
+ dbname = mail
+ collection = mailbox
+ query_filter = {"$or": [{"username":"%s"}, {"alias.address": "%s"}],
+ "active": 1}
+ result_attribute = username
+
+This example assumes mailbox names are stored in a MongoDB backend, in a format
+like:
+
+ { "username": "user@example.com",
+ "alias": [
+ {"address": "admin@example.com"},
+ {"address": "abuse@example.com"}
+ ],
+ "active": 1
+ }
+
+Upon receiving mail for "admin@example.com" that isn't found in the /etc/
+postfix/virtual_aliases database, Postfix will search the MongoDB server/
+cluster listening at port 27017 on some_server. It will connect using the
+provided credentials, and search for any entries whose username is, or alias
+field has "admin@example.com". It will return the username attribute of those
+found, and build a list of their email addresses.
+
+Notes:
+
+ * As with pprroojjeeccttiioonn (see below), the Postfix mongodb client automatically
+ removes the top-level '_id' field from a result_attribute result.
+
+ * The Postfix mongodb client will only parse result fields with data types
+ UTF8, INT32, INT64 and ARRAY. Other fields will be ignored, with a warning
+ in the logs.
+
+EExxaammppllee:: MMaaiilliinngg lliissttss
+
+When it comes to mailing lists, one way of implementing one would be as below:
+
+ { "name": "dev@example.com", "active": 1, "address":
+ [ "hamid@example.com", "wietse@example.com", "viktor@example.com" ] }
+
+using the filter below, will result in a comma separated string with all email
+addresses in this list.
+
+ query_filter = {"name": "%s", "active": 1}
+ result_attribute = address
+
+Notes:
+
+ * As with pprroojjeeccttiioonn (see below), the Postfix mongodb client automatically
+ removes the top-level '_id' field from a result_attribute result.
+
+ * The Postfix mongodb client will only parse result fields with data types
+ UTF8, INT32, INT64 and ARRAY. Other fields will be ignored, with a warning
+ in the logs.
+
+EExxaammppllee:: aaddvvaanncceedd pprroojjeeccttiioonnss
+
+This module also supports the use of more complex MongoDB projections. There
+may be some use cases where operations such as concatenation are necessary to
+be performed on the data retrieved from the database. Although it is encouraged
+to keep the database design simple enough so this is not necessary, postfix
+supports the use of MongoDB projections to achieve the goal.
+
+Consider the example below:
+
+ { "username": "user@example.com",
+ "local_part": "user",
+ "domain": "example.com",
+ "alias": [
+ {"address": "admin@example.com"},
+ {"address": "abuse@example.com"}
+ ],
+ "active": 1
+ }
+
+virtual_mailbox_maps can be created using below parameters in a mongodb:/etc/
+postfix/mongo-virtual-mailboxes.cf file:
+
+ uri = mongodb+srv://user_name:password@some_server
+ dbname = mail
+ collection = mailbox
+ query_filter = {"$or": [{"username":"%s"}, {"alias.address": "%s"}],
+ "active": 1}
+ projection = { "mail_path": {"$concat": ["$domain", "/", "$local_part"]} }
+
+This will return 'example.com/user' path built from the database fields.
+
+A couple of considerations when using projections:
+
+ * As with rreessuulltt__aattttrriibbuuttee, the Postfix mongodb client automatically removes
+ the top-level '_id' field from a projection result.
+
+ * The Postfix mongodb client will only parse fields with data types UTF8,
+ INT32, INT64 and ARRAY. Other fields will be ignored, with a warning in the
+ logs. It is suggested to exclude any unnecessary fields when using a
+ projection.
+
+FFeeeeddbbaacckk
+
+If you have questions, send them to postfix-users@postfix.org. Please include
+relevant information about your Postfix setup: MongoDB-related output from
+postconf, which libraries you built with, and such. If your question involves
+your database contents, please include the applicable bits of some database
+entries.
+
+CCrreeddiittss
+
+ * Stephan Ferraro (Aionda GmbH) implemented an early version of the Postfix
+ MongoDB client.
+ * Hamid Maadani (Dextrous Technologies, LLC) added support for projections
+ and %letter interpolation, and added documentation.
+ * Wietse Venema adopted and restructured the code and documentation.
+
diff --git a/README_FILES/POSTSCREEN_README b/README_FILES/POSTSCREEN_README
index 9467e68..5b4d200 100644
--- a/README_FILES/POSTSCREEN_README
+++ b/README_FILES/POSTSCREEN_README
@@ -78,7 +78,7 @@ Zombies have challenges too: they have only a limited amount of time to deliver
spam before their IP address becomes denylisted. To speed up spam deliveries,
zombies make compromises in their SMTP protocol implementation. For example,
they speak before their turn, or they ignore responses from SMTP servers and
-continue sending mail even when the server tells them to go away.
+continue sending commands even when the server tells them to go away.
postscreen(8) uses a variety of measurements to recognize zombies. First,
postscreen(8) determines if the remote SMTP client IP address is denylisted.
@@ -114,7 +114,7 @@ clients.
QQuuiicckk tteessttss bbeeffoorree eevveerryytthhiinngg eellssee
-Before engaging in SMTP-level tests. postscreen(8) queries a number of local
+Before engaging in SMTP-level tests, postscreen(8) queries a number of local
deny and allowlists. These tests speed up the handling of known clients.
* Permanent allow/denylist test
diff --git a/README_FILES/TLS_README b/README_FILES/TLS_README
index e7fd259..5e63554 100644
--- a/README_FILES/TLS_README
+++ b/README_FILES/TLS_README
@@ -1726,73 +1726,109 @@ describe the corresponding table syntax:
nnoonnee
No TLS. No additional attributes are supported at this level.
mmaayy
- Opportunistic TLS. The optional "ciphers", "exclude" and "protocols"
- attributes (available for opportunistic TLS with Postfix >= 2.6) override
- the "smtp_tls_ciphers", "smtp_tls_exclude_ciphers" and "smtp_tls_protocols"
- configuration parameters. At this level and higher, the optional
- "servername" attribute (available with Postfix >= 3.4) overrides the global
- "smtp_tls_servername" parameter, enabling per-destination configuration of
- the SNI extension sent to the remote SMTP server.
+ Opportunistic TLS. The optional "ciphers", "exclude", and "protocols"
+ attributes (available for opportunistic TLS with Postfix >= 2.6) and
+ "connection_reuse" attribute (Postfix >= 3.4) override the
+ "smtp_tls_ciphers", "smtp_tls_exclude_ciphers", "smtp_tls_protocols", and
+ "smtp_tls_connection_reuse" configuration parameters. At this level and
+ higher, the optional "servername" attribute (available with Postfix >= 3.4)
+ overrides the global "smtp_tls_servername" parameter, enabling per-
+ destination configuration of the SNI extension sent to the remote SMTP
+ server. The optional "enable_rpk" attribute (Postfix >= 3.9) overrides the
+ main.cf smtp_tls_enable_rpk parameter. When opportunistic TLS handshakes
+ fail, Postfix retries the connection with TLS disabled. This allows mail
+ delivery to sites with non-interoperable TLS implementations.
eennccrryypptt
Mandatory encryption. Mail is delivered only if the remote SMTP server
offers STARTTLS and the TLS handshake succeeds. At this level and higher,
the optional "protocols" attribute overrides the main.cf
smtp_tls_mandatory_protocols parameter, the optional "ciphers" attribute
- overrides the main.cf smtp_tls_mandatory_ciphers parameter, and the
- optional "exclude" attribute (Postfix >= 2.6) overrides the main.cf
- smtp_tls_mandatory_exclude_ciphers parameter.
+ overrides the main.cf smtp_tls_mandatory_ciphers parameter, the optional
+ "exclude" attribute (Postfix >= 2.6) overrides the main.cf
+ smtp_tls_mandatory_exclude_ciphers parameter, and the optional
+ "connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf
+ smtp_tls_connection_reuse parameter. The optional "enable_rpk" attribute
+ (Postfix >= 3.9) overrides the main.cf smtp_tls_enable_rpk parameter.
ddaannee
Opportunistic DANE TLS. The TLS policy for the destination is obtained via
TLSA records in DNSSEC. If no TLSA records are found, the effective
security level used is may. If TLSA records are found, but none are usable,
the effective security level is encrypt. When usable TLSA records are
- obtained for the remote SMTP server, SSLv2+3 are automatically disabled
- (see smtp_tls_mandatory_protocols), and the server certificate must match
- the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is
- available with Postfix 2.11 and later.
+ obtained for the remote SMTP server, the server certificate must match the
+ TLSA records (and the SNI name is unconditionally set to the TLSA base
+ domain). RFC 7672 (DANE) TLS authentication and DNSSEC support is available
+ with Postfix 2.11 and later. The optional "connection_reuse" attribute
+ (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
+ When the effective security level used is may, the optional "ciphers",
+ "exclude", and "protocols" attributes (Postfix >= 2.6) override the
+ "smtp_tls_ciphers", "smtp_tls_exclude_ciphers", and "smtp_tls_protocols"
+ configuration parameters. When the effective security level used is
+ encrypt, the optional "ciphers", "exclude", and "protocols" attributes
+ (Postfix >= 2.6) override the "smtp_tls_mandatory_ciphers",
+ "smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols"
+ configuration parameters.
ddaannee--oonnllyy
Mandatory DANE TLS. The TLS policy for the destination is obtained via TLSA
records in DNSSEC. If no TLSA records are found, or none are usable, no
connection is made to the server. When usable TLSA records are obtained for
- the remote SMTP server, SSLv2+3 are automatically disabled (see
- smtp_tls_mandatory_protocols), and the server certificate must match the
- TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is
- available with Postfix 2.11 and later.
+ the remote SMTP server, the server certificate must match the TLSA records.
+ RFC 7672 (DANE) TLS authentication and DNSSEC support is available with
+ Postfix 2.11 and later. The optional "ciphers", "exclude", and "protocols"
+ attributes (Postfix >= 2.6) override the "smtp_tls_mandatory_ciphers",
+ "smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols"
+ configuration parameters. The optional "connection_reuse" attribute
+ (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
ffiinnggeerrpprriinntt
Certificate fingerprint verification. Available with Postfix 2.5 and later.
At this security level, there are no trusted Certification Authorities. The
certificate trust chain, expiration date, ... are not checked. Instead, the
- optional mmaattcchh attribute, or else the main.cf
- ssmmttpp__ttllss__ffiinnggeerrpprriinntt__cceerrtt__mmaattcchh parameter, lists the server certificate
- fingerprints or public key fingerprints (Postfix 2.9 and later). The digest
- algorithm used to calculate fingerprints is selected by the
- ssmmttpp__ttllss__ffiinnggeerrpprriinntt__ddiiggeesstt parameter. Multiple fingerprints can be
- combined with a "|" delimiter in a single match attribute, or multiple
- match attributes can be employed. The ":" character is not used as a
- delimiter as it occurs between each pair of fingerprint (hexadecimal)
- digits.
+ optional "match" attribute, or else the main.cf
+ ssmmttpp__ttllss__ffiinnggeerrpprriinntt__cceerrtt__mmaattcchh parameter, lists the certificate
+ fingerprints or the public key fingerprints (Postfix 2.9 and later) of
+ acceptable server certificates. The digest algorithm used to calculate the
+ fingerprint is selected by the ssmmttpp__ttllss__ffiinnggeerrpprriinntt__ddiiggeesstt parameter.
+ Multiple fingerprints can be combined with a "|" delimiter in a single
+ match attribute, or multiple match attributes can be employed. The ":
+ " character is not used as a delimiter as it occurs between each pair of
+ fingerprint (hexadecimal) digits. The optional "ciphers", "exclude", and
+ "protocols" attributes (Postfix >= 2.6) override the
+ "smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and
+ "smtp_tls_mandatory_protocols" configuration parameters. The optional
+ "connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf
+ smtp_tls_connection_reuse parameter. The optional "enable_rpk" attribute
+ (Postfix >= 3.9) overrides the main.cf smtp_tls_enable_rpk parameter.
vveerriiffyy
Mandatory server certificate verification. Mail is delivered only if the
- TLS handshake succeeds, if the remote SMTP server certificate can be
- validated (not expired or revoked, and signed by a trusted Certification
- Authority), and if the server certificate name matches the optional "match"
- attribute (or the main.cf smtp_tls_verify_cert_match parameter value when
- no optional "match" attribute is specified). With Postfix >= 2.11 the
+ TLS handshake succeeds, the remote SMTP server certificate chain can be
+ validated, and a DNS name in the certificate matches the specified match
+ criteria. At this security level, DNS MX lookups are presumed to be secure
+ enough, and the name verified in the server certificate is potentially
+ obtained via unauthenticated DNS MX lookups. The server certificate name
+ must match either the optional "match" attribute, or else the main.cf
+ smtp_tls_verify_cert_match parameter value. With Postfix >= 2.11 the
"tafile" attribute optionally modifies trust chain verification in the same
manner as the "smtp_tls_trust_anchor_file" parameter. The "tafile"
attribute may be specified multiple times to load multiple trust-anchor
- files.
+ files. The optional "connection_reuse" attribute (Postfix >= 3.4) overrides
+ the main.cf smtp_tls_connection_reuse parameter.
sseeccuurree
Secure certificate verification. Mail is delivered only if the TLS
- handshake succeeds, and DNS forgery resistant remote SMTP certificate
- verification succeeds (not expired or revoked, and signed by a trusted
- Certification Authority), and if the server certificate name matches the
- optional "match" attribute (or the main.cf smtp_tls_secure_cert_match
- parameter value when no optional "match" attribute is specified). With
- Postfix >= 2.11 the "tafile" attribute optionally modifies trust chain
- verification in the same manner as the "smtp_tls_trust_anchor_file"
- parameter. The "tafile" attribute may be specified multiple times to load
- multiple trust-anchor files.
+ handshake succeeds, the remote SMTP server certificate chain can be
+ validated, and a DNS name in the certificate matches the specified match
+ criteria. At this security level, DNS MX lookups, though potentially used
+ to determine the candidate next-hop gateway IP addresses, are nnoott presumed
+ to be secure enough for TLS peername verification. Instead, the default
+ name verified in the server certificate is obtained directly from the next-
+ hop, or is explicitly specified via the optional "match" attribute which
+ overrides the main.cf smtp_tls_secure_cert_match parameter. The optional
+ "ciphers", "exclude", and "protocols" attributes (Postfix >= 2.6) override
+ the "smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and
+ "smtp_tls_mandatory_protocols" configuration parameters. With Postfix >=
+ 2.11 the "tafile" attribute optionally modifies trust chain verification in
+ the same manner as the "smtp_tls_trust_anchor_file" parameter. The "tafile"
+ attribute may be specified multiple times to load multiple trust-anchor
+ files. The optional "connection_reuse" attribute (Postfix >= 3.4) overrides
+ the main.cf smtp_tls_connection_reuse parameter.
Notes:
* The "match" attribute is especially useful to verify TLS certificates for
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 0a23bf8..6d32de2 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,19 +1,19 @@
-This is the Postfix 3.8 stable release.
+This is the Postfix 3.9 stable release.
-The stable Postfix release is called postfix-3.8.x where 3=major
-release number, 8=minor release number, x=patchlevel. The stable
+The stable Postfix release is called postfix-3.9.x where 3=major
+release number, 9=minor release number, x=patchlevel. The stable
release never changes except for patches that address bugs or
emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called
-postfix-3.9-yyyymmdd where yyyymmdd is the release date (yyyy=year,
+postfix-3.10-yyyymmdd where yyyymmdd is the release date (yyyy=year,
mm=month, dd=day). Patches are never issued for snapshot releases;
instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd)
specifies the release date of a stable release or snapshot release.
-If you upgrade from Postfix 3.6 or earlier, please read RELEASE_NOTES-3.7
+If you upgrade from Postfix 3.7 or earlier, please read RELEASE_NOTES-3.8
before proceeding.
Dual license
@@ -26,32 +26,142 @@ now also distributed with the more recent Eclipse Public License
license of their choice. Those who are more comfortable with the
IPL can continue with that license.
-Incompatibility with Postfix 3.8.5, 3.7.10, 3.6.14, and 3.5.24
-==============================================================
+Topics in this document
+-----------------------
+- changes that are less visible
+- database support
+- envid support
+- feature deprecation
+- mime conversion
+- protocol compliance
+- security
+- tls support
-Improvements for outbound SMTP smuggling defense:
+Changes that are less visible
+-----------------------------
-- With "cleanup_replace_stray_cr_lf = yes" (the default), the cleanup
- daemon replaces each stray or character in message
- content with a space character. The replacement happens before
- any other content management (header/body_checks, Milters, etc).
+The documentation has been updated to address many questions
+that were asked on the postfix-users mailing list.
- This prevents outbound SMTP smuggling, where an attacker uses
- Postfix to send email containing a non-standard End-of-DATA
- sequence, to exploit inbound SMTP smuggling at a vulnerable remote
- SMTP server.
+More unit tests to make Postfix future-proof. Wietse is now looking
+into migrating unit tests to Google test, because other people are
+familiar with that framework, than with a Postfix-specific one.
- This also improves the remote evaluation of Postfix-added DKIM
- and other signatures, as the evaluation result will not depend
- on how a remote email server handles stray or characters.
+Major changes - database support
+--------------------------------
+
+[Feature 20240208] MongoDB client support, contributed by Hamid
+Maadani, based on earlier code by Stephan Ferraro. For build and
+usage instructions see MONGODB_README and mongodb_table(5).
+
+[Feature 20240129] In the mysql: and pgsql: clients, the hard-coded
+idle and retry timer settings are now configurable. Details are in
+the updated mysql_table(5) and pgsql_table(5) manpages.
+
+[Incompat 20230903] The MySQL client no longer supports MySQL
+versions < 4.0. MySQL version 4.0 was released in 2003.
+
+[Incompat 20230419] The MySQL client default characterset is now
+configurable with the "charset" configuration file attribute. The
+default is "utf8mb4", consistent with the MySQL 8.0 built-in default,
+but different from earlier MySQL versions where the built-in default
+was "latin1".
+
+Major changes - envid support
+-----------------------------
+
+[Feature 20230901] The local(8) delivery agent exports an ENVID
+environment variable with the RFC 3461 envelope ID if available.
+
+The pipe(8) delivery agent supports an ${envid} command-line attribute
+that expands to the RFC 3461 envelope ID if available.
+
+Major changes - feature deprecation
+-----------------------------------
+
+[Incompat 20240218] The new document DEPRECATION_README covers
+features that have been removed and that will be removed in the
+future, with suggestions how to migrate.
+
+The Postfix SMTP server logs a warning when "permit_mx_backup" is
+used (support for restriction "permit_mx_backup" will be removed
+from Postfix; instead, use "relay_domains"). File: smtpd/smtpd_check.c.
+
+The postconf command logs a warning when the following parameters
+are specified in main.cf or master.cf: xxx_use_tls, xxx_enforce_tls
+(use the corresponding xxx_security_level setting instead);
+xxx_per_site (use the corresponding xxx_policy_maps setting instead);
+disable_dns_lookups (use smtp_dns_support_level instead);
+smtpd_tls_dh1024_param_file, smtpd_tls_eecdh_grade (do not specify,
+leave at default). These warning are silenced with the "postconf
+-q".
+
+[Incompat 20240218] The Postfix SMTP server now logs that
+permit_naked_ip_address, reject_maps_rbl, and check_relay_domains
+have been removed and suggests a replacement. These features have
+been logging deprecation warnings since 2005 or earlier, and were
+removed from Postfix documentation in 2004.
+
+Major changes - mime conversion
+-------------------------------
+
+[Feature 20230901] New parameter force_mime_input_conversion (default:
+no) to convert body content that claims to be 8-bit into quoted-printable,
+before header_checks, body_checks, Milters, and before after-queue
+content filters. This feature does not affect messages that are
+sent into smtpd_proxy_filter.
+
+The typical use case is an MTA that applies this conversion before
+signing outbound messages, so that the signatures will remain valid
+when a message is later handled by an MTA that does not announce
+8BITMIME support, or when a message line exceeds the SMTP length
+limit.
+
+Major changes - protocol compliance
+-----------------------------------
+
+[Incompat 20240206] In message headers, Postfix now formats numerical
+days as two-digit days, i.e. days 1-9 have a leading zero instead
+of a leading space. This change was made because the RFC 5322 date
+and time specification recommends (i.e. SHOULD) that a single space
+be used in each place that FWS appears. This change avoids a breaking
+change in the date string length.
+
+Major changes - security
+------------------------
+
+[Incompat 20240226] The Postfix DNS client now limits the total
+size of DNS lookup results to 100 records; it drops the excess
+records, and logs a warning. This limit is 20x larger than the
+number of server addresses that the Postfix SMTP client is willing
+to consider when delivering mail, and is far below the number of
+records that could cause a tail recursion crash in dns_rr_append()
+as reported by Toshifumi Sakaguchi.
+
+This change introduces a similar limit on the number of DNS requests
+that a check_*_*_access restriction can make.
+
+[Incompat 20240110] With "cleanup_replace_stray_cr_lf = yes" (the
+default), the cleanup daemon replaces each stray or
+character in message content with a space character. The replacement
+happens before any other content management (header/body_checks,
+Milters, etc).
+
+This prevents outbound SMTP smuggling, where an attacker uses Postfix
+to send email containing a non-standard End-of-DATA sequence, to
+exploit inbound SMTP smuggling at a vulnerable remote SMTP server.
+
+This also improves the remote evaluation of Postfix-added DKIM and
+other signatures, as the evaluation result will not depend on how
+a remote email server handles stray or characters.
This feature applies to all email that Postfix locally or remotely
sends out. It is not allowlisted based on client identity.
-Major changes with Postfix 3.8.5, 3.7.10, 3.6.14, and 3.5.24
-============================================================
+[Feature 20240118] This updates Postfix fixes for inbound SMTP smuggling
+attacks. For background, see https://www.postfix.org/smtp-smuggling.html
-Improvements for inbound SMTP smuggling defense:
+This will be back ported to Postfix 3.8.5, 3.7.10, 3.6.14, and 3.5.24.
- Better compatibility: the recommended setting "smtpd_forbid_bare_newline
= normalize" requires the standard End-of-DATA sequence
@@ -124,120 +234,76 @@ Alternative settings:
# 10.0.0.0/24 chunking, silent-discard
# smtpd_discard_ehlo_keywords = chunking, silent-discard
-Major changes with Postfix 3.8.1
-================================
-
-Security: the Postfix SMTP server optionally disconnects remote
-SMTP clients that violate RFC 2920 (or 5321) command pipelining
+[Incompat 20230603] the Postfix SMTP server by default disconnects
+remote SMTP clients that violate RFC 2920 (or 5321) command pipelining
constraints. The server replies with "554 5.5.0 Error: SMTP protocol
synchronization" and logs the unexpected remote SMTP client input.
-Specify "smtpd_forbid_unauth_pipelining = yes" to enable. This
-feature is enabled by default in Postfix 3.9 and later.
-
-Workaround to limit collateral damage from OS distributions that
-crank up security to 11, increasing the number of plaintext email
-deliveries. This introduces basic OpenSSL configuration file support,
-with two new parameters "tls_config_file" and "tls_config_name".
-Details are in the postconf(5) manpage under "tls_config_file" and
-"tls_config_name".
-
-Major changes - documentation and code cleanup
-----------------------------------------------
-
-There are numerous small fixes to Postfix documentation, and small
-code-health changes that should not affect documented behavior but
-may improve Postfix behavior for malformed input, or that make
-Postfix easier to maintain. See the HISTORY file for details.
+Specify "smtpd_reject_unauth_pipelining = no" to disable.
-Major changes - SRV support
+Major changes - tls support
---------------------------
-[Feature 20230214] Support to look up DNS SRV records in the Postfix
-SMTP/LMTP client, Based on code by Tomas Korbar (Red Hat).
-
-For example, with "use_srv_lookup = submission" and "relayhost =
-example.com:submission", the Postfix SMTP client will look up DNS
-SRV records for _submission._tcp.example.com, and will relay email
-through the hosts and ports that are specified with those records.
-
-See https://www.postfix.org/postconf.5.html#use_srv_lookup for more
-details, including how to selectively use SRV in a configuration
-that connects to multiple ISP accounts.
-
-SRV support may also be useful inside a cloud-based infrastructure
-when Postfix needs to deliver mail to services that run on a
-dynamically-allocated port.
-
-Major changes - TLS support
----------------------------
-
-[Incompat 20230304] This introduces the following changes:
-
-- Postfix treats the "export" and "low" cipher grade settings as
- "medium". The "export" and "low" grades are no longer supported
- in OpenSSL 1.1.1, the minimum version that Postfix requires.
-
-- Postfix default settings now exclude the following deprecated or
- unused ciphers (SEED, IDEA, 3DES, RC2, RC4, RC5), digest (MD5),
- key exchange algorithms (DH, ECDH), and public key algorithm
- (DSS).
-
-[Feature 20230108] New configuration parameter tls_ffdhe_auto_groups
-for finite-field Diffie-Hellman ephemeral (FFDHE) support in TLS
-1.3 with OpenSSL 3.0.
-
-Major changes - attack resistance
----------------------------------
-
-[Feature 20240312] the Postfix SMTP server can now aggregate
-smtpd_client_*_rate and smtpd_client_*_count statistics by network
-block, as specified with smtpd_client_ipv4_prefix_length (default
-32, no aggregation) and smtpd_client_ipv6_prefix_length (default
-84, aggregation by /84 network blocks). The latter raises the bar
-for a memory exhaustion attack.
-
-[Feature 20221023] Unconditionally disable a CPU resource attack
-requesting TLS renegotiation. There's no good reason to support
-this in the middle of an SMTP connection.
-
-Major changes - bit rot
------------------------
-
-[Incompat 20221228] Postfix documentation and code have been converted
-to use "grep -E" and "grep -F" instead of the historical forms
-"egrep" and "fgrep". To build Postfix on a system that supports
-only the historical forms, run the script auxiliary/fix-grep/fix-grep.sh
-to revert this change.
-
-Major changes - configuration checks
-------------------------------------
-
-[Feature 20240406] The postconf command now warns for #comment in
-or after a Postfix parameter value. Postfix programs do not support
-#comment after other text, and treat that as input.
-
-Major changes - database support
---------------------------------
-
-[Incompat 20220509] The PostgreSQL client encoding is now configurable
-with the "encoding" Postfix configuration file attribute. The default
-is "UTF8". Previously the encoding was hard-coded as "LATIN1".
-
-Major changes - logging
------------------------
-
-[Incompat 20230308] The postfix(1) and postlog(1) commands now
-produce stderr logging even when stderr is not connected to a
-terminal. This eliminates an inconsistency, and makes these programs
-easier to use in some automated procedures. The canonical example
-is to capture output from "postmulti -p status" to figure out which
-instances are or are not running.
-
-Major changes - source code organization
-----------------------------------------
-
-[Incompat 20220507] Most global/mkmap*.[hc] files are moved to the
-util directory; only global/mkmap_proxy.* remains. The old file
-organization was designed before support for dynamically-loadable
-databases was added, and that code suffered from complexity.
-
+[Feature 20230807] Optional Postfix TLS support to request an RFC7250
+raw public key instead of an X.509 public-key certificate. The
+configuration settings for raw key public support will be ignored
+when there is no raw public key support in the local TLS implementation
+(i.e. Postfix with OpenSSL versions before 3.2).
+
+- With "smtpd_tls_enable_rpk = yes", the Postfix SMTP server will
+ request that a remote SMTP client sends an RFC7250 raw public key
+ instead of an X.509 certificate when asking for or requiring TLS
+ client authentication. The Postfix SMTP server will still accept
+ a client public-key certificate instead of a public key.
+
+- With "smtp_tls_enable_rpk = yes" (or "enable_rpk = yes" in an
+ smtp policy table) at the security levels "may", "encrypt" or
+ "fingerprint", the Postfix SMTP client will request that a remote
+ SMTP server sends an RFC7250 raw public key instead of an X.509
+ certificate. The Postfix SMTP client will still accept a server
+ public key certificate instead of a public key.
+
+- At the "secure" and "verify" security level, the Postfix SMTP
+ client will ignore smtp_tls_enable_rpk or enable_rpk settings,
+ because these levels require a server certificate.
+
+- At the "dane" and "dane-only" security levels, the Postfix SMTP
+ client will ignore smtp_tls_enable_rpk or enable_rpk settings,
+ and will request that a remote SMTP server sends an RFC7250 raw
+ public key instead of an X.509 certificate when all valid TLSA
+ records specify only server public keys (no certificates). The
+ Postfix SMTP client will still accept a server public key
+ certificate.
+
+- The Postfix SMTP client and server always send a raw public key
+ instead of a certificate, if solicited by the remote SMTP peer
+ and the local TLS implementation supports raw public keys.
+
+- If a remote SMTP client sends a server name indication with an
+ SNI TLS extension, and tls_server_sni_maps is configured, the
+ Postfix SMTP server will extract a raw public key from the indicated
+ certificate.
+
+Caution: enabling Postfix raw key support will break authentication
+based on certificate fingerprints in check_ccert_access or
+smtp_tls_policy_maps, when a remote peer's TLS implementation starts
+to send a raw public key instead of a certificate. The solution is
+to always use public key fingerprint patterns; these will match not
+only a "raw" public key, but also the public key in a certificate.
+
+To detect such problems before they happen, the Postfix SMTP server
+will log a warning when it requests an RFC7250 raw public key instead
+of an X.509 certificate, the remote peer sends a certificate instead
+of a public key, and check_ccert_access has a matching fingerprint
+for the certificate but not for the public key in that certificate.
+There is no corresponding warning from the Postfix SMTP client.
+
+For instructions to generate public-key fingerprints, see the
+postconf(5) man pages for smtp_tls_enable_rpk and smtpd_tls_enable_rpk.
+
+[Feature 20230522] Preliminary support for OpenSSL configuration
+files, primarily OpenSSL 1.1.1b and later. This introduces two new
+parameters "tls_config_file" and "tls_config_name", which can be
+used to limit collateral damage from OS distributions that crank
+up security to 11, increasing the number of plaintext email deliveries.
+Details are in the postconf(5) manpage under "tls_config_file" and
+"tls_config_name".
diff --git a/RELEASE_NOTES-3.8 b/RELEASE_NOTES-3.8
new file mode 100644
index 0000000..2944830
--- /dev/null
+++ b/RELEASE_NOTES-3.8
@@ -0,0 +1,128 @@
+This is the Postfix 3.8 stable release.
+
+The stable Postfix release is called postfix-3.8.x where 3=major
+release number, 8=minor release number, x=patchlevel. The stable
+release never changes except for patches that address bugs or
+emergencies. Patches change the patchlevel and the release date.
+
+New features are developed in snapshot releases. These are called
+postfix-3.9-yyyymmdd where yyyymmdd is the release date (yyyy=year,
+mm=month, dd=day). Patches are never issued for snapshot releases;
+instead, a new snapshot is released.
+
+The mail_release_date configuration parameter (format: yyyymmdd)
+specifies the release date of a stable release or snapshot release.
+
+If you upgrade from Postfix 3.6 or earlier, please read RELEASE_NOTES-3.7
+before proceeding.
+
+Dual license
+------------
+
+As of Postfix 3.2.5 this software is distributed with a dual license:
+in addition to the historical IBM Public License (IPL) 1.0, it is
+now also distributed with the more recent Eclipse Public License
+(EPL) 2.0. Recipients can choose to take the software under the
+license of their choice. Those who are more comfortable with the
+IPL can continue with that license.
+
+Major changes - documentation and code cleanup
+----------------------------------------------
+
+There are numerous small fixes to Postfix documentation, and small
+code-health changes that should not affect documented behavior but
+may improve Postfix behavior for malformed input, or that make
+Postfix easier to maintain. See the HISTORY file for details.
+
+Major changes - SRV support
+---------------------------
+
+[Feature 20230214] Support to look up DNS SRV records in the Postfix
+SMTP/LMTP client, Based on code by Tomas Korbar (Red Hat).
+
+For example, with "use_srv_lookup = submission" and "relayhost =
+example.com:submission", the Postfix SMTP client will look up DNS
+SRV records for _submission._tcp.example.com, and will relay email
+through the hosts and ports that are specified with those records.
+
+See https://www.postfix.org/postconf.5.html#use_srv_lookup for more
+details, including how to selectively use SRV in a configuration
+that connects to multiple ISP accounts.
+
+SRV support may also be useful inside a cloud-based infrastructure
+when Postfix needs to deliver mail to services that run on a
+dynamically-allocated port.
+
+Major changes - TLS support
+---------------------------
+
+[Incompat 20230304] This introduces the following changes:
+
+- Postfix treats the "export" and "low" cipher grade settings as
+ "medium". The "export" and "low" grades are no longer supported
+ in OpenSSL 1.1.1, the minimum version that Postfix requires.
+
+- Postfix default settings now exclude the following deprecated or
+ unused ciphers (SEED, IDEA, 3DES, RC2, RC4, RC5), digest (MD5),
+ key exchange algorithms (DH, ECDH), and public key algorithm
+ (DSS).
+
+[Feature 20230108] New configuration parameter tls_ffdhe_auto_groups
+for finite-field Diffie-Hellman ephemeral (FFDHE) support in TLS
+1.3 with OpenSSL 3.0.
+
+Major changes - attack resistance
+---------------------------------
+
+[Feature 20240312] the Postfix SMTP server can now aggregate
+smtpd_client_*_rate and smtpd_client_*_count statistics by network
+block, as specified with smtpd_client_ipv4_prefix_length (default
+32, no aggregation) and smtpd_client_ipv6_prefix_length (default
+84, aggregation by /84 network blocks). The latter raises the bar
+for a memory exhaustion attack.
+
+[Feature 20221023] Unconditionally disable a CPU resource attack
+requesting TLS renegotiation. There's no good reason to support
+this in the middle of an SMTP connection.
+
+Major changes - bit rot
+-----------------------
+
+[Incompat 20221228] Postfix documentation and code have been converted
+to use "grep -E" and "grep -F" instead of the historical forms
+"egrep" and "fgrep". To build Postfix on a system that supports
+only the historical forms, run the script auxiliary/fix-grep/fix-grep.sh
+to revert this change.
+
+Major changes - configuration checks
+------------------------------------
+
+[Feature 20240406] The postconf command now warns for #comment in
+or after a Postfix parameter value. Postfix programs do not support
+#comment after other text, and treat that as input.
+
+Major changes - database support
+--------------------------------
+
+[Incompat 20220509] The PostgreSQL client encoding is now configurable
+with the "encoding" Postfix configuration file attribute. The default
+is "UTF8". Previously the encoding was hard-coded as "LATIN1".
+
+Major changes - logging
+-----------------------
+
+[Incompat 20230308] The postfix(1) and postlog(1) commands now
+produce stderr logging even when stderr is not connected to a
+terminal. This eliminates an inconsistency, and makes these programs
+easier to use in some automated procedures. The canonical example
+is to capture output from "postmulti -p status" to figure out which
+instances are or are not running.
+
+Major changes - source code organization
+----------------------------------------
+
+[Incompat 20220507] Most global/mkmap*.[hc] files are moved to the
+util directory; only global/mkmap_proxy.* remains. The old file
+organization was designed before support for dynamically-loadable
+databases was added, and that code suffered from complexity.
+
diff --git a/WISHLIST b/WISHLIST
index bc52ebc..f3d9860 100644
--- a/WISHLIST
+++ b/WISHLIST
@@ -6,6 +6,25 @@ Wish list:
Disable -DSNAPSHOT and -DNONPROD in makedefs.
+ The postconf command needs more mongodb tests.
+
+ The mongodb client needs tests.
+
+ Remove .printfck directories, and remove printfck targets
+ from Makefiles.
+
+ In documentation and configuration file examples, replace
+ IPv4 address prefixes from Cloud9 with 192.168.* from RFC
+ 1918, and replace IPv6 address prefixes with unique local
+ IPv6 address prefixes fd00:* from RFC 4193.
+
+ Add a pre-release check for '.' instead of ','. Generalize
+ from grep '[a-zA-Z0-9]\. *[a-z]' proto/*|egrep -v
+ 'i\.e\.|etc\.|e\.g\.|\. *[a-zA-Z0-9]*\('
+
+ Update DKIM examples for signing with the benefits of forced
+ MIME converison with "force_mime_input_conversion = yes"
+
Scan Postfix code with github.com/googleprojectzero/weggli
(depends on "rust").
@@ -14,16 +33,16 @@ Wish list:
Check out https://github.com/milter-manager/milter-manager/
- Check out https://cutter.osdn.jp/ (C/C++ unit tests).
+ Check out https://github.com/clear-code/cutter
+ (https://cutter.osdn.jp/) for C/C++ unit tests.
- Follow https://github.com/vdukhovni/postfix/commits/rpk
+ postscreen hints to smtpd to suppress the server greeting
+ after a remote SMTP client has pregreeted. This makes the
+ PIPELINING detection more meaningful.
Multi-recipient support in sender/recipient_bcc_maps and
always_bcc.
- Test for dns_rr_copy() + dns_rr_free().
-
-
mail_conf_xxx supprt for non-negative numbers (i.e.
numbers with a lower bound of zero).
diff --git a/conf/access b/conf/access
index 97892eb..6da2db2 100644
--- a/conf/access
+++ b/conf/access
@@ -59,7 +59,7 @@
# line that starts with whitespace continues a logi-
# cal line.
#
-# EMAIL ADDRESS PATTERNS
+# EMAIL ADDRESS PATTERNS IN INDEXED TABLES
# With lookups from indexed files such as DB or DBM, or from
# networked tables such as NIS, LDAP or SQL, patterns are
# tried in the order as listed below:
@@ -97,7 +97,7 @@
# becomes: user+foo@domain, user@domain, domain, user+foo@,
# and user@.
#
-# HOST NAME/ADDRESS PATTERNS
+# HOST NAME/ADDRESS PATTERNS IN INDEXED TABLES
# With lookups from indexed files such as DB or DBM, or from
# networked tables such as NIS, LDAP or SQL, the following
# lookup patterns are examined in the order as listed:
diff --git a/conf/aliases b/conf/aliases
index 8f1a284..280c3d2 100644
--- a/conf/aliases
+++ b/conf/aliases
@@ -45,25 +45,29 @@ decode: root
# newaliases
#
# DESCRIPTION
-# The aliases(5) table provides a system-wide mechanism to
-# redirect mail for local recipients. The redirections are
-# processed by the Postfix local(8) delivery agent.
+# The optional aliases(5) table (alias_maps) redirects mail
+# for local recipients. The redirections are processed by
+# the Postfix local(8) delivery agent.
+#
+# This is unlike virtual(5) aliasing (virtual_alias_maps)
+# which applies to all recipients: local(8), virtual, and
+# remote, and which is implemented by the cleanup(8) daemon.
#
# Normally, the aliases(5) table is specified as a text file
-# that serves as input to the postalias(1) command. The
-# result, an indexed file in dbm or db format, is used for
-# fast lookup by the mail system. Execute the command
-# newaliases in order to rebuild the indexed file after
+# that serves as input to the postalias(1) command. The
+# result, an indexed file in dbm or db format, is used for
+# fast lookup by the mail system. Execute the command
+# newaliases in order to rebuild the indexed file after
# changing the Postfix alias database.
#
-# When the table is provided via other means such as NIS,
-# LDAP or SQL, the same lookups are done as for ordinary
+# When the table is provided via other means such as NIS,
+# LDAP or SQL, the same lookups are done as for ordinary
# indexed files.
#
-# Alternatively, the table can be provided as a regu-
-# lar-expression map where patterns are given as regular
-# expressions. In this case, the lookups are done in a
-# slightly different way as described below under "REGULAR
+# Alternatively, the table can be provided as a regu-
+# lar-expression map where patterns are given as regular
+# expressions. In this case, the lookups are done in a
+# slightly different way as described below under "REGULAR
# EXPRESSION TABLES".
#
# Users can control delivery of their own mail by setting up
@@ -77,61 +81,61 @@ decode: root
#
# name: value1, value2, ...
#
-# o Empty lines and whitespace-only lines are ignored,
-# as are lines whose first non-whitespace character
+# o Empty lines and whitespace-only lines are ignored,
+# as are lines whose first non-whitespace character
# is a `#'.
#
-# o A logical line starts with non-whitespace text. A
-# line that starts with whitespace continues a logi-
+# o A logical line starts with non-whitespace text. A
+# line that starts with whitespace continues a logi-
# cal line.
#
-# The name is a local address (no domain part). Use double
-# quotes when the name contains any special characters such
-# as whitespace, `#', `:', or `@'. The name is folded to
+# The name is a local address (no domain part). Use double
+# quotes when the name contains any special characters such
+# as whitespace, `#', `:', or `@'. The name is folded to
# lowercase, in order to make database lookups case insensi-
# tive.
#
-# In addition, when an alias exists for owner-name, this
-# will override the envelope sender address, so that deliv-
+# In addition, when an alias exists for owner-name, this
+# will override the envelope sender address, so that deliv-
# ery diagnostics are directed to owner-name, instead of the
-# originator of the message (for details, see
-# owner_request_special, expand_owner_alias and
-# reset_owner_alias). This is typically used to direct
-# delivery errors to the maintainer of a mailing list, who
+# originator of the message (for details, see
+# owner_request_special, expand_owner_alias and
+# reset_owner_alias). This is typically used to direct
+# delivery errors to the maintainer of a mailing list, who
# is in a better position to deal with mailing list delivery
# problems than the originator of the undelivered mail.
#
# The value contains one or more of the following:
#
# address
-# Mail is forwarded to address, which is compatible
+# Mail is forwarded to address, which is compatible
# with the RFC 822 standard.
#
# /file/name
-# Mail is appended to /file/name. For details on how
-# a file is written see the sections "EXTERNAL FILE
-# DELIVERY" and "DELIVERY RIGHTS" in the local(8)
-# documentation. Delivery is not limited to regular
-# files. For example, to dispose of unwanted mail,
+# Mail is appended to /file/name. For details on how
+# a file is written see the sections "EXTERNAL FILE
+# DELIVERY" and "DELIVERY RIGHTS" in the local(8)
+# documentation. Delivery is not limited to regular
+# files. For example, to dispose of unwanted mail,
# deflect it to /dev/null.
#
# |command
-# Mail is piped into command. Commands that contain
-# special characters, such as whitespace, should be
-# enclosed between double quotes. For details on how
-# a command is executed see "EXTERNAL COMMAND DELIV-
+# Mail is piped into command. Commands that contain
+# special characters, such as whitespace, should be
+# enclosed between double quotes. For details on how
+# a command is executed see "EXTERNAL COMMAND DELIV-
# ERY" and "DELIVERY RIGHTS" in the local(8) documen-
# tation.
#
# When the command fails, a limited amount of command
-# output is mailed back to the sender. The file
-# /usr/include/sysexits.h defines the expected exit
-# status codes. For example, use "|exit 67" to simu-
-# late a "user unknown" error, and "|exit 0" to
+# output is mailed back to the sender. The file
+# /usr/include/sysexits.h defines the expected exit
+# status codes. For example, use "|exit 67" to simu-
+# late a "user unknown" error, and "|exit 0" to
# implement an expensive black hole.
#
# :include:/file/name
-# Mail is sent to the destinations listed in the
+# Mail is sent to the destinations listed in the
# named file. Lines in :include: files have the same
# syntax as the right-hand side of alias entries.
#
@@ -143,12 +147,12 @@ decode: root
#
# ADDRESS EXTENSION
# When alias database search fails, and the recipient local-
-# part contains the optional recipient delimiter (e.g.,
-# user+foo), the search is repeated for the unextended
+# part contains the optional recipient delimiter (e.g.,
+# user+foo), the search is repeated for the unextended
# address (e.g., user).
#
-# The propagate_unmatched_extensions parameter controls
-# whether an unmatched address extension (+foo) is propa-
+# The propagate_unmatched_extensions parameter controls
+# whether an unmatched address extension (+foo) is propa-
# gated to the result of table lookup.
#
# CASE FOLDING
@@ -156,83 +160,85 @@ decode: root
# to lowercase before database lookup.
#
# REGULAR EXPRESSION TABLES
-# This section describes how the table lookups change when
+# This section describes how the table lookups change when
# the table is given in the form of regular expressions. For
-# a description of regular expression lookup table syntax,
-# see regexp_table(5) or pcre_table(5). NOTE: these formats
+# a description of regular expression lookup table syntax,
+# see regexp_table(5) or pcre_table(5). NOTE: these formats
# do not use ":" at the end of a pattern.
#
-# Each regular expression is applied to the entire search
-# string. Thus, a search string user+foo is not broken up
+# Each regular expression is applied to the entire search
+# string. Thus, a search string user+foo is not broken up
# into user and foo.
#
-# Regular expressions are applied in the order as specified
-# in the table, until a regular expression is found that
+# Regular expressions are applied in the order as specified
+# in the table, until a regular expression is found that
# matches the search string.
#
-# Lookup results are the same as with indexed file lookups.
-# For security reasons there is no support for $1, $2 etc.
+# Lookup results are the same as with indexed file lookups.
+# For security reasons there is no support for $1, $2 etc.
# substring interpolation.
#
# SECURITY
-# The local(8) delivery agent disallows regular expression
-# substitution of $1 etc. in alias_maps, because that would
+# The local(8) delivery agent disallows regular expression
+# substitution of $1 etc. in alias_maps, because that would
# open a security hole.
#
-# The local(8) delivery agent will silently ignore requests
-# to use the proxymap(8) server within alias_maps. Instead
-# it will open the table directly. Before Postfix version
-# 2.2, the local(8) delivery agent will terminate with a
+# The local(8) delivery agent will silently ignore requests
+# to use the proxymap(8) server within alias_maps. Instead
+# it will open the table directly. Before Postfix version
+# 2.2, the local(8) delivery agent will terminate with a
# fatal error.
#
# CONFIGURATION PARAMETERS
-# The following main.cf parameters are especially relevant.
-# The text below provides only a parameter summary. See
+# The following main.cf parameters are especially relevant.
+# The text below provides only a parameter summary. See
# postconf(5) for more details including examples.
#
# alias_database (see 'postconf -d' output)
-# The alias databases for local(8) delivery that are
+# The alias databases for local(8) delivery that are
# updated with "newaliases" or with "sendmail -bi".
#
# alias_maps (see 'postconf -d' output)
-# The alias databases that are used for local(8)
-# delivery.
+# Optional lookup tables with aliases that apply only
+# to local(8) recipients; this is unlike vir-
+# tual_alias_maps that apply to all recipients:
+# local(8), virtual, and remote.
#
# allow_mail_to_commands (alias, forward)
-# Restrict local(8) mail delivery to external com-
+# Restrict local(8) mail delivery to external com-
# mands.
#
# allow_mail_to_files (alias, forward)
-# Restrict local(8) mail delivery to external files.
+# Restrict local(8) mail delivery to external files.
#
# expand_owner_alias (no)
# When delivering to an alias "aliasname" that has an
# "owner-aliasname" companion alias, set the envelope
-# sender address to the expansion of the
+# sender address to the expansion of the
# "owner-aliasname" alias.
#
# propagate_unmatched_extensions (canonical, virtual)
-# What address lookup tables copy an address exten-
+# What address lookup tables copy an address exten-
# sion from the lookup key to the lookup result.
#
# owner_request_special (yes)
# Enable special treatment for owner-listname entries
# in the aliases(5) file, and don't split owner-list-
-# name and listname-request address localparts when
+# name and listname-request address localparts when
# the recipient_delimiter is set to "-".
#
# recipient_delimiter (empty)
-# The set of characters that can separate an email
-# address localpart, user name, or a .forward file
+# The set of characters that can separate an email
+# address localpart, user name, or a .forward file
# name from its extension.
#
# Available in Postfix version 2.3 and later:
#
# frozen_delivered_to (yes)
-# Update the local(8) delivery agent's idea of the
-# Delivered-To: address (see prepend_deliv-
-# ered_header) only once, at the start of a delivery
-# attempt; do not update the Delivered-To: address
+# Update the local(8) delivery agent's idea of the
+# Delivered-To: address (see prepend_deliv-
+# ered_header) only once, at the start of a delivery
+# attempt; do not update the Delivered-To: address
# while expanding aliases or .forward files.
#
# STANDARDS
@@ -245,12 +251,12 @@ decode: root
# postconf(5), configuration parameters
#
# README FILES
-# Use "postconf readme_directory" or "postconf html_direc-
+# Use "postconf readme_directory" or "postconf html_direc-
# tory" to locate this information.
# DATABASE_README, Postfix lookup table overview
#
# LICENSE
-# The Secure Mailer license must be distributed with this
+# The Secure Mailer license must be distributed with this
# software.
#
# AUTHOR(S)
diff --git a/conf/canonical b/conf/canonical
index 4957fcc..894fd5b 100644
--- a/conf/canonical
+++ b/conf/canonical
@@ -225,57 +225,56 @@
# Other parameters of interest:
#
# inet_interfaces (all)
-# The network interface addresses that this mail sys-
-# tem receives mail on.
+# The local network interface addresses that this
+# mail system receives mail on.
#
# local_header_rewrite_clients (permit_inet_interfaces)
-# Rewrite message header addresses in mail from these
-# clients and update incomplete addresses with the
-# domain name in $myorigin or $mydomain; either don't
-# rewrite message headers from other clients at all,
-# or rewrite message headers and update incomplete
-# addresses with the domain specified in the
-# remote_header_rewrite_domain parameter.
+# Rewrite or add message headers in mail from these
+# clients, updating incomplete addresses with the
+# domain name in $myorigin or $mydomain, and adding
+# missing headers.
#
# proxy_interfaces (empty)
-# The network interface addresses that this mail sys-
-# tem receives mail on by way of a proxy or network
-# address translation unit.
+# The remote network interface addresses that this
+# mail system receives mail on by way of a proxy or
+# network address translation unit.
#
-# masquerade_classes (envelope_sender, header_sender,
+# masquerade_classes (envelope_sender, header_sender,
# header_recipient)
# What addresses are subject to address masquerading.
#
# masquerade_domains (empty)
-# Optional list of domains whose subdomain structure
+# Optional list of domains whose subdomain structure
# will be stripped off in email addresses.
#
# masquerade_exceptions (empty)
-# Optional list of user names that are not subjected
-# to address masquerading, even when their addresses
+# Optional list of user names that are not subjected
+# to address masquerading, even when their addresses
# match $masquerade_domains.
#
# mydestination ($myhostname, localhost.$mydomain, local-
# host)
-# The list of domains that are delivered via the
+# The list of domains that are delivered via the
# $local_transport mail delivery transport.
#
# myorigin ($myhostname)
# The domain name that locally-posted mail appears to
-# come from, and that locally posted mail is deliv-
+# come from, and that locally posted mail is deliv-
# ered to.
#
# owner_request_special (yes)
# Enable special treatment for owner-listname entries
# in the aliases(5) file, and don't split owner-list-
-# name and listname-request address localparts when
+# name and listname-request address localparts when
# the recipient_delimiter is set to "-".
#
# remote_header_rewrite_domain (empty)
-# Don't rewrite message headers from remote clients
-# at all when this parameter is empty; otherwise, re-
-# write message headers and append the specified
-# domain name to incomplete addresses.
+# Rewrite or add message headers in mail from remote
+# clients if the remote_header_rewrite_domain parame-
+# ter value is non-empty, updating incomplete
+# addresses with the domain specified in the
+# remote_header_rewrite_domain parameter, and adding
+# missing headers.
#
# SEE ALSO
# cleanup(8), canonicalize and enqueue mail
@@ -284,13 +283,13 @@
# virtual(5), virtual aliasing
#
# README FILES
-# Use "postconf readme_directory" or "postconf html_direc-
+# Use "postconf readme_directory" or "postconf html_direc-
# tory" to locate this information.
# DATABASE_README, Postfix lookup table overview
# ADDRESS_REWRITING_README, address rewriting guide
#
# LICENSE
-# The Secure Mailer license must be distributed with this
+# The Secure Mailer license must be distributed with this
# software.
#
# AUTHOR(S)
diff --git a/conf/dynamicmaps.cf b/conf/dynamicmaps.cf
index 5179f66..feeb6a1 100644
--- a/conf/dynamicmaps.cf
+++ b/conf/dynamicmaps.cf
@@ -2,6 +2,7 @@
cdb ${LIB_PREFIX}cdb${LIB_SUFFIX} dict_cdb_open mkmap_cdb_open
ldap ${LIB_PREFIX}ldap${LIB_SUFFIX} dict_ldap_open
lmdb ${LIB_PREFIX}lmdb${LIB_SUFFIX} dict_lmdb_open mkmap_lmdb_open
+mongodb ${LIB_PREFIX}mongodb${LIB_SUFFIX} dict_mongodb_open
mysql ${LIB_PREFIX}mysql${LIB_SUFFIX} dict_mysql_open
pcre ${LIB_PREFIX}pcre${LIB_SUFFIX} dict_pcre_open
pgsql ${LIB_PREFIX}pgsql${LIB_SUFFIX} dict_pgsql_open
diff --git a/conf/generic b/conf/generic
index f371eb9..508e44a 100644
--- a/conf/generic
+++ b/conf/generic
@@ -193,13 +193,13 @@
# Other parameters of interest:
#
# inet_interfaces (all)
-# The network interface addresses that this mail sys-
-# tem receives mail on.
+# The local network interface addresses that this
+# mail system receives mail on.
#
# proxy_interfaces (empty)
-# The network interface addresses that this mail sys-
-# tem receives mail on by way of a proxy or network
-# address translation unit.
+# The remote network interface addresses that this
+# mail system receives mail on by way of a proxy or
+# network address translation unit.
#
# mydestination ($myhostname, localhost.$mydomain, local-
# host)
diff --git a/conf/header_checks b/conf/header_checks
index bcd96a9..db295d0 100644
--- a/conf/header_checks
+++ b/conf/header_checks
@@ -440,46 +440,32 @@
# tent-Length:, Return-Path:.
#
# CONFIGURATION PARAMETERS
-# body_checks
-# Lookup tables with content filter rules for message
-# body lines. These filters see one physical line at
-# a time, in chunks of at most $line_length_limit
-# bytes.
-#
-# body_checks_size_limit
-# The amount of content per message body segment
-# (attachment) that is subjected to $body_checks fil-
-# tering.
-#
-# header_checks
-#
-# mime_header_checks (default: $header_checks)
-#
-# nested_header_checks (default: $header_checks)
-# Lookup tables with content filter rules for message
-# header lines: respectively, these are applied to
-# the initial message headers (not including MIME
-# headers), to the MIME headers anywhere in the mes-
-# sage, and to the initial headers of attached mes-
-# sages.
-#
-# Note: these filters see one logical message header
-# at a time, even when a message header spans multi-
-# ple lines. Message headers that are longer than
-# $header_size_limit characters are truncated.
-#
-# disable_mime_input_processing
-# While receiving mail, give no special treatment to
-# MIME related message headers; all text after the
-# initial message headers is considered to be part of
-# the message body. This means that header_checks is
-# applied to all the initial message headers, and
-# that body_checks is applied to the remainder of the
-# message.
-#
-# Note: when used in this manner, body_checks will
-# process a multi-line message header one line at a
-# time.
+# body_checks (empty)
+# Optional lookup tables for content inspection as
+# specified in the body_checks(5) manual page.
+#
+# body_checks_size_limit (51200)
+# How much text in a message body segment (or attach-
+# ment, if you prefer to use that term) is subjected
+# to body_checks inspection.
+#
+# header_checks (empty)
+# Optional lookup tables for content inspection of
+# primary non-MIME message headers, as specified in
+# the header_checks(5) manual page.
+#
+# mime_header_checks ($header_checks)
+# Optional lookup tables for content inspection of
+# MIME related message headers, as described in the
+# header_checks(5) manual page.
+#
+# nested_header_checks ($header_checks)
+# Optional lookup tables for content inspection of
+# non-MIME message headers in attached messages, as
+# described in the header_checks(5) manual page.
+#
+# disable_mime_input_processing (no)
+# Turn off MIME processing while receiving mail.
#
# EXAMPLES
# Header pattern to block attachments with bad file name
diff --git a/conf/main.cf b/conf/main.cf
index 2ee7996..2f4eba9 100644
--- a/conf/main.cf
+++ b/conf/main.cf
@@ -31,7 +31,7 @@
#
# The level below is what should be used with new (not upgrade) installs.
#
-compatibility_level = 3.8
+compatibility_level = 3.9
# SOFT BOUNCE
#
@@ -452,7 +452,7 @@ unknown_local_recipient_reject_code = 550
# The mailbox_command parameter specifies the optional external
# command to use instead of mailbox delivery. The command is run as
# the recipient with proper HOME, SHELL and LOGNAME environment settings.
-# Exception: delivery for root is done as $default_user.
+# Exception: delivery for root is done as $default_privs.
#
# Other environment variables of interest: USER (recipient username),
# EXTENSION (address extension), DOMAIN (domain part of address),
diff --git a/conf/post-install b/conf/post-install
index 2a7d99b..ed7c79a 100644
--- a/conf/post-install
+++ b/conf/post-install
@@ -205,6 +205,10 @@
# Google, Inc.
# 111 8th Avenue
# New York, NY 10011, USA
+#
+# Wietse Venema
+# porcupine.org
+# Amawalk, NY 10501, USA
#--
umask 022
@@ -291,7 +295,7 @@ test -d "$config_directory" || {
# XXX Solaris does not have "test -e".
instances=`test ! -f $def_config_directory/main.cf ||
- $POSTCONF -c $def_config_directory -h multi_instance_directories |
+ $POSTCONF -qc $def_config_directory -h multi_instance_directories |
sed 's/,/ /'` || exit 1
update_shared_files=1
@@ -360,7 +364,7 @@ test -f $config_directory/main.cf && {
case "$junk" in
"") eval unset $name;;
esac
- eval : \${$name=\`$POSTCONF -c $config_directory -h $name\`} || exit 1
+ eval : \${$name=\`$POSTCONF -qc $config_directory -h $name\`} || exit 1
done
}
@@ -461,14 +465,14 @@ override=
for name in $MOST_PARAMETERS
do
eval junk=\"\$$name\"
- test "$junk" = "`$POSTCONF -c $config_directory -h $name`" || {
+ test "$junk" = "`$POSTCONF -qc $config_directory -h $name`" || {
override=1
break
}
done
test -n "$override" && {
- $POSTCONF -c $config_directory -e \
+ $POSTCONF -qc $config_directory -e \
"daemon_directory = $daemon_directory" \
"command_directory = $command_directory" \
"queue_directory = $queue_directory" \
@@ -679,13 +683,13 @@ EOF
# require now is that defer and deferred are hashed because those
# can contain lots of files.
- found=`$POSTCONF -c $config_directory -h hash_queue_names`
+ found=`$POSTCONF -qc $config_directory -h hash_queue_names`
missing=
(echo "$found" | grep defer >/dev/null) || missing="$missing defer"
(echo "$found" | grep deferred>/dev/null)|| missing="$missing deferred"
test -n "$missing" && {
echo fixing main.cf hash_queue_names for missing $missing
- $POSTCONF -c $config_directory -e hash_queue_names="$found$missing" ||
+ $POSTCONF -qc $config_directory -e hash_queue_names="$found$missing" ||
exit 1
}
@@ -857,14 +861,14 @@ EOF
# when IPv6 support is not compiled in. See util/sys_defs.h.
test "`$POSTCONF -dh inet_protocols`" = "ipv4" ||
- test -n "`$POSTCONF -c $config_directory -n inet_protocols`" || {
+ test -n "`$POSTCONF -qc $config_directory -n inet_protocols`" || {
cat </dev/null
+
$daemon_directory/master -t 2>/dev/null && {
$FATAL the Postfix mail system is not running
exit 1
@@ -244,6 +251,9 @@ check)
status)
+ # Warn once for deprecated parameters.
+ $command_directory/postconf >/dev/null
+
$daemon_directory/master -t 2>/dev/null && {
$INFO the Postfix mail system is not running
exit 1
@@ -268,12 +278,12 @@ check-fatal)
exit 1
}
- maillog_file=`$command_directory/postconf -h maillog_file` || {
+ maillog_file=`$command_directory/postconf -qh maillog_file` || {
$FATAL cannot execute $command_directory/postconf!
exit 1
}
test -n "$maillog_file" && {
- $command_directory/postconf -M postlog/unix-dgram 2>/dev/null \
+ $command_directory/postconf -qM postlog/unix-dgram 2>/dev/null \
| grep . >/dev/null || {
$FATAL "missing 'postlog' service in master.cf - run 'postfix upgrade-configuration'"
exit 1
@@ -291,6 +301,9 @@ check-fatal)
check-warn)
# This command is NOT part of the public interface.
+ # Warn once for deprecated parameters.
+ $command_directory/postconf >/dev/null
+
# Check Postfix root-owned directory owner/permissions.
find $queue_directory/. $queue_directory/pid \
@@ -413,7 +426,7 @@ logrotate)
for name in maillog_file maillog_file_compressor \
maillog_file_rotate_suffix
do
- value="`$command_directory/postconf -h $name`"
+ value="`$command_directory/postconf -qh $name`"
case "$value" in
"") $FATAL "empty '$name' parameter value - logfile rotation failed"
exit 1;;
diff --git a/conf/relocated b/conf/relocated
index 90f63ec..5c43266 100644
--- a/conf/relocated
+++ b/conf/relocated
@@ -131,8 +131,8 @@
# Other parameters of interest:
#
# inet_interfaces (all)
-# The network interface addresses that this mail sys-
-# tem receives mail on.
+# The local network interface addresses that this
+# mail system receives mail on.
#
# mydestination ($myhostname, localhost.$mydomain, local-
# host)
@@ -145,9 +145,9 @@
# ered to.
#
# proxy_interfaces (empty)
-# The network interface addresses that this mail sys-
-# tem receives mail on by way of a proxy or network
-# address translation unit.
+# The remote network interface addresses that this
+# mail system receives mail on by way of a proxy or
+# network address translation unit.
#
# SEE ALSO
# trivial-rewrite(8), address resolver
diff --git a/conf/virtual b/conf/virtual
index e99eee4..8200ca4 100644
--- a/conf/virtual
+++ b/conf/virtual
@@ -11,98 +11,99 @@
# postmap -q - /etc/postfix/virtual
The list of domains that are a member of that address
-class: for example, all local domains, or all relay domains.
The default delivery transport for that address class. For
-example, the local,
-virtual or relay delivery transport (delivery transports are defined
-in master.cf). This helps to keep Postfix configurations simple,
-by avoiding the need for explicit routing information in transport
-maps.
+
Benefit: this avoids the need for explicit routing information
+in transport maps.
The list of valid recipient addresses for that address
-class. The Postfix SMTP server rejects invalid recipients with
-"User unknown in <name of address class here> table". This
-helps to keep the Postfix queue free of undeliverable MAILER-DAEMON
-messages.
+class.
+
+
Benefit: the Postfix SMTP server rejects an invalid recipient
+with "User unknown in <name of address class> table", and
+avoids sending a MAILER-DAEMON message with backscatter spam.
@@ -92,12 +97,12 @@ This domain class also includes mail for user@[ipaddress]
when the IP address is listed with the inet_interfaces or
proxy_interfaces parameters.
-
Valid recipient addresses are listed with the local_recipient_maps
-parameter, as described in LOCAL_RECIPIENT_README. The Postfix SMTP
-server rejects invalid recipients with "User unknown in local
-recipient table". If the local_recipient_maps parameter value is
-empty, then the Postfix SMTP server accepts any address in the
-local domain class.
+
Valid recipient addresses for those domains are
+listed with the local_recipient_maps parameter, as described in
+LOCAL_RECIPIENT_README. The Postfix SMTP server rejects invalid recipients
+with "User unknown in local recipient table". If the local_recipient_maps
+parameter value is empty, then the Postfix SMTP server accepts any
+address in the local domain class.
The mail delivery transport is specified with the
local_transport parameter. The default value is local:$myhostname
@@ -111,21 +116,25 @@ class.
Purpose: hosted domains where each recipient address is
-aliased to an address in a different domain, for example, a local
-UNIX system account or a remote address. A
+aliased to an address in a different domain class, for example, a
+local UNIX system account or a remote address. A
virtual alias example is given in the VIRTUAL_README file.
Valid recipient addresses are listed with the virtual_alias_maps
-parameter. The Postfix SMTP server rejects invalid recipients with
-"User unknown in virtual alias table". The default value is
-$virtual_maps for Postfix 1.1 compatibility.
+
Valid recipient addresses for those domains are listed with the
+virtual_alias_maps parameter. The Postfix SMTP server rejects invalid
+recipients with "User unknown in virtual alias table". The default
+value is $virtual_maps for Postfix 1.1 compatibility.
-
There is no mail delivery transport parameter. Every
-address must be aliased to an address in some other domain.
+
Note: for historical reasons, virtual_alias_maps
+apply to recipients in all domain classes, not only the virtual
+alias domain class.
+
+
There is no configurable mail delivery transport. Every
+address must be aliased to an address in some other domain class.
Valid recipient addresses are listed with the virtual_mailbox_maps
-parameter. The Postfix SMTP server rejects invalid recipients with
-"User unknown in virtual mailbox table". If this parameter value
-is empty, the Postfix SMTP server accepts all recipients for domains
-listed in $virtual_mailbox_domains.
+
Valid recipient addresses for those domains are listed
+with the virtual_mailbox_maps parameter. The Postfix SMTP server
+rejects invalid recipients with "User unknown in virtual mailbox
+table". If this parameter value is empty, the Postfix SMTP server
+accepts all recipients for domains listed in $virtual_mailbox_domains.
+
The mail delivery transport is specified with the
virtual_transport parameter. The default value is virtual
@@ -169,11 +179,12 @@ file.
Domain names are listed with the relay_domains parameter.
-
Valid recipient addresses are listed with the relay_recipient_maps
-parameter. The Postfix SMTP server rejects invalid recipients with
-"User unknown in relay recipient table". If this parameter value
-is empty, the Postfix SMTP server accepts all recipients for domains
-listed with the relay_domains parameter.
+
Valid recipient addresses for those domains are listed
+with the relay_recipient_maps parameter. The Postfix SMTP server
+rejects invalid recipients with "User unknown in relay recipient
+table". If this parameter value is empty, the Postfix SMTP server
+accepts all recipients for domains listed with the relay_domains
+parameter.
The mail delivery transport is specified with the
relay_transport parameter. The default value is relay which
diff --git a/html/ADDRESS_REWRITING_README.html b/html/ADDRESS_REWRITING_README.html
index 85e296f..c92a314 100644
--- a/html/ADDRESS_REWRITING_README.html
+++ b/html/ADDRESS_REWRITING_README.html
@@ -94,9 +94,7 @@ as invalid
Virtual aliasing is disabled by default. To enable, edit the
virtual_alias_maps parameter in the main.cf file and
specify one or more lookup tables, separated by whitespace or
@@ -792,7 +794,7 @@ commas.
Addresses found in virtual alias maps are subjected to another
-iteration of virtual aliasing, but are not subjected to canonical
+iteration of virtual aliasing, but are not subjected to canonical
mapping, in order to avoid loops.
For static mappings as shown above, lookup tables such as hash:,
@@ -833,9 +835,8 @@ manager delegates the more complex address manipulations to the
Relocated users table
@@ -873,67 +874,108 @@ via the local(8) delivery agent:
step in more detail, with specific examples or with pointers to
documentation with examples.
-
The Postfix qmgr(8) queue manager selects new mail from the
-incoming queue or old mail from the deferred queue, and asks the
-trivial-rewrite(8) address rewriting and resolving daemon where it
-should be delivered.
As of version 2.0, Postfix distinguishes four major address
-classes. Each class has its own list of domain names, and each
-class has its own default delivery method, as shown in the table
-below. See the ADDRESS_CLASS_README document for the fine details.
-Postfix versions before 2.0 only distinguish between local delivery
-and everything else.
A content_filter setting and FILTER action in access(5),
+header_checks(5) or body_checks(5) provide their own (transport,
+next-hop destination) information. This bypasses all the steps that
+are described in the remainder of this section.
+
+
+
+
When there is no content filter override, the qmgr(8) queue
+manager asks the trivial-rewrite(8) address rewriting and resolving
+daemon for each recipient how to deliver it (which message delivery
+transport) and where to deliver it (what next-hop destination).
+
+
As of version 2.0, Postfix distinguishes four major domain
+classes. Each class has its own list of recipient domain names, and
+each class has its own delivery method, as shown in the table below.
+See the ADDRESS_CLASS_README document for the fine details. Postfix
+versions before 2.0 only distinguish between local delivery and
+everything else.
+
+
Note that the table does not match recipients against
+virtual_alias_domains. The reason is that all valid recipients in
+a virtual alias domain must be aliased to an address in a different
+domain. All other recipients in a virtual alias domain are by
+definition undeliverable, and do not need to be considered here.
+
The delivery methods in the above table may include a next-hop
+destination in addition to a delivery transport. This may override
+the next-hop destination that is by default taken from the recipient
+domain.
-
Once the trivial-rewrite(8) daemon has determined a default
-delivery method it searches the optional transport(5) table for
-information that overrides the message destination and/or delivery
-method. Typical use of the transport(5) table is to send mail to
-a system
-that is not connected to the Internet, or to use a special SMTP
-client configuration for destinations that have special requirements.
-See, for example, the STANDARD_CONFIGURATION_README and UUCP_README
-documents, and the examples in the transport(5) manual page.
+
Over time, features have been added to override the above
+transport and/or next-hop destination information. The following
+table lists where a transport or next-hop destination may be taken
+from, depending on the recipient domain class.
-
Transport table lookups are disabled by default. To enable,
-edit the transport_maps parameter in the main.cf file and specify
-one or more lookup tables, separated by whitespace or commas.
+
-
Example:
+
+
+
Domain class
Transport sources (in order of
+descending precedence)
Next hop sources (in order of
+descending precedence)
@@ -1019,6 +1061,11 @@ direct mail for standard aliases such as postmaster to real people.
The table can also be used to map "Firstname.Lastname" addresses
to login names.
+
The smtputf8_enable default value has changed from "no" to "yes".
+With the new "yes" setting, the Postfix SMTP server rejects non-ASCII
+addresses from clients that don't request SMTPUTF8 support, after
+Postfix is updated from an older version. The backwards-compatibility
+safety net is designed to prevent such surprises.
+
+
As long as the smtputf8_enable parameter is left at its implicit
+default value, and the compatibility_level setting is
+less than 1, Postfix logs a warning each time an SMTP command uses a
+non-ASCII address localpart without requesting SMTPUTF8 support:
+
+
+
+postfix/smtpd[27560]: using backwards-compatible default setting
+ smtputf8_enable=no to accept non-ASCII sender address
+ "??@example.org" from localhost[127.0.0.1]
+
+
+
+
+
+postfix/smtpd[27560]: using backwards-compatible default setting
+ smtputf8_enable=no to accept non-ASCII recipient address
+ "??@example.com" from localhost[127.0.0.1]
+
+
+
+
If the address should not be rejected, and the client cannot
+be updated to use SMTPUTF8, then the system administrator should
+make the backwards-compatible setting "smtputf8_enable = no" permanent
+in main.cf:
+
+
The smtputf8_enable default value has changed from "no" to "yes".
-With the new "yes" setting, the Postfix SMTP server rejects non-ASCII
-addresses from clients that don't request SMTPUTF8 support, after
-Postfix is updated from an older version. The backwards-compatibility
-safety net is designed to prevent such surprises.
-
-
As long as the smtputf8_enable parameter is left at its implicit
-default value, and the compatibility_level setting is
-less than 1, Postfix logs a warning each time an SMTP command uses a
-non-ASCII address localpart without requesting SMTPUTF8 support:
-
-
-
-postfix/smtpd[27560]: using backwards-compatible default setting
- smtputf8_enable=no to accept non-ASCII sender address
- "??@example.org" from localhost[127.0.0.1]
-
-
-
-
-
-postfix/smtpd[27560]: using backwards-compatible default setting
- smtputf8_enable=no to accept non-ASCII recipient address
- "??@example.com" from localhost[127.0.0.1]
-
-
-
-
If the address should not be rejected, and the client cannot
-be updated to use SMTPUTF8, then the system administrator should
-make the backwards-compatible setting "smtputf8_enable = no" permanent
-in main.cf:
-
-
MySQL database client. Configuration details are given in
diff --git a/html/DEPRECATION_README.html b/html/DEPRECATION_README.html
new file mode 100644
index 0000000..4729568
--- /dev/null
+++ b/html/DEPRECATION_README.html
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+Postfix Replacements for Deprecated Features
+
+
+
+
+
+
+
+
+
Postfix
+Replacements for Deprecated Features
+
+
+
+
Purpose of this document
+
+
This document describes Postfix features that are deprecated
+(will be removed) or that have already been removed. It also has
+tips for making an existing Postfix configuration more future-proof.
+
Sometimes, a Postfix feature needs to be replaced with a different
+one. To give an example:
+
+
+
+
The initial Postfix TLS implementation used multiple boolean
+parameters: one parameter to enable opportunistic TLS (for example,
+"smtp_enforce_tls = yes") and one parameter to enable mandatory TLS
+(for example, "smtp_require_tls = yes").
+
+
As we added support more features such as fingerprint,
+dane, and so on, we decided not to add more boolean parameters.
+Instead we introduced one configuration parameter to select from
+multiple deployment models (for example, smtp_tls_security_level =
+may | encrypt | dane, etc...).
+
+
+
+
+
+
Having both the "old" and "new" way to configure Postfix is
+convenient for existing Postfix installations, because their
+configuration does not break after an upgrade to a new version.
+Unfortunately, there are also disadvantages. Having multiple ways
+to do similar things is not only confusing for newcomers, it also
+makes Postfix harder to change.
There is similarly-named parameter and warning for tlsproxy(8),
+but that parameter should rarely be specified by hand.
+
+
Unfortunately, this is more than a name change: the table format
+has changed too, as has the table search process. There is no simple
+conversion of the obsolete form to its replacement.
Depending on the Postfix version, the SMTP daemon logs one of
+the following warnings:
+
+
+
+
support for restriction "reject_maps_rbl" has been removed in
+Postfix 3.9"; instead, specify "reject_rbl_client domain-name"
+
+
support for restriction "reject_maps_rbl" will be removed from
+Postfix; use "reject_rbl_client domain-name" instead
+
+
+
+
This feature was replaced because "MAPS RBL" is the name of a
+specific reputation service. The reject_rbl_client feature provides
+a superset of the reject_maps_rbl functionality.
This feature was removed because it was easy to get a false
+match when smtpd_recipient_restrictions was intended to match a
+remote SMTP client IP address.
That is, no restriction on HELO or EHLO syntax. Such restrictions
+ar rarely useful nowadays.
+
+
+
+
diff --git a/html/INSTALL.html b/html/INSTALL.html
index 6cd70d1..94d78ba 100644
--- a/html/INSTALL.html
+++ b/html/INSTALL.html
@@ -605,6 +605,9 @@ describe how to build Postfix with support for optional features:
diff --git a/html/LOCAL_RECIPIENT_README.html b/html/LOCAL_RECIPIENT_README.html
index a3a3636..5a614e0 100644
--- a/html/LOCAL_RECIPIENT_README.html
+++ b/html/LOCAL_RECIPIENT_README.html
@@ -57,7 +57,8 @@ all names or addresses of local recipients. A recipient address is
local when its domain matches $mydestination, $inet_interfaces or
$proxy_interfaces. If a local username or address is not listed in
$local_recipient_maps, then the Postfix SMTP server will reject
-the address with "User unknown in local recipient table".
+the address with "User unknown in local recipient table". Other
+Postfix interfaces may still accept an "unknown" recipient.
The default setting, shown below, assumes that you use the
default Postfix local(8) delivery agent for local delivery, where
diff --git a/html/MAILLOG_README.html b/html/MAILLOG_README.html
index be58e33..ab751f4 100644
--- a/html/MAILLOG_README.html
+++ b/html/MAILLOG_README.html
@@ -63,10 +63,16 @@ Postfix version.
/var/log/postfix.log. See also the "Logfile
rotation" section below for logfile management.
+
In the example below, specifying maillog_file_permissions is
+optional (Postfix 3.9 and later). The default value is 0600, i.e.,
+only the super-user can access the file; the value 0644 also
+adds 'group' and 'other' read access.
@@ -124,6 +130,10 @@ old logfile.
program is configured with the maillog_file_compressor parameter
(default: gzip).
+
The next time it logs an event, postlogd(8) will create a
+new logfile, with permissions specified with the maillog_file_permissions
+parameter (default: 0600).
+
Notes:
diff --git a/html/MILTER_README.html b/html/MILTER_README.html
index c69a5bf..b72fdb8 100644
--- a/html/MILTER_README.html
+++ b/html/MILTER_README.html
@@ -630,7 +630,7 @@ and protocol.
clients
The smtpd_milter_maps feature supports different Milter settings
-for different client IP addresses. Lookup results override the the
+for different client IP addresses. Lookup results override the
global smtpd_milters setting, and have the same syntax. For example,
to disable Milter settings for local address ranges:
Postfix can use MongoDB as a source for any of its lookups:
+aliases(5), virtual(5), canonical(5), etc. This allows you to keep
+information for your mail service in a replicated noSQL database
+with fine-grained access controls. By not storing it locally on the
+mail server, the administrators can maintain it from anywhere, and
+the users can control whatever bits of it you think appropriate.
+You can have multiple mail servers using the same information,
+without the hassle and delay of having to copy it to each.
These instructions assume that you build Postfix from source
+code as described in the INSTALL document. Some modification may
+be required if you build Postfix from a vendor-specific source
+package.
+
+
The Postfix MongoDB client requires the mongo-c-driver
+library. This can be built from source code from the
+mongod-c project, or this can be installed as a binary package
+from your OS distribution, typically named mongo-c-driver,
+mongo-c-driver-devel or libmongoc-dev.
+Installing the mongo-c-driver library may also install libbson
+as a dependency.
+
+
To build Postfix with mongodb map support, add to the CCARGS
+environment variable the options -DHAS_MONGODB and -I for the
+directory containing the mongodb headers, and specify the AUXLIBS_MONGODB
+with the libmongoc and libbson libraries, for example:
The 'make tidy' command is needed only if you have previously
+built Postfix without MongoDB support.
+
+
If your MongoDB shared library is in a directory that the RUN-TIME
+linker does not know about, add a "-Wl,-R,/path/to/directory" option
+after "-lbson-1.0". Then, just run 'make'.
Upon receiving mail for "admin@example.com" that isn't found in the
+/etc/postfix/virtual_aliases database, Postfix will search the
+MongoDB server/cluster listening at port 27017 on some_server. It
+will connect using the provided credentials, and search for any
+entries whose username is, or alias field has "admin@example.com".
+It will return the username attribute of those found, and build a
+list of their email addresses.
+
+
Notes:
+
+
+
+
As with projection (see below), the Postfix mongodb
+client automatically removes the top-level '_id' field from a
+result_attribute result.
+
+
The Postfix mongodb client will only parse result fields
+with data types UTF8, INT32, INT64 and ARRAY. Other fields will be
+ignored, with a warning in the logs.
As with projection (see below), the Postfix mongodb
+client automatically removes the top-level '_id' field from a
+result_attribute result.
+
+
The Postfix mongodb client will only parse result fields
+with data types UTF8, INT32, INT64 and ARRAY. Other fields will be
+ignored, with a warning in the logs.
This module also supports the use of more complex MongoDB
+projections. There may be some use cases where operations such as
+concatenation are necessary to be performed on the data retrieved
+from the database. Although it is encouraged to keep the database
+design simple enough so this is not necessary, postfix supports the
+use of MongoDB projections to achieve the goal.
This will return 'example.com/user' path built from the database fields.
+
+
A couple of considerations when using projections:
+
+
+
+
As with result_attribute, the Postfix mongodb client
+automatically removes the top-level '_id' field from a projection
+result.
+
+
The Postfix mongodb client will only parse fields with data
+types UTF8, INT32, INT64 and ARRAY. Other fields will be ignored,
+with a warning in the logs. It is suggested to exclude any unnecessary
+fields when using a projection.
If you have questions, send them to postfix-users@postfix.org.
+Please include relevant information about your Postfix setup:
+MongoDB-related output from postconf, which libraries you built
+with, and such. If your question involves your database contents,
+please include the applicable bits of some database entries.
Stephan Ferraro (Aionda GmbH) implemented an early version of the
+Postfix MongoDB client.
+
+
Hamid Maadani (Dextrous Technologies, LLC) added support for
+projections and %letter interpolation, and added documentation.
+
+
Wietse Venema adopted and restructured the code and documentation.
+
+
+
+
+
+
diff --git a/html/Makefile.in b/html/Makefile.in
index c5481f8..7f23ed7 100644
--- a/html/Makefile.in
+++ b/html/Makefile.in
@@ -20,7 +20,7 @@ CONFIG = access.5.html aliases.5.html canonical.5.html relocated.5.html \
transport.5.html virtual.5.html pcre_table.5.html regexp_table.5.html \
cidr_table.5.html tcp_table.5.html header_checks.5.html \
ldap_table.5.html lmdb_table.5.html mysql_table.5.html \
- pgsql_table.5.html memcache_table.5.html \
+ pgsql_table.5.html memcache_table.5.html mongodb_table.5.html \
master.5.html nisplus_table.5.html generic.5.html bounce.5.html \
postfix-wrapper.5.html sqlite_table.5.html socketmap_table.5.html
OTHER = postfix-manuals.html
@@ -298,6 +298,10 @@ memcache_table.5.html: ../proto/memcache_table
PATH=../mantools:$$PATH; \
srctoman - $? | $(AWK) | $(NROFF) -man | uniq | $(MAN2HTML) | postlink >$@
+mongodb_table.5.html: ../proto/mongodb_table
+ PATH=../mantools:$$PATH; \
+ srctoman - $? | $(AWK) | $(NROFF) -man | uniq | $(MAN2HTML) | postlink >$@
+
mysql_table.5.html: ../proto/mysql_table
PATH=../mantools:$$PATH; \
srctoman - $? | $(AWK) | $(NROFF) -man | uniq | $(MAN2HTML) | postlink >$@
diff --git a/html/POSTSCREEN_README.html b/html/POSTSCREEN_README.html
index bca2ef0..9bef8db 100644
--- a/html/POSTSCREEN_README.html
+++ b/html/POSTSCREEN_README.html
@@ -120,7 +120,7 @@ of time to deliver spam before their IP address becomes denylisted.
To speed up spam deliveries, zombies make compromises in their SMTP
protocol implementation. For example, they speak before their turn,
or they ignore responses from SMTP servers and continue sending
-mail even when the server tells them to go away.
+commands even when the server tells them to go away.
postscreen(8) uses a variety of measurements to recognize
zombies. First, postscreen(8) determines if the remote SMTP client
@@ -159,7 +159,7 @@ overhead for legitimate clients.
Before engaging in SMTP-level tests. postscreen(8) queries a
+
Before engaging in SMTP-level tests, postscreen(8) queries a
number of local deny and allowlists. These tests speed up the
handling of known clients.
diff --git a/html/TLS_README.html b/html/TLS_README.html
index eb9965a..a77f69d 100644
--- a/html/TLS_README.html
+++ b/html/TLS_README.html
@@ -2266,82 +2266,124 @@ describe the corresponding table syntax:
additional attributes are supported at this level.
may
Opportunistic TLS.
-The optional "ciphers", "exclude" and "protocols" attributes
-(available for opportunistic TLS with Postfix ≥ 2.6) override the
-"smtp_tls_ciphers", "smtp_tls_exclude_ciphers" and "smtp_tls_protocols"
-configuration parameters. At this level and higher, the optional
-"servername" attribute (available with Postfix ≥ 3.4) overrides the
-global "smtp_tls_servername" parameter, enabling per-destination
-configuration of the SNI extension sent to the remote SMTP server.
+The optional "ciphers", "exclude", and "protocols" attributes (available
+for opportunistic TLS with Postfix ≥ 2.6) and "connection_reuse"
+attribute (Postfix ≥ 3.4) override the "smtp_tls_ciphers",
+"smtp_tls_exclude_ciphers", "smtp_tls_protocols", and
+"smtp_tls_connection_reuse" configuration parameters. At this level and
+higher, the optional "servername" attribute (available with Postfix ≥
+3.4) overrides the global "smtp_tls_servername" parameter, enabling
+per-destination configuration of the SNI extension sent to the remote
+SMTP server. The optional "enable_rpk" attribute (Postfix ≥ 3.9)
+overrides the main.cfsmtp_tls_enable_rpk parameter. When opportunistic
+TLS handshakes fail, Postfix retries the connection with TLS disabled.
+This allows mail delivery to sites with non-interoperable TLS
+implementations.
encrypt
Mandatory encryption.
-Mail is delivered only if the remote SMTP server offers STARTTLS
-and the TLS handshake succeeds. At this level and higher, the optional
+Mail is delivered only if the remote SMTP server offers STARTTLS and the
+TLS handshake succeeds. At this level and higher, the optional
"protocols" attribute overrides the main.cfsmtp_tls_mandatory_protocols
-parameter, the optional "ciphers" attribute overrides the
-main.cfsmtp_tls_mandatory_ciphers parameter, and the optional
-"exclude" attribute (Postfix ≥ 2.6) overrides the main.cf
-smtp_tls_mandatory_exclude_ciphers parameter.
Opportunistic DANE TLS.
The TLS policy for the destination is obtained via TLSA records in
-DNSSEC. If no TLSA records are found, the effective security level
-used is may. If TLSA records are
-found, but none are usable, the effective security level is encrypt. When usable TLSA records
-are obtained for the remote SMTP server, SSLv2+3 are automatically
-disabled (see smtp_tls_mandatory_protocols), and the server certificate
-must match the TLSA records. RFC 7672 (DANE) TLS authentication
-and DNSSEC support is available with Postfix 2.11 and later.
+DNSSEC. If no TLSA records are found, the effective security level used
+is may. If TLSA records are found, but
+none are usable, the effective security level is encrypt. When usable TLSA records are
+obtained for the remote SMTP server, the server certificate must match
+the TLSA records (and the SNI name is unconditionally set to the TLSA
+base domain). RFC 7672 (DANE) TLS authentication and DNSSEC
+support is available with Postfix 2.11 and later. The optional
+"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf
+smtp_tls_connection_reuse parameter. When the effective security level
+used is may, the optional "ciphers",
+"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the
+"smtp_tls_ciphers", "smtp_tls_exclude_ciphers", and "smtp_tls_protocols"
+configuration parameters. When the effective security level used is encrypt, the optional "ciphers",
+"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the
+"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and
+"smtp_tls_mandatory_protocols" configuration parameters.
dane-only
Mandatory DANE TLS.
The TLS policy for the destination is obtained via TLSA records in
-DNSSEC. If no TLSA records are found, or none are usable, no
-connection is made to the server. When usable TLSA records are
-obtained for the remote SMTP server, SSLv2+3 are automatically disabled
-(see smtp_tls_mandatory_protocols), and the server certificate must
-match the TLSA records. RFC 7672 (DANE) TLS authentication and
-DNSSEC support is available with Postfix 2.11 and later.
+DNSSEC. If no TLSA records are found, or none are usable, no connection
+is made to the server. When usable TLSA records are obtained for the
+remote SMTP server, the server certificate must match the TLSA records.
+RFC 7672 (DANE) TLS authentication and DNSSEC support is available with
+Postfix 2.11 and later. The optional "ciphers", "exclude", and
+"protocols" attributes (Postfix ≥ 2.6) override the
+"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and
+"smtp_tls_mandatory_protocols" configuration parameters. The optional
+"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf
+smtp_tls_connection_reuse parameter.
fingerprint
Certificate
-fingerprint verification. Available with Postfix 2.5 and
-later. At this security level, there are no trusted Certification
-Authorities. The certificate trust chain, expiration date, ... are
-not checked. Instead, the optional match attribute, or else
-the main.cfsmtp_tls_fingerprint_cert_match parameter, lists
-the server certificate fingerprints or public key fingerprints
-(Postfix 2.9 and later). The
-digest algorithm used to calculate fingerprints is selected by the
-smtp_tls_fingerprint_digest parameter. Multiple fingerprints can
-be combined with a "|" delimiter in a single match attribute, or multiple
-match attributes can be employed. The ":" character is not used as a
-delimiter as it occurs between each pair of fingerprint (hexadecimal)
-digits.
+fingerprint verification. Available with Postfix 2.5 and later. At
+this security level, there are no trusted Certification Authorities. The
+certificate trust chain, expiration date, ... are not checked. Instead,
+the optional "match" attribute, or else the main.cf
+smtp_tls_fingerprint_cert_match parameter, lists the certificate
+fingerprints or the public key fingerprints (Postfix 2.9 and later) of
+acceptable server certificates. The digest algorithm used to calculate
+the fingerprint is selected by the smtp_tls_fingerprint_digest
+parameter. Multiple fingerprints can be combined with a "|" delimiter in
+a single match attribute, or multiple match attributes can be employed.
+The ":" character is not used as a delimiter as it occurs between each
+pair of fingerprint (hexadecimal) digits. The optional "ciphers",
+"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the
+"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and
+"smtp_tls_mandatory_protocols" configuration parameters. The optional
+"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf
+smtp_tls_connection_reuse parameter. The optional "enable_rpk"
+attribute (Postfix ≥ 3.9) overrides the main.cfsmtp_tls_enable_rpk
+parameter.
verify
Mandatory
-server certificate verification. Mail is delivered only if the
-TLS handshake succeeds, if the remote SMTP server certificate can
-be validated (not expired or revoked, and signed by a trusted
-Certification Authority), and if the server certificate name matches
-the optional "match" attribute (or the main.cfsmtp_tls_verify_cert_match
-parameter value when no optional "match" attribute is specified).
-With Postfix ≥ 2.11 the "tafile" attribute optionally modifies
-trust chain verification in the same manner as the
-"smtp_tls_trust_anchor_file" parameter. The "tafile" attribute
-may be specified multiple times to load multiple trust-anchor
-files.
+server certificate verification. Mail is delivered only if the TLS
+handshake succeeds, the remote SMTP server certificate chain can be
+validated, and a DNS name in the certificate matches the specified match
+criteria. At this security level, DNS MX lookups are presumed to be
+secure enough, and the name verified in the server certificate is
+potentially obtained via unauthenticated DNS MX lookups. The server
+certificate name must match either the optional "match" attribute, or
+else the main.cfsmtp_tls_verify_cert_match parameter value. With
+Postfix ≥ 2.11 the "tafile" attribute optionally modifies trust chain
+verification in the same manner as the "smtp_tls_trust_anchor_file"
+parameter. The "tafile" attribute may be specified multiple times to
+load multiple trust-anchor files. The optional "connection_reuse"
+attribute (Postfix ≥ 3.4) overrides the main.cf
+smtp_tls_connection_reuse parameter.
secure
Secure certificate
-verification. Mail is delivered only if the TLS handshake succeeds,
-and DNS forgery resistant remote SMTP certificate verification succeeds
-(not expired or revoked, and signed by a trusted Certification Authority),
-and if the server certificate name matches the optional "match" attribute
-(or the main.cfsmtp_tls_secure_cert_match parameter value when no optional
-"match" attribute is specified). With Postfix ≥ 2.11 the "tafile"
-attribute optionally modifies trust chain verification in the same manner
-as the "smtp_tls_trust_anchor_file" parameter. The "tafile" attribute
-may be specified multiple times to load multiple trust-anchor
-files.
+verification.
+Mail is delivered only if the TLS handshake succeeds, the remote SMTP
+server certificate chain can be validated, and a DNS name in the
+certificate matches the specified match criteria. At this security
+level, DNS MX lookups, though potentially used to determine the
+candidate next-hop gateway IP addresses, are not presumed to be
+secure enough for TLS peername verification. Instead, the default name
+verified in the server certificate is obtained directly from the
+next-hop, or is explicitly specified via the optional "match" attribute
+which overrides the main.cfsmtp_tls_secure_cert_match parameter. The
+optional "ciphers", "exclude", and "protocols" attributes (Postfix ≥
+2.6) override the "smtp_tls_mandatory_ciphers",
+"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols"
+configuration parameters. With Postfix ≥ 2.11 the "tafile" attribute
+optionally modifies trust chain verification in the same manner as the
+"smtp_tls_trust_anchor_file" parameter. The "tafile" attribute may be
+specified multiple times to load multiple trust-anchor files. The
+optional "connection_reuse" attribute (Postfix ≥ 3.4) overrides the
+main.cfsmtp_tls_connection_reuse parameter.
diff --git a/html/access.5.html b/html/access.5.html
index 24f844b..427eacf 100644
--- a/html/access.5.html
+++ b/html/access.5.html
@@ -60,7 +60,7 @@ ACCESS(5) ACCESS(5)
A logical line starts with non-whitespace text. A line that
starts with whitespace continues a logical line.
-EMAIL ADDRESS PATTERNS
+EMAIL ADDRESS PATTERNS IN INDEXED TABLES
With lookups from indexed files such as DB or DBM, or from networked
tables such as NIS, LDAP or SQL, patterns are tried in the order as
listed below:
@@ -92,7 +92,7 @@ ACCESS(5) ACCESS(5)
(e.g., user+foo@domain), the lookup order becomes: user+foo@domain,
user@domain, domain, user+foo@, and user@.
-HOST NAME/ADDRESS PATTERNS
+HOST NAME/ADDRESS PATTERNS IN INDEXED TABLES
With lookups from indexed files such as DB or DBM, or from networked
tables such as NIS, LDAP or SQL, the following lookup patterns are
examined in the order as listed:
diff --git a/html/aliases.5.html b/html/aliases.5.html
index 27cfe69..79d01b4 100644
--- a/html/aliases.5.html
+++ b/html/aliases.5.html
@@ -14,9 +14,13 @@ ALIASES(5) ALIASES(5)
newaliasesDESCRIPTION
- The aliases(5) table provides a system-wide mechanism to redirect mail
- for local recipients. The redirections are processed by the Postfix
- local(8) delivery agent.
+ The optional aliases(5) table (alias_maps) redirects mail for local
+ recipients. The redirections are processed by the Postfix local(8)
+ delivery agent.
+
+ This is unlike virtual(5) aliasing (virtual_alias_maps) which applies
+ to all recipients: local(8), virtual, and remote, and which is imple-
+ mented by the cleanup(8) daemon.
Normally, the aliases(5) table is specified as a text file that serves
as input to the postalias(1) command. The result, an indexed file in
@@ -144,7 +148,9 @@ ALIASES(5) ALIASES(5)
"newaliases" or with "sendmail -bi".
alias_maps (see 'postconf -d' output)
- The alias databases that are used for local(8) delivery.
+ Optional lookup tables with aliases that apply only to local(8)
+ recipients; this is unlike virtual_alias_maps that apply to all
+ recipients: local(8), virtual, and remote.
allow_mail_to_commands (alias, forward)
Restrict local(8) mail delivery to external commands.
diff --git a/html/canonical.5.html b/html/canonical.5.html
index 68b6532..d051297 100644
--- a/html/canonical.5.html
+++ b/html/canonical.5.html
@@ -56,7 +56,7 @@ CANONICAL(5) CANONICAL(5)
systems.
The canonical(5) mapping is not to be confused with virtual alias sup-
- port or with local aliasing. To change the destination but not the
+ port or with local aliasing. To change the destination but not the
headers, use the virtual(5) or aliases(5) map instead.
CASE FOLDING
@@ -211,20 +211,18 @@ CANONICAL(5) CANONICAL(5)
Other parameters of interest:
inet_interfaces (all)
- The network interface addresses that this mail system receives
- mail on.
+ The local network interface addresses that this mail system
+ receives mail on.
local_header_rewrite_clients (permit_inet_interfaces)
- Rewrite message header addresses in mail from these clients and
- update incomplete addresses with the domain name in $myorigin or
- $mydomain; either don't rewrite message headers from other
- clients at all, or rewrite message headers and update incomplete
- addresses with the domain specified in the remote_header_re-
- write_domain parameter.
+ Rewrite or add message headers in mail from these clients,
+ updating incomplete addresses with the domain name in $myorigin
+ or $mydomain, and adding missing headers.
proxy_interfaces (empty)
- The network interface addresses that this mail system receives
- mail on by way of a proxy or network address translation unit.
+ The remote network interface addresses that this mail system
+ receives mail on by way of a proxy or network address transla-
+ tion unit.
masquerade_classes (envelope_sender, header_sender, header_recipient)
What addresses are subject to address masquerading.
@@ -253,15 +251,17 @@ CANONICAL(5) CANONICAL(5)
set to "-".
remote_header_rewrite_domain (empty)
- Don't rewrite message headers from remote clients at all when
- this parameter is empty; otherwise, rewrite message headers and
- append the specified domain name to incomplete addresses.
+ Rewrite or add message headers in mail from remote clients if
+ the remote_header_rewrite_domain parameter value is non-empty,
+ updating incomplete addresses with the domain specified in the
+ remote_header_rewrite_domain parameter, and adding missing head-
+ ers.
SEE ALSOcleanup(8), canonicalize and enqueue mail
postmap(1), Postfix lookup table manager
postconf(5), configuration parameters
- virtual(5), virtual aliasing
+ virtual(5), virtual aliasingREADME FILESDATABASE_README, Postfix lookup table overview
diff --git a/html/cleanup.8.html b/html/cleanup.8.html
index 6e662f6..e4ecd43 100644
--- a/html/cleanup.8.html
+++ b/html/cleanup.8.html
@@ -172,26 +172,26 @@ CLEANUP(8) CLEANUP(8)
BEFORE QUEUE MILTER CONTROLS
As of version 2.3, Postfix supports the Sendmail version 8 Milter (mail
- filter) protocol. When mail is not received via the smtpd(8) server,
+ filter) protocol. When mail is not received via the smtpd(8) server,
the cleanup(8) server will simulate SMTP events to the extent that this
is possible. For details see the MILTER_README document.
non_smtpd_milters (empty)
- A list of Milter (mail filter) applications for new mail that
+ A list of Milter (mail filter) applications for new mail that
does not arrive via the Postfix smtpd(8) server.
milter_protocol (6)
- The mail filter protocol version and optional protocol exten-
- sions for communication with a Milter application; prior to
+ The mail filter protocol version and optional protocol exten-
+ sions for communication with a Milter application; prior to
Postfix 2.6 the default protocol is 2.
milter_default_action (tempfail)
- The default action when a Milter (mail filter) response is
- unavailable (for example, bad Postfix configuration or Milter
+ The default action when a Milter (mail filter) response is
+ unavailable (for example, bad Postfix configuration or Milter
failure).
milter_macro_daemon_name ($myhostname)
- The {daemon_name} macro value for Milter (mail filter) applica-
+ The {daemon_name} macro value for Milter (mail filter) applica-
tions.
milter_macro_v ($mail_name $mail_version)
@@ -202,45 +202,45 @@ CLEANUP(8) CLEANUP(8)
tion, and for negotiating protocol options.
milter_command_timeout (30s)
- The time limit for sending an SMTP command to a Milter (mail
+ The time limit for sending an SMTP command to a Milter (mail
filter) application, and for receiving the response.
milter_content_timeout (300s)
- The time limit for sending message content to a Milter (mail
+ The time limit for sending message content to a Milter (mail
filter) application, and for receiving the response.
milter_connect_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after completion of an SMTP connection.
milter_helo_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after the SMTP HELO or EHLO command.
milter_mail_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after the SMTP MAIL FROM command.
milter_rcpt_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after the SMTP RCPT TO command.
milter_data_macros (see 'postconf -d' output)
- The macros that are sent to version 4 or higher Milter (mail
+ The macros that are sent to version 4 or higher Milter (mail
filter) applications after the SMTP DATA command.
milter_unknown_command_macros (see 'postconf -d' output)
- The macros that are sent to version 3 or higher Milter (mail
+ The macros that are sent to version 3 or higher Milter (mail
filter) applications after an unknown SMTP command.
milter_end_of_data_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after the message end-of-data.
Available in Postfix version 2.5 and later:
milter_end_of_header_macros (see 'postconf -d' output)
- The macros that are sent to Milter (mail filter) applications
+ The macros that are sent to Milter (mail filter) applications
after the end of the message header.
Available in Postfix version 2.7 and later:
@@ -252,8 +252,8 @@ CLEANUP(8) CLEANUP(8)
Available in Postfix version 3.1 and later:
milter_macro_defaults (empty)
- Optional list of name=value pairs that specify default values
- for arbitrary macros that Postfix may send to Milter applica-
+ Optional list of name=value pairs that specify default values
+ for arbitrary macros that Postfix may send to Milter applica-
tions.
MIME PROCESSING CONTROLS
@@ -279,82 +279,83 @@ CLEANUP(8) CLEANUP(8)
ing information.
strict_mime_encoding_domain (no)
- Reject mail with invalid Content-Transfer-Encoding: information
+ Reject mail with invalid Content-Transfer-Encoding: information
for the message/* or multipart/* MIME content types.
Available in Postfix version 2.5 and later:
detect_8bit_encoding_header (yes)
- Automatically detect 8BITMIME body content by looking at Con-
- tent-Transfer-Encoding: message headers; historically, this
+ Automatically detect 8BITMIME body content by looking at Con-
+ tent-Transfer-Encoding: message headers; historically, this
behavior was hard-coded to be "always on".
AUTOMATIC BCC RECIPIENT CONTROLS
- Postfix can automatically add BCC (blind carbon copy) when mail enters
+ Postfix can automatically add BCC (blind carbon copy) when mail enters
the mail system:
always_bcc (empty)
- Optional address that receives a "blind carbon copy" of each
+ Optional address that receives a "blind carbon copy" of each
message that is received by the Postfix mail system.
Available in Postfix version 2.1 and later:
sender_bcc_maps (empty)
- Optional BCC (blind carbon-copy) address lookup tables, indexed
- by sender address.
+ Optional BCC (blind carbon-copy) address lookup tables, indexed
+ by envelope sender address.
recipient_bcc_maps (empty)
- Optional BCC (blind carbon-copy) address lookup tables, indexed
- by recipient address.
+ Optional BCC (blind carbon-copy) address lookup tables, indexed
+ by envelope recipient address.
ADDRESS TRANSFORMATION CONTROLS
- Address rewriting is delegated to the trivial-rewrite(8) daemon. The
+ Address rewriting is delegated to the trivial-rewrite(8) daemon. The
cleanup(8) server implements table driven address mapping.
empty_address_recipient (MAILER-DAEMON)
The recipient of mail addressed to the null address.
canonical_maps (empty)
- Optional address mapping lookup tables for message headers and
+ Optional address mapping lookup tables for message headers and
envelopes.
recipient_canonical_maps (empty)
- Optional address mapping lookup tables for envelope and header
+ Optional address mapping lookup tables for envelope and header
recipient addresses.
sender_canonical_maps (empty)
- Optional address mapping lookup tables for envelope and header
+ Optional address mapping lookup tables for envelope and header
sender addresses.
masquerade_classes (envelope_sender, header_sender, header_recipient)
What addresses are subject to address masquerading.
masquerade_domains (empty)
- Optional list of domains whose subdomain structure will be
+ Optional list of domains whose subdomain structure will be
stripped off in email addresses.
masquerade_exceptions (empty)
- Optional list of user names that are not subjected to address
- masquerading, even when their addresses match $masquer-
+ Optional list of user names that are not subjected to address
+ masquerading, even when their addresses match $masquer-
ade_domains.
propagate_unmatched_extensions (canonical, virtual)
- What address lookup tables copy an address extension from the
+ What address lookup tables copy an address extension from the
lookup key to the lookup result.
Available before Postfix version 2.0:
virtual_maps (empty)
- Optional lookup tables with a) names of domains for which all
- addresses are aliased to addresses in other local or remote
+ Optional lookup tables with a) names of domains for which all
+ addresses are aliased to addresses in other local or remote
domains, and b) addresses that are aliased to addresses in other
local or remote domains.
Available in Postfix version 2.0 and later:
virtual_alias_maps ($virtual_maps)
- Optional lookup tables that alias specific mail addresses or
- domains to other local or remote address.
+ Optional lookup tables with aliases that apply to all recipi-
+ ents: local(8), virtual, and remote; this is unlike alias_maps
+ that apply only to local(8) recipients.
Available in Postfix version 2.2 and later:
@@ -371,9 +372,11 @@ CLEANUP(8) CLEANUP(8)
ping.
remote_header_rewrite_domain (empty)
- Don't rewrite message headers from remote clients at all when
- this parameter is empty; otherwise, rewrite message headers and
- append the specified domain name to incomplete addresses.
+ Rewrite or add message headers in mail from remote clients if
+ the remote_header_rewrite_domain parameter value is non-empty,
+ updating incomplete addresses with the domain specified in the
+ remote_header_rewrite_domain parameter, and adding missing head-
+ ers.
RESOURCE AND RATE CONTROLSduplicate_filter_limit (1000)
@@ -433,7 +436,7 @@ CLEANUP(8) CLEANUP(8)
smtputf8_enable (yes)
Enable preliminary SMTPUTF8 support for the protocols described
- in RFC 6531..6533.
+ in RFC 6531, RFC 6532, and RFC 6533.
smtputf8_autodetect_classes (sendmail, verify)
Detect that a message requires SMTPUTF8 support for the speci-
@@ -520,6 +523,13 @@ CLEANUP(8) CLEANUP(8)
The email address form that will be used in non-debug logging
(info, warning, etc.).
+ Available in Postfix 3.9 and later:
+
+ force_mime_input_conversion (no)
+ Convert body content that claims to be 8-bit into quoted-print-
+ able, before header_checks, body_checks, Milters, and before
+ after-queue content filters.
+
FILES
/etc/postfix/canonical*, canonical mapping table
/etc/postfix/virtual*, virtual mapping table
diff --git a/html/dnsblog.8.html b/html/dnsblog.8.html
index 250b046..2028fa1 100644
--- a/html/dnsblog.8.html
+++ b/html/dnsblog.8.html
@@ -49,8 +49,8 @@ DNSBLOG(8) DNSBLOG(8)
request before it is terminated by a built-in watchdog timer.
postscreen_dnsbl_sites (empty)
- Optional list of DNS allow/denylist domains, filters and weight
- factors.
+ Optional list of patterns with DNS allow/denylist domains, fil-
+ ters and weight factors.
ipc_timeout (3600s)
The time limit for sending or receiving information over an
diff --git a/html/generic.5.html b/html/generic.5.html
index 813d47e..c1a8a30 100644
--- a/html/generic.5.html
+++ b/html/generic.5.html
@@ -182,25 +182,26 @@ GENERIC(5) GENERIC(5)
Other parameters of interest:
inet_interfaces (all)
- The network interface addresses that this mail system receives
- mail on.
+ The local network interface addresses that this mail system
+ receives mail on.
proxy_interfaces (empty)
- The network interface addresses that this mail system receives
- mail on by way of a proxy or network address translation unit.
+ The remote network interface addresses that this mail system
+ receives mail on by way of a proxy or network address transla-
+ tion unit.
mydestination ($myhostname, localhost.$mydomain, localhost)
- The list of domains that are delivered via the $local_transport
+ The list of domains that are delivered via the $local_transport
mail delivery transport.
myorigin ($myhostname)
- The domain name that locally-posted mail appears to come from,
+ The domain name that locally-posted mail appears to come from,
and that locally posted mail is delivered to.
owner_request_special (yes)
- Enable special treatment for owner-listname entries in the
+ Enable special treatment for owner-listname entries in the
aliases(5) file, and don't split owner-listname and list-
- name-request address localparts when the recipient_delimiter is
+ name-request address localparts when the recipient_delimiter is
set to "-".
SEE ALSO
diff --git a/html/header_checks.5.html b/html/header_checks.5.html
index 6bb114a..c1c8b17 100644
--- a/html/header_checks.5.html
+++ b/html/header_checks.5.html
@@ -392,40 +392,31 @@ HEADER_CHECKS(5) HEADER_CHECKS(5)
Return-Path:.
CONFIGURATION PARAMETERS
- body_checks
- Lookup tables with content filter rules for message body lines.
- These filters see one physical line at a time, in chunks of at
- most $line_length_limit bytes.
-
- body_checks_size_limit
- The amount of content per message body segment (attachment) that
- is subjected to $body_checks filtering.
-
- header_checks
-
- mime_header_checks (default: $header_checks)
-
- nested_header_checks (default: $header_checks)
- Lookup tables with content filter rules for message header
- lines: respectively, these are applied to the initial message
- headers (not including MIME headers), to the MIME headers any-
- where in the message, and to the initial headers of attached
- messages.
-
- Note: these filters see one logical message header at a time,
- even when a message header spans multiple lines. Message headers
- that are longer than $header_size_limit characters are trun-
- cated.
-
- disable_mime_input_processing
- While receiving mail, give no special treatment to MIME related
- message headers; all text after the initial message headers is
- considered to be part of the message body. This means that
- header_checks is applied to all the initial message headers, and
- that body_checks is applied to the remainder of the message.
-
- Note: when used in this manner, body_checks will process a
- multi-line message header one line at a time.
+ body_checks (empty)
+ Optional lookup tables for content inspection as specified in
+ the body_checks(5) manual page.
+
+ body_checks_size_limit (51200)
+ How much text in a message body segment (or attachment, if you
+ prefer to use that term) is subjected to body_checks inspection.
+
+ header_checks (empty)
+ Optional lookup tables for content inspection of primary
+ non-MIME message headers, as specified in the header_checks(5)
+ manual page.
+
+ mime_header_checks ($header_checks)
+ Optional lookup tables for content inspection of MIME related
+ message headers, as described in the header_checks(5) manual
+ page.
+
+ nested_header_checks ($header_checks)
+ Optional lookup tables for content inspection of non-MIME mes-
+ sage headers in attached messages, as described in the
+ header_checks(5) manual page.
+
+ disable_mime_input_processing (no)
+ Turn off MIME processing while receiving mail.
EXAMPLES
Header pattern to block attachments with bad file name extensions. For
diff --git a/html/index.html b/html/index.html
index 68edc59..a7da6cb 100644
--- a/html/index.html
+++ b/html/index.html
@@ -53,6 +53,8 @@ configuration examples
-SMTP(8) SMTP(8)
+SMTP,(LMTP) SMTP,(LMTP)
NAME
- smtp - Postfix SMTP+LMTP client
+ smtp, lmtp - Postfix SMTP+LMTP client
SYNOPSISsmtp [generic Postfix daemon options] [flags=DORX]
+ lmtp [generic Postfix daemon options] [flags=DORX]
+
DESCRIPTION
The Postfix SMTP+LMTP client implements the SMTP and LMTP mail delivery
protocols. It processes message delivery requests from the queue man-
ager. Each request specifies a queue file, a sender address, a domain
or host to deliver to, and recipient information. This program expects
- to be run from the master(8) process manager.
+ to be run from the master(8) process manager. The process name, smtp or
+ lmtp, controls the protocol, and the names of the configuration parame-
+ ters that will be used.
The SMTP+LMTP client updates the queue file and marks recipients as
finished, or it informs the queue manager that delivery should be tried
again at a later time. Delivery status reports are sent to the
bounce(8), defer(8) or trace(8) daemon as appropriate.
- The SMTP+LMTP client looks up a list of mail exchanger addresses for
- the destination host, sorts the list by preference, and connects to
- each listed address until it finds a server that responds.
-
- When a server is not reachable, or when mail delivery fails due to a
- recoverable error condition, the SMTP+LMTP client will try to deliver
- the mail to an alternate host.
+ The server lookup strategy is different for SMTP and LMTP, as described
+ in the sections "SMTP SERVER LOOKUP" and "LMTP SERVER LOOKUP".
- After a successful mail transaction, a connection may be saved to the
- scache(8) connection cache server, so that it may be used by any
+ After a successful mail transaction, a connection may be saved to the
+ scache(8) connection cache server, so that it may be used by any
SMTP+LMTP client for a subsequent transaction.
- By default, connection caching is enabled temporarily for destinations
+ By default, connection caching is enabled temporarily for destinations
that have a high volume of mail in the active queue. Connection caching
can be enabled permanently for specific destinations.
-SMTP DESTINATION SYNTAX
- The Postfix SMTP+LMTP client supports multiple destinations separated
- by comma or whitespace (Postfix 3.5 and later). SMTP destinations have
- the following form:
+SMTP SERVER LOOKUP
+ The Postfix SMTP client supports multiple destinations separated by
+ comma or whitespace (Postfix 3.5 and later). Each destination is tried
+ in the specified order.
+
+ SMTP destinations have the following form:
domainname
- domainname:port
- Look up the mail exchangers for the specified domain, and con-
- nect to the specified port (default: smtp).
+ domainname:service
+ Look up the mail exchangers for the specified domain, and con-
+ nect to the specified service (default: smtp). Optionally, mail
+ exchangers may be looked up with SRV queries instead of MX; this
+ requires that service is given in symbolic form.
[hostname]
- [hostname]:port
- Look up the address(es) of the specified host, and connect to
- the specified port (default: smtp).
+ [hostname]:service
+ Look up the address(es) for the specified host, and connect to
+ the specified service (default: smtp).
[address]
- [address]:port
+ [address]:service
Connect to the host at the specified address, and connect to the
- specified port (default: smtp). An IPv6 address must be format-
- ted as [ipv6:address].
+ specified service (default: smtp). An IPv6 address must be for-
+ matted as [ipv6:address].
-LMTP DESTINATION SYNTAX
- The Postfix SMTP+LMTP client supports multiple destinations separated
- by comma or whitespace (Postfix 3.5 and later). LMTP destinations have
- the following form:
+LMTP SERVER LOOKUP
+ The Postfix LMTP client supports multiple destinations separated by
+ comma or whitespace (Postfix 3.5 and later). Each destination is tried
+ in the specified order.
+
+ LMTP destinations have the following form:
unix:pathname
- Connect to the local UNIX-domain server that is bound to the
- specified pathname. If the process runs chrooted, an absolute
+ Connect to the local UNIX-domain server that is bound to the
+ specified pathname. If the process runs chrooted, an absolute
pathname is interpreted relative to the Postfix queue directory.
+ inet:domainname
+
+ inet:domainname:service
+ Look up the LMTP servers for the specified domain and service
+ (default: lmtp). This form is supported when SRV lookups are
+ enabled, and requires that service is in symbolic form.
+
inet:hostname
- inet:hostname:port
+ inet:hostname:service
+ Look up the address(es) for the specified host, and connect to
+ the specified service (default: lmtp). When SRV lookups are
+ enabled, use the form [hostname] to force address lookups.
inet:[address]
- inet:[address]:port
- Connect to the specified TCP port on the specified local or
- remote host. If no port is specified, connect to the port
- defined as lmtp in services(4). If no such service is found,
- the lmtp_tcp_port configuration parameter (default value of 24)
- will be used. An IPv6 address must be formatted as
+ inet:[address]:service
+ Connect to the specified local or remote host and service
+ (default: lmtp). An IPv6 address must be formatted as
[ipv6:address].
SINGLE-RECIPIENT DELIVERY
@@ -136,10 +148,9 @@ SMTP(8) SMTP(8)
This feature is available as of Postfix 3.5.
SECURITY
- The SMTP+LMTP client is moderately security-sensitive. It
- talks to SMTP or LMTP servers and to DNS servers on the
- network. The SMTP+LMTP client can be run chrooted at fixed
- low privilege.
+ The SMTP+LMTP client is moderately security-sensitive. It talks to SMTP
+ or LMTP servers and to DNS servers on the network. The SMTP+LMTP client
+ can be run chrooted at fixed low privilege.
STANDARDSRFC 821 (SMTP protocol)
@@ -180,20 +191,19 @@ SMTP(8) SMTP(8)
for all destinations that map onto the same IP address and TCP port.
CONFIGURATION PARAMETERS
- Before Postfix version 2.3, the LMTP client is a separate program that
- implements only a subset of the functionality available with SMTP:
- there is no support for TLS, and connections are cached in-process,
- making it ineffective when the client is used for multiple domains.
+ Postfix versions 2.3 and later implement the SMTP and LMTP client with
+ the same program, and choose the protocol and configuration parameters
+ based on the process name, smtp or lmtp.
Most smtp_xxx configuration parameters have an lmtp_xxx "mirror" param-
- eter for the equivalent LMTP feature. This document describes only
+ eter for the equivalent LMTP feature. This document describes only
those LMTP-related parameters that aren't simply "mirror" parameters.
- Changes to main.cf are picked up automatically, as smtp(8) processes
+ Changes to main.cf are picked up automatically, as smtp(8) processes
run for only a limited amount of time. Use the command "postfix reload"
to speed up a change.
- The text below provides only a parameter summary. See postconf(5) for
+ The text below provides only a parameter summary. See postconf(5) for
more details including examples.
COMPATIBILITY CONTROLS
@@ -214,8 +224,8 @@ SMTP(8) SMTP(8)
will send via SMTP.
smtp_pix_workaround_delay_time (10s)
- How long the Postfix SMTP client pauses before sending
- ".<CR><LF>" in order to work around the PIX firewall
+ How long the Postfix SMTP client pauses before sending
+ ".<CR><LF>" in order to work around the PIX firewall
"<CR><LF>.<CR><LF>" bug.
smtp_pix_workaround_threshold_time (500s)
@@ -224,19 +234,19 @@ SMTP(8) SMTP(8)
delivery through firewalls with "smtp fixup" mode turned on.
smtp_pix_workarounds (disable_esmtp, delay_dotcrlf)
- A list that specifies zero or more workarounds for CISCO PIX
+ A list that specifies zero or more workarounds for CISCO PIX
firewall bugs.
smtp_pix_workaround_maps (empty)
- Lookup tables, indexed by the remote SMTP server address, with
+ Lookup tables, indexed by the remote SMTP server address, with
per-destination workarounds for CISCO PIX firewall bugs.
smtp_quote_rfc821_envelope (yes)
- Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
+ Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO
commands as required by RFC 5321.
smtp_reply_filter (empty)
- A mechanism to transform replies from remote SMTP servers one
+ A mechanism to transform replies from remote SMTP servers one
line at a time.
smtp_skip_5xx_greeting (yes)
@@ -248,68 +258,68 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.0 and earlier:
smtp_skip_4xx_greeting (yes)
- Skip SMTP servers that greet with a 4XX status code (go away,
+ Skip SMTP servers that greet with a 4XX status code (go away,
try again later).
Available in Postfix version 2.2 and later:
smtp_discard_ehlo_keyword_address_maps (empty)
- Lookup tables, indexed by the remote SMTP server address, with
- case insensitive lists of EHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote SMTP server address, with
+ case insensitive lists of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
smtp_discard_ehlo_keywords (empty)
- A case insensitive list of EHLO keywords (pipelining, starttls,
+ A case insensitive list of EHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix SMTP client will ignore in the EHLO
response from a remote SMTP server.
smtp_generic_maps (empty)
- Optional lookup tables that perform address rewriting in the
- Postfix SMTP client, typically to transform a locally valid
- address into a globally valid address when sending mail across
+ Optional lookup tables that perform address rewriting in the
+ Postfix SMTP client, typically to transform a locally valid
+ address into a globally valid address when sending mail across
the Internet.
Available in Postfix version 2.2.9 and later:
smtp_cname_overrides_servername (version dependent)
- When the remote SMTP servername is a DNS CNAME, replace the
- servername with the result from CNAME expansion for the purpose
- of logging, SASL password lookup, TLS policy decisions, or TLS
+ When the remote SMTP servername is a DNS CNAME, replace the
+ servername with the result from CNAME expansion for the purpose
+ of logging, SASL password lookup, TLS policy decisions, or TLS
certificate verification.
Available in Postfix version 2.3 and later:
lmtp_discard_lhlo_keyword_address_maps (empty)
- Lookup tables, indexed by the remote LMTP server address, with
- case insensitive lists of LHLO keywords (pipelining, starttls,
+ Lookup tables, indexed by the remote LMTP server address, with
+ case insensitive lists of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
lmtp_discard_lhlo_keywords (empty)
- A case insensitive list of LHLO keywords (pipelining, starttls,
+ A case insensitive list of LHLO keywords (pipelining, starttls,
auth, etc.) that the Postfix LMTP client will ignore in the LHLO
response from a remote LMTP server.
Available in Postfix version 2.4.4 and later:
send_cyrus_sasl_authzid (no)
- When authenticating to a remote SMTP or LMTP server with the
- default setting "no", send no SASL authoriZation ID (authzid);
- send only the SASL authentiCation ID (authcid) plus the auth-
+ When authenticating to a remote SMTP or LMTP server with the
+ default setting "no", send no SASL authoriZation ID (authzid);
+ send only the SASL authentiCation ID (authcid) plus the auth-
cid's password.
Available in Postfix version 2.5 and later:
smtp_header_checks (empty)
- Restricted header_checks(5) tables for the Postfix SMTP client.
+ Restricted header_checks(5) tables for the Postfix SMTP client.
smtp_mime_header_checks (empty)
- Restricted mime_header_checks(5) tables for the Postfix SMTP
+ Restricted mime_header_checks(5) tables for the Postfix SMTP
client.
smtp_nested_header_checks (empty)
- Restricted nested_header_checks(5) tables for the Postfix SMTP
+ Restricted nested_header_checks(5) tables for the Postfix SMTP
client.
smtp_body_checks (empty)
@@ -318,7 +328,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.6 and later:
tcp_windowsize (0)
- An optional workaround for routers that break TCP window scal-
+ An optional workaround for routers that break TCP window scal-
ing.
Available in Postfix version 2.8 and later:
@@ -329,16 +339,16 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.9 - 3.6:
smtp_per_record_deadline (no)
- Change the behavior of the smtp_*_timeout time limits, from a
- time limit per read or write system call, to a time limit to
- send or receive a complete record (an SMTP command line, SMTP
- response line, SMTP message content line, or TLS protocol mes-
+ Change the behavior of the smtp_*_timeout time limits, from a
+ time limit per read or write system call, to a time limit to
+ send or receive a complete record (an SMTP command line, SMTP
+ response line, SMTP message content line, or TLS protocol mes-
sage).
Available in Postfix version 2.9 and later:
smtp_send_dummy_mail_auth (no)
- Whether or not to append the "AUTH=<>" option to the MAIL FROM
+ Whether or not to append the "AUTH=<>" option to the MAIL FROM
command in SASL-authenticated SMTP sessions.
Available in Postfix version 2.11 and later:
@@ -349,7 +359,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 3.0 and later:
smtp_delivery_status_filter ($default_delivery_status_filter)
- Optional filter for the smtp(8) delivery agent to change the
+ Optional filter for the smtp(8) delivery agent to change the
delivery status code or explanatory text of successful or unsuc-
cessful deliveries.
@@ -359,38 +369,38 @@ SMTP(8) SMTP(8)
Available in Postfix version 3.3 and later:
smtp_balance_inet_protocols (yes)
- When a remote destination resolves to a combination of IPv4 and
+ When a remote destination resolves to a combination of IPv4 and
IPv6 addresses, ensure that the Postfix SMTP client can try both
address types before it runs into the smtp_mx_address_limit.
Available in Postfix 3.5 and later:
info_log_address_format (external)
- The email address form that will be used in non-debug logging
+ The email address form that will be used in non-debug logging
(info, warning, etc.).
Available in Postfix 3.6 and later:
dnssec_probe (ns:.)
- The DNS query type (default: "ns") and DNS query name (default:
+ The DNS query type (default: "ns") and DNS query name (default:
".") that Postfix may use to determine whether DNSSEC validation
is available.
- known_tcp_ports (lmtp=24, smtp=25, smtps=submissions=465, submis-
+ known_tcp_ports (lmtp=24, smtp=25, smtps=submissions=465, submis-sion=587)
- Optional setting that avoids lookups in the services(5) data-
+ Optional setting that avoids lookups in the services(5) data-
base.
Available in Postfix version 3.7 and later:
smtp_per_request_deadline (no)
- Change the behavior of the smtp_*_timeout time limits, from a
- time limit per plaintext or TLS read or write call, to a com-
- bined time limit for sending a complete SMTP request and for
+ Change the behavior of the smtp_*_timeout time limits, from a
+ time limit per plaintext or TLS read or write call, to a com-
+ bined time limit for sending a complete SMTP request and for
receiving a complete SMTP response.
smtp_min_data_rate (500)
- The minimum plaintext data transfer rate in bytes/second for
+ The minimum plaintext data transfer rate in bytes/second for
DATA requests, when deadlines are enabled with
smtp_per_request_deadline.
@@ -400,16 +410,16 @@ SMTP(8) SMTP(8)
Available in Postfix version 3.8 and later:
use_srv_lookup (empty)
- Enables discovery for the specified service(s) using DNS SRV
+ Enables discovery for the specified service(s) using DNS SRV
records.
ignore_srv_lookup_error (no)
- When SRV record lookup fails, fall back to MX or IP address
+ When SRV record lookup fails, fall back to MX or IP address
lookup as if SRV record lookup was not enabled.
allow_srv_lookup_fallback (no)
- When SRV record lookup fails or no SRV record exists, fall back
- to MX or IP address lookup as if SRV record lookup was not
+ When SRV record lookup fails or no SRV record exists, fall back
+ to MX or IP address lookup as if SRV record lookup was not
enabled.
MIME PROCESSING CONTROLS
@@ -428,7 +438,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.1 and later:
smtp_send_xforward_command (no)
- Send the non-standard XFORWARD command when the Postfix SMTP
+ Send the non-standard XFORWARD command when the Postfix SMTP
server EHLO response announces XFORWARD support.
SASL AUTHENTICATION CONTROLS
@@ -436,60 +446,66 @@ SMTP(8) SMTP(8)
Enable SASL authentication in the Postfix SMTP client.
smtp_sasl_password_maps (empty)
- Optional Postfix SMTP client lookup tables with one user-
- name:password entry per sender, remote hostname or next-hop
+ Optional Postfix SMTP client lookup tables with one user-
+ name:password entry per sender, remote hostname or next-hop
domain.
smtp_sasl_security_options (noplaintext, noanonymous)
Postfix SMTP client SASL security options; as of Postfix 2.3 the
- list of available features depends on the SASL client implemen-
+ list of available features depends on the SASL client implemen-
tation that is selected with smtp_sasl_type.
Available in Postfix version 2.2 and later:
smtp_sasl_mechanism_filter (empty)
- If non-empty, a Postfix SMTP client filter for the remote SMTP
+ If non-empty, a Postfix SMTP client filter for the remote SMTP
server's list of offered SASL mechanisms.
Available in Postfix version 2.3 and later:
smtp_sender_dependent_authentication (no)
Enable sender-dependent authentication in the Postfix SMTP
- client; this is available only with SASL authentication, and
- disables SMTP connection caching to ensure that mail from dif-
+ client; this is available only with SASL authentication, and
+ disables SMTP connection caching to ensure that mail from dif-
ferent senders will use the appropriate credentials.
smtp_sasl_path (empty)
Implementation-specific information that the Postfix SMTP client
- passes through to the SASL plug-in implementation that is
+ passes through to the SASL plug-in implementation that is
selected with smtp_sasl_type.
smtp_sasl_type (cyrus)
- The SASL plug-in type that the Postfix SMTP client should use
+ The SASL plug-in type that the Postfix SMTP client should use
for authentication.
Available in Postfix version 2.5 and later:
smtp_sasl_auth_cache_name (empty)
- An optional table to prevent repeated SASL authentication fail-
- ures with the same remote SMTP server hostname, username and
+ An optional table to prevent repeated SASL authentication fail-
+ ures with the same remote SMTP server hostname, username and
password.
smtp_sasl_auth_cache_time (90d)
- The maximal age of an smtp_sasl_auth_cache_name entry before it
+ The maximal age of an smtp_sasl_auth_cache_name entry before it
is removed.
smtp_sasl_auth_soft_bounce (yes)
- When a remote SMTP server rejects a SASL authentication request
- with a 535 reply code, defer mail delivery instead of returning
+ When a remote SMTP server rejects a SASL authentication request
+ with a 535 reply code, defer mail delivery instead of returning
mail as undeliverable.
Available in Postfix version 2.9 and later:
smtp_send_dummy_mail_auth (no)
- Whether or not to append the "AUTH=<>" option to the MAIL FROM
+ Whether or not to append the "AUTH=<>" option to the MAIL FROM
command in SASL-authenticated SMTP sessions.
+ Available in Postfix version 3.9 and later:
+
+ smtp_sasl_password_result_delimiter (:)
+ The delimiter between username and password in sasl_passwd_maps
+ lookup results.
+
STARTTLS SUPPORT CONTROLS
Detailed information about STARTTLS configuration may be found in the
TLS_README document.
@@ -619,7 +635,7 @@ SMTP(8) SMTP(8)
Available in Postfix version 2.6 and later:
- smtp_tls_protocols (see postconf -d output)
+ smtp_tls_protocols (see 'postconf -d' output)
TLS protocols that the Postfix SMTP client will use with oppor-
tunistic TLS encryption.
@@ -724,6 +740,12 @@ SMTP(8) SMTP(8)
The application name passed by Postfix to OpenSSL library ini-
tialization functions.
+ Available in Postfix version 3.9 and later:
+
+ smtp_tls_enable_rpk (no)
+ Request that remote SMTP servers send an RFC7250 raw public key
+ instead of an X.509 certificate.
+
OBSOLETE STARTTLS CONTROLS
The following configuration parameters exist for compatibility with
Postfix versions before 2.3. Support for these will be removed in a
@@ -954,7 +976,7 @@ SMTP(8) SMTP(8)
The local network interface addresses that this mail system
receives mail on.
- inet_protocols (see 'postconf -d output')
+ inet_protocols (see 'postconf -d' output)
The Internet protocols Postfix will attempt to use when making
or accepting connections.
@@ -1119,5 +1141,5 @@ SMTP(8) SMTP(8)
Victor Duchovni
Morgan Stanley
- SMTP(8)
+ 8 SMTP,(LMTP)