dovecot-2.1: mbox: Fixed getting filesystem permissions when par...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Oct 2 21:56:19 EEST 2012
details: http://hg.dovecot.org/dovecot-2.1/rev/83695d6d41aa
changeset: 14742:83695d6d41aa
user: Timo Sirainen <tss at iki.fi>
date: Tue Oct 02 21:56:09 2012 +0300
description:
mbox: Fixed getting filesystem permissions when parent dir has setgid-bit enabled.
diffstat:
src/lib-storage/mailbox-list.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diffs (34 lines):
diff -r 38727d3e90ec -r 83695d6d41aa src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c Tue Oct 02 21:36:43 2012 +0300
+++ b/src/lib-storage/mailbox-list.c Tue Oct 02 21:56:09 2012 +0300
@@ -638,7 +638,7 @@
void mailbox_list_get_permissions(struct mailbox_list *list, const char *name,
struct mailbox_permissions *permissions_r)
{
- const char *path, *parent_name, *p;
+ const char *path, *parent_name, *parent_path, *p;
struct stat st;
memset(permissions_r, 0, sizeof(*permissions_r));
@@ -708,6 +708,21 @@
} else {
permissions_r->file_create_gid = st.st_gid;
}
+ if (!S_ISDIR(st.st_mode) &&
+ permissions_r->file_create_gid != (gid_t)-1) {
+ /* we need to stat() the parent directory to see if
+ it has setgid-bit set */
+ p = strrchr(path, '/');
+ parent_path = p == NULL ? NULL :
+ t_strdup_until(path, p);
+ if (parent_path != NULL &&
+ stat(parent_path, &st) == 0 &&
+ (st.st_mode & S_ISGID) != 0) {
+ /* directory's GID is used automatically for
+ new files */
+ permissions_r->file_create_gid = (gid_t)-1;
+ }
+ }
}
if (name == NULL) {
More information about the dovecot-cvs
mailing list