Use cynara API to get smack label 49/317849/3
authorChanggyu Choi <changyu.choi@samsung.com>
Thu, 9 Jan 2025 02:13:19 +0000 (11:13 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Thu, 9 Jan 2025 03:21:23 +0000 (12:21 +0900)
Instead of directly accessing /proc/<pid>/attr/current, cynara api is used.

Change-Id: I8be076bf58d5a7908897760693cf93af61aa68b9
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
CMakeLists.txt
packaging/amd.spec
src/lib/CMakeLists.txt
src/lib/app_status/app_status_manager.cc
src/modules/widget/CMakeLists.txt
src/modules/widget/src/amd_widget.c

index 74b70738b7e9f5a9c4004152e506e6b1e94e9b51..00eb469afa954006d84ddb31899a52f44ba998ef 100644 (file)
@@ -1,13 +1,6 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
 PROJECT(amd)
 
-IF(_TIZEN_FEATURE_SMACK_DISABLE)
-MESSAGE(STATUS "[SMACK] Disable")
-ADD_DEFINITIONS("-DTIZEN_FEATURE_SMACK_DISABLE")
-ELSE(_TIZEN_FEATURE_SMACK_DISABLE)
-MESSAGE(STATUS "[SMACK] Enable")
-ENDIF(_TIZEN_FEATURE_SMACK_DISABLE)
-
 SET(EXTRA_FLAGS "${EXTRA_FLAGS} -Wall")
 SET(EXTRA_FLAGS "${EXTRA_FLAGS} -Werror")
 SET(EXTRA_FLAGS "${EXTRA_FLAGS} -Wl,-zdefs")
@@ -70,6 +63,7 @@ PKG_CHECK_MODULES(CAPI_SYSTEM_INFO_DEPS REQUIRED capi-system-info)
 PKG_CHECK_MODULES(CAPI_SYSTEM_RESOURCE_DEPS REQUIRED capi-system-resource)
 PKG_CHECK_MODULES(CERT_SVC_VCORE_DEPS REQUIRED cert-svc-vcore)
 PKG_CHECK_MODULES(CYNARA_CLIENT_DEPS REQUIRED cynara-client)
+PKG_CHECK_MODULES(CYNARA_CREDS_PID_DEPS REQUIRED cynara-creds-pid)
 PKG_CHECK_MODULES(CYNARA_CREDS_SOCKET_DEPS REQUIRED cynara-creds-socket)
 PKG_CHECK_MODULES(CYNARA_SESSION_DEPS REQUIRED cynara-session)
 PKG_CHECK_MODULES(DLOG_DEPS REQUIRED dlog)
index 0c46f32c8891f4094dd75aeaaf036060c1949ccd..a796cf799a3f8e8cd06523950f7be7b66ba29383 100644 (file)
@@ -28,6 +28,7 @@ BuildRequires:  pkgconfig(capi-system-info)
 BuildRequires:  pkgconfig(capi-system-resource)
 BuildRequires:  pkgconfig(cert-svc-vcore)
 BuildRequires:  pkgconfig(cynara-client)
+BuildRequires:  pkgconfig(cynara-creds-pid)
 BuildRequires:  pkgconfig(cynara-creds-socket)
 BuildRequires:  pkgconfig(cynara-session)
 BuildRequires:  pkgconfig(dlog)
@@ -267,12 +268,6 @@ AMD gcov objects
 %define tizen_feature_prelink 0
 %endif
 
-%if "%{?dev_wos}" == "1"
-%define tizen_feature_smack_disable 1
-%else
-%define tizen_feature_smack_disable 0
-%endif
-
 %prep
 %setup -q
 sed -i 's|TZ_SYS_DB|%{TZ_SYS_DB}|g' %{SOURCE1001}
@@ -280,10 +275,6 @@ cp %{SOURCE1001} .
 cp %{SOURCE1001} ./org.tizen.NUIGadgetViewer.manifest
 
 %build
-%if 0%{?tizen_feature_smack_disable}
-_TIZEN_FEATURE_SMACK_DISABLE=ON
-%endif
-
 %if 0%{?gcov:1}
 export CFLAGS+=" -fprofile-arcs -ftest-coverage"
 export CXXFLAGS+=" -fprofile-arcs -ftest-coverage"
@@ -311,7 +302,6 @@ MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
        -DMAJORVER=${MAJORVER} \
        -DAMD_MODULES_DIR=%{_moddir} \
        -D_TIZEN_FEATURE_PRELINK:BOOL=${_TIZEN_FEATURE_PRELINK} \
-       -D_TIZEN_FEATURE_SMACK_DISABLE:BOOL=${_TIZEN_FEATURE_SMACK_DISABLE} \
        .
 
 %__make %{?_smp_mflags}
index 2cfc27e795b132622854315f6bfd276a18ba6fc4..280c92bdf033a0b348ad4ccaad2d08c0eb436ff7 100644 (file)
@@ -78,6 +78,7 @@ APPLY_PKG_CONFIG(${TARGET_LIB_AMD} PUBLIC
   CAPI_SYSTEM_INFO_DEPS
   CAPI_SYSTEM_RESOURCE_DEPS
   CERT_SVC_VCORE_DEPS
+  CYNARA_CREDS_PID_DEPS
   DLOG_DEPS
   GIO_DEPS
   GLIB_DEPS
index 10ffec2fae694d38b37b32271d5df2ba76e0c476..5915bb5d26727e5eba078e487c737260713c6243 100644 (file)
@@ -24,6 +24,7 @@
 #include <aul_sock.h>
 #include <bundle.h>
 #include <bundle_cpp.h>
+#include <cynara-creds-pid.h>
 #include <errno.h>
 #include <glib.h>
 #include <limits.h>
@@ -130,27 +131,22 @@ bool InotifySocketMonitorCallback(const char* event_name, void* data) {
   return true;
 }
 
-inline bool IsSmackDisabled()
-{
-#ifdef TIZEN_FEATURE_SMACK_DISABLE
-  return true;
-#else
-  return false;
-#endif /* TIZEN_FEATURE_SMACK_DISABLE */
-}
-
 int VerifyAppProcess(pid_t pid, const std::string& pkgid) {
   if (pkgid.empty())
     return -1;
 
-  if (IsSmackDisabled())
-    return 0;
-
-  char attr[PATH_MAX] = { 0, };
-  if (aul_proc_get_attr(pid, attr, sizeof(attr)) < 0)
+  char* attr = nullptr;
+  int ret = cynara_creds_pid_get_client(pid, CLIENT_METHOD_DEFAULT, &attr);
+  if (ret != CYNARA_API_SUCCESS || attr == nullptr)
     return -1;
 
+  std::unique_ptr<char, decltype(free)*> attr_auto(attr, free);
   std::string smack_label = "User::Pkg::" + pkgid;
+  /*
+    TODO: In smack disable case, it always returns default
+    label("User::Pkg::default_app_no_Smack_mode").
+    So, we need to check whether the package id of the process is matched with pkgid.
+  */
   if (smack_label == attr)
     return 0;
 
index 430e247e4a9d8adaba1c5e1079d3e877848d7561..1b120a09209fda7e870f5187e8b74756951a0163 100644 (file)
@@ -13,6 +13,7 @@ APPLY_PKG_CONFIG(${TARGET_AMD_MOD_WIDGET} PUBLIC
   AUL_DEPS
   AUL_SERVER_DEPS
   BUNDLE_DEPS
+  CYNARA_CREDS_PID_DEPS
   DLOG_DEPS
   GIO_DEPS
   GLIB_DEPS
index 25025d50e88a22bb5ee225b8c84036c104e82e3e..bb4927000e95a1ed4f6b17cc16d94dd8cb006964 100644 (file)
@@ -27,6 +27,7 @@
 #include <bundle.h>
 #include <bundle_internal.h>
 #include <ctype.h>
+#include <cynara-creds-pid.h>
 #include <glib.h>
 #include <pkgmgr-info.h>
 #include <stdio.h>
@@ -850,15 +851,6 @@ static int __dispatch_widget_add_del(amd_request_h req)
        return ret;
 }
 
-static int __is_smack_disabled(void)
-{
-#ifdef TIZEN_FEATURE_SMACK_DISABLE
-       return true;
-#else
-       return false;
-#endif /* TIZEN_FEATURE_SMACK_DISABLE */
-}
-
 static int __validate_widget_caller(amd_request_h req)
 {
        bundle *kb = amd_request_get_bundle(req);
@@ -868,7 +860,7 @@ static int __validate_widget_caller(amd_request_h req)
        amd_app_status_h caller_status;
        const char *caller_pkgid;
        pid_t caller_pid = amd_request_get_pid(req);
-       char attr[512] = { 0, };
+       char *attr = NULL;
        int r;
 
        if (amd_request_get_uid(req) < REGULAR_UID_MIN) {
@@ -896,16 +888,21 @@ static int __validate_widget_caller(amd_request_h req)
 
        caller_status = amd_app_status_find_by_effective_pid(caller_pid);
        if (!caller_status) {
-               if (__is_smack_disabled())
-                       return 0;
-
-               r = aul_proc_get_attr(caller_pid, attr, sizeof(attr));
-               if (r != 0) {
+               /*
+                       TODO: In smack disable case, it always returns default
+                       label("User::Pkg::default_app_no_Smack_mode").
+                       We must check whether caller is app or not.
+               */
+               r = cynara_creds_pid_get_client(caller_pid, CLIENT_METHOD_DEFAULT, &attr);
+               if (r != CYNARA_API_SUCCESS || attr == NULL) {
                        LOGE("Failed to get attr. caller(%d)", caller_pid);
                        return -1;
                }
 
-               if (!strcmp(attr, "User"))
+               int cmp = strcmp(attr, "User");
+               free(attr);
+
+               if (cmp == 0)
                        return 0;
 
                LOGE("Reject request. caller(%d)", caller_pid);