mirror of
https://github.com/fluencelabs/redis
synced 2025-04-01 15:21:03 +00:00
Merge pull request #5872 from madolson/dev-unstable-acl-setuser-fix
Updated acl setuser to be all or nothing
This commit is contained in:
commit
0dcb003887
21
src/acl.c
21
src/acl.c
@ -1394,18 +1394,33 @@ void aclCommand(client *c) {
|
|||||||
char *sub = c->argv[1]->ptr;
|
char *sub = c->argv[1]->ptr;
|
||||||
if (!strcasecmp(sub,"setuser") && c->argc >= 3) {
|
if (!strcasecmp(sub,"setuser") && c->argc >= 3) {
|
||||||
sds username = c->argv[2]->ptr;
|
sds username = c->argv[2]->ptr;
|
||||||
|
/* Create a temporary user to validate and stage all changes against before
|
||||||
|
* applying to an existing user or creating a new user. If all arguments
|
||||||
|
* are valid the user parameters will all be applied together. If there are
|
||||||
|
* any errors then none of the changes will be applied. */
|
||||||
|
user *tempu = ACLCreateUnlinkedUser();
|
||||||
|
|
||||||
user *u = ACLGetUserByName(username,sdslen(username));
|
user *u = ACLGetUserByName(username,sdslen(username));
|
||||||
if (!u) u = ACLCreateUser(username,sdslen(username));
|
if (u) ACLCopyUser(tempu, u);
|
||||||
serverAssert(u != NULL);
|
|
||||||
for (int j = 3; j < c->argc; j++) {
|
for (int j = 3; j < c->argc; j++) {
|
||||||
if (ACLSetUser(u,c->argv[j]->ptr,sdslen(c->argv[j]->ptr)) != C_OK) {
|
if (ACLSetUser(tempu,c->argv[j]->ptr,sdslen(c->argv[j]->ptr)) != C_OK) {
|
||||||
char *errmsg = ACLSetUserStringError();
|
char *errmsg = ACLSetUserStringError();
|
||||||
addReplyErrorFormat(c,
|
addReplyErrorFormat(c,
|
||||||
"Error in ACL SETUSER modifier '%s': %s",
|
"Error in ACL SETUSER modifier '%s': %s",
|
||||||
(char*)c->argv[j]->ptr, errmsg);
|
(char*)c->argv[j]->ptr, errmsg);
|
||||||
|
|
||||||
|
ACLFreeUser(tempu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!u) u = ACLCreateUser(username,sdslen(username));
|
||||||
|
serverAssert(u != NULL);
|
||||||
|
|
||||||
|
ACLCopyUser(u, tempu);
|
||||||
|
ACLFreeUser(tempu);
|
||||||
|
|
||||||
addReply(c,shared.ok);
|
addReply(c,shared.ok);
|
||||||
} else if (!strcasecmp(sub,"deluser") && c->argc >= 3) {
|
} else if (!strcasecmp(sub,"deluser") && c->argc >= 3) {
|
||||||
int deleted = 0;
|
int deleted = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user