]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth: auth-scram-server - Don't pass error message through set_*username() calls
authorStephan Bosch <stephan.bosch@open-xchange.com>
Sun, 5 Oct 2025 01:57:49 +0000 (03:57 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
Let the application log it directly.

src/auth/sasl-server-mech-scram.c
src/lib-auth/auth-scram-server.c
src/lib-auth/auth-scram-server.h
src/lib-auth/test-auth-scram.c

index 4f00e2b7b572574e9cdf1c6a3e540cfeb6173b73..3735e70f70e6c1f409d83e2d0c51868f4c5a066c 100644 (file)
@@ -62,24 +62,34 @@ credentials_callback(enum passdb_result result,
 
 static bool
 mech_scram_set_username(struct auth_scram_server *asserver,
-                       const char *username, const char **error_r)
+                       const char *username)
 {
        struct scram_auth_request *request =
                container_of(asserver, struct scram_auth_request, scram_server);
        struct auth_request *auth_request = &request->auth_request;
+       const char *error;
 
-       return auth_request_set_username(auth_request, username, error_r);
+       if (!auth_request_set_username(auth_request, username, &error)) {
+               e_info(auth_request->mech_event, "%s", error);
+               return FALSE;
+       }
+       return TRUE;
 }
 
 static bool
 mech_scram_set_login_username(struct auth_scram_server *asserver,
-                             const char *username, const char **error_r)
+                             const char *username)
 {
        struct scram_auth_request *request =
                container_of(asserver, struct scram_auth_request, scram_server);
        struct auth_request *auth_request = &request->auth_request;
+       const char *error;
 
-       return auth_request_set_login_username(auth_request, username, error_r);
+       if (!auth_request_set_login_username(auth_request, username, &error)) {
+               e_info(auth_request->mech_event, "login user: %s", error);
+               return FALSE;
+       }
+       return TRUE;
 }
 
 static void
@@ -145,11 +155,20 @@ void mech_scram_auth_continue(struct auth_request *auth_request,
                                      &error_code, &error);
        if (ret < 0) {
                i_assert(error != NULL);
-               if (error_code == AUTH_SCRAM_SERVER_ERROR_VERIFICATION_FAILED) {
+               switch (error_code) {
+               case AUTH_SCRAM_SERVER_ERROR_NONE:
+                       i_unreached();
+               case AUTH_SCRAM_SERVER_ERROR_PROTOCOL_VIOLATION:
+                       e_info(auth_request->mech_event, "%s", error);
+                       break;
+               case AUTH_SCRAM_SERVER_ERROR_BAD_USERNAME:
+               case AUTH_SCRAM_SERVER_ERROR_BAD_LOGIN_USERNAME:
+               case AUTH_SCRAM_SERVER_ERROR_LOOKUP_FAILED:
+                       break;
+               case AUTH_SCRAM_SERVER_ERROR_VERIFICATION_FAILED:
                        e_info(auth_request->mech_event,
                               AUTH_LOG_MSG_PASSWORD_MISMATCH);
-               } else {
-                       e_info(auth_request->mech_event, "%s", error);
+                       break;
                }
                sasl_server_request_failure(auth_request);
                return;
index 3a884e0ba1c812329076eff73d282df2ac46d540..fe5780771656b1ce041b10c28002625082b670d4 100644 (file)
 
 static bool
 auth_scram_server_set_username(struct auth_scram_server *server,
-                              const char *username, const char **error_r)
+                              const char *username)
 {
-       return server->backend->set_username(server, username, error_r);
+       return server->backend->set_username(server, username);
 }
 static bool
 auth_scram_server_set_login_username(struct auth_scram_server *server,
-                                    const char *username, const char **error_r)
+                                    const char *username)
 {
-       return server->backend->set_login_username(server, username,
-                                                  error_r);
+       return server->backend->set_login_username(server, username);
 }
 
 static void
@@ -517,13 +516,14 @@ auth_scram_server_input_client_first(struct auth_scram_server *server,
 
        /* Pass usernames to backend */
        i_assert(username != NULL);
-       if (!auth_scram_server_set_username(server, username, error_r)) {
+       if (!auth_scram_server_set_username(server, username)) {
+               *error_r = "Bad username";
                *error_code_r = AUTH_SCRAM_SERVER_ERROR_BAD_USERNAME;
                return -1;
        }
        if (login_username != NULL &&
-           !auth_scram_server_set_login_username(server, login_username,
-                                                 error_r)) {
+           !auth_scram_server_set_login_username(server, login_username)) {
+               *error_r = "Bad login username";
                *error_code_r = AUTH_SCRAM_SERVER_ERROR_BAD_LOGIN_USERNAME;
                return -1;
        }
index 7c54f98d72c6ad41acff39e4245478e96d9bfc6a..bc01038f23f2bf1fc25fb2ba0cdf7d32497935d7 100644 (file)
@@ -44,9 +44,9 @@ struct auth_scram_server_backend {
        /* Pass the authentication and authorization usernames to the
           backend. */
        bool (*set_username)(struct auth_scram_server *server,
-                            const char *username, const char **error_r);
+                            const char *username);
        bool (*set_login_username)(struct auth_scram_server *server,
-                                  const char *username, const char **error_r);
+                                  const char *username);
 
        /* Start channel binding in backend with provided type. */
        void (*start_channel_binding)(struct auth_scram_server *server,
index 37dc595caa0f764ad78a6fb4c983b79682968684..5f13d5495acd1f2f95b5b8b314481ea723626a7b 100644 (file)
@@ -37,36 +37,29 @@ struct backend_context {
 };
 
 static bool
-test_auth_set_username(struct auth_scram_server *asserver, const char *username,
-                      const char **error_r)
+test_auth_set_username(struct auth_scram_server *asserver, const char *username)
 {
        struct backend_context *bctx =
                container_of(asserver, struct backend_context, asserver);
 
-       if (bctx->expect_error == AUTH_SCRAM_SERVER_ERROR_BAD_USERNAME) {
-               *error_r = "Bad username";
+       if (bctx->expect_error == AUTH_SCRAM_SERVER_ERROR_BAD_USERNAME)
                return FALSE;
-       }
 
        bctx->username = p_strdup(bctx->pool, username);
-       *error_r = NULL;
        return TRUE;
 }
 
 static bool
 test_auth_set_login_username(struct auth_scram_server *asserver,
-                            const char *username, const char **error_r)
+                            const char *username)
 {
        struct backend_context *bctx =
                container_of(asserver, struct backend_context, asserver);
 
-       if (bctx->expect_error == AUTH_SCRAM_SERVER_ERROR_BAD_LOGIN_USERNAME) {
-               *error_r = "Bad login username";
+       if (bctx->expect_error == AUTH_SCRAM_SERVER_ERROR_BAD_LOGIN_USERNAME)
                return FALSE;
-       }
 
        bctx->login_username = p_strdup(bctx->pool, username);
-       *error_r = NULL;
        return TRUE;
 }