Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
52e99229
Commit
52e99229
authored
Jan 15, 2019
by
antirez
Browse files
ACL: AUTH command new form, using the ACL subsystem.
parent
b39409bc
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/server.c
View file @
52e99229
...
@@ -237,7 +237,7 @@ struct redisCommand redisCommandTable[] = {
...
@@ -237,7 +237,7 @@ struct redisCommand redisCommandTable[] = {
{"keys",keysCommand,2,"rS",0,NULL,0,0,0,0,0,0},
{"keys",keysCommand,2,"rS",0,NULL,0,0,0,0,0,0},
{"scan",scanCommand,-2,"rR",0,NULL,0,0,0,0,0,0},
{"scan",scanCommand,-2,"rR",0,NULL,0,0,0,0,0,0},
{"dbsize",dbsizeCommand,1,"rF",0,NULL,0,0,0,0,0,0},
{"dbsize",dbsizeCommand,1,"rF",0,NULL,0,0,0,0,0,0},
{"auth",authCommand,2,"sltF",0,NULL,0,0,0,0,0,0},
{"auth",authCommand,
-
2,"sltF",0,NULL,0,0,0,0,0,0},
{"ping",pingCommand,-1,"tF",0,NULL,0,0,0,0,0,0},
{"ping",pingCommand,-1,"tF",0,NULL,0,0,0,0,0,0},
{"echo",echoCommand,2,"F",0,NULL,0,0,0,0,0,0},
{"echo",echoCommand,2,"F",0,NULL,0,0,0,0,0,0},
{"save",saveCommand,1,"as",0,NULL,0,0,0,0,0,0},
{"save",saveCommand,1,"as",0,NULL,0,0,0,0,0,0},
...
@@ -2875,16 +2875,40 @@ int writeCommandsDeniedByDiskError(void) {
...
@@ -2875,16 +2875,40 @@ int writeCommandsDeniedByDiskError(void) {
}
}
}
}
/* AUTH <passowrd>
* AUTH <username> <password> (Redis >= 6.0 form)
*
* When the user is omitted it means that we are trying to authenticate
* against the default user. */
void authCommand(client *c) {
void authCommand(client *c) {
if (!server.requirepass) {
/* Only two or three argument forms are allowed. */
addReplyError(c,"Client sent AUTH, but no password is set");
if (c->argc > 3) {
} else if (ACLCheckUserCredentials(NULL,c->argv[1]) == C_OK) {
addReply(c,shared.syntaxerr);
return;
}
/* Handle the two different forms here. The form with two arguments
* will just use "default" as username. */
robj *username, *password;
if (c->argc == 2) {
username = createStringObject("default",7);
password = c->argv[1];
} else {
username = c->argv[1];
password = c->argv[2];
}
if (ACLCheckUserCredentials(username,password) == C_OK) {
c->authenticated = 1;
c->authenticated = 1;
c->user = ACLGetUserByName(username->ptr,sdslen(username->ptr));
addReply(c,shared.ok);
addReply(c,shared.ok);
} else {
} else {
c->authenticated = 0;
addReplyError(c,"-WRONGPASS invalid username-password pair");
addReplyError(c,"invalid password");
}
}
/* Free the "default" string object we created for the two
* arguments form. */
if (c->argc == 2) decrRefCount(username);
}
}
/* The PING command. It works in a different way if the client is in
/* The PING command. It works in a different way if the client is in
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment