]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added mailbox_list_init_fs() to easily initialize fs.
authorTimo Sirainen <tss@iki.fi>
Wed, 6 Nov 2013 19:08:42 +0000 (21:08 +0200)
committerTimo Sirainen <tss@iki.fi>
Wed, 6 Nov 2013 19:08:42 +0000 (21:08 +0200)
Use it for dbox's attachment_fs.

src/lib-storage/Makefile.am
src/lib-storage/index/dbox-common/dbox-storage.c
src/lib-storage/mailbox-list-private.h
src/lib-storage/mailbox-list.c

index 0936e3bf533e7973f8fd2531cb8c0869d2fdae46..b6273460aecf03e8ec4bedf7c40a12d2c88d88e0 100644 (file)
@@ -7,6 +7,8 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/src/lib-test \
        -I$(top_srcdir)/src/lib-auth \
        -I$(top_srcdir)/src/lib-dict \
+       -I$(top_srcdir)/src/lib-ssl-iostream \
+       -I$(top_srcdir)/src/lib-fs \
        -I$(top_srcdir)/src/lib-master \
        -I$(top_srcdir)/src/lib-settings \
        -I$(top_srcdir)/src/lib-charset \
index 7e5b5e28548a50232b04e44dd97eeae7de11a3bc..791dee7c5e11423fec42668092a2fae566dc139b 100644 (file)
@@ -94,12 +94,8 @@ int dbox_storage_create(struct mail_storage *_storage,
 {
        struct dbox_storage *storage = (struct dbox_storage *)_storage;
        const struct mail_storage_settings *set = _storage->set;
-       struct fs_settings fs_set;
        const char *error;
 
-       memset(&fs_set, 0, sizeof(fs_set));
-       fs_set.temp_file_prefix = mailbox_list_get_global_temp_prefix(ns->list);
-
        if (*set->mail_attachment_fs != '\0') {
                const char *name, *args, *dir;
 
@@ -121,9 +117,10 @@ int dbox_storage_create(struct mail_storage *_storage,
                dir = mail_user_home_expand(_storage->user,
                                            set->mail_attachment_dir);
                storage->attachment_dir = p_strdup(_storage->pool, dir);
-               fs_set.root_path = storage->attachment_dir;
-               if (fs_init(name, args, &fs_set, &storage->attachment_fs,
-                           &error) < 0) {
+
+               if (mailbox_list_init_fs(ns->list, name, args,
+                                        storage->attachment_dir,
+                                        &storage->attachment_fs, &error) < 0) {
                        *error_r = t_strdup_printf("mail_attachment_fs: %s",
                                                   error);
                        return -1;
index bb3703623a9e98ce5f0235e8fc145324bb0cfb99..83bf515f1bbaca217316efa21ad5b1de223b759c 100644 (file)
@@ -22,6 +22,7 @@
 
 struct stat;
 struct dirent;
+struct fs;
 struct imap_match_glob;
 struct mailbox_tree_context;
 struct mailbox_list_notify;
@@ -210,4 +211,8 @@ void mailbox_list_set_critical(struct mailbox_list *list, const char *fmt, ...)
 void mailbox_list_set_internal_error(struct mailbox_list *list);
 bool mailbox_list_set_error_from_errno(struct mailbox_list *list);
 
+int mailbox_list_init_fs(struct mailbox_list *list, const char *driver,
+                        const char *args, const char *root_dir,
+                        struct fs **fs_r, const char **error_r);
+
 #endif
index 82b7ed5625ee4d6820a84feab53f71f2bc7b7e8d..d225862d1e169b05c08512895625ddf4c1918ea2 100644 (file)
@@ -12,6 +12,8 @@
 #include "time-util.h"
 #include "unichar.h"
 #include "settings-parser.h"
+#include "iostream-ssl.h"
+#include "fs-api.h"
 #include "imap-utf7.h"
 #include "mailbox-log.h"
 #include "mailbox-tree.h"
@@ -1803,3 +1805,25 @@ bool mailbox_list_set_error_from_errno(struct mailbox_list *list)
        mailbox_list_set_error(list, error, error_string);
        return TRUE;
 }
+
+int mailbox_list_init_fs(struct mailbox_list *list, const char *driver,
+                        const char *args, const char *root_dir,
+                        struct fs **fs_r, const char **error_r)
+{
+       struct fs_settings fs_set;
+       struct ssl_iostream_settings ssl_set;
+
+       memset(&ssl_set, 0, sizeof(ssl_set));
+       ssl_set.ca_dir = list->mail_set->ssl_client_ca_dir;
+       ssl_set.ca_file = list->mail_set->ssl_client_ca_file;
+
+       memset(&fs_set, 0, sizeof(fs_set));
+       fs_set.temp_file_prefix = mailbox_list_get_global_temp_prefix(list);
+       fs_set.base_dir = list->ns->user->set->base_dir;
+       fs_set.temp_dir = list->ns->user->set->mail_temp_dir;
+       fs_set.ssl_client_set = &ssl_set;
+       fs_set.root_path = root_dir;
+       fs_set.debug = list->ns->user->mail_debug;
+
+       return fs_init(driver, args, &fs_set, fs_r, error_r);
+}