dovecot-1.2: mailboxes: Copy root directory's +x modes for newly...

dovecot at dovecot.org dovecot at dovecot.org
Sun Feb 22 01:47:54 EET 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/cc8d4d06ef9f
changeset: 8769:cc8d4d06ef9f
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Feb 21 18:47:48 2009 -0500
description:
mailboxes: Copy root directory's +x modes for newly created dirs perfectly.

diffstat:

2 files changed, 6 insertions(+), 10 deletions(-)
src/lib-storage/mailbox-list-private.h |    2 +-
src/lib-storage/mailbox-list.c         |   14 +++++---------

diffs (60 lines):

diff -r 91e880ae387a -r cc8d4d06ef9f src/lib-storage/mailbox-list-private.h
--- a/src/lib-storage/mailbox-list-private.h	Sat Feb 21 18:22:11 2009 -0500
+++ b/src/lib-storage/mailbox-list-private.h	Sat Feb 21 18:47:48 2009 -0500
@@ -79,7 +79,7 @@ struct mailbox_list {
 	enum mailbox_list_flags flags;
 
 	/* -1 if not set yet. use mailbox_list_get_permissions() to set them */
-	mode_t file_create_mode;
+	mode_t file_create_mode, dir_create_mode;
 	gid_t file_create_gid;
 
 	char *error_string;
diff -r 91e880ae387a -r cc8d4d06ef9f src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c	Sat Feb 21 18:22:11 2009 -0500
+++ b/src/lib-storage/mailbox-list.c	Sat Feb 21 18:47:48 2009 -0500
@@ -194,6 +194,7 @@ void mailbox_list_init(struct mailbox_li
 	list->ns = ns;
 	list->flags = flags;
 	list->file_create_mode = (mode_t)-1;
+	list->dir_create_mode = (mode_t)-1;
 	list->file_create_gid = (gid_t)-1;
 
 	/* copy settings */
@@ -289,10 +290,11 @@ 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) && (st.st_mode & S_ISGID) != 0) {
 		/* directory's GID is used automatically for new files */
 		list->file_create_gid = (gid_t)-1;
-	} else if ((st.st_mode & 0060) == 0) {
+	} else if ((st.st_mode & 0070) == 0) {
 		/* group doesn't have any permissions, so don't bother
 		   changing it */
 		list->file_create_gid = (gid_t)-1;
@@ -306,7 +308,7 @@ void mailbox_list_get_permissions(struct
 	if ((list->flags & MAILBOX_LIST_FLAG_DEBUG) != 0 && name == NULL) {
 		i_info("Namespace %s: Using permissions from %s: "
 		       "mode=0%o gid=%ld", list->ns->prefix, path,
-		       (int)list->file_create_mode,
+		       (int)list->dir_create_mode,
 		       list->file_create_gid == (gid_t)-1 ? -1L :
 		       (long)list->file_create_gid);
 	}
@@ -322,13 +324,7 @@ void mailbox_list_get_dir_permissions(st
 	mode_t mode;
 
 	mailbox_list_get_permissions(list, name, &mode, gid_r);
-
-	/* 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;
-
-	*mode_r = mode;
+	*mode_r = list->dir_create_mode;
 }
 
 bool mailbox_list_is_valid_pattern(struct mailbox_list *list,


More information about the dovecot-cvs mailing list