]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail_user_alloc*() - Require service_user parameter
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 12 Jan 2023 16:02:31 +0000 (18:02 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 27 Jan 2023 11:08:35 +0000 (11:08 +0000)
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index f1f53587816c2ba5e03e697c123b2ca6c8f808e2..d366439c23d4cd78a1459d3a99ea7d4a21b8931e 100644 (file)
@@ -686,13 +686,10 @@ 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->event, user->input.username,
-                                             user->set_parser);
+       mail_user = mail_user_alloc_nodup_set(user, user->set_parser);
        *mail_user_r = mail_user;
-       mail_user->_service_user = user;
        if (user->input.autocreated)
                mail_user->autocreated = TRUE;
-       mail_storage_service_user_ref(user);
        if (!user->input.no_userdb_lookup || user->home_from_userdb) {
                /* userdb lookup is done. The (lack of) home directory is now
                   known. */
index 2a4767a8c8290e6fef3c9896f66e0bc21a2f0f8b..a93fc39fbbd80258cede81b4eefb76a287f3fcb1 100644 (file)
@@ -49,19 +49,22 @@ static void mail_user_deinit_pre_base(struct mail_user *user ATTR_UNUSED)
 }
 
 static struct mail_user *
-mail_user_alloc_int(struct event *parent_event,
-                   const char *username,
+mail_user_alloc_int(struct mail_storage_service_user *service_user,
                    struct setting_parser_context *unexpanded_set_parser,
                    pool_t pool)
 {
        struct mail_user *user;
-
-       i_assert(username != NULL);
+       struct event *parent_event =
+               mail_storage_service_user_get_event(service_user);
+       const char *username =
+               mail_storage_service_user_get_username(service_user);
        i_assert(*username != '\0');
 
        user = p_new(pool, struct mail_user, 1);
        user->pool = pool;
        user->refcount = 1;
+       user->_service_user = service_user;
+       mail_storage_service_user_ref(service_user);
        user->username = p_strdup(pool, username);
        user->unexpanded_set_parser = unexpanded_set_parser;
        settings_parser_ref(user->unexpanded_set_parser);
@@ -85,19 +88,16 @@ mail_user_alloc_int(struct event *parent_event,
 }
 
 struct mail_user *
-mail_user_alloc_nodup_set(struct event *parent_event,
-                         const char *username,
+mail_user_alloc_nodup_set(struct mail_storage_service_user *service_user,
                          struct setting_parser_context *unexpanded_set_parser)
 {
        pool_t pool;
 
        pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
-       return mail_user_alloc_int(parent_event, username,
-                                  unexpanded_set_parser, pool);
+       return mail_user_alloc_int(service_user, unexpanded_set_parser, pool);
 }
 
-struct mail_user *mail_user_alloc(struct event *parent_event,
-                                 const char *username,
+struct mail_user *mail_user_alloc(struct mail_storage_service_user *service_user,
                                  struct setting_parser_context *unexpanded_set_parser)
 {
        pool_t pool;
@@ -106,7 +106,7 @@ struct mail_user *mail_user_alloc(struct event *parent_event,
        struct setting_parser_context *set_parser =
                settings_parser_dup(unexpanded_set_parser, pool);
        struct mail_user *user =
-               mail_user_alloc_int(parent_event, username, set_parser, pool);
+               mail_user_alloc_int(service_user, set_parser, pool);
        settings_parser_unref(&set_parser);
        return user;
 }
@@ -770,12 +770,8 @@ struct mail_user *mail_user_dup(struct mail_user *user)
 {
        struct mail_user *user2;
 
-       user2 = mail_user_alloc(event_get_parent(user->event), user->username,
+       user2 = mail_user_alloc(user->_service_user,
                                user->unexpanded_set_parser);
-       if (user2->_service_user != NULL) {
-               user2->_service_user = user->_service_user;
-               mail_storage_service_user_ref(user2->_service_user);
-       }
        if (user->_home != NULL)
                mail_user_set_home(user2, user->_home);
        mail_user_set_vars(user2, user->service, &user->conn);
index c65d52c8e7136d89262a4bc06802536a3b800f09..e72dc4eca7d1d4139094bc86c7d40b46acbb7d31 100644 (file)
@@ -127,12 +127,11 @@ 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(struct event *parent_event,
-                                 const char *username,
-                                 struct setting_parser_context *unexpanded_set_parser);
 struct mail_user *
-mail_user_alloc_nodup_set(struct event *parent_event,
-                         const char *username,
+mail_user_alloc(struct mail_storage_service_user *service_user,
+               struct setting_parser_context *unexpanded_set_parser);
+struct mail_user *
+mail_user_alloc_nodup_set(struct mail_storage_service_user *service_user,
                          struct setting_parser_context *set_parser);
 /* Returns -1 if settings were invalid. */
 int mail_user_init(struct mail_user *user, const char **error_r);