From: Timo Sirainen Date: Tue, 1 Feb 2011 18:59:21 +0000 (+0200) Subject: lib-storage: Merged returning dir mode into mailbox_list_get_[root_]permissions(). X-Git-Tag: 2.1.alpha1~375 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5aa8d4c9bdda79c2db03391ec45b37bf774df14;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Merged returning dir mode into mailbox_list_get_[root_]permissions(). --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-map.c b/src/lib-storage/index/dbox-multi/mdbox-map.c index dbd5eb50ac..674ada0249 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-map.c +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c @@ -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, diff --git a/src/lib-storage/list/mailbox-list-fs.c b/src/lib-storage/list/mailbox-list-fs.c index cc6d08375d..7682a68561 100644 --- a/src/lib-storage/list/mailbox-list-fs.c +++ b/src/lib-storage/list/mailbox-list-fs.c @@ -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; diff --git a/src/lib-storage/list/mailbox-list-maildir.c b/src/lib-storage/list/mailbox-list-maildir.c index bd3d74b3ef..70975fe91f 100644 --- a/src/lib-storage/list/mailbox-list-maildir.c +++ b/src/lib-storage/list/mailbox-list-maildir.c @@ -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) diff --git a/src/lib-storage/list/subscription-file.c b/src/lib-storage/list/subscription-file.c index 399983ca16..7b64d544c6 100644 --- a/src/lib-storage/list/subscription-file.c +++ b/src/lib-storage/list/subscription-file.c @@ -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) { diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 63aa41b55d..9457f9f79f 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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) diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 03be5a0d84..f6395ca74a 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -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; diff --git a/src/lib-storage/mailbox-list.h b/src/lib-storage/mailbox-list.h index 23090be3a5..97a4208fc3 100644 --- a/src/lib-storage/mailbox-list.h +++ b/src/lib-storage/mailbox-list.h @@ -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. */ diff --git a/src/lib-storage/mailbox-uidvalidity.c b/src/lib-storage/mailbox-uidvalidity.c index 0dcb6f9c51..7dba49befc 100644 --- a/src/lib-storage/mailbox-uidvalidity.c +++ b/src/lib-storage/mailbox-uidvalidity.c @@ -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) { diff --git a/src/plugins/acl/acl-backend-vfile-acllist.c b/src/plugins/acl/acl-backend-vfile-acllist.c index 0e47b08918..88b26f5c7e 100644 --- a/src/plugins/acl/acl-backend-vfile-acllist.c +++ b/src/plugins/acl/acl-backend-vfile-acllist.c @@ -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) { diff --git a/src/plugins/acl/acl-backend-vfile.c b/src/plugins/acl/acl-backend-vfile.c index a96a3eac22..bc3a2aad6d 100644 --- a/src/plugins/acl/acl-backend-vfile.c +++ b/src/plugins/acl/acl-backend-vfile.c @@ -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; diff --git a/src/plugins/lazy-expunge/lazy-expunge-plugin.c b/src/plugins/lazy-expunge/lazy-expunge-plugin.c index 9e35d8bf28..f5b80fc842 100644 --- a/src/plugins/lazy-expunge/lazy-expunge-plugin.c +++ b/src/plugins/lazy-expunge/lazy-expunge-plugin.c @@ -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); diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index 2eb6b0c2a6..659feb5644 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -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) {