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