[PATCH 10/13] Fix ACL copying when renaming users
Bron Gondwana
brong at fastmail.fm
Tue Jan 27 23:15:37 EST 2009
From: Bron Gondwana <brong at launde.home.brong.net>
Gosh mboxlist_lookup provides a dangerous interface!
---
imap/user.c | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/imap/user.c b/imap/user.c
index 8d439c0..5ae03d7 100644
--- a/imap/user.c
+++ b/imap/user.c
@@ -91,8 +91,12 @@ static int user_deleteacl(char *name, int matchlen, int maycreate, void* rock)
int r;
char *acl;
char *rights, *nextid;
+ char *origacl, *aclalloc;
- r = mboxlist_lookup(name, &acl, NULL);
+ r = mboxlist_lookup(name, &origacl, NULL);
+
+ /* setacl re-calls mboxlist_lookup and will stomp on us */
+ aclalloc = acl = xstrdup(origacl);
while (!r && acl) {
rights = strchr(acl, '\t');
@@ -111,6 +115,9 @@ static int user_deleteacl(char *name, int matchlen, int maycreate, void* rock)
acl = nextid;
}
+
+ free(aclalloc);
+
return 0;
}
#endif
@@ -370,8 +377,12 @@ int user_renameacl(char *name, char *olduser, char *newuser)
int r = 0;
char *acl;
char *rights, *nextid;
+ char *origacl, *aclalloc;
- r = mboxlist_lookup(name, &acl, NULL);
+ r = mboxlist_lookup(name, &origacl, NULL);
+
+ /* setacl re-calls mboxlist_lookup and will stomp on us */
+ aclalloc = acl = xstrdup(origacl);
while (!r && acl) {
rights = strchr(acl, '\t');
@@ -393,6 +404,8 @@ int user_renameacl(char *name, char *olduser, char *newuser)
acl = nextid;
}
+ free(aclalloc);
+
return r;
}
--
1.5.6.3
More information about the Cyrus-devel
mailing list