Use cynara API to get smack label 37/317637/1
authorSangyoon Jang <jeremy.jang@samsung.com>
Mon, 6 Jan 2025 07:23:20 +0000 (16:23 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Mon, 6 Jan 2025 07:23:20 +0000 (16:23 +0900)
Change-Id: I4001271afec9125962ad5e56ad86bb0976e86cd9
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
CMakeLists.txt
packaging/capi-appfw-app-manager.spec
src/CMakeLists.txt
src/app_info.c
tests/app-manager_unittests/app_info_tests.cc
tests/app-manager_unittests/mock/cynara_mock.cc
tests/app-manager_unittests/mock/cynara_mock.hh

index 6d7594495fd01de746c423dae887bb7015e8ee57..b7738702bcc0d2e809c76f89b4026786c5e1bca1 100644 (file)
@@ -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)
index af5d341dc743758a92b60fb9a8fdb1f7f0ae3986..55bcda73e65013b220a8cffa85c5ba120d14c89d 100644 (file)
@@ -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
index 418cf1799f0c224283009e1ed2b05f656c5ec74a..bdd223313784dfd6ed5b7785545a33e05da85deb 100644 (file)
@@ -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
index f5e5ae2a3e80f0cfacc4c6fce470790dc46a0609..c2acdb93070fd5383af0ae0cfd97a81d9599cf14 100644 (file)
@@ -26,6 +26,7 @@
 #include <package-manager.h>
 #include <dlog.h>
 #include <cynara-client.h>
+#include <cynara-creds-self.h>
 #include <aul.h>
 #include <aul_svc.h>
 
@@ -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);
 
index 96975bdeb92472794bbf08fae1a9a8293d038b80..048de70562623fa85e6e325419b10404df490edc 100644 (file)
@@ -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<CynaraMock>(), cynara_creds_self_get_client(_, _))
+      .WillOnce(Return(0));
 #endif /* TIZEN_FEATURE_SMACK_DISABLE */
   EXPECT_CALL(GetMock<PkgmgrInfoMock>(),
               pkgmgrinfo_appinfo_foreach_category(_, _, _))
index a7e3e029795cae7d403e8c50289f969e156c1b35..2f1400453416e87eefe420d072fb8eb498ce3a83 100644 (file)
@@ -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);
+}
index ebf6f0fbdf4dc06271137dadce5dc27d3a2c78e8..c6298b07dfa76ac971367b69060c174b83d4334a 100644 (file)
 
 #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_