]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Try to get mailbox list index's permissions from its parent directory
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Jul 2017 18:08:33 +0000 (21:08 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Jul 2017 18:12:21 +0000 (21:12 +0300)
This avoids stat()ing the mail/index root directory, which is especially
useful when mailbox list index is stored in tmpfs.

src/lib-storage/list/mailbox-list-index.c

index 2a6908c1fdb8e0cd39bad19f1a686db7098798c2..87432f652de27ed012641540cd6d1ff40b5a1f9a 100644 (file)
@@ -56,7 +56,6 @@ int mailbox_list_index_index_open(struct mailbox_list *list)
 {
        struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
        const struct mail_storage_settings *set = list->mail_set;
-       struct mailbox_permissions perm;
        enum mail_index_open_flags index_flags;
        unsigned int lock_timeout;
 
@@ -77,10 +76,14 @@ int mailbox_list_index_index_open(struct mailbox_list *list)
        lock_timeout = set->mail_max_lock_timeout == 0 ? UINT_MAX :
                set->mail_max_lock_timeout;
 
-       mailbox_list_get_root_permissions(list, &perm);
-       mail_index_set_permissions(ilist->index, perm.file_create_mode,
-                                  perm.file_create_gid,
-                                  perm.file_create_gid_origin);
+       if (!mail_index_use_existing_permissions(ilist->index)) {
+               struct mailbox_permissions perm;
+
+               mailbox_list_get_root_permissions(list, &perm);
+               mail_index_set_permissions(ilist->index, perm.file_create_mode,
+                                          perm.file_create_gid,
+                                          perm.file_create_gid_origin);
+       }
        mail_index_set_log_rotation(ilist->index,
                                    MAILBOX_LIST_INDEX_LOG_ROTATE_MIN_SIZE,
                                    MAILBOX_LIST_INDEX_LOG_ROTATE_MAX_SIZE,