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;
/* 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");
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;
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
#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"
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)