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 -- [email protected]
To unsubscribe send an email to [email protected]