summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2019-02-13 18:59:59 +0100
committerGitHub <noreply@github.com>2019-02-13 18:59:59 +0100
commitfd7484cde2d9eb1f659232934ffef46da192b3a0 (patch)
treebd3cf7bb3381d2401abe95ac0476ff8fdf9fa4d8
parente819c2ef5b6f6b7c196cc7c00c543c4af8c703a7 (diff)
parent14507457a08acb6886dc8ae37dba8511ffc18939 (diff)
downloadredis-fd7484cde2d9eb1f659232934ffef46da192b3a0.tar.gz
Merge pull request #5836 from soloestoy/fix-acl-warning
ACL: show categories in COMMAND reply
-rw-r--r--src/acl.c14
-rw-r--r--src/server.c6
-rw-r--r--src/server.h1
3 files changed, 18 insertions, 3 deletions
diff --git a/src/acl.c b/src/acl.c
index e4122fd2c..407d86736 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -1446,7 +1446,7 @@ void aclCommand(client *c) {
} else if (!strcasecmp(sub,"cat") && c->argc == 3) {
uint64_t cflag = ACLGetCommandCategoryFlagByName(c->argv[2]->ptr);
if (cflag == 0) {
- addReplyErrorFormat(c, "Unknown category '%s'", c->argv[2]->ptr);
+ addReplyErrorFormat(c, "Unknown category '%s'", (char*)c->argv[2]->ptr);
return;
}
int arraylen = 0;
@@ -1480,3 +1480,15 @@ NULL
addReplySubcommandSyntaxError(c);
}
}
+
+void addReplyCommandCategories(client *c, struct redisCommand *cmd) {
+ int flagcount = 0;
+ void *flaglen = addReplyDeferredLen(c);
+ for (int j = 0; ACLCommandCategories[j].flag != 0; j++) {
+ if (cmd->flags & ACLCommandCategories[j].flag) {
+ addReplyStatusFormat(c, "@%s", ACLCommandCategories[j].name);
+ flagcount++;
+ }
+ }
+ setDeferredSetLen(c, flaglen, flagcount);
+}
diff --git a/src/server.c b/src/server.c
index 4adc7b678..89e795042 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3698,8 +3698,8 @@ void addReplyCommand(client *c, struct redisCommand *cmd) {
if (!cmd) {
addReplyNull(c);
} else {
- /* We are adding: command name, arg count, flags, first, last, offset */
- addReplyArrayLen(c, 6);
+ /* We are adding: command name, arg count, flags, first, last, offset, categories */
+ addReplyArrayLen(c, 7);
addReplyBulkCString(c, cmd->name);
addReplyLongLong(c, cmd->arity);
@@ -3729,6 +3729,8 @@ void addReplyCommand(client *c, struct redisCommand *cmd) {
addReplyLongLong(c, cmd->firstkey);
addReplyLongLong(c, cmd->lastkey);
addReplyLongLong(c, cmd->keystep);
+
+ addReplyCommandCategories(c,cmd);
}
}
diff --git a/src/server.h b/src/server.h
index a396e1cf7..994952654 100644
--- a/src/server.h
+++ b/src/server.h
@@ -1748,6 +1748,7 @@ char *ACLSetUserStringError(void);
int ACLLoadConfiguredUsers(void);
sds ACLDescribeUser(user *u);
void ACLLoadUsersAtStartup(void);
+void addReplyCommandCategories(client *c, struct redisCommand *cmd);
/* Sorted sets data type */