mirror of
https://github.com/fluencelabs/redis
synced 2025-05-06 07:52:13 +00:00
ACL: initial appending of users in user loading list.
This commit is contained in:
parent
8f16e1ea91
commit
21e84cdae2
14
src/acl.c
14
src/acl.c
@ -937,11 +937,18 @@ int ACLAppendUserForLoading(sds *argv, int argc) {
|
|||||||
|
|
||||||
/* Try to apply the user rules in a fake user to see if they
|
/* Try to apply the user rules in a fake user to see if they
|
||||||
* are actually valid. */
|
* are actually valid. */
|
||||||
user fu = {0};
|
char *funame = "__fakeuser__";
|
||||||
user *fakeuser = &fu;
|
user *fakeuser = ACLCreateUser(funame,strlen(funame));
|
||||||
|
serverAssert(fakeuser != NULL);
|
||||||
|
int retval = raxRemove(Users,(unsigned char*) funame,strlen(funame),NULL);
|
||||||
|
serverAssert(retval != 0);
|
||||||
|
|
||||||
for (int j = 2; j < argc; j++) {
|
for (int j = 2; j < argc; j++) {
|
||||||
if (ACLSetUser(fakeuser,argv[j],sdslen(argv[j])) == C_ERR) {
|
if (ACLSetUser(fakeuser,argv[j],sdslen(argv[j])) == C_ERR) {
|
||||||
if (errno != ENOENT) return C_ERR;
|
if (errno != ENOENT) {
|
||||||
|
ACLFreeUser(fakeuser);
|
||||||
|
return C_ERR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -950,6 +957,7 @@ int ACLAppendUserForLoading(sds *argv, int argc) {
|
|||||||
for (int j = 1; j < argc; j++) copy[j-1] = sdsdup(argv[j]);
|
for (int j = 1; j < argc; j++) copy[j-1] = sdsdup(argv[j]);
|
||||||
copy[argc-1] = NULL;
|
copy[argc-1] = NULL;
|
||||||
listAddNodeTail(UsersToLoad,copy);
|
listAddNodeTail(UsersToLoad,copy);
|
||||||
|
ACLFreeUser(fakeuser);
|
||||||
return C_OK;
|
return C_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,6 +791,11 @@ void loadServerConfigFromString(char *config) {
|
|||||||
"Allowed values: 'upstart', 'systemd', 'auto', or 'no'";
|
"Allowed values: 'upstart', 'systemd', 'auto', or 'no'";
|
||||||
goto loaderr;
|
goto loaderr;
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(argv[0],"user") && argc >= 2) {
|
||||||
|
if (ACLAppendUserForLoading(argv,argc) == C_ERR) {
|
||||||
|
err = "Syntax error in user declaration";
|
||||||
|
goto loaderr;
|
||||||
|
}
|
||||||
} else if (!strcasecmp(argv[0],"loadmodule") && argc >= 2) {
|
} else if (!strcasecmp(argv[0],"loadmodule") && argc >= 2) {
|
||||||
queueLoadModule(argv[1],&argv[2],argc-2);
|
queueLoadModule(argv[1],&argv[2],argc-2);
|
||||||
} else if (!strcasecmp(argv[0],"sentinel")) {
|
} else if (!strcasecmp(argv[0],"sentinel")) {
|
||||||
|
@ -1738,6 +1738,7 @@ int ACLCheckCommandPerm(client *c);
|
|||||||
int ACLSetUser(user *u, const char *op, ssize_t oplen);
|
int ACLSetUser(user *u, const char *op, ssize_t oplen);
|
||||||
sds ACLDefaultUserFirstPassword(void);
|
sds ACLDefaultUserFirstPassword(void);
|
||||||
uint64_t ACLGetCommandCategoryFlagByName(const char *name);
|
uint64_t ACLGetCommandCategoryFlagByName(const char *name);
|
||||||
|
int ACLAppendUserForLoading(sds *argv, int argc);
|
||||||
|
|
||||||
/* Sorted sets data type */
|
/* Sorted sets data type */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user