From 702f8072dc78a1bf7a11bb4623f2c6855c3a1a87 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Wed, 13 Dec 2023 10:31:13 +0000 Subject: [PATCH] fix: bug in passwd's lexer --- backend/src/engine.cpp | 5 ++++- backend/src/lexer.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/engine.cpp b/backend/src/engine.cpp index 70d86c9..9109bda 100644 --- a/backend/src/engine.cpp +++ b/backend/src/engine.cpp @@ -17,7 +17,8 @@ BookStoreEngineClass::BookStoreEngineClass(std::string __config_dir, if (user_data_base.GetPrevilege("root") == -1) { // debugPrint("Creating root user"); user_data_base.AddUser("root", "sjtu", "root", 7); - // debugPrint("Now root's previlege is", user_data_base.GetPrevilege("root")); + // debugPrint("Now root's previlege is", + // user_data_base.GetPrevilege("root")); } } std::vector BookStoreEngineClass::Execute( @@ -150,8 +151,10 @@ std::vector BookStoreEngineClass::ExecutePasswd( std::string user_id, current_password, new_password; if (!CommandPasswdLexer(cmd, user_id, current_password, new_password)) return std::vector({"Invalid"}); + // debugPrint("sucessfully lexed passwd"); if (user_data_base.GetPrevilege(user_id) == -1) return std::vector({"Invalid"}); + // debugPrint("begin checing authority"); if (login_stack.size() > 0 && user_data_base.GetPrevilege(login_stack.top().first) == 7) { user_data_base.ChangePassword(user_id, new_password); diff --git a/backend/src/lexer.cpp b/backend/src/lexer.cpp index 918f14d..5635260 100644 --- a/backend/src/lexer.cpp +++ b/backend/src/lexer.cpp @@ -102,7 +102,7 @@ bool CommandRegisterLexer(const std::string &command, std::string &user_id, bool CommandPasswdLexer(const std::string &command, std::string &user_id, std::string &old_password, std::string &new_password) { static std::basic_regex main_pattern( - R"(^ *passwd +(?:[0-9a-zA-Z_]{1,30}) +(?:[0-9a-zA-Z_]{1,30})? +(?:[0-9a-zA-Z_]{1,30}) *$)", + R"(^ *passwd +(?:[0-9a-zA-Z_]{1,30})(?: +(?:[0-9a-zA-Z_]{1,30}))? +(?:[0-9a-zA-Z_]{1,30}) *$)", std::regex_constants::optimize); if (std::regex_match(command, main_pattern)) { std::stringstream ss(command);