From: Stephan Bosch Date: Sun, 5 Oct 2025 16:43:27 +0000 (+0200) Subject: lib-sasl: dsasl-client - Add event X-Git-Tag: 2.4.2~133 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=946bd7f8d299284305fa7877f061423eeacc251a;p=thirdparty%2Fdovecot%2Fcore.git lib-sasl: dsasl-client - Add event --- diff --git a/src/doveadm/doveadm-auth.c b/src/doveadm/doveadm-auth.c index 2f03400ea8..e4cafac429 100644 --- a/src/doveadm/doveadm-auth.c +++ b/src/doveadm/doveadm-auth.c @@ -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 { diff --git a/src/imap-login/imap-proxy.c b/src/imap-login/imap-proxy.c index 94fefb857f..b4cdc8b924 100644 --- a/src/imap-login/imap-proxy.c +++ b/src/imap-login/imap-proxy.c @@ -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; diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 05ec2136b2..bb594d8dcb 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -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 { diff --git a/src/lib-sasl/dsasl-client-private.h b/src/lib-sasl/dsasl-client-private.h index 016abff1bc..a1ddbce1cc 100644 --- a/src/lib-sasl/dsasl-client-private.h +++ b/src/lib-sasl/dsasl-client-private.h @@ -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; diff --git a/src/lib-sasl/dsasl-client.c b/src/lib-sasl/dsasl-client.c index e514a8459e..b5932955cf 100644 --- a/src/lib-sasl/dsasl-client.c +++ b/src/lib-sasl/dsasl-client.c @@ -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); } diff --git a/src/lib-sasl/dsasl-client.h b/src/lib-sasl/dsasl-client.h index 6e32a9fa5a..aa055ec007 100644 --- a/src/lib-sasl/dsasl-client.h +++ b/src/lib-sasl/dsasl-client.h @@ -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 diff --git a/src/lib-sasl/fuzz-sasl-authentication.c b/src/lib-sasl/fuzz-sasl-authentication.c index b21e82569b..ae45db39ad 100644 --- a/src/lib-sasl/fuzz-sasl-authentication.c +++ b/src/lib-sasl/fuzz-sasl-authentication.c @@ -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, diff --git a/src/lib-sasl/test-sasl-authentication.c b/src/lib-sasl/test-sasl-authentication.c index 56377835f8..054424eea9 100644 --- a/src/lib-sasl/test-sasl-authentication.c +++ b/src/lib-sasl/test-sasl-authentication.c @@ -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, diff --git a/src/lib-smtp/smtp-client-connection.c b/src/lib-smtp/smtp-client-connection.c index 00c12b5f14..c9ba8fec55 100644 --- a/src/lib-smtp/smtp-client-connection.c +++ b/src/lib-smtp/smtp-client-connection.c @@ -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 { diff --git a/src/pop3-login/pop3-proxy.c b/src/pop3-login/pop3-proxy.c index 4d36a1103c..c8cf43d918 100644 --- a/src/pop3-login/pop3-proxy.c +++ b/src/pop3-login/pop3-proxy.c @@ -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; diff --git a/src/submission-login/submission-proxy.c b/src/submission-login/submission-proxy.c index abce3d5186..67be832d23 100644 --- a/src/submission-login/submission-proxy.c +++ b/src/submission-login/submission-proxy.c @@ -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;