]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added FULLDIRNAME=name to mail_location.
authorTimo Sirainen <tss@iki.fi>
Tue, 5 Nov 2013 11:12:25 +0000 (13:12 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 5 Nov 2013 11:12:25 +0000 (13:12 +0200)
The difference to DIRNAME is that the name is used also for index and
control directories.

src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index a4f8a91b4828ed870fe8c4b264480133fee45410..0d072d18eafee15c1254a25cf6c9108735f0e792 100644 (file)
@@ -46,6 +46,20 @@ static char fs_list_get_hierarchy_sep(struct mailbox_list *list ATTR_UNUSED)
        return '/';
 }
 
+static const char *
+fs_list_get_path_to(const struct mailbox_list_settings *set,
+                   const char *root_dir, const char *name)
+{
+       if (*set->maildir_name != '\0' && set->index_control_use_maildir_name) {
+               return t_strdup_printf("%s/%s%s/%s", root_dir,
+                                      set->mailbox_dir_name, name,
+                                      set->maildir_name);
+       } else {
+               return t_strdup_printf("%s/%s%s", root_dir,
+                                      set->mailbox_dir_name, name);
+       }
+}
+
 static int
 fs_list_get_path(struct mailbox_list *_list, const char *name,
                 enum mailbox_list_path_type type, const char **path_r)
@@ -78,6 +92,8 @@ fs_list_get_path(struct mailbox_list *_list, const char *name,
                if (set->alt_dir == NULL)
                        return 0;
                if (*set->maildir_name != '\0') {
+                       /* maildir_name is for the mailbox, caller is asking
+                          for the directory name */
                        *path_r = t_strdup_printf("%s/%s%s", set->alt_dir,
                                                  set->mailbox_dir_name, name);
                        return 1;
@@ -93,8 +109,7 @@ fs_list_get_path(struct mailbox_list *_list, const char *name,
                break;
        case MAILBOX_LIST_PATH_TYPE_CONTROL:
                if (set->control_dir != NULL) {
-                       *path_r = t_strdup_printf("%s/%s%s", set->control_dir,
-                                                 set->mailbox_dir_name, name);
+                       *path_r = fs_list_get_path_to(set, set->control_dir, name);
                        return 1;
                }
                break;
@@ -102,16 +117,14 @@ fs_list_get_path(struct mailbox_list *_list, const char *name,
                if (set->index_dir != NULL) {
                        if (*set->index_dir == '\0')
                                return 0;
-                       *path_r = t_strdup_printf("%s/%s%s", set->index_dir,
-                                                 set->mailbox_dir_name, name);
+                       *path_r = fs_list_get_path_to(set, set->index_dir, name);
                        return 1;
                }
                break;
        case MAILBOX_LIST_PATH_TYPE_INDEX_PRIVATE:
                if (set->index_pvt_dir == NULL)
                        return 0;
-               *path_r = t_strdup_printf("%s/%s%s", set->index_pvt_dir,
-                                         set->mailbox_dir_name, name);
+               *path_r = fs_list_get_path_to(set, set->index_pvt_dir, name);
                return 1;
        }
 
index 558e343d8d745206cee25295f26d7de3624f2bed..82b7ed5625ee4d6820a84feab53f71f2bc7b7e8d 100644 (file)
@@ -167,6 +167,8 @@ int mailbox_list_create(const char *driver, struct mail_namespace *ns,
                p_strdup(list->pool, set->mailbox_dir_name);
        list->set.alt_dir = p_strdup(list->pool, set->alt_dir);
        list->set.alt_dir_nocheck = set->alt_dir_nocheck;
+       list->set.index_control_use_maildir_name =
+               set->index_control_use_maildir_name;
 
        if (*set->mailbox_dir_name == '\0')
                list->set.mailbox_dir_name = "";
@@ -323,7 +325,10 @@ mailbox_list_settings_parse_full(struct mail_user *user, const char *data,
                        dest = &set_r->maildir_name;
                else if (strcmp(key, "MAILBOXDIR") == 0)
                        dest = &set_r->mailbox_dir_name;
-               else {
+               else if (strcmp(key, "FULLDIRNAME") == 0) {
+                       set_r->index_control_use_maildir_name = TRUE;
+                       dest = &set_r->maildir_name;
+               } else {
                        *error_r = t_strdup_printf("Unknown setting: %s", key);
                        return -1;
                }
index f3f4d94c111839fd7e3cb634bc5ea5cfdf3c79a4..c3e2388e5642d29cd5ab9153d6f5170322517be7 100644 (file)
@@ -125,6 +125,10 @@ struct mailbox_list_settings {
        bool utf8;
        /* Don't check/create the alt-dir symlink. */
        bool alt_dir_nocheck;
+       /* Use maildir_name also for index/control directories. This should
+          have been the default since the beginning, but for backwards
+          compatibility it had to be made an option. */
+       bool index_control_use_maildir_name;
 };
 
 struct mailbox_permissions {