]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: If ITERINDEX is set, delay checking whether mail root exists
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Jul 2017 17:48:25 +0000 (20:48 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Jul 2017 17:48:25 +0000 (20:48 +0300)
In future this could be done even without ITERINDEX. It's not done yet,
since it might break backwards compatibility with some systems.

src/lib-storage/mail-storage.c

index fb20e3524977c86548b6b65f1edd8bb3f830f4ff..f9c0990d786abdde0a6348d1f13595d9fabefd4a 100644 (file)
@@ -290,22 +290,16 @@ mail_storage_create_root(struct mailbox_list *list,
        }
 
        autocreate = (flags & MAIL_STORAGE_FLAG_NO_AUTOCREATE) == 0;
+       if (autocreate && list->set.iter_from_index_dir) {
+               /* If the directories don't exist, we'll just autocreate them
+                  later. FIXME: Make this the default in v2.3 even when
+                  ITERINDEX isn't used. */
+               return 0;
+       }
        ret = mail_storage_verify_root(root_dir, type_name, autocreate, error_r);
        if (ret == 0) {
-               const char *mail_root_dir;
-
-               if (!list->set.iter_from_index_dir)
-                       mail_root_dir = root_dir;
-               else if (!mailbox_list_get_root_path(list,
-                               MAILBOX_LIST_PATH_TYPE_MAILBOX, &mail_root_dir))
-                       i_unreached();
-               ret = mailbox_list_try_mkdir_root(list, mail_root_dir,
-                                                 MAILBOX_LIST_PATH_TYPE_MAILBOX,
-                                                 error_r);
-       }
-       if (ret == 0 && list->set.iter_from_index_dir) {
                ret = mailbox_list_try_mkdir_root(list, root_dir,
-                                                 MAILBOX_LIST_PATH_TYPE_INDEX,
+                                                 MAILBOX_LIST_PATH_TYPE_MAILBOX,
                                                  error_r);
        }
        return ret < 0 ? -1 : 0;