From 1ea3558bf8bf2700931948cce56359f67030d65b Mon Sep 17 00:00:00 2001 From: chejinge Date: Mon, 15 Apr 2024 19:31:29 +0800 Subject: [PATCH 1/2] fix:userbacklist && userpass --- 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 f4167b8c5b..18ee963968 100644 --- a/include/pika_conf.h +++ b/include/pika_conf.h @@ -218,6 +218,14 @@ class PikaConf : public pstd::BaseConf { std::shared_lock l(rwlock_); return bgsave_prefix_; } + std::string suser_blacklist() { + std::shared_lock l(rwlock_); + return pstd::StringConcat(user_blacklist_, COMMA); + } + const std::vector& vuser_blacklist() { + std::shared_lock l(rwlock_); + return user_blacklist_; + } bool classic_mode() { return classic_mode_.load(); } int databases() { std::shared_lock l(rwlock_); @@ -534,6 +542,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"); @@ -792,6 +813,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 72aff23911..e5e3eb29ae 100644 --- a/src/pika_admin.cc +++ b/src/pika_admin.cc @@ -1503,7 +1503,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->suser_blacklist()); } if (pstd::stringmatch(pattern.data(), "slow-cmd-list", 1) != 0) { elements += 2; @@ -1571,6 +1571,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"); @@ -2179,6 +2185,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 72381d36d5..416da0a674 100644 --- a/src/pika_conf.cc +++ b/src/pika_conf.cc @@ -82,7 +82,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_; @@ -663,7 +668,7 @@ void PikaConf::SetCacheType(const std::string& value) { } int PikaConf::ConfigRewrite() { - // std::string userblacklist = suser_blacklist(); + std::string userblacklist = suser_blacklist(); std::string scachetype = scache_type(); std::lock_guard l(rwlock_); // Only set value for config item that can be config set. From cb9a0cbcea4fa914bac4f6bc62e08a836cd2211f Mon Sep 17 00:00:00 2001 From: chejinge Date: Mon, 15 Apr 2024 20:20:39 +0800 Subject: [PATCH 2/2] fix --- include/pika_conf.h | 4 ++-- src/pika_admin.cc | 2 +- src/pika_conf.cc | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/pika_conf.h b/include/pika_conf.h index 18ee963968..ed662ad2ee 100644 --- a/include/pika_conf.h +++ b/include/pika_conf.h @@ -218,11 +218,11 @@ class PikaConf : public pstd::BaseConf { std::shared_lock l(rwlock_); return bgsave_prefix_; } - std::string suser_blacklist() { + std::string user_blacklist_string() { std::shared_lock l(rwlock_); return pstd::StringConcat(user_blacklist_, COMMA); } - const std::vector& vuser_blacklist() { + const std::vector& user_blacklist_vector() { std::shared_lock l(rwlock_); return user_blacklist_; } diff --git a/src/pika_admin.cc b/src/pika_admin.cc index e5e3eb29ae..9124c1a52c 100644 --- a/src/pika_admin.cc +++ b/src/pika_admin.cc @@ -1503,7 +1503,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->suser_blacklist()); + EncodeString(&config_body, g_pika_conf->user_blacklist_string()); } if (pstd::stringmatch(pattern.data(), "slow-cmd-list", 1) != 0) { elements += 2; diff --git a/src/pika_conf.cc b/src/pika_conf.cc index 416da0a674..3f264d41ab 100644 --- a/src/pika_conf.cc +++ b/src/pika_conf.cc @@ -668,7 +668,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.