diff options
author | antirez <antirez@gmail.com> | 2019-02-04 12:55:26 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2019-02-04 12:55:48 +0100 |
commit | 21e84cdae254b715b15e48734fbd8484b2c14810 (patch) | |
tree | d31990360007c2a2f38dfbb5784a843dff7781d6 /src/acl.c | |
parent | 8f16e1ea912110d5459a4ddd370a93485408311c (diff) | |
download | redis-21e84cdae254b715b15e48734fbd8484b2c14810.tar.gz |
ACL: initial appending of users in user loading list.
Diffstat (limited to 'src/acl.c')
-rw-r--r-- | src/acl.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -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; } |