dovecot-1.2: mbox: Creating directories based on mbox file's mod...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Feb 26 23:43:59 EET 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/89e4d5da5ba7
changeset: 8784:89e4d5da5ba7
user: Timo Sirainen <tss at iki.fi>
date: Thu Feb 26 16:38:24 2009 -0500
description:
mbox: Creating directories based on mbox file's mode dropped +x permissions.
diffstat:
1 file changed, 15 insertions(+)
src/lib-storage/mailbox-list.c | 15 +++++++++++++++
diffs (32 lines):
diff -r f3ce7c7c0b58 -r 89e4d5da5ba7 src/lib-storage/mailbox-list.c
--- 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 @@ mailbox_list_get_namespace(const struct
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 @@ void mailbox_list_get_permissions(struct
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;
More information about the dovecot-cvs
mailing list