]> 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 12:25:27 +0000 (15:25 +0300)
The index dir might still exist.

src/lib-storage/mailbox-list.c

index cef20fef98137a5b0e62959dd9a5e867d95ac118..f9077bfc309aaccba46c786a1184cff1ddf97204 100644 (file)
@@ -955,7 +955,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);
 
@@ -967,18 +967,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 */