Commit 8119259b authored by Madelyn Olson's avatar Madelyn Olson Committed by Oran Agra
Browse files

White space tweaks and skip categories already applied

(cherry picked from commit d310beb4)
parent e664f381
......@@ -484,6 +484,12 @@ sds ACLDescribeUserCommandRules(user *u) {
* already applied. */
user tu = {0};
user *tempuser = &tu;
/* Keep track of the categories that have been applied, to prevent
* applying them twice. */
char applied[sizeof(ACLCommandCategories)/sizeof(ACLCommandCategories[0])];
memset(applied, 0, sizeof(applied));
memcpy(tempuser->allowed_commands,
u->allowed_commands,
sizeof(u->allowed_commands));
......@@ -491,9 +497,10 @@ sds ACLDescribeUserCommandRules(user *u) {
int best = -1;
unsigned long mindiff = INT_MAX, maxsame = 0;
for (int j = 0; ACLCommandCategories[j].flag != 0; j++) {
if (applied[j]) continue;
unsigned long on, off, diff, same;
ACLCountCategoryBitsForUser(tempuser,&on,&off,ACLCommandCategories[j].name);
/* Check if the current category is the best this loop:
* * It has more commands in common with the user than commands
* that are different.
......@@ -505,7 +512,8 @@ sds ACLDescribeUserCommandRules(user *u) {
diff = additive ? off : on;
same = additive ? on : off;
if (same > diff &&
((diff < mindiff) || (diff == mindiff && same > maxsame))) {
((diff < mindiff) || (diff == mindiff && same > maxsame)))
{
best = j;
mindiff = diff;
maxsame = same;
......@@ -527,8 +535,9 @@ sds ACLDescribeUserCommandRules(user *u) {
rules = sdscatlen(rules," ",1);
sdsfree(op);
sdsfree(invop);
}
applied[best] = 1;
}
/* Fix the final ACLs with single commands differences. */
dictIterator *di = dictGetIterator(server.orig_commands);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment