From 2af272271dbbe0ba546b115902198f0dcfad5ed4 Mon Sep 17 00:00:00 2001 From: chejinge <945997690@qq.com> Date: Mon, 15 Apr 2024 23:49:15 +0800 Subject: [PATCH] fix:userbacklist && userpass (#2600) * fix:userbacklist && userpass --------- Co-authored-by: chejinge --- include/pika_conf.h | 22 ++++++++++++++++++++++ src/pika_admin.cc | 14 +++++++++++++- src/pika_conf.cc | 9 +++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/include/pika_conf.h b/include/pika_conf.h index e37a48201..63739b013 100644 --- a/include/pika_conf.h +++ b/include/pika_conf.h @@ -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& 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_); @@ -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"); @@ -710,6 +731,7 @@ class PikaConf : public pstd::BaseConf { std::string requirepass_; std::string masterauth_; std::string userpass_; + std::vector user_blacklist_; std::atomic classic_mode_; int databases_ = 0; int default_slot_num_ = 1; diff --git a/src/pika_admin.cc b/src/pika_admin.cc index 763c15d15..1337f090d 100644 --- a/src/pika_admin.cc +++ b/src/pika_admin.cc @@ -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; @@ -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"); @@ -2155,6 +2161,12 @@ void ConfigCmd::ConfigSet(std::shared_ptr 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"); diff --git a/src/pika_conf.cc b/src/pika_conf.cc index ac1251d68..ebfee46d9 100644 --- a/src/pika_conf.cc +++ b/src/pika_conf.cc @@ -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_; @@ -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.