Wietse Venema via Postfix-users:
> I think I can take it from here.

        Wietse

20231006

        Clenaup: attempt to log the SASL username after authentication
        failure. This appends ", sasl_username=xxx" to SASL authentication
        failure logging. Based on code by Jozsef Kadlecsik. Files:
        xsasl/sxasl_server.c, xsasl/xsasl_cyrus_server.c,
        smtpd/smtpd_sasl_glue.c.

diff '--exclude=man' '--exclude=html' '--exclude=README_FILES' 
'--exclude=INSTALL' '--exclude=.indent.pro' -r -ur 
/var/tmp/postfix-3.9-20230924/src/smtpd/smtpd_sasl_glue.c 
./src/smtpd/smtpd_sasl_glue.c
--- /var/tmp/postfix-3.9-20230924/src/smtpd/smtpd_sasl_glue.c   2020-08-30 
17:03:46.000000000 -0400
+++ ./src/smtpd/smtpd_sasl_glue.c       2023-10-06 18:03:28.340781626 -0400
@@ -339,10 +339,12 @@
            return (-1);
        }
     }
+    sasl_username = xsasl_server_get_username(state->sasl_server);
     if (status != XSASL_AUTH_DONE) {
-       msg_warn("%s: SASL %s authentication failed: %s",
+       msg_warn("%s: SASL %s authentication failed: %s, sasl_username=%s",
                 state->namaddr, sasl_method,
-                STR(state->sasl_reply));
+                STR(state->sasl_reply), 
+                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",
@@ -354,7 +356,7 @@
     }
     /* RFC 4954 Section 6. */
     smtpd_chat_reply(state, "235 2.7.0 Authentication successful");
-    if ((sasl_username = xsasl_server_get_username(state->sasl_server)) == 0)
+    if (sasl_username == 0)
        msg_panic("cannot look up the authenticated SASL username");
     state->sasl_username = mystrdup(sasl_username);
     printable(state->sasl_username, '?');
diff '--exclude=man' '--exclude=html' '--exclude=README_FILES' 
'--exclude=INSTALL' '--exclude=.indent.pro' -r -ur 
/var/tmp/postfix-3.9-20230924/src/xsasl/xsasl_cyrus_server.c 
./src/xsasl/xsasl_cyrus_server.c
--- /var/tmp/postfix-3.9-20230924/src/xsasl/xsasl_cyrus_server.c        
2016-06-25 20:45:17.000000000 -0400
+++ ./src/xsasl/xsasl_cyrus_server.c    2023-10-06 18:11:03.562043499 -0400
@@ -625,16 +625,15 @@
     /*
      * 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);
 }
 
diff '--exclude=man' '--exclude=html' '--exclude=README_FILES' 
'--exclude=INSTALL' '--exclude=.indent.pro' -r -ur 
/var/tmp/postfix-3.9-20230924/src/xsasl/xsasl_server.c 
./src/xsasl/xsasl_server.c
--- /var/tmp/postfix-3.9-20230924/src/xsasl/xsasl_server.c      2017-12-27 
17:29:45.000000000 -0500
+++ ./src/xsasl/xsasl_server.c  2023-10-06 18:34:31.938775697 -0400
@@ -123,7 +123,10 @@
 /*     reply.
 /*
 /*     xsasl_server_get_username() returns the stored username
-/*     after successful authentication.
+/*     after successful authentication. The username may be null
+/*     after authentication failure, depending on the kind of
+/*     failure and on authentication backend inmplementation
+/*     details. A non-null result is converted to printable text.
 /*
 /*     Arguments:
 /* .IP addr_family
_______________________________________________
Postfix-users mailing list -- postfix-users@postfix.org
To unsubscribe send an email to postfix-users-le...@postfix.org

Reply via email to