]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.5.22 v3.5.22
authorWietse Venema <wietse@porcupine.org>
Wed, 1 Nov 2023 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <ietf-dane@dukhovni.org>
Wed, 1 Nov 2023 22:24:53 +0000 (18:24 -0400)
postfix/HISTORY
postfix/html/postconf.5.html
postfix/man/man5/postconf.5
postfix/proto/postconf.proto
postfix/src/global/mail_version.h
postfix/src/local/local_expand.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_sasl_glue.c
postfix/src/xsasl/xsasl_cyrus_server.c

index a5d55a2984f0a6f1af981c189bab1403ccd499f9..0076c07de58a7dc4f8690c8e2e544b2480abef76 100644 (file)
@@ -25371,3 +25371,31 @@ Apologies for any names omitted.
        This problem was reported first in the context of TLSA
        record lookups. Files: util/valid_hostname.[hc],
        dns/dns_lookup.c.
+
+20230929
+
+       Bugfix (defect introduced Postfix 2.5, 20080104): the Postfix
+       SMTP server was waiting for a client command instead of
+       replying immediately, after a client certificate verification
+       error in TLS wrappermode. Reported by Andreas Kinzler. File:
+       smtpd/smtpd.c.
+
+20231006
+
+       Usability: the Postfix SMTP server now attempts to log the
+       SASL username after authentication failure. In Postfix
+       logging, this appends ", sasl_username=xxx" after the reason
+       for SASL authentication failure. The logging replaces an
+       unavailable reason with "(reason unavailable)", and replaces
+       an unavailable sasl_username with "(unavailable)". Based
+       on code by Jozsef Kadlecsik. Files: xsasl/xsasl_server.c,
+       xsasl/xsasl_cyrus_server.c, smtpd/smtpd_sasl_glue.c.
+
+20231026
+
+       Bugfix (defect introduced: Postfix 2.11): in forward_path,
+       the expression ${recipient_delimiter} would expand to an
+       empty string when a recipient address had no recipient
+       delimiter. Fixed by restoring Postfix 2.10 behavior to use
+       a configured recipient delimiter value. Reported by Tod
+       A. Sandman. Files: proto/postconf.proto, local/local_expand.c.
index 8511ffbf4072bd981692f92d2b311562873bfedb..163ad1d494d2b6ae580e4038978cb181eb459f78 100644 (file)
@@ -3664,7 +3664,10 @@ filtered with the character set that is specified with the
 <dt><b>$<a href="postconf.5.html#recipient_delimiter">recipient_delimiter</a></b></dt>
 
 <dd>The address extension delimiter that was found in the recipient
-address (Postfix 2.11 and later), or the system-wide recipient
+address (Postfix 2.11 and later), or the 'first' delimiter specified
+with the system-wide recipient address extension delimiter (Postfix
+3.5.22, 3.5.12, 3.7.8, 3.8.3 and later). Historically, this was
+always the system-wide recipient
 address extension delimiter (Postfix 2.10 and earlier). </dd>
 
 <dt><b>${name?value}</b></dt>
index 4c3e8ef16a70794bdcbc9c4500c434fd17bf19b8..d2150dac613bf0e55e9a50a0c5821c58b215ef74 100644 (file)
@@ -2297,7 +2297,10 @@ The entire recipient localpart.
 .br
 .IP "\fB$recipient_delimiter\fR"
 The address extension delimiter that was found in the recipient
-address (Postfix 2.11 and later), or the system\-wide recipient
+address (Postfix 2.11 and later), or the 'first' delimiter specified
+with the system\-wide recipient address extension delimiter (Postfix
+3.5.22, 3.5.12, 3.7.8, 3.8.3 and later). Historically, this was
+always the system\-wide recipient
 address extension delimiter (Postfix 2.10 and earlier).
 .br
 .IP "\fB${name?value}\fR"
index 6b2981e20348c7d4769a6f99cbf179393705e914..c6af1b38e2a348734c1299601e2c9619fa9732b4 100644 (file)
@@ -1732,7 +1732,10 @@ forward_expansion_filter parameter.  </p>
 <dt><b>$recipient_delimiter</b></dt>
 
 <dd>The address extension delimiter that was found in the recipient
-address (Postfix 2.11 and later), or the system-wide recipient
+address (Postfix 2.11 and later), or the 'first' delimiter specified
+with the system-wide recipient address extension delimiter (Postfix
+3.5.22, 3.5.12, 3.7.8, 3.8.3 and later). Historically, this was
+always the system-wide recipient
 address extension delimiter (Postfix 2.10 and earlier). </dd>
 
 <dt><b>${name?value}</b></dt>
