Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8209:329d8757e5c2 HEAD
Maildir++ quota: Create the missing directory using the correct permissions.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 22 Sep 2008 21:55:07 +0300 |
parents | f67d4a0d423b |
children | 1ea7d60cf39a |
files | src/plugins/quota/quota-maildir.c |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/quota/quota-maildir.c Mon Sep 22 21:51:29 2008 +0300 +++ b/src/plugins/quota/quota-maildir.c Mon Sep 22 21:55:07 2008 +0300 @@ -224,21 +224,23 @@ struct dotlock *dotlock; const char *p, *dir; string_t *str; - mode_t mode; - gid_t gid; + mode_t mode, dir_mode; + gid_t gid, dir_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; - gid = (gid_t)-1; + mode = 0600; dir_mode = 0700; + gid = dir_gid = (gid_t)-1; storages = array_get(&root->root.quota->storages, &count); for (i = 0; i < count; i++) { if ((storages[i]->ns->flags & NAMESPACE_FLAG_INBOX) != 0) { mailbox_list_get_permissions(storages[i]->ns->list, &mode, &gid); + mailbox_list_get_dir_permissions(storages[i]->ns->list, + &dir_mode, &dir_gid); break; } } @@ -252,10 +254,16 @@ /* the control directory doesn't exist yet? create it */ p = strrchr(path, '/'); dir = t_strdup_until(path, p); - if (mkdir_parents(dir, 0700) < 0 && errno != EEXIST) { + if (mkdir_parents(dir, dir_mode) < 0 && errno != EEXIST) { i_error("mkdir_parents(%s) failed: %m", dir); return -1; } + if (dir_gid != (gid_t)-1) { + if (chown(dir, (uid_t)-1, dir_gid) < 0) { + i_error("chown(%s,-1,%ld) failed: %m", + dir, (long)dir_gid); + } + } fd = file_dotlock_open_mode(&dotlock_settings, path, DOTLOCK_CREATE_FLAG_NONBLOCK, mode, (uid_t)-1, gid, &dotlock);