mirror of
https://github.com/fluencelabs/redis
synced 2025-03-26 04:11:04 +00:00
ACL: key matching implemented.
This commit is contained in:
parent
0db42d4ba8
commit
f78b3ede27
23
src/acl.c
23
src/acl.c
@ -330,6 +330,29 @@ int ACLCheckCommandPerm(client *c) {
|
|||||||
if (!(c->user->flags & USER_FLAG_ALLKEYS) &&
|
if (!(c->user->flags & USER_FLAG_ALLKEYS) &&
|
||||||
(c->cmd->getkeys_proc || c->cmd->firstkey))
|
(c->cmd->getkeys_proc || c->cmd->firstkey))
|
||||||
{
|
{
|
||||||
|
int numkeys;
|
||||||
|
int *keyidx = getKeysFromCommand(c->cmd,c->argv,c->argc,&numkeys);
|
||||||
|
for (int j = 0; j < numkeys; j++) {
|
||||||
|
listIter li;
|
||||||
|
listNode *ln;
|
||||||
|
listRewind(u->passwords,&li);
|
||||||
|
|
||||||
|
/* Test this key against every pattern. */
|
||||||
|
match = 0;
|
||||||
|
while((ln = listNext(&li))) {
|
||||||
|
sds pattern = listNodeValue(ln);
|
||||||
|
size_t plen = sdslen(pattern);
|
||||||
|
int idx = keyidx[j];
|
||||||
|
if (stringmatchlen(pattern,plen,c->argv[idx]->ptr,
|
||||||
|
sdslen(c->argv[idx]->ptr),0))
|
||||||
|
{
|
||||||
|
match = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!match) return C_ERR;
|
||||||
|
}
|
||||||
|
getKeysFreeResult(keyidx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we survived all the above checks, the user can execute the
|
/* If we survived all the above checks, the user can execute the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user