From: Sangyoon Jang Date: Mon, 6 Jan 2025 07:23:20 +0000 (+0900) Subject: Use cynara API to get smack label X-Git-Tag: accepted/tizen/unified/20250108.170429~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=abdbae2601adfa47b5c7cc79652da6cdb0c3e45b;p=platform%2Fcore%2Fapi%2Fapp-manager.git Use cynara API to get smack label Change-Id: I4001271afec9125962ad5e56ad86bb0976e86cd9 Signed-off-by: Sangyoon Jang --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d75944..b773870 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ INCLUDE(ApplyPkgConfig) PKG_CHECK_MODULES(AUL_DEPS REQUIRED aul) PKG_CHECK_MODULES(CAPI_BASE_COMMON_DEPS REQUIRED capi-base-common) PKG_CHECK_MODULES(CYNARA_CLIENT_DEPS REQUIRED cynara-client) +PKG_CHECK_MODULES(CYNARA_CREDS_SELF_DEPS REQUIRED cynara-creds-self) PKG_CHECK_MODULES(DLOG_DEPS REQUIRED dlog) PKG_CHECK_MODULES(GLIB_DEPS REQUIRED glib-2.0) PKG_CHECK_MODULES(GMOCK_DEPS REQUIRED gmock) diff --git a/packaging/capi-appfw-app-manager.spec b/packaging/capi-appfw-app-manager.spec index af5d341..55bcda7 100644 --- a/packaging/capi-appfw-app-manager.spec +++ b/packaging/capi-appfw-app-manager.spec @@ -14,6 +14,7 @@ BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(cynara-client) +BuildRequires: pkgconfig(cynara-creds-self) BuildRequires: pkgconfig(gmock) Requires(post): /sbin/ldconfig diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 418cf17..bdd2233 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,6 +14,7 @@ APPLY_PKG_CONFIG(${TARGET_APP_MANAGER} PUBLIC AUL_DEPS CAPI_BASE_COMMON_DEPS CYNARA_CLIENT_DEPS + CYNARA_CREDS_SELF_DEPS DLOG_DEPS GLIB_DEPS PKGMGR_DEPS diff --git a/src/app_info.c b/src/app_info.c index f5e5ae2..c2acdb9 100644 --- a/src/app_info.c +++ b/src/app_info.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -39,8 +40,6 @@ #define LOG_TAG "TIZEN_N_APP_MANAGER" -#define SMACK_LABEL_LEN 255 - #undef REGULAR_UID_MIN #define REGULAR_UID_MIN 5000 @@ -301,9 +300,8 @@ int app_info_foreach_app_info(app_manager_app_info_cb callback, void *user_data) static int _check_privilege(char *privilege) { cynara *p_cynara; - int fd; int ret; - char client[SMACK_LABEL_LEN + 1] = {0,}; + char *client = NULL; char uid[10] = {0,}; char *client_session = ""; @@ -320,25 +318,13 @@ static int _check_privilege(char *privilege) /* LCOV_EXCL_STOP */ } - fd = open("/proc/self/attr/current", O_RDONLY); - if (fd < 0) { - /* LCOV_EXCL_START */ - LOGE("open [%d] failed!", errno); + ret = cynara_creds_self_get_client(CLIENT_METHOD_DEFAULT, &client); + if (ret != CYNARA_API_SUCCESS) { + LOGE("cynara_creds_self_get_client [%d] failed!", ret); ret = APP_MANAGER_ERROR_IO_ERROR; goto out; - /* LCOV_EXCL_STOP */ } - ret = read(fd, client, SMACK_LABEL_LEN); - if (ret < 0) { - /* LCOV_EXCL_START */ - LOGE("read [%d] failed!", errno); - close(fd); - ret = APP_MANAGER_ERROR_IO_ERROR; - goto out; - /* LCOV_EXCL_STOP */ - } - close(fd); snprintf(uid, 10, "%d", getuid()); ret = cynara_check(p_cynara, client, client_session, uid, privilege); @@ -355,6 +341,8 @@ static int _check_privilege(char *privilege) ret = APP_MANAGER_ERROR_NONE; out: + if (client) + free(client); if (p_cynara) cynara_finish(p_cynara); diff --git a/tests/app-manager_unittests/app_info_tests.cc b/tests/app-manager_unittests/app_info_tests.cc index 96975bd..048de70 100644 --- a/tests/app-manager_unittests/app_info_tests.cc +++ b/tests/app-manager_unittests/app_info_tests.cc @@ -639,6 +639,8 @@ TEST_F(AppInfoTest, app_info_foreach_category_P) { const char* user, const char* privilege) { return CYNARA_API_ACCESS_ALLOWED; })); + EXPECT_CALL(GetMock(), cynara_creds_self_get_client(_, _)) + .WillOnce(Return(0)); #endif /* TIZEN_FEATURE_SMACK_DISABLE */ EXPECT_CALL(GetMock(), pkgmgrinfo_appinfo_foreach_category(_, _, _)) diff --git a/tests/app-manager_unittests/mock/cynara_mock.cc b/tests/app-manager_unittests/mock/cynara_mock.cc index a7e3e02..2f14004 100644 --- a/tests/app-manager_unittests/mock/cynara_mock.cc +++ b/tests/app-manager_unittests/mock/cynara_mock.cc @@ -25,3 +25,8 @@ extern "C" int cynara_check(cynara* p_cynara, const char* client, return MOCK_HOOK_P5(CynaraMock, cynara_check, p_cynara, client, client_session, user, privilege); } + +extern "C" int cynara_creds_self_get_client(cynara_client_creds method, + char** client) { + return MOCK_HOOK_P2(CynaraMock, cynara_creds_self_get_client, method, client); +} diff --git a/tests/app-manager_unittests/mock/cynara_mock.hh b/tests/app-manager_unittests/mock/cynara_mock.hh index ebf6f0f..c6298b0 100644 --- a/tests/app-manager_unittests/mock/cynara_mock.hh +++ b/tests/app-manager_unittests/mock/cynara_mock.hh @@ -23,12 +23,19 @@ #include "app-manager_unittests/mock/module_mock.hh" +enum cynara_client_creds { + CLIENT_METHOD_SMACK, + CLIENT_METHOD_PID, + CLIENT_METHOD_DEFAULT = 0xFFFF, +}; + class CynaraMock : public virtual ModuleMock { public: virtual ~CynaraMock() {} MOCK_METHOD5(cynara_check, int(cynara*, const char*, const char*, const char*, const char*)); + MOCK_METHOD2(cynara_creds_self_get_client, int(cynara_client_creds, char**)); }; #endif // APP_MANAGER_UNITTESTS_MOCK_CYNARA_MOCK_HH_