]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lda/lmtp: Moved raw user creation code to common raw_storage_create_from_set()
authorTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 13:03:10 +0000 (16:03 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 2 Oct 2011 13:03:10 +0000 (16:03 +0300)
src/lda/main.c
src/lib-storage/index/raw/raw-storage.c
src/lib-storage/index/raw/raw-storage.h
src/lmtp/client.c

index f2416ac0878afcca2200202c08ac9d4384c3a713..35a1077a0161b65fe269e171f881611805f26cb0 100644 (file)
@@ -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");
index 42874664e5e4257caa07eab7bf6ec757551d89c6..2ebf2d0ebd0795f500b78f7981796b1ede3e9c99 100644 (file)
 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;
index 72d8f090b782c8526d27d4e366c89071b5ed6d93..e7f555325991728f50e25d5d98ad32060ca6d821 100644 (file)
@@ -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
index e7fd4f1a531c930e4dcc11b35fcefd3730e3e47e..8110ee617e91e17352e8f1bed3e9db861bd21ed3 100644 (file)
@@ -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)