]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth: auth-scram-server - Use settings struct
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 8 Nov 2023 23:05:34 +0000 (00:05 +0100)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 17 Jan 2025 17:36:39 +0000 (18:36 +0100)
src/auth/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 f325ad456b0d5a60135535d5035e89e6176bc169..e63bc6c13bbcfa36e897847a241731bab1015946 100644 (file)
@@ -157,8 +157,13 @@ mech_scram_auth_new(const struct hash_method *hash_method,
        request->pool = pool;
        request->password_scheme = password_scheme;
 
+       struct auth_scram_server_settings scram_set;
+
+       i_zero(&scram_set);
+       scram_set.hash_method = hash_method;
+
        auth_scram_server_init(&request->scram_server, pool,
-                              hash_method, &scram_server_backend);
+                              &scram_set, &scram_server_backend);
 
        request->auth_request.pool = pool;
        return &request->auth_request;
index db43693c757a4e011e74b8256e651838205c1d39..8b7a10a32fc33c84dbe9431bedc066bc313eb783 100644 (file)
@@ -40,7 +40,7 @@ auth_scram_server_set_login_username(struct auth_scram_server *server,
 static int
 auth_scram_server_credentials_lookup(struct auth_scram_server *server)
 {
-       const struct hash_method *hmethod = server->hash_method;
+       const struct hash_method *hmethod = server->set.hash_method;
        struct auth_scram_key_data *kdata = &server->key_data;
        pool_t pool = server->pool;
 
@@ -54,21 +54,22 @@ auth_scram_server_credentials_lookup(struct auth_scram_server *server)
 }
 
 void auth_scram_server_init(struct auth_scram_server *server_r, pool_t pool,
-                           const struct hash_method *hmethod,
+                           const struct auth_scram_server_settings *set,
                            const struct auth_scram_server_backend *backend)
 {
        pool_ref(pool);
 
+       i_assert(set->hash_method != NULL);
+
        i_zero(server_r);
        server_r->pool = pool;
-       server_r->hash_method = hmethod;
-
+       server_r->set = *set;
        server_r->backend = backend;
 }
 
 void auth_scram_server_deinit(struct auth_scram_server *server)
 {
-       i_assert(server->hash_method != NULL);
+       i_assert(server->set.hash_method != NULL);
        if (server->proof != NULL)
                buffer_clear_safe(server->proof);
        auth_scram_key_data_clear(&server->key_data);
@@ -241,7 +242,7 @@ auth_scram_parse_client_first(struct auth_scram_server *server,
 static string_t *
 auth_scram_get_server_first(struct auth_scram_server *server)
 {
-       const struct hash_method *hmethod = server->hash_method;
+       const struct hash_method *hmethod = server->set.hash_method;
        struct auth_scram_key_data *kdata = &server->key_data;
        unsigned char snonce[SCRAM_SERVER_NONCE_LEN+1];
        string_t *str;
@@ -290,7 +291,7 @@ auth_scram_get_server_first(struct auth_scram_server *server)
 static bool
 auth_scram_server_verify_credentials(struct auth_scram_server *server)
 {
-       const struct hash_method *hmethod = server->hash_method;
+       const struct hash_method *hmethod = server->set.hash_method;
        struct auth_scram_key_data *kdata = &server->key_data;
        struct hmac_context ctx;
        const char *auth_message;
@@ -339,7 +340,7 @@ auth_scram_parse_client_final(struct auth_scram_server *server,
                              const unsigned char *data, size_t size,
                              const char **error_r)
 {
-       const struct hash_method *hmethod = server->hash_method;
+       const struct hash_method *hmethod = server->set.hash_method;
        const char **fields, *cbind_input, *nonce_str;
        unsigned int field_count;
        string_t *str;
@@ -420,7 +421,7 @@ auth_scram_parse_client_final(struct auth_scram_server *server,
 static string_t *
 auth_scram_get_server_final(struct auth_scram_server *server)
 {
-       const struct hash_method *hmethod = server->hash_method;
+       const struct hash_method *hmethod = server->set.hash_method;
        struct auth_scram_key_data *kdata = &server->key_data;
        struct hmac_context ctx;
        const char *auth_message;
index 94c416bcb077d16d51b99bdef8444f41ab04f914..0e39a3fb4c794d47127e951b8023f8eee175ee6e 100644 (file)
@@ -33,6 +33,10 @@ enum auth_scram_server_state {
        AUTH_SCRAM_SERVER_STATE_ERROR,
 };
 
+struct auth_scram_server_settings {
+       const struct hash_method *hash_method;
+};
+
 struct auth_scram_server_backend {
        /* Pass the authentication and authorization usernames to the
           backend. */
@@ -52,7 +56,7 @@ struct auth_scram_server_backend {
 
 struct auth_scram_server {
        pool_t pool;
-       const struct hash_method *hash_method;
+       struct auth_scram_server_settings set;
 
        /* Backend API */
        const struct auth_scram_server_backend *backend;
@@ -76,7 +80,7 @@ struct auth_scram_server {
 };
 
 void auth_scram_server_init(struct auth_scram_server *server_r, pool_t pool,
-                           const struct hash_method *hmethod,
+                           const struct auth_scram_server_settings *set,
                            const struct auth_scram_server_backend *backend);
 void auth_scram_server_deinit(struct auth_scram_server *server);
 
index 8687bece9a8c6719881cf14719ab5ea0c899c463..f1c334b045bbc500e00271b56024567369441883 100644 (file)
@@ -224,7 +224,13 @@ test_auth_success_one(const struct hash_method *hmethod, const char *authid,
 
        auth_scram_client_init(&bctx->asclient, pool, hmethod,
                               authid, authzid, password);
-       auth_scram_server_init(&bctx->asserver, pool, hmethod, &backend);
+
+       struct auth_scram_server_settings server_set;
+
+       i_zero(&server_set);
+       server_set.hash_method = hmethod;
+
+       auth_scram_server_init(&bctx->asserver, pool, &server_set, &backend);
 
        while (!test_has_failed()) {
                const unsigned char *data;
@@ -340,7 +346,13 @@ test_auth_server_error_one(const struct hash_method *hmethod,
 
        auth_scram_client_init(&bctx->asclient, pool, hmethod,
                               authid, authzid, client_password);
-       auth_scram_server_init(&bctx->asserver, pool, hmethod, &backend);
+
+       struct auth_scram_server_settings server_set;
+
+       i_zero(&server_set);
+       server_set.hash_method = hmethod;
+
+       auth_scram_server_init(&bctx->asserver, pool, &server_set, &backend);
 
        while (!test_has_failed()) {
                const unsigned char *data;