diff --git a/src/server/acl/acl_family.cc b/src/server/acl/acl_family.cc index 2a709a3f8..56a5fc163 100644 --- a/src/server/acl/acl_family.cc +++ b/src/server/acl/acl_family.cc @@ -65,12 +65,14 @@ void AclFamily::List(CmdArgList args, ConnectionContext* cntx) { const std::string password = pass == "nopass" ? "nopass" : PrettyPrintSha(pass); const std::string acl_cat = AclCatToString(user.AclCategory()); const std::string acl_commands = AclCommandToString(user.AclCommandsRef()); - const std::string maybe_space = acl_commands.empty() ? "" : " "; + const std::string maybe_space_com = acl_commands.empty() ? "" : " "; + const std::string acl_keys = AclKeysToString(user.Keys()); + const std::string maybe_space = acl_keys.empty() ? "" : " "; using namespace std::string_view_literals; absl::StrAppend(&buffer, username, " ", user.IsActive() ? "on "sv : "off "sv, password, " ", - acl_cat, maybe_space, acl_commands); + acl_cat, maybe_space_com, acl_commands, maybe_space, acl_keys); cntx->SendSimpleString(buffer); } diff --git a/src/server/acl/acl_family_test.cc b/src/server/acl/acl_family_test.cc index 75927e466..edec0e137 100644 --- a/src/server/acl/acl_family_test.cc +++ b/src/server/acl/acl_family_test.cc @@ -46,7 +46,7 @@ TEST_F(AclFamilyTest, AclSetUser) { EXPECT_THAT(resp, "OK"); resp = Run({"ACL", "LIST"}); auto vec = resp.GetVec(); - EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL", + EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", "user vlad off nopass +@NONE")); resp = Run({"ACL", "SETUSER", "vlad", "+ACL"}); @@ -54,7 +54,7 @@ TEST_F(AclFamilyTest, AclSetUser) { resp = Run({"ACL", "LIST"}); vec = resp.GetVec(); - EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL", + EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", "user vlad off nopass +@NONE +ACL")); } @@ -79,7 +79,7 @@ TEST_F(AclFamilyTest, AclDelUser) { EXPECT_THAT(resp, "OK"); resp = Run({"ACL", "LIST"}); - EXPECT_THAT(resp.GetString(), "user default on nopass +@ALL +ALL"); + EXPECT_THAT(resp.GetString(), "user default on nopass +@ALL +ALL ~*"); } TEST_F(AclFamilyTest, AclList) { @@ -95,7 +95,7 @@ TEST_F(AclFamilyTest, AclList) { resp = Run({"ACL", "LIST"}); auto vec = resp.GetVec(); - EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL", + EXPECT_THAT(vec, UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", "user kostas off d74ff0ee8da3b98 +@ADMIN", "user adi off d74ff0ee8da3b98 +@FAST")); } @@ -146,7 +146,7 @@ TEST_F(AclFamilyTest, TestAllCategories) { resp = Run({"ACL", "LIST"}); EXPECT_THAT(resp.GetVec(), - UnorderedElementsAre("user default on nopass +@ALL +ALL", + UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", absl::StrCat("user kostas off nopass ", "+@", cat))); resp = Run({"ACL", "SETUSER", "kostas", absl::StrCat("-@", cat)}); @@ -154,7 +154,7 @@ TEST_F(AclFamilyTest, TestAllCategories) { resp = Run({"ACL", "LIST"}); EXPECT_THAT(resp.GetVec(), - UnorderedElementsAre("user default on nopass +@ALL +ALL", + UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", absl::StrCat("user kostas off nopass ", "+@NONE"))); resp = Run({"ACL", "DELUSER", "kostas"}); @@ -193,7 +193,7 @@ TEST_F(AclFamilyTest, TestAllCommands) { EXPECT_THAT(resp, "OK"); resp = Run({"ACL", "LIST"}); - EXPECT_THAT(resp.GetVec(), UnorderedElementsAre("user default on nopass +@ALL +ALL", + EXPECT_THAT(resp.GetVec(), UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", absl::StrCat("user kostas off nopass +@NONE ", "+", command_name))); @@ -201,7 +201,7 @@ TEST_F(AclFamilyTest, TestAllCommands) { resp = Run({"ACL", "LIST"}); EXPECT_THAT(resp.GetVec(), - UnorderedElementsAre("user default on nopass +@ALL +ALL", + UnorderedElementsAre("user default on nopass +@ALL +ALL ~*", absl::StrCat("user kostas off nopass ", "+@NONE"))); resp = Run({"ACL", "DELUSER", "kostas"}); diff --git a/tests/dragonfly/acl_family_test.py b/tests/dragonfly/acl_family_test.py index bc0850b66..bbf7ec45e 100644 --- a/tests/dragonfly/acl_family_test.py +++ b/tests/dragonfly/acl_family_test.py @@ -336,7 +336,7 @@ async def test_good_acl_file(df_local_factory, tmp_dir): assert "user roy on ea71c25a7a60224 +@STRING +HSET" in result assert "user shahar off ea71c25a7a60224 +@SET" in result assert "user vlad off nopass +@STRING" in result - assert "user default on nopass +@ALL +ALL" in result + assert "user default on nopass +@ALL +ALL ~*" in result result = await client.execute_command("ACL DELUSER shahar") assert result == b"OK"