index 78b5befb2e299be5ed77ef78902d4190f083cb7d..e7aaad923425314f4ef2d2f6a3c7da3c79d0ac02 100644 (file)
@@ -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      "20230901"
-#define MAIL_VERSION_NUMBER    "3.5.21"
+#define MAIL_RELEASE_DATE      "20231101"
+#define MAIL_VERSION_NUMBER    "3.5.22"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index af2de45e11af77fed2cd96d718d33738eb89e54e..ff9c3d6ff4aefdb388454183555d9908b760ec43 100644 (file)
@@ -138,6 +138,8 @@ static const char *local_expand_lookup(const char *name, int mode, void *ptr)
     } else if (STREQ(name, "recipient_delimiter")) {
        rcpt_delim[0] =
            local->state->msg_attr.local[strlen(local->state->msg_attr.user)];
+       if (rcpt_delim[0] == 0)
+           rcpt_delim[0] = var_rcpt_delim[0];
        rcpt_delim[1] = 0;
        return (rcpt_delim[0] ? rcpt_delim : 0);
 #if 0
index b93231dae7af1ea91378c0ac63d83c1ba37fb64b..d3baac0f34813ffe18fa94fa3139290f0b9c49cd 100644 (file)
@@ -5121,15 +5121,16 @@ static void smtpd_start_tls(SMTPD_STATE *state)
     if (requirecert && TLS_CERT_IS_TRUSTED(state->tls_context) == 0) {
 
        /*
-        * Fetch and reject the next command (should be EHLO), then
-        * disconnect (side-effect of returning "421 ...".
+        * In non-wrappermode, fetch the next command (should be EHLO). Reply
+        * with 421, then disconnect (as a side-effect of replying with 421).
         */
        cert_present = TLS_CERT_IS_PRESENT(state->tls_context);
        msg_info("NOQUEUE: abort: TLS from %s: %s",
                 state->namaddr, cert_present ?
                 "Client certificate not trusted" :
                 "No client certificate presented");
-       smtpd_chat_query(state);
+       if (var_smtpd_tls_wrappermode == 0)
+           smtpd_chat_query(state);
        smtpd_chat_reply(state, "421 4.7.1 %s Error: %s",
                         var_myhostname, cert_present ?
                         "Client certificate not trusted" :
index 020c830fa07e46080923256fc01461b7120ac65a..ee5c04116af0d7753776e35fd6aa0549719ec290 100644 (file)
@@ -321,9 +321,11 @@ int     smtpd_sasl_authenticate(SMTPD_STATE *state,
        }
     }
     if (status != XSASL_AUTH_DONE) {
-       msg_warn("%s: SASL %s authentication failed: %s",
-                state->namaddr, sasl_method,
-                STR(state->sasl_reply));
+       sasl_username = xsasl_server_get_username(state->sasl_server);
+       msg_warn("%s: SASL %.100s authentication failed: %s, sasl_username=%.100s",
+                state->namaddr, sasl_method, *STR(state->sasl_reply) ?
+                STR(state->sasl_reply) : "(reason unavailable)",
+                sasl_username ? sasl_username : "(unavailable)");
        /* RFC 4954 Section 6. */
        if (status == XSASL_AUTH_TEMP)
            smtpd_chat_reply(state, "454 4.7.0 Temporary authentication failure: %s",
index 89e1fc9a0c7a38abbc8e1736b1f8fc48595d559e..4bf2ed2126a0c425e88f4f77684347e706327a80 100644 (file)
@@ -625,16 +625,15 @@ static const char *xsasl_cyrus_server_get_username(XSASL_SERVER *xp)
     /*
      * XXX Do not free(serverout).
      */
+    if (server->username)
+       myfree(server->username);
     sasl_status = sasl_getprop(server->sasl_conn, SASL_USERNAME, &serverout);
     if (sasl_status != SASL_OK || serverout == 0) {
-       msg_warn("%s: sasl_getprop SASL_USERNAME botch: %s",
-                myname, xsasl_cyrus_strerror(sasl_status));
-       return (0);
+       server->username = 0;
+    } else {
+       server->username = mystrdup(serverout);
+       printable(server->username, '?');
     }
-    if (server->username)
-       myfree(server->username);
-    server->username = mystrdup(serverout);
-    printable(server->username, '?');
     return (server->username);
 }