summaryrefslogtreecommitdiff
path: root/src/acl.c
diff options
context:
space:
mode:
authorHarkrishn Patro <30795839+hpatro@users.noreply.github.com>2021-02-22 14:22:25 +0100
committerGitHub <noreply@github.com>2021-02-22 15:22:25 +0200
commit4739131ca6c966592dce739b9330a989eb6b6b2e (patch)
tree8f51917489291b63b1adee2085bdb5422b3515a6 /src/acl.c
parentb164c4dec32a71e74c7ca510a7ab8c6423d30eb4 (diff)
downloadredis-4739131ca6c966592dce739b9330a989eb6b6b2e.tar.gz
Remove acl subcommand validation if fully added command exists. (#8483)
This validation was only done for sub-commands and not for commands. These would have been valid (not produce any error) ACL SETUSER bob +@all +client ACL SETUSER bob +client +client so no reason for this one to fail: ACL SETUSER bob +client +client|id One example why this is needed is that pfdebug wasn't part of the @hyperloglog group and now it is. so something like: acl setuser user1 +@hyperloglog +pfdebug|test would have succeeded in early 6.0.x, and fail in 6.2 RC3 Co-authored-by: Harkrishn Patro <harkrisp@amazon.com> Co-authored-by: Madelyn Olson <madelyneolson@gmail.com> Co-authored-by: Oran Agra <oran@redislabs.com>
Diffstat (limited to 'src/acl.c')
-rw-r--r--src/acl.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/src/acl.c b/src/acl.c
index 74210ebce..e120b36fc 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -814,8 +814,6 @@ void ACLAddAllowedSubcommand(user *u, unsigned long id, const char *sub) {
* invalid (contains non allowed characters).
* ENOENT: The command name or command category provided with + or - is not
* known.
- * EBUSY: The subcommand you want to add is about a command that is currently
- * fully added.
* EEXIST: You are adding a key pattern after "*" was already added. This is
* almost surely an error on the user side.
* EISDIR: You are adding a channel pattern after "*" was already added. This is
@@ -976,22 +974,12 @@ int ACLSetUser(user *u, const char *op, ssize_t oplen) {
return C_ERR;
}
- /* The command should not be set right now in the command
- * bitmap, because adding a subcommand of a fully added
- * command is probably an error on the user side. */
unsigned long id = ACLGetCommandID(copy);
- if (ACLGetUserCommandBit(u,id) == 1) {
- zfree(copy);
- errno = EBUSY;
- return C_ERR;
+ /* Add the subcommand to the list of valid ones, if the command is not set. */
+ if (ACLGetUserCommandBit(u,id) == 0) {
+ ACLAddAllowedSubcommand(u,id,sub);
}
- /* Add the subcommand to the list of valid ones. */
- ACLAddAllowedSubcommand(u,id,sub);
-
- /* We have to clear the command bit so that we force the
- * subcommand check. */
- ACLSetUserCommandBit(u,id,0);
zfree(copy);
}
} else if (op[0] == '-' && op[1] != '@') {
@@ -1030,10 +1018,6 @@ const char *ACLSetUserStringError(void) {
errmsg = "Unknown command or category name in ACL";
else if (errno == EINVAL)
errmsg = "Syntax error";
- else if (errno == EBUSY)
- errmsg = "Adding a subcommand of a command already fully "
- "added is not allowed. Remove the command to start. "
- "Example: -DEBUG +DEBUG|DIGEST";
else if (errno == EEXIST)
errmsg = "Adding a pattern after the * pattern (or the "
"'allkeys' flag) is not valid and does not have any "