From 3407f98d147ffbf031725102181e1fe3cd874363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Tue, 8 Apr 2025 12:52:00 +0200 Subject: [PATCH 15/20] wrap sr_nacm_get_user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Organization: Wires This adds a counterpart to setting NACM user. Sometimes, it might be useful to get it as well. Change-Id: I534a229eb536d63091904ab4f6268cb9da6dd3db Signed-off-by: Mattias Walström --- include/sysrepo-cpp/Session.hpp | 1 + src/Session.cpp | 9 +++++++++ tests/session.cpp | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/include/sysrepo-cpp/Session.hpp b/include/sysrepo-cpp/Session.hpp index b7cad72..1c409b8 100644 --- a/include/sysrepo-cpp/Session.hpp +++ b/include/sysrepo-cpp/Session.hpp @@ -100,6 +100,7 @@ public: void replaceConfig(std::optional config, const std::optional& moduleName = std::nullopt, std::chrono::milliseconds timeout = std::chrono::milliseconds{0}); void setNacmUser(const std::string& user); + std::optional getNacmUser() const; [[nodiscard]] Subscription initNacm( SubscribeOptions opts = SubscribeOptions::Default, ExceptionHandler handler = nullptr, diff --git a/src/Session.cpp b/src/Session.cpp index 40c3df3..2273c79 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -706,6 +706,15 @@ void Session::setNacmUser(const std::string& user) throwIfError(res, "Couldn't set NACM user", m_sess.get()); } +/** + * @brief Get the NACM user for this session. + */ +std::optional Session::getNacmUser() const +{ + auto* username = sr_nacm_get_user(m_sess.get()); + return username ? std::make_optional(username) : std::nullopt; +} + /** * @brief Initializes NACM callbacks. * diff --git a/tests/session.cpp b/tests/session.cpp index 9a419a1..548b371 100644 --- a/tests/session.cpp +++ b/tests/session.cpp @@ -390,10 +390,14 @@ TEST_CASE("session") auto data = sess.getData("/test_module:denyAllLeaf"); REQUIRE(data.value().findPath("/test_module:denyAllLeaf").value().asTerm().valueStr() == "AHOJ"); + REQUIRE(!sess.getNacmUser()); + // check that repeated NACM initialization still works for (int i = 0; i < 3; ++i) { auto nacmSub = sess.initNacm(); sess.setNacmUser("nobody"); + REQUIRE(sess.getNacmUser() == "nobody"); + data = sess.getData("/test_module:denyAllLeaf"); // After turning on NACM, we can't access the leaf. REQUIRE(!data); @@ -408,6 +412,9 @@ TEST_CASE("session") sysrepo::ErrorWithCode); } + REQUIRE(!!sess.getNacmUser()); + REQUIRE(sess.getNacmUser() == "nobody"); + // duplicate NACM initialization should throw auto nacm = sess.initNacm(); REQUIRE_THROWS_WITH_AS(auto x = sess.initNacm(), -- 2.43.0