]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Merged returning dir mode into mailbox_list_get_[root_]permissions().
authorTimo Sirainen <tss@iki.fi>
Tue, 1 Feb 2011 18:59:21 +0000 (20:59 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 1 Feb 2011 18:59:21 +0000 (20:59 +0200)
12 files changed:
src/lib-storage/index/dbox-multi/mdbox-map.c
src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/list/subscription-file.c
src/lib-storage/mail-storage.c
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h
src/lib-storage/mailbox-uidvalidity.c
src/plugins/acl/acl-backend-vfile-acllist.c
src/plugins/acl/acl-backend-vfile.c
src/plugins/lazy-expunge/lazy-expunge-plugin.c
src/plugins/quota/quota-maildir.c

index dbd5eb50ac7ba52f565e43cc99e7e7855e565177..674ada0249fa05bd928d264fc0302e00d7becfd0 100644 (file)
@@ -50,6 +50,7 @@ mdbox_map_init(struct mdbox_storage *storage, struct mailbox_list *root_list)
 {
        struct mdbox_map *map;
        const char *root, *index_root;
+       mode_t dir_mode;
 
        root = mailbox_list_get_path(root_list, NULL,
                                     MAILBOX_LIST_PATH_TYPE_DIR);
@@ -77,7 +78,8 @@ mdbox_map_init(struct mdbox_storage *storage, struct mailbox_list *root_list)
        map->ref_ext_id = mail_index_ext_register(map->index, "ref", 0,
                                sizeof(uint16_t), sizeof(uint16_t));
 
-       mailbox_list_get_root_permissions(root_list, &map->create_mode,
+       mailbox_list_get_root_permissions(root_list,
+                                         &map->create_mode, &dir_mode,
                                          &map->create_gid,
                                          &map->create_gid_origin);
        mail_index_set_permissions(map->index, map->create_mode,
index cc6d08375dda6d719a7f04ca528137eb7c649b9a..7682a685619b154f9d4be3fe2f32b608a938c59f 100644 (file)
@@ -265,7 +265,7 @@ fs_list_create_mailbox_dir(struct mailbox_list *list, const char *name,
                           enum mailbox_dir_create_type type)
 {
        const char *path, *gid_origin, *p;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        bool directory, create_parent_dir;
        int ret;
@@ -284,8 +284,9 @@ fs_list_create_mailbox_dir(struct mailbox_list *list, const char *name,
                path = t_strdup_until(path, p);
        }
 
-       mailbox_list_get_root_dir_permissions(list, &mode, &gid, &gid_origin);
-       if (mkdir_parents_chgrp(path, mode, gid, gid_origin) == 0)
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &gid_origin);
+       if (mkdir_parents_chgrp(path, dir_mode, gid, gid_origin) == 0)
                return 0;
        else if (errno == EEXIST) {
                if (create_parent_dir)
@@ -448,7 +449,7 @@ static int fs_list_rename_mailbox(struct mailbox_list *oldlist,
        const char *p, *origin;
        enum mailbox_list_path_type path_type, alt_path_type;
        struct stat st;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        bool rmdir_parent = FALSE;
 
@@ -487,10 +488,10 @@ static int fs_list_rename_mailbox(struct mailbox_list *oldlist,
        /* create the hierarchy */
        p = strrchr(newpath, '/');
        if (p != NULL) {
-               mailbox_list_get_root_dir_permissions(newlist, &mode,
-                                                     &gid, &origin);
+               mailbox_list_get_root_permissions(newlist, &file_mode,
+                                                 &dir_mode, &gid, &origin);
                p = t_strdup_until(newpath, p);
-               if (mkdir_parents_chgrp(p, mode, gid, origin) < 0 &&
+               if (mkdir_parents_chgrp(p, dir_mode, gid, origin) < 0 &&
                    errno != EEXIST) {
                        if (mailbox_list_set_error_from_errno(oldlist))
                                return -1;
index bd3d74b3ef5c7ee58b94e331c42e387fcea14e69..70975fe91fe9cd4a017f1b57a84b4fcddea66f85 100644 (file)
@@ -265,17 +265,18 @@ maildir_list_create_maildirfolder_file(struct mailbox_list *list,
                                       const char *dir)
 {
        const char *path, *gid_origin;
-       mode_t mode, old_mask;
+       mode_t file_mode, dir_mode, old_mask;
        gid_t gid;
        int fd;
 
        /* Maildir++ spec wants that maildirfolder named file is created for
           all subfolders. */
-       mailbox_list_get_root_permissions(list, &mode, &gid, &gid_origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &gid_origin);
 
        path = t_strconcat(dir, "/" MAILDIR_SUBFOLDER_FILENAME, NULL);
        old_mask = umask(0);
-       fd = open(path, O_CREAT | O_WRONLY, mode);
+       fd = open(path, O_CREAT | O_WRONLY, file_mode);
        umask(old_mask);
        if (fd != -1) {
                /* ok */
@@ -310,7 +311,7 @@ maildir_list_create_mailbox_dir(struct mailbox_list *list, const char *name,
                                enum mailbox_dir_create_type type)
 {
        const char *path, *root_dir, *gid_origin, *p;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        bool create_parent_dir;
 
@@ -334,9 +335,9 @@ maildir_list_create_mailbox_dir(struct mailbox_list *list, const char *name,
 
        root_dir = mailbox_list_get_path(list, NULL,
                                         MAILBOX_LIST_PATH_TYPE_MAILBOX);
-       mailbox_list_get_root_dir_permissions(list, &mode,
-                                             &gid, &gid_origin);
-       if (mkdir_parents_chgrp(path, mode, gid, gid_origin) == 0) {
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &gid_origin);
+       if (mkdir_parents_chgrp(path, dir_mode, gid, gid_origin) == 0) {
                /* ok */
        } else if (errno == EEXIST) {
                if (create_parent_dir)
index 399983ca16d1f0224cbea834924a0fec2403dd22..7b64d544c60806bd07d6af1787a3d9ca83568b19 100644 (file)
@@ -94,7 +94,7 @@ int subsfile_set_subscribed(struct mailbox_list *list, const char *path,
        struct istream *input;
        struct ostream *output;
        int fd_in, fd_out;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        bool found, changed = FALSE, failed = FALSE;
 
@@ -108,15 +108,17 @@ int subsfile_set_subscribed(struct mailbox_list *list, const char *path,
        dotlock_set.timeout = SUBSCRIPTION_FILE_LOCK_TIMEOUT;
        dotlock_set.stale_timeout = SUBSCRIPTION_FILE_CHANGE_TIMEOUT;
 
-       mailbox_list_get_root_permissions(list, &mode, &gid, &origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &origin);
        fd_out = file_dotlock_open_group(&dotlock_set, path, 0,
-                                        mode, gid, origin, &dotlock);
+                                        file_mode, gid, origin, &dotlock);
        if (fd_out == -1 && errno == ENOENT) {
                /* directory hasn't been created yet. */
                if (mailbox_list_create_parent_dir(list, NULL, path) < 0)
                        return -1;
                fd_out = file_dotlock_open_group(&dotlock_set, path, 0,
-                                                mode, gid, origin, &dotlock);
+                                                file_mode, gid,
+                                                origin, &dotlock);
        }
        if (fd_out == -1) {
                if (errno == EAGAIN) {
index 63aa41b55dc27549d057ea5b496e37dd6c6f23b2..9457f9f79f214d10c9f7fa770f11a1aaf559b477 100644 (file)
@@ -216,7 +216,7 @@ mail_storage_create_root(struct mailbox_list *list,
                         enum mail_storage_flags flags, const char **error_r)
 {
        const char *root_dir, *origin, *error;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        bool autocreate;
        int ret;
@@ -247,8 +247,9 @@ mail_storage_create_root(struct mailbox_list *list,
                return ret;
 
        /* we need to create the root directory. */
-       mailbox_list_get_root_dir_permissions(list, &mode, &gid, &origin);
-       if (mkdir_parents_chgrp(root_dir, mode, gid, origin) < 0 &&
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &origin);
+       if (mkdir_parents_chgrp(root_dir, dir_mode, gid, origin) < 0 &&
            errno != EEXIST) {
                *error_r = mail_error_create_eacces_msg("mkdir", root_dir);
                return -1;
@@ -1480,8 +1481,7 @@ const char *mailbox_get_path(struct mailbox *box)
 
 static void mailbox_get_permissions_if_not_set(struct mailbox *box)
 {
-       const char *origin, *dir_origin;
-       gid_t dir_gid;
+       const char *origin;
 
        if (box->_perm.file_create_mode != 0)
                return;
@@ -1496,11 +1496,9 @@ static void mailbox_get_permissions_if_not_set(struct mailbox *box)
 
        mailbox_list_get_permissions(box->list, box->name,
                                     &box->_perm.file_create_mode,
+                                    &box->_perm.dir_create_mode,
                                     &box->_perm.file_create_gid, &origin);
        box->_perm.file_create_gid_origin = p_strdup(box->pool, origin);
-       mailbox_list_get_dir_permissions(box->list, box->name,
-                                        &box->_perm.dir_create_mode,
-                                        &dir_gid, &dir_origin);
 }
 
 const struct mailbox_permissions *mailbox_get_permissions(struct mailbox *box)
index 03be5a0d84ad0ec8816910bd3cb08246685b798a..f6395ca74a00075e52b7d8a7a669f0ddb53c0372 100644 (file)
@@ -519,8 +519,8 @@ char mailbox_list_get_hierarchy_sep(struct mailbox_list *list)
        return list->v.get_hierarchy_sep(list);
 }
 
-static void
-mailbox_list_get_permissions_full(struct mailbox_list *list, const char *name,
+void mailbox_list_get_permissions(struct mailbox_list *list,
+                                 const char *name,
                                  mode_t *file_mode_r, mode_t *dir_mode_r,
                                  gid_t *gid_r, const char **gid_origin_r)
 {
@@ -546,10 +546,9 @@ mailbox_list_get_permissions_full(struct mailbox_list *list, const char *name,
                }
                if (name != NULL) {
                        /* return defaults */
-                       mailbox_list_get_permissions_full(list, NULL,
-                                                         file_mode_r,
-                                                         dir_mode_r, gid_r,
-                                                         gid_origin_r);
+                       mailbox_list_get_permissions(list, NULL,
+                                                    file_mode_r, dir_mode_r,
+                                                    gid_r, gid_origin_r);
                        return;
                }
        } else {
@@ -597,61 +596,19 @@ mailbox_list_get_permissions_full(struct mailbox_list *list, const char *name,
        }
 }
 
-void mailbox_list_get_permissions(struct mailbox_list *list,
-                                 const char *name,
-                                 mode_t *mode_r, gid_t *gid_r,
-                                 const char **gid_origin_r)
-{
-       mode_t dir_mode;
-
-       i_assert(name != NULL);
-
-       mailbox_list_get_permissions_full(list, name, mode_r, &dir_mode, gid_r,
-                                         gid_origin_r);
-}
-
 void mailbox_list_get_root_permissions(struct mailbox_list *list,
-                                      mode_t *mode_r, gid_t *gid_r,
-                                      const char **gid_origin_r)
+                                      mode_t *file_mode_r, mode_t *dir_mode_r,
+                                      gid_t *gid_r, const char **gid_origin_r)
 {
-       mode_t dir_mode;
-
        if (list->file_create_mode != (mode_t)-1) {
-               *mode_r = list->file_create_mode;
-               *gid_r = list->file_create_gid;
-               *gid_origin_r = list->file_create_gid_origin;
-       } else {
-               mailbox_list_get_permissions_full(list, NULL, mode_r, &dir_mode,
-                                                 gid_r, gid_origin_r);
-       }
-}
-
-void mailbox_list_get_dir_permissions(struct mailbox_list *list,
-                                     const char *name,
-                                     mode_t *mode_r, gid_t *gid_r,
-                                     const char **gid_origin_r)
-{
-       mode_t file_mode;
-
-       i_assert(name != NULL);
-
-       mailbox_list_get_permissions_full(list, name, &file_mode,
-                                         mode_r, gid_r, gid_origin_r);
-}
-
-void mailbox_list_get_root_dir_permissions(struct mailbox_list *list,
-                                          mode_t *mode_r, gid_t *gid_r,
-                                          const char **gid_origin_r)
-{
-       mode_t file_mode;
-
-       if (list->dir_create_mode != (mode_t)-1) {
-               *mode_r = list->dir_create_mode;
+               *file_mode_r = list->file_create_mode;
+               *dir_mode_r = list->dir_create_mode;
                *gid_r = list->file_create_gid;
                *gid_origin_r = list->file_create_gid_origin;
        } else {
-               mailbox_list_get_permissions_full(list, NULL, &file_mode,
-                                                 mode_r, gid_r, gid_origin_r);
+               mailbox_list_get_permissions(list, NULL,
+                                            file_mode_r, dir_mode_r,
+                                            gid_r, gid_origin_r);
        }
 }
 
@@ -724,10 +681,11 @@ int mailbox_list_mkdir(struct mailbox_list *list, const char *path,
 {
        const char *expanded, *unexpanded, *root_dir, *p, *origin;
        struct stat st;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
 
-       mailbox_list_get_root_dir_permissions(list, &mode, &gid, &origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &origin);
 
        /* get the directory path up to last %variable. for example
           unexpanded path may be "/var/mail/%d/%2n/%n/Maildir", and we want
@@ -762,7 +720,7 @@ int mailbox_list_mkdir(struct mailbox_list *list, const char *path,
                                return -1;
                        }
                }
-               if (gid == (gid_t)-1 && (mode & S_ISGID) == 0) {
+               if (gid == (gid_t)-1 && (dir_mode & S_ISGID) == 0) {
                        /* change the group for user directories */
                        gid = getegid();
                }
@@ -770,7 +728,7 @@ int mailbox_list_mkdir(struct mailbox_list *list, const char *path,
 
        /* the rest of the directories exist only for one user. create them
           with default directory permissions */
-       if (mkdir_parents_chgrp(path, mode, gid, origin) < 0 &&
+       if (mkdir_parents_chgrp(path, dir_mode, gid, origin) < 0 &&
            errno != EEXIST) {
                mailbox_list_set_critical(list, "mkdir(%s) failed: %m", path);
                return -1;
@@ -1220,7 +1178,7 @@ int mailbox_list_mailbox(struct mailbox_list *list, const char *name,
 static bool mailbox_list_init_changelog(struct mailbox_list *list)
 {
        const char *path;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        const char *gid_origin;
 
@@ -1236,8 +1194,9 @@ static bool mailbox_list_init_changelog(struct mailbox_list *list)
        path = t_strconcat(path, "/"MAILBOX_LOG_FILE_NAME, NULL);
        list->changelog = mailbox_log_alloc(path);
 
-       mailbox_list_get_root_permissions(list, &mode, &gid, &gid_origin);
-       mailbox_log_set_permissions(list->changelog, mode, gid, gid_origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &gid_origin);
+       mailbox_log_set_permissions(list->changelog, dir_mode, gid, gid_origin);
        return TRUE;
 }
 
@@ -1515,15 +1474,16 @@ int mailbox_list_create_parent_dir(struct mailbox_list *list,
 {
        const char *p, *dir, *origin;
        gid_t gid;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
 
        p = strrchr(path, '/');
        if (p == NULL)
                return 0;
 
        dir = t_strdup_until(path, p);
-       mailbox_list_get_dir_permissions(list, mailbox, &mode, &gid, &origin);
-       if (mkdir_parents_chgrp(dir, mode, gid, origin) < 0 &&
+       mailbox_list_get_permissions(list, mailbox, &file_mode, &dir_mode,
+                                    &gid, &origin);
+       if (mkdir_parents_chgrp(dir, dir_mode, gid, origin) < 0 &&
            errno != EEXIST) {
                mailbox_list_set_critical(list, "mkdir_parents(%s) failed: %m",
                                          dir);
@@ -1536,7 +1496,7 @@ int mailbox_list_create_missing_index_dir(struct mailbox_list *list,
                                          const char *name)
 {
        const char *root_dir, *index_dir, *parent_dir, *p, *origin;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        unsigned int n = 0;
 
@@ -1549,13 +1509,13 @@ int mailbox_list_create_missing_index_dir(struct mailbox_list *list,
                return 0;
 
        if (name == NULL) {
-               mailbox_list_get_root_dir_permissions(list, &mode,
-                                                     &gid, &origin);
+               mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                                 &gid, &origin);
        } else {
-               mailbox_list_get_dir_permissions(list, name, &mode,
-                                                &gid, &origin);
+               mailbox_list_get_permissions(list, name, &file_mode, &dir_mode,
+                                            &gid, &origin);
        }
-       while (mkdir_chgrp(index_dir, mode, gid, origin) < 0) {
+       while (mkdir_chgrp(index_dir, dir_mode, gid, origin) < 0) {
                if (errno == EEXIST)
                        break;
 
index 23090be3a587ddc2db54870774524006272d9f0d..97a4208fc3349426cb46bc35cbe84f612871dc6b 100644 (file)
@@ -165,25 +165,17 @@ void mailbox_list_get_closest_storage(struct mailbox_list *list,
                                      struct mail_storage **storage);
 char mailbox_list_get_hierarchy_sep(struct mailbox_list *list);
 
-/* Returns the mode and GID that should be used when creating new files to
-   the specified mailbox or to mailbox list root. (gid_t)-1 is
-   returned if it's not necessary to change the default gid. */
-void mailbox_list_get_permissions(struct mailbox_list *list,
-                                 const char *name,
-                                 mode_t *mode_r, gid_t *gid_r,
-                                 const char **gid_origin_r);
+/* Returns the mode and GID that should be used when creating new files and
+   directories to the specified mailbox. (gid_t)-1 is returned if it's not
+   necessary to change the default gid. */
+void mailbox_list_get_permissions(struct mailbox_list *list, const char *name,
+                                 mode_t *file_mode_r, mode_t *dir_mode_r,
+                                 gid_t *gid_r, const char **gid_origin_r);
+/* Like mailbox_list_get_permissions(), but for creating files/dirs to the
+   mail root directory (or even the root dir itself). */
 void mailbox_list_get_root_permissions(struct mailbox_list *list,
-                                      mode_t *mode_r, gid_t *gid_r,
-                                      const char **gid_origin_r);
-/* Like mailbox_list_get_permissions(), but add execute-bits for mode
-   if either read or write bit is set (e.g. 0640 -> 0750). */
-void mailbox_list_get_dir_permissions(struct mailbox_list *list,
-                                     const char *name,
-                                     mode_t *mode_r, gid_t *gid_r,
-                                     const char **gid_origin_r);
-void mailbox_list_get_root_dir_permissions(struct mailbox_list *list,
-                                          mode_t *mode_r, gid_t *gid_r,
-                                          const char **gid_origin_r);
+                                      mode_t *file_mode_r, mode_t *dir_mode_r,
+                                      gid_t *gid_r, const char **gid_origin_r);
 /* Create path's parent directory with proper permissions. Since most
    directories are created lazily, this function can be used to easily create
    them whenever file creation fails with ENOENT. */
index 0dcb6f9c5115e76da1b3bde2c5ea209e8361930d..7dba49befce45f73a766f567ffa81aa65fe9c203 100644 (file)
@@ -37,13 +37,14 @@ static void mailbox_uidvalidity_write(struct mailbox_list *list,
 {
        char buf[8+1];
        int fd;
-       mode_t mode, old_mask;
+       mode_t file_mode, dir_mode, old_mask;
        gid_t gid;
        const char *gid_origin;
 
-       mailbox_list_get_root_permissions(list, &mode, &gid, &gid_origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &gid_origin);
 
-       old_mask = umask(0666 & ~mode);
+       old_mask = umask(0666 & ~file_mode);
        fd = open(path, O_RDWR | O_CREAT, 0666);
        umask(old_mask);
        if (fd == -1) {
index 0e47b08918d403051f478b5d4ba641b4268d0465..88b26f5c7e9c4ad9f8bd444e5102113153478552 100644 (file)
@@ -205,7 +205,7 @@ acl_backend_vfile_acllist_try_rebuild(struct acl_backend_vfile *backend)
        struct ostream *output;
        struct stat st;
        string_t *path;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        int fd, ret;
 
@@ -227,13 +227,14 @@ acl_backend_vfile_acllist_try_rebuild(struct acl_backend_vfile *backend)
        /* Build it into a temporary file and rename() over. There's no need
           to use locking, because even if multiple processes are rebuilding
           the file at the same time the result should be the same. */
-       mailbox_list_get_root_permissions(list, &mode, &gid, &origin);
-       fd = safe_mkstemp_group(path, mode, gid, origin);
+       mailbox_list_get_root_permissions(list, &file_mode, &dir_mode,
+                                         &gid, &origin);
+       fd = safe_mkstemp_group(path, file_mode, gid, origin);
        if (fd == -1 && errno == ENOENT) {
                if (mailbox_list_create_parent_dir(backend->backend.list, NULL,
                                                   str_c(path)) < 0)
                        return -1;
-               fd = safe_mkstemp_group(path, mode, gid, origin);
+               fd = safe_mkstemp_group(path, file_mode, gid, origin);
        }
        if (fd == -1) {
                if (errno == EACCES) {
index a96a3eac22e48f90b19a579cfb37b11d2c12af2e..bc3a2aad6d4fe30127f518890e4b4c1ce46b930f 100644 (file)
@@ -900,7 +900,7 @@ static int acl_backend_vfile_update_begin(struct acl_object_vfile *aclobj,
 {
        struct acl_object *_aclobj = &aclobj->aclobj;
        const char *gid_origin;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        int fd;
 
@@ -912,9 +912,9 @@ static int acl_backend_vfile_update_begin(struct acl_object_vfile *aclobj,
 
        /* first lock the ACL file */
        mailbox_list_get_permissions(_aclobj->backend->list, _aclobj->name,
-                                    &mode, &gid, &gid_origin);
+                                    &file_mode, &dir_mode, &gid, &gid_origin);
        fd = file_dotlock_open_group(&dotlock_set, aclobj->local_path, 0,
-                                    mode, gid, gid_origin, dotlock_r);
+                                    file_mode, gid, gid_origin, dotlock_r);
        if (fd == -1) {
                i_error("file_dotlock_open(%s) failed: %m", aclobj->local_path);
                return -1;
index 9e35d8bf28b2a7f3cef5833bbec8aa2275fdd9ff..f5b80fc842a1f3d98ee4a38186d0925a52ba1e0f 100644 (file)
@@ -235,14 +235,15 @@ mailbox_move(struct mailbox *src_box, struct mailbox_list *dest_list,
        struct mailbox *dest_box;
        const char *dir, *origin;
        enum mail_error error;
-       mode_t mode;
+       mode_t file_mode, dir_mode;
        gid_t gid;
        int ret;
 
        /* make sure the destination root directory exists */
-       mailbox_list_get_root_dir_permissions(dest_list, &mode, &gid, &origin);
+       mailbox_list_get_root_permissions(dest_list, &file_mode, &dir_mode,
+                                         &gid, &origin);
        dir = mailbox_list_get_path(dest_list, NULL, MAILBOX_LIST_PATH_TYPE_DIR);
-       if (mkdir_parents_chgrp(dir, mode, gid, origin) < 0 &&
+       if (mkdir_parents_chgrp(dir, dir_mode, gid, origin) < 0 &&
            errno != EEXIST) {
                mail_storage_set_critical(src_box->storage,
                        "mkdir_parents(%s) failed: %m", dir);
index 2eb6b0c2a6e7fde7fa1aa37a78c8b49faed18595..659feb5644d0b8bdc9c5e27a41774fa5f74584f7 100644 (file)
@@ -222,18 +222,18 @@ static int maildirsize_write(struct maildir_quota_root *root, const char *path)
        struct mail_namespace *const *namespaces;
        unsigned int i, count;
        struct dotlock *dotlock;
-       const char *p, *dir, *gid_origin, *dir_gid_origin;
+       const char *p, *dir, *gid_origin;
        string_t *str;
-       mode_t mode, dir_mode;
-       gid_t gid, dir_gid;
+       mode_t file_mode, dir_mode;
+       gid_t gid;
        int fd;
 
        i_assert(root->fd == -1);
 
        /* figure out what permissions we should use for maildirsize.
           use the inbox namespace's permissions if possible. */
-       mode = 0600; dir_mode = 0700; dir_gid_origin = gid_origin = "default";
-       gid = dir_gid = (gid_t)-1;
+       file_mode = 0600; dir_mode = 0700; gid_origin = "default";
+       gid = (gid_t)-1;
        namespaces = array_get(&root->root.quota->namespaces, &count);
        i_assert(count > 0);
        for (i = 0; i < count; i++) {
@@ -241,10 +241,8 @@ static int maildirsize_write(struct maildir_quota_root *root, const char *path)
                        continue;
 
                mailbox_list_get_root_permissions(namespaces[i]->list,
-                                                 &mode, &gid, &gid_origin);
-               mailbox_list_get_root_dir_permissions(namespaces[i]->list,
-                                                     &dir_mode, &dir_gid,
-                                                     &dir_gid_origin);
+                                                 &file_mode, &dir_mode,
+                                                 &gid, &gid_origin);
                break;
        }
 
@@ -252,20 +250,20 @@ static int maildirsize_write(struct maildir_quota_root *root, const char *path)
        dotlock_settings.nfs_flush = set->mail_nfs_storage;
        fd = file_dotlock_open_group(&dotlock_settings, path,
                                     DOTLOCK_CREATE_FLAG_NONBLOCK,
-                                    mode, gid, gid_origin, &dotlock);
+                                    file_mode, gid, gid_origin, &dotlock);
        if (fd == -1 && errno == ENOENT) {
                /* the control directory doesn't exist yet? create it */
                p = strrchr(path, '/');
                dir = t_strdup_until(path, p);
-               if (mkdir_parents_chgrp(dir, dir_mode, dir_gid,
-                                       dir_gid_origin) < 0 &&
+               if (mkdir_parents_chgrp(dir, dir_mode, gid, gid_origin) < 0 &&
                    errno != EEXIST) {
                        i_error("mkdir_parents(%s) failed: %m", dir);
                        return -1;
                }
                fd = file_dotlock_open_group(&dotlock_settings, path,
                                             DOTLOCK_CREATE_FLAG_NONBLOCK,
-                                            mode, gid, gid_origin, &dotlock);
+                                            file_mode, gid, gid_origin,
+                                            &dotlock);
        }
        if (fd == -1) {
                if (errno == EAGAIN) {