summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-01-16 13:29:04 +0100
committerantirez <antirez@gmail.com>2019-01-16 13:29:04 +0100
commit0db42d4ba8148a1e493f2da208d4bcf509716870 (patch)
tree8ac24aa0b51bb8990523b0665c0d319038a86985
parentff92c069475bd6f0ebbaca009ad3168c9d359851 (diff)
downloadredis-0db42d4ba8148a1e493f2da208d4bcf509716870.tar.gz
ACL: implement the key match opcode in ACLSetUser().
-rw-r--r--src/acl.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/acl.c b/src/acl.c
index 38c4f89b3..e03c2a1b6 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -203,6 +203,12 @@ int ACLSetUser(user *u, const char *op, ssize_t oplen) {
listNode *ln = listSearchKey(u->passwords,delpass);
if (ln) listDelNode(u->passwords,ln);
sdsfree(delpass);
+ } else if (op[0] == '~') {
+ sds newpat = sdsnewlen(op+1,oplen-1);
+ listNode *ln = listSearchKey(u->patterns,newpat);
+ /* Avoid re-adding the same pattern multiple times. */
+ if (ln == NULL) listAddNodeTail(u->patterns,newpat);
+ u->flags &= ~USER_FLAG_ALLKEYS;
} else {
return C_ERR;
}