Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8784:89e4d5da5ba7 HEAD
mbox: Creating directories based on mbox file's mode dropped +x permissions.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 26 Feb 2009 16:38:24 -0500 |
parents | f3ce7c7c0b58 |
children | 3d11825abf66 |
files | src/lib-storage/mailbox-list.c |
diffstat | 1 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mailbox-list.c Thu Feb 26 13:54:30 2009 -0500 +++ b/src/lib-storage/mailbox-list.c Thu Feb 26 16:38:24 2009 -0500 @@ -262,6 +262,15 @@ return list->ns; } +static mode_t get_dir_mode(mode_t mode) +{ + /* add the execute bit if either read or write bit is set */ + if ((mode & 0600) != 0) mode |= 0100; + if ((mode & 0060) != 0) mode |= 0010; + if ((mode & 0006) != 0) mode |= 0001; + return mode; +} + void mailbox_list_get_permissions(struct mailbox_list *list, const char *name, mode_t *mode_r, gid_t *gid_r) { @@ -291,6 +300,12 @@ list->file_create_mode = st.st_mode & 0666; list->dir_create_mode = st.st_mode & 0777; + if (!S_ISDIR(st.st_mode)) { + /* we're getting permissions from a file. + apply +x modes as necessary. */ + list->dir_create_mode = get_dir_mode(list->dir_create_mode); + } + if (S_ISDIR(st.st_mode) && (st.st_mode & S_ISGID) != 0) { /* directory's GID is used automatically for new files */ list->file_create_gid = (gid_t)-1;