]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mail_user.event and give parent event in mail_user_alloc*()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 20 Nov 2017 18:33:40 +0000 (19:33 +0100)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 13 Dec 2017 11:22:17 +0000 (13:22 +0200)
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/index/shared/shared-storage.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage.c
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index 32f578c7c1e06d85f8e8f70c2a95bf3ad2d30de2..5cec39d185aac2cab98de1588439e5bf823a61cd 100644 (file)
@@ -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)
index ae88cdffbf719ecef6a27658e0ffeffb520fe85b..623408c2792e6e1ace8d5f24065d59852d66487b 100644 (file)
@@ -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;
index 9faca1637c715baf2d1d3547abb3e045fe7c7869..d0b578e59ac1da5478de2b2879b5cdc4ef3e8c21 100644 (file)
@@ -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,
index 5162158c67aa12729c9b3da62a94a25a6062d8d5..c3c22e59a48fb32535bf80c163b60e467b3fea22 100644 (file)
@@ -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);
index b0134d5c460db29ef9af17e2756df1a3f289416a..f625b54ca87447ee7b446d682a74e15512c28956 100644 (file)
 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 };
 
index 05e72fdf68567aa96725ffa0f83bc6f72abd05a4..8439cab35eae9f43feebacbbdc48afbb70da082a 100644 (file)
@@ -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);
index 410707eccb3cc7ccfeb6e90510fd55955ec87c33..b97514df75cb1cdb4c8d8378d714430af39d3895 100644 (file)
@@ -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. */