From: Wietse Venema Date: Sat, 24 Apr 2021 05:00:00 +0000 (-0500) Subject: postfix-3.6.0-RC1 X-Git-Tag: v3.6.0-RC1^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=705cccba514cbf52288c7bedf51649e32bd5d102;p=thirdparty%2Fpostfix.git postfix-3.6.0-RC1 --- diff --git a/postfix/HISTORY b/postfix/HISTORY index 803e2851b..56d3ee3c1 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -25255,8 +25255,8 @@ Apologies for any names omitted. 20201031 Cleanup: don't split a space-comma separated address list - on on space or comma inside a quoted string. Files: - util/mystrtok.c, util/mystetok.ref, global/login_sender_match.c. + on space or comma inside a quoted string. Files: util/mystrtok.c, + util/mystrtok.ref, global/login_sender_match.c. 20201101 @@ -25547,3 +25547,9 @@ Apologies for any names omitted. proto/MYSQL_README.html, proto/PGSQL_README.html, proto/SASL_README.html, proto/SQLITE_README.html, proto/TLS_README.html. + +20210422 + + Cleanup: in the Postfix SMTP and LMTP client, prepend Return-Path + and other headers in the same order as in other Postfix delivery + agents. Adi Prasaja. File: smtp/smtp_proto.c. diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES index d96997d68..887464104 100644 --- a/postfix/RELEASE_NOTES +++ b/postfix/RELEASE_NOTES @@ -1,13 +1,13 @@ -This is the Postfix 3.6 (experimental) release. +This is the Postfix 3.6 (stable) release. -The stable Postfix release is called postfix-3.5.x where 3=major -release number, 5=minor release number, x=patchlevel. The stable +The stable Postfix release is called postfix-3.6.x where 3=major +release number, 6=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.6-yyyymmdd where yyyymmdd is the release date (yyyy=year, -mm=month, dd=day). Patches are never issued for snapshot releases; +postfix-3.7-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) @@ -25,102 +25,93 @@ more recent Eclipse Public License 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 with snapshot 20210220 -==================================== +Major changes - compatibility level +----------------------------------- -Postfix version 3.6 deprecates terminology that implies white is -better than black. Instead, Postfix prefers 'allowlist', 'denylist', -and variations on those words. +[Feature 20210109] Starting with Postfix version 3.6, the compatibility +level is "3.6". In future Postfix releases, the compatibility level will +be the Postfix version that introduced the last incompatible change. The +level is formatted as 'major.minor.patch', where 'patch' is usually +omitted and defaults to zero. Earlier compatibility levels are 0, 1 and 2. -Set "respectful_logging = no" in main.cf to keep using the old -behavior (parameter names and logging). +This also introduces main.cf and master.cf support for the <=level, + to transport=local -This compatibility safety net may break when some management tools -use the new parameter names, and some use the old names, such that -different tools will disagree on how Postfix works. +This will usually be followed by logging for an actual delivery: -Changes in logging ------------------- + postfix/local[pid]: queueid: to=, relay=local, ... -The following logging replaces forms that contain 'blacklist' or -'whitelist': +Other examples: the local delivery agent defers mailbox delivery +through mailbox_transport or through fallback_transport. - postfix/postscreen[pid]: ALLOWLIST VETO [address]:port - postfix/postscreen[pid]: ALLOWLISTED [address]:port - postfix/postscreen[pid]: DENYLISTED [address]:port +Major changes - dns lookups +--------------------------- -To avoid breaking logfile analysis tools, Postfix keeps logging the old -forms by default, as long as the compatibility_level parameter setting -is less than 3.6, and the respectful_logging parameter is not explicitly -configured. As a reminder, Postfix will log the following: +[Feature 20200509] The threadsafe resolver API (res_nxxx() calls) is now +the default, not because the API is threadsafe, but because new features +are being added there. - postfix/postscreen[pid]: Using backwards-compatible default setting - respectful_logging=no for client [address]:port +To build old style, build with: -To keep logging the old form, make the setting "respectful_logging = -no" permanent in main.cf, for example: + make makefiles CCARGS="-DNO_RES_NCALLS..." - # postconf "respectful_logging = no" - # postfix reload +This is also the default for systems that are known not to support +the threadsafe resolver API. -To stop the reminder, configure the respectful_logging parameter to -"yes" or "no", or configure "compatibility_level = 3.6". +Major changes - error logging +----------------------------- -Major changes with snapshot 20210109 -==================================== +[Incompat 20200531] Postfix programs will now log "Application error" +instead of "Success" or "Unknown error: 0" when an operation fails with +errno == 0. -Starting with Postfix version 3.6, the "latest" compatibility level -is the Postfix version that introduced the last incompatible change. -The level is formatted as 'major.minor.patch', where 'patch' is -usually omitted and defaults to zero. Earlier compatibility levels -are 0, 1 and 2. +Major changes - internal protocol identification +------------------------------------------------ -This also introduces support for the <=level, = 3.6. -This change will break third-party code that implements a -Postfix-internal protocol such as qpsmtpd. Programs that depend on -Postfix internal details are not supported. +This change makes the implemented behavior consistent with existing +documentation. There is a backwards-compatibility warning that allows +users to freeze historical behavior. See COMPATIBILITY_README for +details. -Incompatible change with snapshot 20200705 -========================================== +Major changes - respectful logging +---------------------------------- -The minimum OpenSSL version is 1.1.1, which will reach the end -of life by 2023-09-11. +[Feature 20210220] Postfix version 3.6 deprecates terminology +that implies white is better than black. Instead, Postfix prefers +'allowlist', 'denylist', and variations on those words. This change +affects Postfix documentation, and postscreen parameters and logging. -The default digest has changed from md5 to sha256 (Postfix 3.6 with -compatibility_level >= 3). With a lower compatibility_level setting, -Postfix defaults to using md5, and logs a warning when a Postfix -configuration specifies no explicit digest type. +To keep the old postscreen logging set "respectful_logging = no" +in main.cf. -Export-grade Diffie-Hellman key exchange is no longer supported, -and the tlsproxy_tls_dh512_param_file parameter is ignored, +Noel Jones assisted with the initial transition. -Incompatible change with snapshot 20200531 -========================================== +Changes in documentation +------------------------ -Postfix delivery agents now log an explicit record when delegating -delivery to a different Postfix delivery agent. +Postfix documentation was updated to use 'allowlist', 'denylist', etc. +These documentation changes do not affect Postfix behavior. -For example, with "best_mx_transport = local", an SMTP delivery -agent will now log when a recipient will be delivered locally. This -makes the delegating delivery agent visible, where it would otherwise -have remained invisible, which would complicate troubleshooting. +Changes in parameter names +-------------------------- - postfix/smtp[pid]: queueid: passing to transport=local +The following postscreen parameters replace names that contain 'blacklist' +or 'whitelist': -This will usually be followed by logging for an actual delivery: + postscreen_allowlist_interfaces + postscreen_denylist_action + postscreen_dnsbl_allowlist_threshold - postfix/local[pid]: queueid: to=, relay=local, ... +These new parameters have backwards-compatible default settings +that support the old parameter names, so that the name change should +not affect Postfix behavior. This means that existing management tools +that use the old parameter names should keep working as before. -Other examples: the local delivery agent defers mailbox delivery -through mailbox_transport or through fallback_transport. +This compatibility safety net may break when some management tools +use the new parameter names, and some use the old names, such that +different tools will disagree on how Postfix works. -Major changes with snapshot 20200509 -==================================== +Changes in logging +------------------ -The threadsafe resolver API (res_nxxx() calls) is now the default, -not because the API is threadsafe, but because new features are -being added there. +The following logging replaces forms that contain 'blacklist' or +'whitelist': -To build old style, build with: + postfix/postscreen[pid]: ALLOWLIST VETO [address]:port + postfix/postscreen[pid]: ALLOWLISTED [address]:port + postfix/postscreen[pid]: DENYLISTED [address]:port - make makefiles CCARGS="-DNO_RES_NCALLS..." +To avoid breaking logfile analysis tools, Postfix keeps logging the old +forms by default, as long as the compatibility_level parameter setting +is less than 3.6, and the respectful_logging parameter is not explicitly +configured. As a reminder, Postfix will log the following: -This is also the default for systems that are known not to support -the threadsafe resolver API, such systems that use libc-musl. + postfix/postscreen[pid]: Using backwards-compatible default setting + respectful_logging=no for client [address]:port + +To keep logging the old form, make the setting "respectful_logging = +no" permanent in main.cf, for example: + + # postconf "respectful_logging = no" + # postfix reload + +To stop the reminder, configure the respectful_logging parameter to +"yes" or "no", or configure "compatibility_level = 3.6". + +Major changes - smtpd_sasl_mechanism_list +----------------------------------------- + +[Feature 20200906] The smtpd_sasl_mechanism_list parameter (default: +!external, static:rest) prevents confusing errors when a SASL backend +announces EXTERNAL support which Postfix does not support. + +Major changes - threaded bounces +-------------------------------- + +[Feature 20201205] Support for threaded bounces. This allows mail readers +to present a bounce, delay, or success delivery notification in the same +email thread as the original message. + +Unfortunately, this also makes it easy for users to mistakenly delete +the whole email thread (all related messages), instead of deleting +only the delivery status notification. + +To enable, specify "enable_threaded_bounces = yes". + +Major changes - tls +------------------- + +[Incompat 20200705] The minimum OpenSSL version is 1.1.1, which will +reach the end of life by 2023-09-11. + +The default digest has changed from md5 to sha256 (Postfix 3.6 with +compatibility_level >= 3). With a lower compatibility_level setting, +Postfix defaults to using md5, and logs a warning when a Postfix +configuration specifies no explicit digest type. + +Export-grade Diffie-Hellman key exchange is no longer supported, +and the tlsproxy_tls_dh512_param_file parameter is ignored, -Incompatible changes with snapshot 20200416 -=========================================== +[Feature 20200906] The tlstype.pl helper script by Viktor Dukhovni +reports TLS information per message delivery. This processes output +from the collate.pl script. See auxiliary/collate/README.tlstype and +auxiliary/collate/tlstype.pl. -Security: this release disables DANE support on Linux systems with -libc-musl, because libc-musl provides no indication whether DNS -responses are authentic. This broke DANE support without a clear -explanation. diff --git a/postfix/WISHLIST b/postfix/WISHLIST index 30b15c962..3c6c7fbd2 100644 --- a/postfix/WISHLIST +++ b/postfix/WISHLIST @@ -5,11 +5,17 @@ Wish list: Make smtpd_relay_before_recipient_restrictions settable in smtpd_checks tests. - Make the DNS resolver library pluggable, so that we can + Make the DNS resolver library pluggable, so that we can a) plug in a fake resolver library for DNS-related regression - tests to make DNS tests hermetic (no external dependency). - After the resolver library is pluggable, the migration to - non-libbind resolvers becomes a practical option. + tests and make DNS tests hermetic (no external dependency; + b) add support for non-libbind resolvers. Gracefully handle + requests for unsupported functionality; return an error status, + instead of terminating. + + Inline regexp/pcre/cidr table support. If the table name is + a string inside {}, then split the string on comma (ignoring + commas inside {}), write each resulting fragment as one line to + a VSTRING buffer, and open that buffer as a memory file. Add a robust dnssec_probe regression test (success and fail) that does not break existing regression tests. @@ -33,17 +39,23 @@ Wish list: More accurate address verification: do a quota check before reporting that a local(8) or virtual(8) recipient is deliverable. - Eliminate duplicate user_acl check from sendmail, and pass - the result through the postdrop-to-sendmail protocol. This - requires that postdrop reads all inputs before responding. - Then we can also consider to save input to dead.letter (drop - setgid privilege, use safe_open() to avoid clobbering files). + Eliminate duplicate mail submission permission checks from + sendmail, so that they happen in postdrop only. Then, pass the + result through the postdrop-to-sendmail protocol. This requires + that postdrop reads all inputs before responding (the + local_login_sender_maps check depends on the envelope + sender). Then sendmail can save input to dead.letter (no setgid + privilege, but it would still have to use safe_open() to avoid + clobbering files). Consider removing compat_level_from_numbers() and aliases, because they are no longer used anywhere. - Allow '}' at the beginning of a line. This would make - multi-line configuration settings easier to enter. + Allow '}' at the beginning of a line. This would make multi-line + configuration settings easier to enter. This may be true + for main.cf, master.cf and similar files (such as database + configuration files, but not necessarily elsewhere). So it + would have to be a readlline flag. Understand what happens with DNSSEC related status fields in posttls-finger when resolv.conf points to a host that @@ -68,14 +80,8 @@ Wish list: Update makedefs and sys-defs.h for current Linux kernels and *BSD releases. - DNS wrapper class, like XSASL, to support different stub - resolvers without contaminating Postfix programs with the - idiosyncracies of stub resolvers. Handle differences in - resolver feature sets gracefully: an unsupported request - will result in an error status, not program termination. - When a secondary instance has no multi_instance_name set, -` postmulti -i won't be able to find it. + postmulti -i won't be able to find it. Read http://mmogilvi.users.sourceforge.net/software/oauthbearer.html and see how we can improve on the Postfix side. diff --git a/postfix/makedefs b/postfix/makedefs index 280339750..3448c1e54 100644 --- a/postfix/makedefs +++ b/postfix/makedefs @@ -889,7 +889,7 @@ case "$CC" in esac # Snapshot only. -CCARGS="$CCARGS -DSNAPSHOT" +#CCARGS="$CCARGS -DSNAPSHOT" # Non-production: needs thorough testing, or major changes are still # needed before the code stabilizes. diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index f5967bf12..925d87c41 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,8 +20,8 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20210422" -#define MAIL_VERSION_NUMBER "3.6" +#define MAIL_RELEASE_DATE "20210424" +#define MAIL_VERSION_NUMBER "3.6.0-RC1" #ifdef SNAPSHOT #define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff --git a/postfix/src/smtp/smtp_proto.c b/postfix/src/smtp/smtp_proto.c index 2bb3d3ca6..9287d3198 100644 --- a/postfix/src/smtp/smtp_proto.c +++ b/postfix/src/smtp/smtp_proto.c @@ -1430,17 +1430,18 @@ static int smtp_out_add_header(SMTP_STATE *state, const char *label, static int smtp_out_add_headers(SMTP_STATE *state) { - if (smtp_cli_attr.flags & SMTP_CLI_FLAG_DELIVERED_TO) - if (smtp_out_add_header(state, "Delivered-To", "", - state->request->rcpt_list.info->address, "") < 0) + /* Prepend headers in the same order as mail_copy.c. */ + if (smtp_cli_attr.flags & SMTP_CLI_FLAG_RETURN_PATH) + if (smtp_out_add_header(state, "Return-Path", "<", + state->request->sender, ">") < 0) return (-1); if (smtp_cli_attr.flags & SMTP_CLI_FLAG_ORIG_RCPT) if (smtp_out_add_header(state, "X-Original-To", "", state->request->rcpt_list.info->orig_addr, "") < 0) return (-1); - if (smtp_cli_attr.flags & SMTP_CLI_FLAG_RETURN_PATH) - if (smtp_out_add_header(state, "Return-Path", "<", - state->request->sender, ">") < 0) + if (smtp_cli_attr.flags & SMTP_CLI_FLAG_DELIVERED_TO) + if (smtp_out_add_header(state, "Delivered-To", "", + state->request->rcpt_list.info->address, "") < 0) return (-1); return (0); }