]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sasl: dsasl-client - Add event
authorStephan Bosch <stephan.bosch@open-xchange.com>
Sun, 5 Oct 2025 16:43:27 +0000 (18:43 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Oct 2025 08:41:22 +0000 (08:41 +0000)
src/doveadm/doveadm-auth.c
src/imap-login/imap-proxy.c
src/lib-imap-client/imapc-connection.c
src/lib-sasl/dsasl-client-private.h
src/lib-sasl/dsasl-client.c
src/lib-sasl/dsasl-client.h
src/lib-sasl/fuzz-sasl-authentication.c
src/lib-sasl/test-sasl-authentication.c
src/lib-smtp/smtp-client-connection.c
src/pop3-login/pop3-proxy.c
src/submission-login/submission-proxy.c

index 2f03400ea8a99459fd48045e41e5d793093dc3a8..e4cafac42930a05d0f84c929ec6ba79b78f4471e 100644 (file)
@@ -332,6 +332,7 @@ static void cmd_auth_init_sasl_client(struct authtest_input *input)
                input->sasl_mech = &dsasl_client_mech_plain;
 
        i_zero(&sasl_set);
+       sasl_set.event_parent = input->event;
        if (input->master_user == NULL)
                sasl_set.authid = input->username;
        else {
index 94fefb857f38c0883145ee993895449e50869eab..b4cdc8b924bdc2259903acf77c1f9ffeab9a1ce2 100644 (file)
@@ -150,6 +150,7 @@ static int proxy_write_login(struct imap_client *client, string_t *str)
 
        i_assert(client->common.proxy_sasl_client == NULL);
        i_zero(&sasl_set);
+       sasl_set.event_parent = client->common.event;
        sasl_set.authid = client->common.proxy_master_user != NULL ?
                client->common.proxy_master_user : client->common.proxy_user;
        sasl_set.authzid = client->common.proxy_user;
index 05ec2136b2402c25a265d83ccb5ae5fe0909948a..bb594d8dcbb2d4395ff80aa706600a96418f94ee 100644 (file)
@@ -1110,6 +1110,7 @@ static void imapc_connection_authenticate(struct imapc_connection *conn)
        }
 
        i_zero(&sasl_set);
+       sasl_set.event_parent = conn->event;
        if (*set->imapc_master_user == '\0')
                sasl_set.authid = set->imapc_user;
        else {
index 016abff1bcebd75d20411ae6bb3271071f45fe48..a1ddbce1ccb84b550b26e9b2381efcd6940e5e6e 100644 (file)
@@ -11,6 +11,8 @@ enum dsasl_mech_security_flags {
 
 struct dsasl_client {
        pool_t pool;
+       struct event *event;
+
        struct dsasl_client_settings set;
        char *password;
        const struct dsasl_client_mech *mech;
index e514a8459e4d8e55e2adc9fce73c1c6dbca735f5..b5932955cf003dc708a6e2d48ba808bfa99eaddf 100644 (file)
@@ -5,6 +5,10 @@
 #include "safe-memset.h"
 #include "dsasl-client-private.h"
 
+struct event_category event_category_sasl_client = {
+       .name = "sasl-client"
+};
+
 static int init_refcount = 0;
 static ARRAY(const struct dsasl_client_mech *) dsasl_mechanisms = ARRAY_INIT;
 
@@ -75,6 +79,12 @@ struct dsasl_client *dsasl_client_new(const struct dsasl_client_mech *mech,
        client->set.protocol = p_strdup(pool, set->protocol);
        client->set.host = p_strdup(pool, set->host);
        client->set.port = set->port;
+
+       client->event = event_create(set->event_parent);
+       event_add_category(client->event, &event_category_sasl_client);
+       event_set_append_log_prefix(client->event,
+               t_strdup_printf("sasl(%s): ", t_str_lcase(mech->name)));
+
        return client;
 }
 
@@ -90,6 +100,7 @@ void dsasl_client_free(struct dsasl_client **_client)
                client->mech->free(client);
        if (client->password != NULL)
                safe_memset(client->password, 0, strlen(client->password));
+       event_unref(&client->event);
        pool_unref(&client->pool);
 }
 
index 6e32a9fa5a5dbb0bdec0565312e76fbe36697e6b..aa055ec0078e6b65e1286ecac1d40111cd84d91f 100644 (file)
@@ -4,6 +4,8 @@
 #include "iostream-ssl.h"
 
 struct dsasl_client_settings {
+       struct event *event_parent;
+
        /* authentication ID - must be set with most mechanisms */
        const char *authid;
        /* authorization ID (who to log in as, if authentication ID is a
index b21e82569b6297e25a73a1409d08870374b22b42..ae45db39ad860c457b27d67afc07b26015aaf47d 100644 (file)
@@ -646,6 +646,7 @@ static void fuzz_sasl_run(struct istream *input)
        sasl_server_request_create(&fctx.ssrctx, server_mech, "imap", NULL);
 
        struct dsasl_client_settings client_set = {
+               .event_parent = fuzz_event,
                .authid = params.authid,
                .authzid = params.authzid,
                .password = params.client_password,
index 56377835f82cc506a1695ee603d5c27b1245fcd0..054424eea960ae70c2a88435079db81a91af1734 100644 (file)
@@ -437,6 +437,7 @@ test_sasl_run_once(const struct test_sasl *test,
                                test->server.password);
 
        struct dsasl_client_settings client_set = {
+               .event_parent = test_event,
                .authid = (realm == NULL ? authid :
                           t_strconcat(authid, "@", realm, NULL)),
                .authzid = authzid,
index 00c12b5f14dd73274a2e104152c37994f3a35c64..c9ba8fec5571e1aaafa823f6d2e1c7c71389c131 100644 (file)
@@ -943,6 +943,7 @@ smtp_client_connection_authenticate(struct smtp_client_connection *conn)
        }
 
        i_zero(&sasl_set);
+       sasl_set.event_parent = conn->event;
        if (set->master_user == NULL)
                sasl_set.authid = set->username;
        else {
index 4d36a1103c7bbf6a14977dedad260ce5237ca12a..c8cf43d918f12bdd1c1b0cbae774ca7728296a46 100644 (file)
@@ -81,6 +81,7 @@ static int proxy_send_login(struct pop3_client *client, struct ostream *output)
 
        i_assert(client->common.proxy_sasl_client == NULL);
        i_zero(&sasl_set);
+       sasl_set.event_parent = client->common.event;
        sasl_set.authid = client->common.proxy_master_user != NULL ?
                client->common.proxy_master_user : client->common.proxy_user;
        sasl_set.authzid = client->common.proxy_user;
index abce3d5186af5ef87101ea95acf9653c949b482a..67be832d23c6f7679f6f77c529ec7d217a17f02e 100644 (file)
@@ -240,6 +240,7 @@ proxy_send_login(struct submission_client *client, struct ostream *output)
 
        i_assert(client->common.proxy_sasl_client == NULL);
        i_zero(&sasl_set);
+       sasl_set.event_parent = client->common.event;
        sasl_set.authid = client->common.proxy_master_user != NULL ?
                client->common.proxy_master_user : client->common.proxy_user;
        sasl_set.authzid = client->common.proxy_user;