]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.12-20260218
authorWietse Z Venema <wietse@porcupine.org>
Wed, 18 Feb 2026 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <ietf-dane@dukhovni.org>
Wed, 18 Feb 2026 17:06:27 +0000 (04:06 +1100)
22 files changed:
postfix/HISTORY
postfix/README_FILES/MYSQL_README
postfix/html/MYSQL_README.html
postfix/html/postconf.5.html
postfix/man/man5/postconf.5
postfix/mantools/check-postconf-unimplemented
postfix/proto/MYSQL_README.html
postfix/proto/postconf.html.prolog
postfix/proto/postconf.man.prolog
postfix/proto/postconf.proto
postfix/proto/stop.double-install-proto-text
postfix/proto/stop.double-proto-html
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/tls/tls_misc.c
postfix/src/tls/tls_proxy.h
postfix/src/tls/tls_proxy_client_misc.c
postfix/src/tls/tls_proxy_client_print.c
postfix/src/tls/tls_proxy_client_scan.c
postfix/src/util/msg_vstream.c
postfix/src/util/vstream.c
postfix/src/util/vstream.h

index f0e214b2b825e6d899eb75e5664756b34b743dd4..75ac447dc464afb128d25b37f608029076405d5e 100644 (file)
@@ -30378,3 +30378,29 @@ Apologies for any names omitted.
        deprecated lookup tables. A typical example is "postconf
        -PPx '*/*/proxy_read_maps". Files: postconf/postconf.[hc],
        postconf/postconf_master.c, postconf/Makefile.in.
+
+20260128
+
+       Miscellaneous text fixes. Files: proto/MYSQL_README.html,
+       proto/postconf.html.prolog, proto/postconf.man.prolog.
+
+20260131
+
+       Cleanup: the tls_legacy_public_key_fingerprints parameter
+       has been removed. It has had no effect since Postfix
+       3.9.0. Viktor Dukhovni. Files: proto/postconf.proto,
+       global/mail_params.h, tls/tls_misc.c, tls/tls_proxy_client_misc.c,
+       tls/tls_proxy_client_print.c, tls/tls_proxy_client_scan.c,
+       tls/tls_proxy.h.
+
+20260217
+
+       Bugfix: (defect introduced: Postfix 2.11): panic() after
+       recursive logging loop with "posttls-finger -v -v -v".
+       Reported by Geert Hendrickx, diagnosed by Viktor Dukhovni,
+       and fixed by Wietse. Files: util/vstream.[hc], util/msg_vstream.c.
+
+       Cleanup: added missing notes in the postconf(5) manpage
+       that an IPv6 address needs to be enclosed in [] for the
+       debug_peer_list and qmqpd_authorized_clients parameters.
+       File: proto/postconf.proto.
index c2a62797b71ea133ab716e44e281e5d0c0e379b4..a37a615fdae6cf277e980a59c13eed246921c8a3 100644 (file)
@@ -1,4 +1,4 @@
-P\bPo\bos\bst\btf\bfi\bix\bx M\bMy\byS\bSQ\bQL\bL H\bHo\bow\bwt\bto\bo
+P\bPo\bos\bst\btf\bfi\bix\bx M\bMy\byS\bSQ\bQL\bL/\b/M\bMa\bar\bri\bia\baD\bDB\bB H\bHo\bow\bwt\bto\bo
 
 -------------------------------------------------------------------------------
 
index ff76d68fa3e5016b696da2ac772f58a5cb611209..959531b6343477d92350c947e9498359a2fb5060 100644 (file)
@@ -14,7 +14,7 @@
 
 <body>
 
-<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix MySQL Howto</h1>
+<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix MySQL/MariaDB Howto</h1>
 
 <hr>
 
index 6bcbf5f9b20dcbe659a607ca71aa2fc347b8d23e..f9558cceea8e8413daa6e7d888ea00d66122d84c 100644 (file)
@@ -91,7 +91,7 @@ are supported with Postfix versions &ge; 3.0. </p>
 
 <li> <p> The expression "${name{value}}" is replaced with the result
 from calling the function <i>name</i> with the argument <i>value</i>
