ACL: implement ACL SAVE.

This commit is contained in:
antirez 2019-02-21 17:01:08 +01:00
parent 484af7aa7a
commit 91aecf0138

View File

@ -1491,11 +1491,12 @@ void aclCommand(client *c) {
} else { } else {
addReplyNull(c); addReplyNull(c);
} }
} else if (!strcasecmp(sub,"load") && c->argc == 2) { } else if (server.acl_filename[0] == '\0' &&
if (server.acl_filename[0] == '\0') { (!strcasecmp(sub,"load") || !strcasecmp(sub,"save")))
{
addReplyError(c,"This Redis instance is not configured to use an ACL file. You may want to specify users via the ACL SETUSER command and then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration."); addReplyError(c,"This Redis instance is not configured to use an ACL file. You may want to specify users via the ACL SETUSER command and then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration.");
return; return;
} else { } else if (!strcasecmp(sub,"load") && c->argc == 2) {
sds errors = ACLLoadFromFile(server.acl_filename); sds errors = ACLLoadFromFile(server.acl_filename);
if (errors == NULL) { if (errors == NULL) {
addReply(c,shared.ok); addReply(c,shared.ok);
@ -1503,6 +1504,13 @@ void aclCommand(client *c) {
addReplyError(c,errors); addReplyError(c,errors);
sdsfree(errors); sdsfree(errors);
} }
} else if (!strcasecmp(sub,"save") && c->argc == 2) {
if (ACLSaveToFile(server.acl_filename) == C_OK) {
addReply(c,shared.ok);
} else {
addReplyError(c,"There was an error trying to save the ACLs. "
"Please check the server logs for more "
"information");
} }
} else if (!strcasecmp(sub,"cat") && c->argc == 2) { } else if (!strcasecmp(sub,"cat") && c->argc == 2) {
void *dl = addReplyDeferredLen(c); void *dl = addReplyDeferredLen(c);