ACL: initial appending of users in user loading list.

This commit is contained in:
antirez 2019-02-04 12:55:26 +01:00
parent 8f16e1ea91
commit 21e84cdae2
3 changed files with 17 additions and 3 deletions

View File

@ -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;
} }

View File

@ -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")) {

View File

@ -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 */