-after stripping whitespace betwen the "{", the value, and the "}".
+after stripping whitespace between the "{", the value, and the "}".
 An example is the <a href="postconf.5.html#domain_to_ascii">domain_to_ascii</a>{} function. </p>
 
 <li> <p> Each "value" is subject to recursive named parameter and
@@ -1970,7 +1970,8 @@ logging level to increase by the amount specified in $<a href="postconf.5.html#d
 
 <p> Specify domain names, network/netmask patterns, "/file/name"
 patterns or "<a href="DATABASE_README.html">type:table</a>" lookup tables. The right-hand side result
-from "<a href="DATABASE_README.html">type:table</a>" lookups is ignored.  </p>
+from "<a href="DATABASE_README.html">type:table</a>" lookups is ignored. An IPv6 address must be enclosed
+in <tt>[]</tt>.  </p>
 
 <p> Pattern matching of domain names is controlled by the presence
 or absence of "<a href="postconf.5.html#debug_peer_list">debug_peer_list</a>" in the <a href="postconf.5.html#parent_domain_matches_subdomains">parent_domain_matches_subdomains</a>
@@ -9870,7 +9871,8 @@ name, a domain name, an internet address, or a network/mask pattern,
 where the mask specifies the number of bits in the network part.
 When a pattern specifies a file name, its contents are substituted
 for the file name; when a pattern is a "<a href="DATABASE_README.html">type:table</a>" table specification,
-table lookup is used instead.  </p>
+table lookup is used instead. An IPv6 address must be enclosed in
+<tt>[]</tt>. </p>
 
 <p>
 Patterns are separated by whitespace and/or commas. In order to
@@ -21316,7 +21318,9 @@ pending a migration from configuration files with incorrect Postfix
 fingerprints used by Postfix 2.9.6 and later.  To compute the correct
 certificate public-key fingerprints, see <a href="TLS_README.html">TLS_README</a>. </p>
 
-<p> This feature is available in Postfix 2.9.6 and later.  </p>
+<p> This feature is available in Postfix 2.9.6 through 3.10.
+This parameter has had no effect since Postfix 3.9.0, and has been
+removed as of postfix 3.11.0. </p>
 
 
 </DD>
