changeset 8455:645af8d240d6 HEAD

acl: Fixes to handling extended ACL names.
author Timo Sirainen <tss@iki.fi>
date Wed, 19 Nov 2008 20:03:43 +0200
parents ba5f7a4b89d6
children 529034798b6b
files src/plugins/acl/acl-backend-vfile.c
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/acl/acl-backend-vfile.c	Wed Nov 19 20:03:33 2008 +0200
+++ b/src/plugins/acl/acl-backend-vfile.c	Wed Nov 19 20:03:43 2008 +0200
@@ -337,9 +337,12 @@
 
 	if (*acl != '\0') {
 		/* parse our own extended ACLs */
-		i_assert(*acl == ':');
+		if (*acl != ':') {
+			*error_r = "Missing ':' prefix in ACL extensions";
+			return NULL;
+		}
 
-		names = t_strsplit_spaces(acl, ", ");
+		names = t_strsplit_spaces(acl + 1, ", ");
 		for (; *names != NULL; names++) {
 			const char *name = p_strdup(pool, *names);
 			array_append(&rights, &name, 1);
@@ -373,9 +376,9 @@
 	rights.global = global;
 
 	right_names = acl_parse_rights(aclobj->rights_pool, p, &error);
-	if (*line != '-') {
+	if (*line != '-')
 		rights.rights = right_names;
-	} else {
+	else {
 		line++;
 		rights.neg_rights = right_names;
 	}
@@ -988,9 +991,13 @@
 		if (acl_letter_map[j].name == NULL) {
 			/* fallback to full name */
 			str_append_c(dest, ' ');
-			str_append(dest, rights[j]);
+			str_append(dest, rights[i]);
 		}
 	}
+	if (pos + 1 < str_len(dest)) {
+		c2[0] = ':';
+		str_insert(dest, pos + 1, c2);
+	}
 }
 
 static void