Mercurial > dovecot > original-hg > dovecot-1.2
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