index fe249afcdbf2b9deefac146dfd33317a46386d96..3a172c0ecd57807ba6cff23f09a02e5e3bffa0f6 100644 (file)
@@ -62,7 +62,7 @@ Postfix versions >= 3.0.
 .IP \(bu
 The expression "${name{value}}" is replaced with the result from
 calling the function \fIname\fR with the argument \fIvalue\fR
-after stripping whitespace betwen the "{", the value, and the "}".
+after stripping whitespace between the "{", the value, and the "}".
 An example is the domain_to_ascii{} function.
 .IP \(bu
 Each "value" is subject to recursive named parameter and relational
@@ -1192,7 +1192,8 @@ Per\-nexthop debug logging is available in Postfix 3.6 and later.
 .PP
 Specify domain names, network/netmask patterns, "/file/name"
 patterns or "type:table" lookup tables. The right\-hand side result
-from "type:table" lookups is ignored.
+from "type:table" lookups is ignored. An IPv6 address must be enclosed
+in [].
 .PP
 Pattern matching of domain names is controlled by the presence
 or absence of "debug_peer_list" in the parent_domain_matches_subdomains
@@ -6126,7 +6127,8 @@ name, a domain name, an internet address, or a network/mask pattern,
 where the mask specifies the number of bits in the network part.
 When a pattern specifies a file name, its contents are substituted
 for the file name; when a pattern is a "type:table" table specification,
-table lookup is used instead.
+table lookup is used instead. An IPv6 address must be enclosed in
+[].
 .PP
 Patterns are separated by whitespace and/or commas. In order to
 reverse the result, precede a pattern with an
@@ -15059,7 +15061,9 @@ pending a migration from configuration files with incorrect Postfix
 fingerprints used by Postfix 2.9.6 and later.  To compute the correct
 certificate public\-key fingerprints, see TLS_README.
 .PP
-This feature is available in Postfix 2.9.6 and later.
+This feature is available in Postfix 2.9.6 through 3.10.
+This parameter has had no effect since Postfix 3.9.0, and has been
+removed as of postfix 3.11.0.
 .SH tls_low_cipherlist (default: see "postconf \-d" output)
 The OpenSSL cipherlist for "low" or higher grade ciphers.
 Ignored as of Postfix 3.8.  In earlier Postfix releases this
index 27915285ae38f90d97e3adf67041af908009c24a..14036a69951ba43762da5ce7470e696b9e9f824a 100755 (executable)
@@ -69,6 +69,7 @@ smtpd_sasl_application_name
 smtpd_tls_cipherlist
 tls_dane_digest_agility
 tls_dane_trust_anchor_digest_enable
+tls_legacy_public_key_fingerprints
 tlsproxy_client_level
 tlsproxy_client_policy
 tlsproxy_tls_session_cache_timeout
index 46603b15c28ff6a0a7d70c4d45cb32c26655b29c..42bb1ef71cc109727273b8621a1287e246daac98 100644 (file)
@@ -14,7 +14,7 @@
 
 <body>
 
-<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix MySQL Howto</h1>
+<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix MySQL/MariaDB Howto</h1>
 
 <hr>
 
index 021f7c151f100233d9bf338fc698973c4981e20a..07116951969dc649245dcbd4747d08f65520f256 100644 (file)
@@ -91,7 +91,7 @@ are supported with Postfix versions &ge; 3.0. </p>
 
 <li> <p> The expression "${name{value}}" is replaced with the result
 from calling the function <i>name</i> with the argument <i>value</i>
-after stripping whitespace betwen the "{", the value, and the "}".
+after stripping whitespace between the "{", the value, and the "}".
 An example is the domain_to_ascii{} function. </p>
 
 <li> <p> Each "value" is subject to recursive named parameter and
index 8686603846f4b01df95320a005882bdd00d05613..efe29866aa54d2ed31593e93c5f04b30865332ae 100644 (file)
@@ -62,7 +62,7 @@ Postfix versions >= 3.0.
 .IP \(bu
 The expression "${name{value}}" is replaced with the result from
 calling the function \fIname\fR with the argument \fIvalue\fR
-after stripping whitespace betwen the "{", the value, and the "}".
+after stripping whitespace between the "{", the value, and the "}".
 An example is the domain_to_ascii{} function.
 .IP \(bu
 Each "value" is subject to recursive named parameter and relational
index 4c48d3e67c5ec6b6070ee2ad15fb3b5eac9416c6..c65829ff8080a48a681ba24370b8309cac7ce060 100644 (file)
@@ -953,7 +953,8 @@ logging level to increase by the amount specified in $debug_peer_level.
 
 <p> Specify domain names, network/netmask patterns, "/file/name"
 patterns or "type:table" lookup tables. The right-hand side result
-from "type:table" lookups is ignored.  </p>
+from "type:table" lookups is ignored. An IPv6 address must be enclosed
+in <tt>[]</tt>.  </p>
 
 <p> Pattern matching of domain names is controlled by the presence
 or absence of "debug_peer_list" in the parent_domain_matches_subdomains
@@ -3483,7 +3484,8 @@ name, a domain name, an internet address, or a network/mask pattern,
 where the mask specifies the number of bits in the network part.
 When a pattern specifies a file name, its contents are substituted
 for the file name; when a pattern is a "type:table" table specification,
-table lookup is used instead.  </p>
+table lookup is used instead. An IPv6 address must be enclosed in
+<tt>[]</tt>. </p>
 
 <p>
 Patterns are separated by whitespace and/or commas. In order to
@@ -15894,7 +15896,9 @@ pending a migration from configuration files with incorrect Postfix
 fingerprints used by Postfix 2.9.6 and later.  To compute the correct
 certificate public-key fingerprints, see TLS_README. </p>
 
-<p> This feature is available in Postfix 2.9.6 and later.  </p>
+<p> This feature is available in Postfix 2.9.6 through 3.10.
+This parameter has had no effect since Postfix 3.9.0, and has been
+removed as of postfix 3.11.0. </p>
 
 %PARAM tlsproxy_watchdog_timeout 10s
 
index 6557a8e1f2935d4e21c99603546949d120f5afd3..555de899dcb76a2a2c32634bfdf1340cb0507b72 100644 (file)
@@ -48,3 +48,4 @@ Inbound SMTP smuggling don t strip extra CR in CR LF CR CR LF
 to  to the lookup result With Postfix 3 11 and later specify
  has moved to to a table lookup result and the format for a
 after stripping whitespace betwen the the value and the 
+after stripping whitespace between the the value and the 
index f2035aa3cd705c12b472d3e9bc447d695d2da7f6..33f973d941e68dc5f5da4a44579f19245e614763 100644 (file)
@@ -381,3 +381,4 @@ tt  tt tls i level i requiretls noencryption tt or
  domain_to_ascii returns the xn mumble mumble Punycode A label form that Postfix needs This works around a limitation that may be eliminated in a future Postfix version 
 smtp_requiretls_policy smtp_requiretls_policy inline 
  xn mumble mumble Punycode A label form that Postfix needs This works around a limitation that may be eliminated in a future Postfix version 
+in tt tt p 
index 5dccfad6538367735681ce161076ed11056dafce..e9251363c4e1ee700f084baa7e94eb492a2a6e46 100644 (file)
@@ -3548,10 +3548,6 @@ extern char *var_tls_ssl_options;
 #define DEF_TLS_TKT_CIPHER     "aes-256-cbc"
 extern char *var_tls_tkt_cipher;
 
-#define VAR_TLS_BC_PKEY_FPRINT "tls_legacy_public_key_fingerprints"
-#define DEF_TLS_BC_PKEY_FPRINT 0
-extern bool var_tls_bc_pkey_fprint;
-
 #define VAR_TLS_SERVER_SNI_MAPS "tls_server_sni_maps"
 #define DEF_TLS_SERVER_SNI_MAPS ""
 extern char *var_tls_server_sni_maps;
index 568a09333fdaa08b48e5e95c2f98704f2ea2299f..817d31e8eb1a5311052862e56ece4429ed3fdf11 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20260127"
+#define MAIL_RELEASE_DATE      "20260218"
 #define MAIL_VERSION_NUMBER    "3.12"
 
 #ifdef SNAPSHOT
index 6cc38cc401bdd09de3d8a5c21793816aca9bb657..bfba476ca30215675285c55e1e33cd112850c58f 100644 (file)
@@ -38,7 +38,6 @@
 /*     int     var_tls_daemon_rand_bytes;
 /*     bool    var_tls_append_def_CA;
 /*     bool    var_tls_preempt_clist;
-/*     bool    var_tls_bc_pkey_fprint;
 /*     bool    var_tls_multi_wildcard;
 /*     char    *var_tls_mgr_service;
 /*     char    *var_tls_tkt_cipher;
@@ -307,7 +306,6 @@ char   *var_tls_dane_digests;
 bool    var_tls_append_def_CA;
 char   *var_tls_bug_tweaks;
 char   *var_tls_ssl_options;
-bool    var_tls_bc_pkey_fprint;
 bool    var_tls_multi_wildcard;
 char   *var_tls_mgr_service;
 char   *var_tls_tkt_cipher;
@@ -691,7 +689,6 @@ void    tls_param_init(void)
     /* If this changes, update TLS_CLIENT_PARAMS in tls_proxy.h. */
     static const CONFIG_BOOL_TABLE bool_table[] = {
        VAR_TLS_APPEND_DEF_CA, DEF_TLS_APPEND_DEF_CA, &var_tls_append_def_CA,
-       VAR_TLS_BC_PKEY_FPRINT, DEF_TLS_BC_PKEY_FPRINT, &var_tls_bc_pkey_fprint,
        VAR_TLS_PREEMPT_CLIST, DEF_TLS_PREEMPT_CLIST, &var_tls_preempt_clist,
        VAR_TLS_MULTI_WILDCARD, DEF_TLS_MULTI_WILDCARD, &var_tls_multi_wildcard,
        VAR_TLS_FAST_SHUTDOWN, DEF_TLS_FAST_SHUTDOWN, &var_tls_fast_shutdown,
index ae2a8381c8e17259f0cf4c9b9806ffabbb03e2cc..d5cbdb4d1511fa8f5abc497378cb075a8d1b36d2 100644 (file)
@@ -62,18 +62,17 @@ typedef struct TLS_CLIENT_PARAMS {
     char   *tls_tkt_cipher;
     int     tls_daemon_rand_bytes;
     int     tls_append_def_CA;
-    int     tls_bc_pkey_fprint;
     int     tls_preempt_clist;
     int     tls_multi_wildcard;
 } TLS_CLIENT_PARAMS;
 
 #define TLS_PROXY_PARAMS(params, a1, a2, a3, a4, a5, a6, a7, a8, \
-    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) \
+    a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) \
     (((params)->a1), ((params)->a2), ((params)->a3), \
     ((params)->a4), ((params)->a5), ((params)->a6), ((params)->a7), \
     ((params)->a8), ((params)->a9), ((params)->a10), ((params)->a11), \
     ((params)->a12), ((params)->a13), ((params)->a14), ((params)->a15), \
-    ((params)->a16), ((params)->a17), ((params)->a18), ((params)->a19))
+    ((params)->a16), ((params)->a17), ((params)->a18))
 
  /*
   * tls_proxy_client_param_misc.c, tls_proxy_client_param_print.c, and
index a8fb45cb2af38fabd6056c1e26759f790bde4792..45a0e0b0e8f550d6e32c8d274756f3af0516b411 100644 (file)
@@ -82,7 +82,6 @@ TLS_CLIENT_PARAMS *tls_proxy_client_param_from_config(TLS_CLIENT_PARAMS *params)
                     tls_tkt_cipher = var_tls_tkt_cipher,
                     tls_daemon_rand_bytes = var_tls_daemon_rand_bytes,
                     tls_append_def_CA = var_tls_append_def_CA,
-                    tls_bc_pkey_fprint = var_tls_bc_pkey_fprint,
                     tls_preempt_clist = var_tls_preempt_clist,
                     tls_multi_wildcard = var_tls_multi_wildcard);
     return (params);
index 4b397ae79ca2d387731821ff853ccfa78bd496bd..f07aafbe9f7e81faa10916e52f19d76d0927e7f1 100644 (file)
@@ -123,8 +123,6 @@ int     tls_proxy_client_param_print(ATTR_PRINT_COMMON_FN print_fn, VSTREAM *fp,
                                 params->tls_daemon_rand_bytes),
                   SEND_ATTR_INT(VAR_TLS_APPEND_DEF_CA,
                                 params->tls_append_def_CA),
-                  SEND_ATTR_INT(VAR_TLS_BC_PKEY_FPRINT,
-                                params->tls_bc_pkey_fprint),
                   SEND_ATTR_INT(VAR_TLS_PREEMPT_CLIST,
                                 params->tls_preempt_clist),
                   SEND_ATTR_INT(VAR_TLS_MULTI_WILDCARD,
index 685f9e12487c94ab7d0fd6a0e224385cfd09dff1..f70b42744161694ba61a3bdf8d6116c256da6264 100644 (file)
@@ -191,8 +191,6 @@ int     tls_proxy_client_param_scan(ATTR_SCAN_COMMON_FN scan_fn, VSTREAM *fp,
                                &params->tls_daemon_rand_bytes),
                  RECV_ATTR_INT(VAR_TLS_APPEND_DEF_CA,
                                &params->tls_append_def_CA),
-                 RECV_ATTR_INT(VAR_TLS_BC_PKEY_FPRINT,
-                               &params->tls_bc_pkey_fprint),
                  RECV_ATTR_INT(VAR_TLS_PREEMPT_CLIST,
                                &params->tls_preempt_clist),
                  RECV_ATTR_INT(VAR_TLS_MULTI_WILDCARD,
@@ -214,7 +212,7 @@ int     tls_proxy_client_param_scan(ATTR_SCAN_COMMON_FN scan_fn, VSTREAM *fp,
     params->tls_mgr_service = vstring_export(tls_mgr_service);
     params->tls_tkt_cipher = vstring_export(tls_tkt_cipher);
 
-    ret = (ret == 19 ? 1 : -1);
+    ret = (ret == 18 ? 1 : -1);
     if (ret != 1) {
        tls_proxy_client_param_free(params);
        params = 0;
index b6e24e60902ca8bd80147e23815b2a16dcdf407a..3477b546b04b179af4b3803c599e1420a1e89b12 100644 (file)
@@ -80,6 +80,7 @@ void    msg_vstream_init(const char *name, VSTREAM *vp)
 
     msg_tag = name;
     msg_stream = vp;
+    vstream_no_debug(vp);
     if (first_call) {
        first_call = 0;
        msg_output(msg_vstream_print);
index affbcc0dfdacb002ec97ae3d397595075e138786..5acfb0f1023648c3d8d1a90e03435828a88ee1d2 100644 (file)
 /*     int     vstream_fstat(stream, flags)
 /*     VSTREAM *stream;
 /*     int     flags;
+/*
+/*     void    vstream_no_debug(stream)
+/*     VSTREAM *stream;
 /* DESCRIPTION
 /*     The \fIvstream\fR module implements light-weight buffered I/O
 /*     similar to the standard I/O routines.
 /* .IP VSTREAM_FLAG_OWN_VSTRING
 /*     The stream 'owns' the VSTRING buffer, and is responsible
 /*     for cleaning up when the stream is closed.
+/*
+/*     vstream_no_debug() disables 'spontaneous' logging of output
+/*     activity on the last specified VSTREAM, to prevent recursive
+/*     logging.
 /* DIAGNOSTICS
 /*     Panics: interface violations. Fatal errors: out of memory.
 /* SEE ALSO
@@ -674,6 +681,8 @@ VSTREAM vstream_fstd[] = {
        } \
     } while (0)
 
+static VSTREAM *vstream_log_veto;
+
 /* vstream_buf_init - initialize buffer */
 
 static void vstream_buf_init(VBUF *bp, int flags)
@@ -771,7 +780,7 @@ static int vstream_fflush_some(VSTREAM *stream, ssize_t to_flush)
     used = bp->len - bp->cnt;
     left_over = used - to_flush;
 
-    if (msg_verbose > 2 && stream != VSTREAM_ERR)
+    if (msg_verbose > 2 && stream != vstream_log_veto)
        msg_info("%s: fd %d flush %ld", myname, stream->fd, (long) to_flush);
     if (to_flush < 0 || left_over < 0)
        msg_panic("%s: bad to_flush %ld", myname, (long) to_flush);
@@ -834,7 +843,7 @@ static int vstream_fflush_some(VSTREAM *stream, ssize_t to_flush)
                }
            }
        }
