From 94c84bed9e5fc56a4b5d49038994bd302e25434c Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@dovecot.fi> Date: Thu, 2 Aug 2018 09:44:12 +0200 Subject: [PATCH] managesieve: Add client.event and use it as mail_*user's parent event. --- src/managesieve/main.c | 26 +++++++++++++++++++++++--- src/managesieve/managesieve-client.c | 5 ++++- src/managesieve/managesieve-client.h | 3 ++- src/managesieve/managesieve-common.h | 1 + 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/managesieve/main.c b/src/managesieve/main.c index 6a4466ec6..462e0517f 100644 --- a/src/managesieve/main.c +++ b/src/managesieve/main.c @@ -36,6 +36,10 @@ static struct master_login *master_login = NULL; void (*hook_client_created)(struct client **client) = NULL; +struct event_category event_category_managesieve = { + .name = "managesieve", +}; + void managesieve_refresh_proctitle(void) { #define MANAGESIEVE_PROCTITLE_PREFERRED_LEN 80 @@ -125,15 +129,29 @@ client_create_from_input(const struct mail_storage_service_input *input, int fd_in, int fd_out, const buffer_t *input_buf, const char **error_r) { + struct mail_storage_service_input service_input; struct mail_storage_service_user *user; struct mail_user *mail_user; struct client *client; struct managesieve_settings *set; + struct event *event; const char *error; - if (mail_storage_service_lookup_next(storage_service, input, - &user, &mail_user, error_r) <= 0) + event = event_create(NULL); + event_add_category(event, &event_category_managesieve); + event_add_fields(event, (const struct event_add_field []){ + { .key = "user", .value = input->username }, + { .key = "session", .value = input->session_id }, + { .key = NULL } + }); + + service_input = *input; + service_input.parent_event = event; + if (mail_storage_service_lookup_next(storage_service, &service_input, + &user, &mail_user, error_r) <= 0) { + event_unref(&event); return -1; + } restrict_access_allow_coredumps(TRUE); set = mail_storage_service_user_get_set(user)[1]; @@ -147,14 +165,16 @@ client_create_from_input(const struct mail_storage_service_input *input, i_error("Failed to expand settings: %s", error); mail_storage_service_user_unref(&user); mail_user_unref(&mail_user); + event_unref(&event); return -1; } client = client_create(fd_in, fd_out, input->session_id, - mail_user, user, set); + event, mail_user, user, set); T_BEGIN { client_add_input(client, input_buf); } T_END; + event_unref(&event); return 0; } diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c index c4c8e970d..28c154028 100644 --- a/src/managesieve/managesieve-client.c +++ b/src/managesieve/managesieve-client.c @@ -103,7 +103,7 @@ client_get_storage(struct sieve_instance *svinst, struct mail_user *user, struct client * client_create(int fd_in, int fd_out, const char *session_id, - struct mail_user *user, + struct event *event, struct mail_user *user, struct mail_storage_service_user *service_user, const struct managesieve_settings *set) { @@ -136,6 +136,8 @@ client_create(int fd_in, int fd_out, const char *session_id, pool = pool_alloconly_create("managesieve client", 1024); client = p_new(pool, struct client, 1); client->pool = pool; + client->event = event; + event_ref(client->event); client->set = set; client->service_user = service_user; client->session_id = p_strdup(pool, session_id); @@ -289,6 +291,7 @@ void client_destroy(struct client *client, const char *reason) managesieve_client_count--; DLLIST_REMOVE(&managesieve_clients, client); + event_unref(&client->event); pool_unref(&client->pool); master_service_client_connection_destroyed(master_service); diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h index 9c40448cc..d53b39e01 100644 --- a/src/managesieve/managesieve-client.h +++ b/src/managesieve/managesieve-client.h @@ -37,6 +37,7 @@ extern struct managesieve_module_register managesieve_module_register; struct client { struct client *prev, *next; + struct event *event; const char *session_id; int fd_in, fd_out; struct io *io; @@ -86,7 +87,7 @@ extern unsigned int managesieve_client_count; if the handle is a socket. */ struct client * client_create(int fd_in, int fd_out, const char *session_id, - struct mail_user *user, + struct event *event, struct mail_user *user, struct mail_storage_service_user *service_user, const struct managesieve_settings *set); void client_destroy(struct client *client, const char *reason); diff --git a/src/managesieve/managesieve-common.h b/src/managesieve/managesieve-common.h index 7c3b5457a..e1df589ec 100644 --- a/src/managesieve/managesieve-common.h +++ b/src/managesieve/managesieve-common.h @@ -24,6 +24,7 @@ #include "managesieve-settings.h" extern void (*hook_client_created)(struct client **client); +extern struct event_category event_category_managesieve; void managesieve_refresh_proctitle(void); -- GitLab