]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mailbox_list_get_permissions() - Use index dir for storage without mails
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 26 Jun 2017 15:46:30 +0000 (18:46 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Jul 2017 08:49:41 +0000 (11:49 +0300)
The index dir might still exist.

src/lib-storage/mailbox-list.c

index 24f78203e334cdab2292d22a69fe7777e2c04747..0064cc3289044cb8c80926c12aa047c7af43bb90 100644 (file)
@@ -960,7 +960,7 @@ mailbox_list_get_permissions_internal(struct mailbox_list *list,
                                      const char *name,
                                      struct mailbox_permissions *permissions_r)
 {
-       const char *path, *parent_name, *p;
+       const char *path = NULL, *parent_name, *p;
 
        i_zero(permissions_r);
 
@@ -972,18 +972,23 @@ mailbox_list_get_permissions_internal(struct mailbox_list *list,
        permissions_r->file_create_gid = (gid_t)-1;
        permissions_r->file_create_gid_origin = "defaults";
 
-       if (name != NULL) {
+       if ((list->flags & MAILBOX_LIST_FLAG_NO_MAIL_FILES) != 0) {
+               /* mail files don't exist in storage, but index files might. */
+               (void)mailbox_list_get_path(list, name,
+                       MAILBOX_LIST_PATH_TYPE_INDEX, &path);
+       }
+
+       if (name != NULL && path == NULL) {
                if (mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_DIR,
                                          &path) < 0)
                        name = NULL;
        }
-       if (name == NULL) {
+       if (name == NULL && path == NULL) {
                (void)mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_DIR,
                                                 &path);
        }
 
-       if (path == NULL ||
-           (list->flags & MAILBOX_LIST_FLAG_NO_MAIL_FILES) != 0) {
+       if (path == NULL) {
                /* no filesystem support in storage */
        } else if (mailbox_list_get_permissions_stat(list, path, permissions_r)) {
                /* got permissions from the given path */