-       if (msg_verbose > 2 && stream != VSTREAM_ERR && n != to_flush)
+       if (msg_verbose > 2 && stream != vstream_log_veto && n != to_flush)
            msg_info("%s: %d flushed %ld/%ld", myname, stream->fd,
                     (long) n, (long) to_flush);
     }
@@ -1890,6 +1899,13 @@ VSTREAM *vstream_memreopen(VSTREAM *stream, VSTRING *string, int flags)
     return (stream);
 }
 
+/* vstream_no_debug - debug logging lockout */
+
+void    vstream_no_debug(VSTREAM *stream)
+{
+    vstream_log_veto = stream;
+}
+
 #ifdef TEST
 
 static void copy_line(ssize_t bufsize)
index 23688c745330da3fe951d4a969ee676f32e64dd5..d308253f87dcda1b63bdfde8b5af4eabc953e8a4 100644 (file)
@@ -274,6 +274,11 @@ extern int vstream_tweak_tcp(VSTREAM *);
        vstream_memreopen((VSTREAM *) 0, (string), (flags))
 VSTREAM *vstream_memreopen(VSTREAM *, struct VSTRING *, int);
 
+ /*
+  * Debug logging lockout.
+  */
+extern void vstream_no_debug(VSTREAM *);
+
 /* LICENSE
 /* .ad
 /* .fi