]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added mail_user_dup()
authorTimo Sirainen <tss@iki.fi>
Mon, 15 Sep 2014 21:21:13 +0000 (00:21 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 15 Sep 2014 21:21:13 +0000 (00:21 +0300)
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index f1077e3bcdd60331dc083a2ee6aecd53851d4629..339d96af937ab3e2653cbeb975a5a1309461b725 100644 (file)
@@ -633,6 +633,8 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
        const char *home = priv->home;
        struct mail_user *mail_user;
 
+       /* NOTE: if more user initialization is added, add it also to
+          mail_user_dup() */
        mail_user = mail_user_alloc(user->input.username, user->user_info,
                                    user->user_set);
        mail_user_set_home(mail_user, *home == '\0' ? NULL : home);
index a12ec96e177866daf130130f4e6e1af9e3205426..f67307f0ecb00d2ff2c7841ff6f0b52d34aa153d 100644 (file)
@@ -514,3 +514,23 @@ mail_user_get_storage_class(struct mail_user *user, const char *name)
        }
        return storage;
 }
+
+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);
+       if (user->_home != NULL)
+               mail_user_set_home(user2, user->_home);
+       mail_user_set_vars(user2, user->service,
+                          user->local_ip, user->remote_ip);
+       user2->uid = user->uid;
+       user2->gid = user->gid;
+       user2->anonymous = user->anonymous;
+       user2->admin = user->admin;
+       user2->auth_token = p_strdup(user2->pool, user->auth_token);
+       user2->auth_user = p_strdup(user2->pool, user->auth_user);
+       user2->session_id = p_strdup(user2->pool, user->session_id);
+       return user2;
+}
index c44f5b322626828ab0ec149eed36d69d7d60c2ec..c7237130b064fe238d5d229736467f7f534773c8 100644 (file)
@@ -95,6 +95,10 @@ int mail_user_init(struct mail_user *user, const char **error_r);
 void mail_user_ref(struct mail_user *user);
 void mail_user_unref(struct mail_user **user);
 
+/* Duplicate a mail_user. mail_user_init() and mail_namespaces_init() need to
+   be called before the user is usable. */
+struct mail_user *mail_user_dup(struct mail_user *user);
+
 /* Find another user from the given user's namespaces. */
 struct mail_user *mail_user_find(struct mail_user *user, const char *name);