Mercurial > dovecot > core-2.2
changeset 13698:bcb20d216edd
mdbox: Added support for autodetection of ~/mdbox/ as mdbox storage.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 15 Nov 2011 18:29:14 +0200 |
parents | ad0136b56d6e |
children | 500bf1444ad6 |
files | src/lib-storage/index/dbox-multi/mdbox-storage.c |
diffstat | 1 files changed, 56 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c Tue Nov 15 18:21:39 2011 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c Tue Nov 15 18:29:14 2011 +0200 @@ -81,6 +81,61 @@ dbox_storage_destroy(_storage); } +static const char * +mdbox_storage_find_root_dir(const struct mail_namespace *ns) +{ + bool debug = ns->mail_set->mail_debug; + const char *home, *path; + + if (mail_user_get_home(ns->user, &home) > 0) { + path = t_strconcat(home, "/mdbox", NULL); + if (access(path, R_OK|W_OK|X_OK) == 0) { + if (debug) + i_debug("mdbox: root exists (%s)", path); + return path; + } + if (debug) + i_debug("mdbox: access(%s, rwx): failed: %m", path); + } + return NULL; +} + +static bool mdbox_storage_autodetect(const struct mail_namespace *ns, + struct mailbox_list_settings *set) +{ + bool debug = ns->mail_set->mail_debug; + struct stat st; + const char *path, *root_dir; + + if (set->root_dir != NULL) + root_dir = set->root_dir; + else { + root_dir = mdbox_storage_find_root_dir(ns); + if (root_dir == NULL) { + if (debug) + i_debug("mdbox: couldn't find root dir"); + return FALSE; + } + } + + path = t_strconcat(root_dir, "/"MDBOX_GLOBAL_DIR_NAME, NULL); + if (stat(path, &st) < 0) { + if (debug) + i_debug("mdbox autodetect: stat(%s) failed: %m", path); + return FALSE; + } + + if (!S_ISDIR(st.st_mode)) { + if (debug) + i_debug("mdbox autodetect: %s not a directory", path); + return FALSE; + } + + set->root_dir = root_dir; + dbox_storage_get_list_settings(ns, set); + return TRUE; +} + static struct mailbox * mdbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, const char *vname, enum mailbox_flags flags) @@ -362,7 +417,7 @@ mdbox_storage_destroy, NULL, dbox_storage_get_list_settings, - NULL, + mdbox_storage_autodetect, mdbox_mailbox_alloc, mdbox_purge }