From: Timo Sirainen Date: Sun, 2 Oct 2011 13:03:10 +0000 (+0300) Subject: lda/lmtp: Moved raw user creation code to common raw_storage_create_from_set() X-Git-Tag: 2.1.beta1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34e9dfbce01a2807df8e2050b1cd7ae2cf014cd5;p=thirdparty%2Fdovecot%2Fcore.git lda/lmtp: Moved raw user creation code to common raw_storage_create_from_set() --- diff --git a/src/lda/main.c b/src/lda/main.c index f2416ac087..35a1077a01 100644 --- a/src/lda/main.c +++ b/src/lda/main.c @@ -213,7 +213,6 @@ int main(int argc, char *argv[]) struct mail_storage_service_input service_input; struct mail_user *raw_mail_user; struct mail_namespace *raw_ns; - struct mail_namespace_settings raw_ns_set; struct mail_storage *storage; struct mailbox *box; struct raw_mailbox *raw_box; @@ -371,21 +370,10 @@ int main(int argc, char *argv[]) /* create a separate mail user for the internal namespace */ sets = master_service_settings_get_others(master_service); - raw_mail_user = mail_user_alloc(user, ctx.dest_user->set_info, sets[0]); - raw_mail_user->autocreated = TRUE; - mail_user_set_home(raw_mail_user, "/"); - if (mail_user_init(raw_mail_user, &errstr) < 0) - i_fatal("Raw user initialization failed: %s", errstr); - - memset(&raw_ns_set, 0, sizeof(raw_ns_set)); - raw_ns_set.location = ":LAYOUT=none"; - raw_ns_set.separator = "/"; - - raw_ns = mail_namespaces_init_empty(raw_mail_user); - raw_ns->flags |= NAMESPACE_FLAG_NOQUOTA | NAMESPACE_FLAG_NOACL; - raw_ns->set = &raw_ns_set; - if (mail_storage_create(raw_ns, "raw", 0, &errstr) < 0) - i_fatal("Couldn't create internal raw storage: %s", errstr); + raw_mail_user = + raw_storage_create_from_set(ctx.dest_user->set_info, sets[0]); + raw_ns = raw_mail_user->namespaces; + if (path == NULL) { input = create_raw_stream(&ctx, 0, &mtime); i_stream_set_name(input, "stdin"); diff --git a/src/lib-storage/index/raw/raw-storage.c b/src/lib-storage/index/raw/raw-storage.c index 42874664e5..2ebf2d0ebd 100644 --- a/src/lib-storage/index/raw/raw-storage.c +++ b/src/lib-storage/index/raw/raw-storage.c @@ -12,6 +12,33 @@ extern struct mail_storage raw_storage; extern struct mailbox raw_mailbox; +struct mail_user * +raw_storage_create_from_set(const struct setting_parser_info *set_info, + const struct mail_user_settings *set) +{ + struct mail_user *user; + struct mail_namespace *ns; + struct mail_namespace_settings *ns_set; + const char *error; + + user = mail_user_alloc("raw mail user", set_info, set); + user->autocreated = TRUE; + mail_user_set_home(user, "/"); + if (mail_user_init(user, &error) < 0) + i_fatal("Raw user initialization failed: %s", error); + + ns_set = p_new(user->pool, struct mail_namespace_settings, 1); + ns_set->location = ":LAYOUT=none"; + ns_set->separator = "/"; + + ns = mail_namespaces_init_empty(user); + ns->flags |= NAMESPACE_FLAG_NOQUOTA | NAMESPACE_FLAG_NOACL; + ns->set = ns_set; + if (mail_storage_create(ns, "raw", 0, &error) < 0) + i_fatal("Couldn't create internal raw storage: %s", error); + return user; +} + static struct mail_storage *raw_storage_alloc(void) { struct raw_storage *storage; diff --git a/src/lib-storage/index/raw/raw-storage.h b/src/lib-storage/index/raw/raw-storage.h index 72d8f090b7..e7f5553259 100644 --- a/src/lib-storage/index/raw/raw-storage.h +++ b/src/lib-storage/index/raw/raw-storage.h @@ -24,4 +24,8 @@ struct raw_mailbox { extern struct mail_vfuncs raw_mail_vfuncs; +struct mail_user * +raw_storage_create_from_set(const struct setting_parser_info *set_info, + const struct mail_user_settings *set); + #endif diff --git a/src/lmtp/client.c b/src/lmtp/client.c index e7fd4f1a53..8110ee617e 100644 --- a/src/lmtp/client.c +++ b/src/lmtp/client.c @@ -13,6 +13,7 @@ #include "mail-namespace.h" #include "mail-storage.h" #include "mail-storage-service.h" +#include "raw-storage.h" #include "main.h" #include "lda-settings.h" #include "lmtp-settings.h" @@ -123,30 +124,11 @@ static void client_input(struct client *client) static void client_raw_user_create(struct client *client) { - struct mail_namespace *raw_ns; - struct mail_namespace_settings *raw_ns_set; - const char *error; void **sets; sets = master_service_settings_get_others(master_service); - - client->raw_mail_user = mail_user_alloc("raw user", - client->user_set_info, sets[0]); - client->raw_mail_user->autocreated = TRUE; - mail_user_set_home(client->raw_mail_user, "/"); - if (mail_user_init(client->raw_mail_user, &error) < 0) - i_fatal("Raw user initialization failed: %s", error); - - raw_ns_set = p_new(client->raw_mail_user->pool, - struct mail_namespace_settings, 1); - raw_ns_set->location = ":LAYOUT=none"; - raw_ns_set->separator = "/"; - - raw_ns = mail_namespaces_init_empty(client->raw_mail_user); - raw_ns->flags |= NAMESPACE_FLAG_NOQUOTA | NAMESPACE_FLAG_NOACL; - raw_ns->set = raw_ns_set; - if (mail_storage_create(raw_ns, "raw", 0, &error) < 0) - i_fatal("Couldn't create internal raw storage: %s", error); + client->raw_mail_user = + raw_storage_create_from_set(client->user_set_info, sets[0]); } static void client_read_settings(struct client *client)