From: Timo Sirainen Date: Mon, 15 Sep 2014 21:21:13 +0000 (+0300) Subject: lib-storage: Added mail_user_dup() X-Git-Tag: 2.2.14.rc1~66 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1e40531c1de45bc87e72a9d5866ff2af79b63ceb;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Added mail_user_dup() --- diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index f1077e3bcd..339d96af93 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -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); diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index a12ec96e17..f67307f0ec 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -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; +} diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index c44f5b3226..c7237130b0 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -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);