dovecot-1.2: imap-acl: Don't return default rights for mailboxes...

dovecot at dovecot.org dovecot at dovecot.org
Fri Feb 20 23:31:41 EET 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/0ac80bed5d3e
changeset: 8757:0ac80bed5d3e
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Feb 20 16:31:37 2009 -0500
description:
imap-acl: Don't return default rights for mailboxes in non-private namespaces.

diffstat:

1 file changed, 12 insertions(+), 5 deletions(-)
src/plugins/imap-acl/imap-acl-plugin.c |   17 ++++++++++++-----

diffs (56 lines):

diff -r be1d1c722c92 -r 0ac80bed5d3e src/plugins/imap-acl/imap-acl-plugin.c
--- a/src/plugins/imap-acl/imap-acl-plugin.c	Fri Feb 20 16:26:41 2009 -0500
+++ b/src/plugins/imap-acl/imap-acl-plugin.c	Fri Feb 20 16:31:37 2009 -0500
@@ -164,7 +164,8 @@ imap_acl_write_right(string_t *dest, str
 
 static int
 imap_acl_write_aclobj(string_t *dest, struct acl_backend *backend,
-		      struct acl_object *aclobj, bool convert_owner)
+		      struct acl_object *aclobj, bool convert_owner,
+		      bool add_default)
 {
 	struct acl_object_list_iter *iter;
 	struct acl_rights rights;
@@ -200,7 +201,8 @@ imap_acl_write_aclobj(string_t *dest, st
 				   can't do the conversion, so try again. */
 				str_truncate(dest, orig_len);
 				return imap_acl_write_aclobj(dest, backend,
-							     aclobj, FALSE);
+							     aclobj, FALSE,
+							     add_default);
 			}
 			seen_owner = TRUE;
 			if (rights.rights != NULL)
@@ -218,7 +220,7 @@ imap_acl_write_aclobj(string_t *dest, st
 	}
 	acl_object_list_deinit(&iter);
 
-	if (!seen_positive_owner && username != NULL) {
+	if (!seen_positive_owner && username != NULL && add_default) {
 		/* no positive owner rights returned, write default ACLs */
 		memset(&rights, 0, sizeof(rights));
 		if (!convert_owner) {
@@ -239,6 +241,8 @@ static bool cmd_getacl(struct client_com
 static bool cmd_getacl(struct client_command_context *cmd)
 {
 	struct acl_backend *backend;
+	struct mail_namespace *ns;
+	struct mail_storage *storage;
 	struct mailbox *box;
 	const char *mailbox;
 	string_t *str;
@@ -259,9 +263,12 @@ static bool cmd_getacl(struct client_com
 	imap_quote_append_string(str, mailbox, FALSE);
 	len = str_len(str);
 
-	backend = acl_storage_get_backend(mailbox_get_storage(box));
+	storage = mailbox_get_storage(box);
+	backend = acl_storage_get_backend(storage);
+	ns = mail_storage_get_namespace(storage);
 	ret = imap_acl_write_aclobj(str, backend,
-				    acl_mailbox_get_aclobj(box), TRUE);
+				    acl_mailbox_get_aclobj(box), TRUE,
+				    ns->type == NAMESPACE_PRIVATE);
 	if (ret == 0) {
 		client_send_line(cmd->client, str_c(str));
 		client_send_tagline(cmd, "OK Getacl completed.");


More information about the dovecot-cvs mailing list