summaryrefslogtreecommitdiff
path: root/src/acl.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-02-04 12:55:26 +0100
committerantirez <antirez@gmail.com>2019-02-04 12:55:48 +0100
commit21e84cdae254b715b15e48734fbd8484b2c14810 (patch)
treed31990360007c2a2f38dfbb5784a843dff7781d6 /src/acl.c
parent8f16e1ea912110d5459a4ddd370a93485408311c (diff)
downloadredis-21e84cdae254b715b15e48734fbd8484b2c14810.tar.gz
ACL: initial appending of users in user loading list.
Diffstat (limited to 'src/acl.c')
-rw-r--r--src/acl.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/acl.c b/src/acl.c
index 105bcfc95..43517300b 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -937,11 +937,18 @@ int ACLAppendUserForLoading(sds *argv, int argc) {
/* Try to apply the user rules in a fake user to see if they
* are actually valid. */
- user fu = {0};
- user *fakeuser = &fu;
+ char *funame = "__fakeuser__";
+ user *fakeuser = ACLCreateUser(funame,strlen(funame));
+ serverAssert(fakeuser != NULL);
+ int retval = raxRemove(Users,(unsigned char*) funame,strlen(funame),NULL);
+ serverAssert(retval != 0);
+
for (int j = 2; j < argc; j++) {
if (ACLSetUser(fakeuser,argv[j],sdslen(argv[j])) == C_ERR) {
- if (errno != ENOENT) return C_ERR;
+ if (errno != ENOENT) {
+ ACLFreeUser(fakeuser);
+ return C_ERR;
+ }
}
}
@@ -950,6 +957,7 @@ int ACLAppendUserForLoading(sds *argv, int argc) {
for (int j = 1; j < argc; j++) copy[j-1] = sdsdup(argv[j]);
copy[argc-1] = NULL;
listAddNodeTail(UsersToLoad,copy);
+ ACLFreeUser(fakeuser);
return C_OK;
}