dovecot-2.0: acl: If ACL file exists in mail root directory, use...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jul 23 23:08:59 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/636d34f650c2
changeset: 11899:636d34f650c2
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jul 23 21:08:55 2010 +0100
description:
acl: If ACL file exists in mail root directory, use it as namespace's default ACLs.

diffstat:

 src/plugins/acl/acl-backend-vfile.c |  26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diffs (57 lines):

diff -r 3ef50adb7abf -r 636d34f650c2 src/plugins/acl/acl-backend-vfile.c
--- a/src/plugins/acl/acl-backend-vfile.c	Fri Jul 23 20:47:29 2010 +0100
+++ b/src/plugins/acl/acl-backend-vfile.c	Fri Jul 23 21:08:55 2010 +0100
@@ -127,7 +127,10 @@
 acl_backend_vfile_get_local_dir(struct acl_backend *backend, const char *name)
 {
 	struct mail_namespace *ns;
-	const char *dir;
+	const char *dir, *inbox;
+
+	if (*name == '\0')
+		name = NULL;
 
 	ns = mailbox_list_get_namespace(backend->list);
 	if (mail_storage_is_mailbox_file(ns->storage)) {
@@ -137,6 +140,16 @@
 		dir = mailbox_list_get_path(ns->list, name,
 					    MAILBOX_LIST_PATH_TYPE_MAILBOX);
 	}
+	if (name == NULL) {
+		/* verify that the directory isn't same as INBOX's directory.
+		   this is mainly for Maildir. */
+		inbox = mailbox_list_get_path(ns->list, "INBOX",
+					      MAILBOX_LIST_PATH_TYPE_MAILBOX);
+		if (strcmp(inbox, dir) == 0) {
+			/* can't have default ACLs with this setup */
+			return NULL;
+		}
+	}
 	return dir;
 }
 
@@ -164,12 +177,7 @@
 						  str_c(vname), NULL);
 	} T_END;
 
-	if (*name == '\0') {
-		/* the default ACL for mailbox list */
-		dir = NULL;
-	} else {
-		dir = acl_backend_vfile_get_local_dir(_backend, name);
-	}
+	dir = acl_backend_vfile_get_local_dir(_backend, name);
 	aclobj->local_path = dir == NULL ? NULL :
 		i_strconcat(dir, "/"ACL_FILENAME, NULL);
 	return &aclobj->aclobj;
@@ -238,8 +246,8 @@
 	ret = path == NULL ? 0 :
 		acl_backend_vfile_exists(backend, path,
 					 &new_validity.mailbox_validity);
-	if (ret == 0) {
-		dir = acl_backend_vfile_get_local_dir(_backend, name);
+	if (ret == 0 &&
+	    (dir = acl_backend_vfile_get_local_dir(_backend, name)) != NULL) {
 		local_path = t_strconcat(dir, "/", name, NULL);
 		ret = acl_backend_vfile_exists(backend, local_path,
 					       &new_validity.local_validity);


More information about the dovecot-cvs mailing list