2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 09:57:34 +00:00

postfix-3.9-20230412

This commit is contained in:
Wietse Venema 2023-04-12 00:00:00 -05:00 committed by Viktor Dukhovni
parent a4a6fa15dc
commit f5806d0121
8 changed files with 181 additions and 87 deletions

View File

@ -26754,7 +26754,7 @@ Apologies for any names omitted.
progress. Reported by Phil Biggs, fix by Viktor Dukhovni. progress. Reported by Phil Biggs, fix by Viktor Dukhovni.
File: util/dict_cache.c. File: util/dict_cache.c.
20220104 20230104
Feature: configuration parameter tls_ffdhe_auto_groups for Feature: configuration parameter tls_ffdhe_auto_groups for
FFDHE support in TLS 1.3 with OpenSSL 3.0. Viktor Dukhovni. FFDHE support in TLS 1.3 with OpenSSL 3.0. Viktor Dukhovni.
@ -26773,7 +26773,7 @@ Apologies for any names omitted.
Bitrot: fixes for linker warnings from newer Darwin (MacOS) Bitrot: fixes for linker warnings from newer Darwin (MacOS)
versions. Viktor Dukhovni. File: makedefs. versions. Viktor Dukhovni. File: makedefs.
20220108 20230108
Minor wordsmithing. Files: text in proto/postconf.proto, Minor wordsmithing. Files: text in proto/postconf.proto,
warning message tls.tls_dh.c. warning message tls.tls_dh.c.

View File

@ -1,57 +1,27 @@
This is the Postfix 3.8 (experimental) release. This is the Postfix 3.9 experimental release.
The stable Postfix release is called postfix-3.7.x where 3=major The stable Postfix release is called postfix-3.8.x where 3=major
release number, 7=minor release number, x=patchlevel. The stable release number, 8=minor release number, x=patchlevel. The stable
release never changes except for patches that address bugs or release never changes except for patches that address bugs or
emergencies. Patches change the patchlevel and the release date. emergencies. Patches change the patchlevel and the release date.
New features are developed in snapshot releases. These are called New features are developed in snapshot releases. These are called
postfix-3.8-yyyymmdd where yyyymmdd is the release date (yyyy=year, postfix-3.9-yyyymmdd where yyyymmdd is the release date (yyyy=year,
mm=month, dd=day). Patches are never issued for snapshot releases; mm=month, dd=day). Patches are never issued for snapshot releases;
instead, a new snapshot is released. instead, a new snapshot is released.
The mail_release_date configuration parameter (format: yyyymmdd) The mail_release_date configuration parameter (format: yyyymmdd)
specifies the release date of a stable release or snapshot release. specifies the release date of a stable release or snapshot release.
If you upgrade from Postfix 3.6 or earlier, read RELEASE_NOTES-3.7 If you upgrade from Postfix 3.7 or earlier, please read RELEASE_NOTES-3.8
before proceeding. before proceeding.
License change Dual license
--------------- ------------
This software is distributed with a dual license: in addition to the As of Postfix 3.2.5 this software is distributed with a dual license:
historical IBM Public License 1.0, it is now also distributed with the in addition to the historical IBM Public License (IPL) 1.0, it is
more recent Eclipse Public License 2.0. Recipients can choose to take now also distributed with the more recent Eclipse Public License
the software under the license of their choice. Those who are more (EPL) 2.0. Recipients can choose to take the software under the
comfortable with the IPL can continue with that license. license of their choice. Those who are more comfortable with the
IPL can continue with that license.
Incompatible changes with snapshot 20230304
===========================================
This introduces the following changes in Postfix TLS support:
- Postfix ignores "export" and "low" cipher list settings, and
treats the "export" and "low" cipher grade settings as "medium".
These 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).
Incompatible changes with snapshot 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.
Incompatible changes with snapshot 20220507
===========================================
Most global/mkmap*.[hc] files have 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 the code suffered from complexity.

128
postfix/RELEASE_NOTES-3.8 Normal file
View File

@ -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.

View File

@ -31,7 +31,7 @@
# #
# The level below is what should be used with new (not upgrade) installs. # The level below is what should be used with new (not upgrade) installs.
# #
compatibility_level = 3.8 compatibility_level = 3.9
# SOFT BOUNCE # SOFT BOUNCE
# #

View File

@ -1571,3 +1571,9 @@ https
egrep egrep
fgrep fgrep
SRV SRV
EPL
FFDHE
Korbar
ffdhe
srv
stderr

View File

@ -20,8 +20,8 @@
* Patches change both the patchlevel and the release date. Snapshots have no * Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only. * patchlevel; they change the release date only.
*/ */
#define MAIL_RELEASE_DATE "20230409" #define MAIL_RELEASE_DATE "20230412"
#define MAIL_VERSION_NUMBER "3.8" #define MAIL_VERSION_NUMBER "3.9"
#ifdef SNAPSHOT #ifdef SNAPSHOT
#define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE #define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@ -1225,6 +1225,7 @@ postconf_misc.o: ../../include/myflock.h
postconf_misc.o: ../../include/mymalloc.h postconf_misc.o: ../../include/mymalloc.h
postconf_misc.o: ../../include/name_code.h postconf_misc.o: ../../include/name_code.h
postconf_misc.o: ../../include/safe.h postconf_misc.o: ../../include/safe.h
postconf_misc.o: ../../include/stringops.h
postconf_misc.o: ../../include/sys_defs.h postconf_misc.o: ../../include/sys_defs.h
postconf_misc.o: ../../include/vbuf.h postconf_misc.o: ../../include/vbuf.h
postconf_misc.o: ../../include/vstream.h postconf_misc.o: ../../include/vstream.h

