Skip to content

Commit

Permalink
fix:userbacklist && userpass (#2600)
Browse files Browse the repository at this point in the history
* fix:userbacklist && userpass
---------

Co-authored-by: chejinge <chejinge@360.cn>
  • Loading branch information
chejinge and brother-jin committed Apr 16, 2024
1 parent 810b590 commit 2af2722
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
22 changes: 22 additions & 0 deletions include/pika_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,14 @@ class PikaConf : public pstd::BaseConf {
std::shared_lock l(rwlock_);
return bgsave_prefix_;
}
std::string user_blacklist_string() {
std::shared_lock l(rwlock_);
return pstd::StringConcat(user_blacklist_, COMMA);
}
const std::vector<std::string>& user_blacklist_vector() {
std::shared_lock l(rwlock_);
return user_blacklist_;
}
bool classic_mode() { return classic_mode_.load(); }
int databases() {
std::shared_lock l(rwlock_);
Expand Down Expand Up @@ -492,6 +500,19 @@ class PikaConf : public pstd::BaseConf {
TryPushDiffCommands("masterauth", value);
masterauth_ = value;
}
void SetUserPass(const std::string& value) {
std::lock_guard l(rwlock_);
TryPushDiffCommands("userpass", value);
userpass_ = value;
}
void SetUserBlackList(const std::string& value) {
std::lock_guard l(rwlock_);
TryPushDiffCommands("userblacklist", value);
pstd::StringSplit(value, COMMA, user_blacklist_);
for (auto& item : user_blacklist_) {
pstd::StringToLower(item);
}
}
void SetSlotMigrate(const bool value) {
std::lock_guard l(rwlock_);
TryPushDiffCommands("slotmigrate", value ? "yes" : "no");
Expand Down Expand Up @@ -710,6 +731,7 @@ class PikaConf : public pstd::BaseConf {
std::string requirepass_;
std::string masterauth_;
std::string userpass_;
std::vector<std::string> user_blacklist_;
std::atomic<bool> classic_mode_;
int databases_ = 0;
int default_slot_num_ = 1;
Expand Down
14 changes: 13 additions & 1 deletion src/pika_admin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,7 @@ void ConfigCmd::ConfigGet(std::string& ret) {
if (pstd::stringmatch(pattern.data(), "userblacklist", 1) != 0) {
elements += 2;
EncodeString(&config_body, "userblacklist");
EncodeString(&config_body, g_pika_conf -> GetUserBlackList());
EncodeString(&config_body, g_pika_conf->user_blacklist_string());
}
if (pstd::stringmatch(pattern.data(), "slow-cmd-list", 1) != 0) {
elements += 2;
Expand Down Expand Up @@ -1582,6 +1582,12 @@ void ConfigCmd::ConfigGet(std::string& ret) {
EncodeString(&config_body, g_pika_conf->masterauth());
}

if (pstd::stringmatch(pattern.data(), "userpass", 1) != 0) {
elements += 2;
EncodeString(&config_body, "userpass");
EncodeString(&config_body, g_pika_conf->userpass());
}

if (pstd::stringmatch(pattern.data(), "instance-mode", 1) != 0) {
elements += 2;
EncodeString(&config_body, "instance-mode");
Expand Down Expand Up @@ -2155,6 +2161,12 @@ void ConfigCmd::ConfigSet(std::shared_ptr<DB> db) {
} else if (set_item == "masterauth") {
g_pika_conf->SetMasterAuth(value);
res_.AppendStringRaw("+OK\r\n");
} else if (set_item == "userpass") {
g_pika_conf->SetUserPass(value);
res_.AppendStringRaw("+OK\r\n");
} else if (set_item == "userblacklist") {
g_pika_conf->SetUserBlackList(value);
res_.AppendStringRaw("+OK\r\n");
} else if (set_item == "dump-prefix") {
g_pika_conf->SetBgsavePrefix(value);
res_.AppendStringRaw("+OK\r\n");
Expand Down
9 changes: 7 additions & 2 deletions src/pika_conf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,12 @@ int PikaConf::Load() {
if (slowlog_max_len_ == 0) {
slowlog_max_len_ = 128;
}

std::string user_blacklist;
GetConfStr("userblacklist", &user_blacklist);
pstd::StringSplit(user_blacklist, COMMA, user_blacklist_);
for (auto& item : user_blacklist_) {
pstd::StringToLower(item);
}
GetConfInt("default-slot-num", &default_slot_num_);
GetConfStr("dump-path", &bgsave_path_);
bgsave_path_ = bgsave_path_.empty() ? "./dump/" : bgsave_path_;
Expand Down Expand Up @@ -639,7 +644,7 @@ void PikaConf::SetCacheType(const std::string& value) {
}

int PikaConf::ConfigRewrite() {
// std::string userblacklist = suser_blacklist();
std::string userblacklist = user_blacklist_string();
std::string scachetype = scache_type();
std::lock_guard l(rwlock_);
// Only set value for config item that can be config set.
Expand Down

0 comments on commit 2af2722

Please sign in to comment.