From: Timo Sirainen Date: Mon, 20 Nov 2017 18:33:40 +0000 (+0100) Subject: lib-storage: Add mail_user.event and give parent event in mail_user_alloc*() X-Git-Tag: 2.3.0.rc1~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=677cc0d62b41c7506246bf1b992a400a11896474;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mail_user.event and give parent event in mail_user_alloc*() --- diff --git a/src/lib-storage/index/raw/raw-storage.c b/src/lib-storage/index/raw/raw-storage.c index 32f578c7c1..5cec39d185 100644 --- a/src/lib-storage/index/raw/raw-storage.c +++ b/src/lib-storage/index/raw/raw-storage.c @@ -22,7 +22,7 @@ raw_storage_create_from_set(const struct setting_parser_info *set_info, struct mail_storage_settings *mail_set; const char *error; - user = mail_user_alloc("raw mail user", set_info, set); + user = mail_user_alloc(NULL, "raw mail user", set_info, set); user->autocreated = TRUE; mail_user_set_home(user, "/"); if (mail_user_init(user, &error) < 0) diff --git a/src/lib-storage/index/shared/shared-storage.c b/src/lib-storage/index/shared/shared-storage.c index ae88cdffbf..623408c279 100644 --- a/src/lib-storage/index/shared/shared-storage.c +++ b/src/lib-storage/index/shared/shared-storage.c @@ -251,8 +251,8 @@ int shared_storage_get_namespace(struct mail_namespace **_ns, return 0; } - owner = mail_user_alloc(userdomain, user->set_info, - user->unexpanded_set); + owner = mail_user_alloc(event_get_parent(user->event), userdomain, + user->set_info, user->unexpanded_set); owner->_service_user = user->_service_user; mail_storage_service_user_ref(owner->_service_user); owner->creator = user; diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 9faca1637c..d0b578e59a 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -727,6 +727,8 @@ extern struct mail_storage_module_register mail_storage_module_register; /* Storage's module_id for mail_index. */ extern struct mail_module_register mail_module_register; +extern struct event_category event_category_storage; + #define MAIL_STORAGE_CONTEXT(obj) \ MODULE_CONTEXT(obj, mail_storage_mail_index_module) extern MODULE_CONTEXT_DEFINE(mail_storage_mail_index_module, diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 5162158c67..c3c22e59a4 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -675,7 +675,7 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx, /* NOTE: if more user initialization is added, add it also to mail_user_dup() */ - mail_user = mail_user_alloc_nodup_set(user->input.username, + mail_user = mail_user_alloc_nodup_set(user->event, user->input.username, user->user_info, user->user_set); mail_user->_service_user = user; mail_storage_service_user_ref(user); @@ -708,6 +708,7 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx, p_strdup_printf(mail_user->pool, "%s:%s", user->input.session_id, session_id_suffix); + event_add_str(user->event, "session", mail_user->session_id); mail_user->userdb_fields = user->input.userdb_fields == NULL ? NULL : p_strarray_dup(mail_user->pool, user->input.userdb_fields); diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index b0134d5c46..f625b54ca8 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -40,6 +40,10 @@ extern struct mail_search_register *mail_search_register_imap; extern struct mail_search_register *mail_search_register_human; +struct event_category event_category_storage = { + .name = "storage", +}; + struct mail_storage_module_register mail_storage_module_register = { 0 }; struct mail_module_register mail_module_register = { 0 }; diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index 05e72fdf68..8439cab35e 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -52,7 +52,8 @@ static void mail_user_stats_fill_base(struct mail_user *user ATTR_UNUSED, } static struct mail_user * -mail_user_alloc_int(const char *username, +mail_user_alloc_int(struct event *parent_event, + const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set, pool_t pool) { @@ -72,6 +73,9 @@ mail_user_alloc_int(const char *username, user->service = master_service_get_name(master_service); user->default_normalizer = uni_utf8_to_decomposed_titlecase; user->session_create_time = ioloop_time; + user->event = event_create(parent_event); + event_add_category(user->event, &event_category_storage); + event_add_str(user->event, "user", username); /* check settings so that the duplicated structure will again contain the parsed fields */ @@ -86,24 +90,26 @@ mail_user_alloc_int(const char *username, } struct mail_user * -mail_user_alloc_nodup_set(const char *username, +mail_user_alloc_nodup_set(struct event *parent_event, + const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set) { pool_t pool; pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024); - return mail_user_alloc_int(username, set_info, set, pool); + return mail_user_alloc_int(parent_event, username, set_info, set, pool); } -struct mail_user *mail_user_alloc(const char *username, +struct mail_user *mail_user_alloc(struct event *parent_event, + const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set) { pool_t pool; pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024); - return mail_user_alloc_int(username, set_info, + return mail_user_alloc_int(parent_event, username, set_info, settings_dup(set_info, set, pool), pool); } @@ -212,6 +218,7 @@ void mail_user_unref(struct mail_user **_user) assert-crash in mail_user_ref() that is called by some handlers. */ user->v.deinit_pre(user); user->v.deinit(user); + event_unref(&user->event); i_assert(user->refcount == 1); pool_unref(&user->pool); } @@ -249,7 +256,15 @@ void mail_user_set_vars(struct mail_user *user, const char *service, i_assert(service != NULL); user->service = p_strdup(user->pool, service); + event_add_str(user->event, "service", service); + mail_user_connection_init_from(&user->conn, user->pool, conn); + if (user->conn.local_ip != NULL) + event_add_str(user->event, "local_ip", + net_ip2addr(user->conn.local_ip)); + if (user->conn.remote_ip != NULL) + event_add_str(user->event, "remote_ip", + net_ip2addr(user->conn.remote_ip)); } const struct var_expand_table * @@ -657,8 +672,8 @@ struct mail_user *mail_user_dup(struct mail_user *user) { struct mail_user *user2; - user2 = mail_user_alloc(user->username, user->set_info, - user->unexpanded_set); + user2 = mail_user_alloc(event_get_parent(user->event), user->username, + user->set_info, user->unexpanded_set); if (user2->_service_user != NULL) { user2->_service_user = user->_service_user; mail_storage_service_user_ref(user2->_service_user); diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 410707eccb..b97514df75 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -30,6 +30,7 @@ struct mail_user { struct mail_user_vfuncs v, *vlast; int refcount; + struct event *event; /* User's creator if such exists. For example for autocreated shared mailbox users their creator is the logged in user. */ struct mail_user *creator; @@ -121,11 +122,13 @@ extern struct mail_user_module_register mail_user_module_register; extern struct auth_master_connection *mail_user_auth_master_conn; extern const struct var_expand_func_table *mail_user_var_expand_func_table; -struct mail_user *mail_user_alloc(const char *username, +struct mail_user *mail_user_alloc(struct event *parent_event, + const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set); struct mail_user * -mail_user_alloc_nodup_set(const char *username, +mail_user_alloc_nodup_set(struct event *parent_event, + const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set); /* Returns -1 if settings were invalid. */