From cd0f53cc9d2f3af1ffddd3d7ba22bc42852a690d Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Tue, 11 Jul 2017 09:30:10 +0200 Subject: [PATCH] Adapt to security-manager API changes Group names were replaced by gids. security_manager_groups_free() has been replaced by free(). Audit allows both gid and group name as "obj_gid" value (actually it translates the group name to gid_t anyway). Tests updated. Change-Id: Ibcd8d70d1741fe7c2191e95bda8d4c6d68d8b5e2 --- src/SecurityManager/BaseSecurityManagerWrapper.h | 5 ++- src/SecurityManager/DataProvider.cpp | 12 ++--- src/SecurityManager/SecurityManagerWrapper.cpp | 6 +-- src/SecurityManager/SecurityManagerWrapper.h | 3 +- tests/SecurityManager/FakeSecurityManagerWrapper.h | 3 +- tests/SecurityManager/data_provider.cpp | 51 +++++++--------------- 6 files changed, 28 insertions(+), 52 deletions(-) diff --git a/src/SecurityManager/BaseSecurityManagerWrapper.h b/src/SecurityManager/BaseSecurityManagerWrapper.h index 3cbaaf5..f792977 100644 --- a/src/SecurityManager/BaseSecurityManagerWrapper.h +++ b/src/SecurityManager/BaseSecurityManagerWrapper.h @@ -22,13 +22,14 @@ #ifndef SRC_SECURITYMANAGER_BASESECURITYMANAGERWRAPPER_H #define SRC_SECURITYMANAGER_BASESECURITYMANAGERWRAPPER_H +#include + namespace SecurityManager { class BaseSecurityManagerWrapper { public: virtual ~BaseSecurityManagerWrapper() = default; - virtual int security_manager_groups_get(char ***groups, size_t *groups_count) = 0; - virtual void security_manager_groups_free(char **groups, size_t groups_count) = 0; + virtual int security_manager_groups_get(gid_t **groups, size_t *groups_count) = 0; virtual int SECURITY_MANAGER_SUCCESS_CONST(void) const = 0; }; diff --git a/src/SecurityManager/DataProvider.cpp b/src/SecurityManager/DataProvider.cpp index d861cec..6703db3 100644 --- a/src/SecurityManager/DataProvider.cpp +++ b/src/SecurityManager/DataProvider.cpp @@ -19,8 +19,10 @@ * @version 1.0 */ -#include +#include + #include +#include #include @@ -35,7 +37,7 @@ DataProvider::DataProvider(BaseSecurityManagerWrapper &smApi) : m_smApi(smApi) { Lad::DataProvider::GroupsList DataProvider::getResourceGroups(void) { Lad::DataProvider::GroupsList retGroups; - char **groups = nullptr; + gid_t *groups = nullptr; size_t groupsLen = 0; auto getRet = m_smApi.security_manager_groups_get(&groups, &groupsLen); @@ -44,12 +46,10 @@ Lad::DataProvider::GroupsList DataProvider::getResourceGroups(void) { throw ErrorException("Could not get groups from Security Manager"); } - auto groupsDeleter = std::bind(&BaseSecurityManagerWrapper::security_manager_groups_free, - &m_smApi, std::placeholders::_1, groupsLen); - std::unique_ptr> groupsPtr(groups, groupsDeleter); + std::unique_ptr groupsPtr(groups, ::free); for (size_t i = 0; i < groupsLen; ++i) { - retGroups.push_back(groups[i]); + retGroups.push_back(std::to_string(groups[i])); } return retGroups; diff --git a/src/SecurityManager/SecurityManagerWrapper.cpp b/src/SecurityManager/SecurityManagerWrapper.cpp index 34ed8a6..c6f6465 100644 --- a/src/SecurityManager/SecurityManagerWrapper.cpp +++ b/src/SecurityManager/SecurityManagerWrapper.cpp @@ -25,14 +25,10 @@ namespace SecurityManager { -int SecurityManagerWrapper::security_manager_groups_get(char ***groups, size_t *groups_count) { +int SecurityManagerWrapper::security_manager_groups_get(gid_t **groups, size_t *groups_count) { return ::security_manager_groups_get(groups, groups_count); } -void SecurityManagerWrapper::security_manager_groups_free(char **groups, size_t groups_count) { - return ::security_manager_groups_free(groups, groups_count); -} - int SecurityManagerWrapper::SECURITY_MANAGER_SUCCESS_CONST(void) const { return ::SECURITY_MANAGER_SUCCESS; } diff --git a/src/SecurityManager/SecurityManagerWrapper.h b/src/SecurityManager/SecurityManagerWrapper.h index 8072f8e..f9e963b 100644 --- a/src/SecurityManager/SecurityManagerWrapper.h +++ b/src/SecurityManager/SecurityManagerWrapper.h @@ -30,8 +30,7 @@ class SecurityManagerWrapper : public BaseSecurityManagerWrapper { public: virtual ~SecurityManagerWrapper() = default; - virtual int security_manager_groups_get(char ***groups, size_t *groups_count); - virtual void security_manager_groups_free(char **groups, size_t groups_count); + virtual int security_manager_groups_get(gid_t **groups, size_t *groups_count); virtual int SECURITY_MANAGER_SUCCESS_CONST(void) const; }; diff --git a/tests/SecurityManager/FakeSecurityManagerWrapper.h b/tests/SecurityManager/FakeSecurityManagerWrapper.h index d428528..7450d72 100644 --- a/tests/SecurityManager/FakeSecurityManagerWrapper.h +++ b/tests/SecurityManager/FakeSecurityManagerWrapper.h @@ -31,8 +31,7 @@ class FakeSecurityManagerWrapper : public SecurityManager::BaseSecurityManagerWr public: using BaseSecurityManagerWrapper::BaseSecurityManagerWrapper; - MOCK_METHOD2(security_manager_groups_get, int(char ***groups, size_t *groups_count)); - MOCK_METHOD2(security_manager_groups_free, void(char **groups, size_t groups_count)); + MOCK_METHOD2(security_manager_groups_get, int(gid_t **groups, size_t *groups_count)); MOCK_CONST_METHOD0(SECURITY_MANAGER_SUCCESS_CONST, int(void)); }; diff --git a/tests/SecurityManager/data_provider.cpp b/tests/SecurityManager/data_provider.cpp index dad2394..47539de 100644 --- a/tests/SecurityManager/data_provider.cpp +++ b/tests/SecurityManager/data_provider.cpp @@ -19,10 +19,13 @@ * @version 1.0 */ +#include + #include #include #include #include +#include #include #include @@ -65,7 +68,6 @@ TEST(SecurityManager, getResourceGroups_error) { * - call SecurityManager::DataProvider::getResourceGroups() * - check if security_manager_groups_get() was called with proper args * - check if correct groups are returned by security_manager_groups_get() - * - check if groups were freed with security_manager_groups_free() */ TEST(SecurityManager, getResourceGroups) { using ::testing::DoAll; @@ -76,36 +78,17 @@ TEST(SecurityManager, getResourceGroups) { using ::testing::ElementsAreArray; using ::testing::NiceMock; - std::vector expectedGroups = { - "group1", "group2" - }; - - auto groupsDeleter = [] (char **groups) { - if (groups == nullptr) - return; - for (size_t i = 0; groups[i] != nullptr; ++i) - free(groups[i]); - free(groups); - }; - - std::unique_ptr groups( - static_cast(calloc(expectedGroups.size(), sizeof(char *))), - groupsDeleter); - - if (groups == nullptr) - throw std::bad_alloc(); - - auto freeGroups = [&groups] () { - groups.reset(); - }; - - size_t i = 0; - for (const auto &g : expectedGroups) { - groups.get()[i] = strdup(g.c_str()); - if (groups.get()[i] == nullptr) - throw std::bad_alloc(); - ++i; - } + const size_t SIZE = 3; + + // getResourceGroups should free it + gid_t *groups = static_cast(calloc(SIZE, sizeof(gid_t))); + groups[0] = 3; + groups[1] = 45; + groups[2] = 21; + + std::vector expectedGroups(SIZE); + for (size_t i = 0; i < SIZE; i++) + expectedGroups[i] = std::to_string(groups[i]); NiceMock smApi; @@ -115,11 +98,9 @@ TEST(SecurityManager, getResourceGroups) { .WillByDefault(Return(SECURITY_MANAGER_SUCCESS_CONST)); EXPECT_CALL(smApi, security_manager_groups_get(NotNull(), NotNull())) - .WillOnce(DoAll(SetArgPointee<0>(groups.get()), - SetArgPointee<1>(expectedGroups.size()), + .WillOnce(DoAll(SetArgPointee<0>(groups), + SetArgPointee<1>(SIZE), Return(SECURITY_MANAGER_SUCCESS_CONST))); - EXPECT_CALL(smApi, security_manager_groups_free(groups.get(), expectedGroups.size())) - .WillOnce(InvokeWithoutArgs(freeGroups)); SecurityManager::DataProvider dp(smApi); -- 2.7.4