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;
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;
}
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);
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;
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;
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;
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;
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. */
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;
};
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);
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;
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;