View File

@ -105,6 +105,7 @@ char *inet_prefix_top(int af, const void *src, int prefix_len)
#include <stdlib.h> #include <stdlib.h>
#include <msg_vstream.h> #include <msg_vstream.h>
#include <name_code.h>
/* /*
* TODO: add test cases for fatal and panic errors, intercept msg_fatal() * TODO: add test cases for fatal and panic errors, intercept msg_fatal()
@ -112,20 +113,25 @@ char *inet_prefix_top(int af, const void *src, int prefix_len)
*/ */
typedef struct TEST_CASE { typedef struct TEST_CASE {
int in_af; int in_af;
const char *in_address;
int in_prefix_len; int in_prefix_len;
const char *exp_prefix; const char *exp_prefix;
} TEST_CASE; } TEST_CASE;
static TEST_CASE test_cases[] = { static TEST_CASE test_cases[] = {
AF_INET, "255.255.255.255", 32, "255.255.255.255", AF_INET, 32, "255.255.255.255",
AF_INET, "255.255.255.255", 28, "255.255.255.240/28", AF_INET, 28, "255.255.255.240/28",
AF_INET, "255.255.255.255", 4, "240.0.0.0/4", AF_INET, 4, "240.0.0.0/4",
AF_INET, "255.255.255.255", 0, "0.0.0.0/0", AF_INET, 0, "0.0.0.0/0",
AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 128, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", AF_INET6, 128, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 124, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0/124", AF_INET6, 124, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0/124",
AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 4, "f000::/4", AF_INET6, 4, "f000::/4",
AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 0, "::/0", AF_INET6, 0, "::/0",
};
const NAME_CODE af_map[] = {
"AF_INET", AF_INET,
"AF_INET6", AF_INET6,
0,
}; };
#define TEST_CASE_COUNT (sizeof(test_cases) / sizeof(test_cases[0])) #define TEST_CASE_COUNT (sizeof(test_cases) / sizeof(test_cases[0]))
@ -142,38 +148,21 @@ int main(int argc, char **argv)
int fail = 0; int fail = 0;
msg_vstream_init(argv[0], VSTREAM_ERR); msg_vstream_init(argv[0], VSTREAM_ERR);
memset(&u, ~0, sizeof(u));
for (tp = test_cases; tp < test_cases + TEST_CASE_COUNT; tp++) { for (tp = test_cases; tp < test_cases + TEST_CASE_COUNT; tp++) {
msg_info("RUN %s/%d -> %s", tp->in_address, tp->in_prefix_len, msg_info("RUN %s/%d", str_name_code(af_map, tp->in_af),
tp->exp_prefix); tp->in_prefix_len);
switch (inet_pton(tp->in_af, tp->in_address, &u)) { act_prefix = inet_prefix_top(tp->in_af, &u, tp->in_prefix_len);
case -1: if (strcmp(act_prefix, tp->exp_prefix) != 0) {
msg_warn("inet_pton(af = %d, src = \"%s\", &u) failed: %m", msg_warn("got \"%s\", want \"%s\"", act_prefix, tp->exp_prefix);
tp->in_af, tp->in_address);
fail += 1; fail += 1;
msg_info("FAIL %s/%d -> %s", tp->in_address, tp->in_prefix_len, msg_info("FAIL %s/%d", str_name_code(af_map, tp->in_af),
tp->exp_prefix); tp->in_prefix_len);
break; } else {
default: pass += 1;
msg_warn("inet_pton(af = %d, src = \"%s\", &u) failed", msg_info("PASS %s/%d", str_name_code(af_map, tp->in_af),
tp->in_af, tp->in_address); tp->in_prefix_len);
fail += 1;
msg_info("FAIL %s/%d -> %s", tp->in_address, tp->in_prefix_len,
tp->exp_prefix);
break;
case 1:
act_prefix = inet_prefix_top(tp->in_af, &u, tp->in_prefix_len);
if (strcmp(act_prefix, tp->exp_prefix) != 0) {
msg_warn("got \"%s\", want \"%s\"", act_prefix, tp->exp_prefix);
fail += 1;
msg_info("FAIL %s/%d -> %s", tp->in_address, tp->in_prefix_len,
tp->exp_prefix);
} else {
pass += 1;
msg_info("PASS %s/%d -> %s", tp->in_address, tp->in_prefix_len,
tp->exp_prefix);
}
break;
} }
} }
msg_info("PASS=%d FAIL=%d", pass, fail); msg_info("PASS=%d FAIL=%d", pass, fail);