From 45e62d800ff31d8243739ba944a1555724bc258d Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Thu, 9 Nov 2023 00:05:34 +0100 Subject: [PATCH] lib-auth: auth-scram-server - Use settings struct --- src/auth/mech-scram.c | 7 ++++++- src/lib-auth/auth-scram-server.c | 19 ++++++++++--------- src/lib-auth/auth-scram-server.h | 8 ++++++-- src/lib-auth/test-auth-scram.c | 16 ++++++++++++++-- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/auth/mech-scram.c b/src/auth/mech-scram.c index f325ad456b..e63bc6c13b 100644 --- a/src/auth/mech-scram.c +++ b/src/auth/mech-scram.c @@ -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; diff --git a/src/lib-auth/auth-scram-server.c b/src/lib-auth/auth-scram-server.c index db43693c75..8b7a10a32f 100644 --- a/src/lib-auth/auth-scram-server.c +++ b/src/lib-auth/auth-scram-server.c @@ -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; diff --git a/src/lib-auth/auth-scram-server.h b/src/lib-auth/auth-scram-server.h index 94c416bcb0..0e39a3fb4c 100644 --- a/src/lib-auth/auth-scram-server.h +++ b/src/lib-auth/auth-scram-server.h @@ -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); diff --git a/src/lib-auth/test-auth-scram.c b/src/lib-auth/test-auth-scram.c index 8687bece9a..f1c334b045 100644 --- a/src/lib-auth/test-auth-scram.c +++ b/src/lib-auth/test-auth-scram.c @@ -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; -- 2.47.3