Replace direct Smack label access with Cynara API 56/324456/1 tizen
authorJuyeon Lee <juyeonne.lee@samsung.com>
Mon, 19 May 2025 05:28:48 +0000 (14:28 +0900)
committerJuyeon Lee <juyeonne.lee@samsung.com>
Mon, 19 May 2025 05:38:19 +0000 (14:38 +0900)
remove direct access to the `/proc/self/attr/current` file for retrieving Smack labels.
Instead, the code now uses the `cynara_creds_self_get_client` function from the Cynara API

Change-Id: If5997943ac6598f639ccef577e9e30effba06411
Signed-off-by: Juyeon Lee <juyeonne.lee@samsung.com>
CMakeLists.txt
packaging/capi-network-nsd.spec
src/dns-sd/dns-sd.c
src/ssdp/ssdp.c

index c2349bd51d1784109065f6d67f5b400c5f28c058..c3440df631cab7ba4f29ed07adc5c76c5a9b0867 100644 (file)
@@ -26,7 +26,7 @@ INCLUDE(FindPkgConfig)
 
 ########################## search for packages ################################
 
-SET(LIB_DEPS "dlog glib-2.0 gio-2.0 capi-base-common capi-system-info gio-unix-2.0 gssdp-1.0 dns_sd cynara-client")
+SET(LIB_DEPS "dlog glib-2.0 gio-2.0 capi-base-common capi-system-info gio-unix-2.0 gssdp-1.0 dns_sd cynara-client cynara-creds-self")
 SET(PC_DEPS "capi-base-common")
 SET(TEST_DEPS "glib-2.0")
 SET(GTEST_DEPS "gmock" ${LIB_DEPS})
index 0216e2c045c4d8f476b47315e5be3ee0da4a464b..05fedf6b29e3a03fca71c784bfa732aa7627615a 100644 (file)
@@ -17,6 +17,7 @@ BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(dns_sd)
 BuildRequires:  pkgconfig(gssdp-1.0)
 BuildRequires:  pkgconfig(cynara-client)
+BuildRequires: pkgconfig(cynara-creds-self)
 BuildRequires:  pkgconfig(gmock)
 %if 0%{?gcov:1}
 BuildRequires:  tar
index 81cd034f0d5f109e4b2138aa57eacb56ab779449..610ab171a8b4521db2e6236efcdc030ea11a1ae3 100644 (file)
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <netinet/in.h>
 #include <cynara-client.h>
+#include <cynara-creds-self.h>
 #include <dns_sd.h>
 #include "dns-sd-util.h"
 #include "dns-sd.h"
@@ -199,13 +200,11 @@ static resolve_reply_data *__dnssd_check_resolve_reply_data_validity(
 
 static bool __dnssd_check_permission()
 {
-       FILE *fd;
-
        int ret;
-       char smack_label[SMACK_LABEL_LEN + 1];
        char uid[10];
        char *client_session = "";
        char *privilege = "http://tizen.org/privilege/internet";
+       char *smack_label = NULL;
 
        cynara *p_cynara = NULL;
 
@@ -214,29 +213,20 @@ static bool __dnssd_check_permission()
                return false; //LCOV_EXCL_LINE
        }
 
-       memset(smack_label, 0x00, SMACK_LABEL_LEN + 1);
-
-       fd = fopen("/proc/self/attr/current", "r");
-       if (fd == NULL) {
-               DNSSD_LOGE("Failed to open /proc/self/attr/current"); //LCOV_EXCL_LINE
-               cynara_finish(p_cynara); //LCOV_EXCL_LINE
-               return false; //LCOV_EXCL_LINE
-       }
-       ret = fread(smack_label, SMACK_LABEL_LEN, 1, fd);
-       if (ret == 0 && ferror(fd)) {
-               DNSSD_LOGE("Failed to read /proc/self/attr/current"); //LCOV_EXCL_LINE
-               if (fclose(fd) != 0) //LCOV_EXCL_LINE
-                       DNSSD_LOGE("Failed to fclose"); //LCOV_EXCL_LINE
+       ret = cynara_creds_self_get_client(CLIENT_METHOD_DEFAULT, &smack_label);
+       if (ret != CYNARA_API_SUCCESS) {
+               DNSSD_LOGE("Failed to get smack label");//LCOV_EXCL_LINE
                cynara_finish(p_cynara); //LCOV_EXCL_LINE
                return false; //LCOV_EXCL_LINE
        }
-       if (fclose(fd) != 0)
-               DNSSD_LOGE("Failed to fclose"); //LCOV_EXCL_LINE
 
        snprintf(uid, sizeof(uid), "%d", getuid());
 
        ret = cynara_check(p_cynara, smack_label, client_session, uid, privilege);
-       cynara_finish(p_cynara);
+       if (smack_label)
+               free(smack_label);
+       if (p_cynara)
+               cynara_finish(p_cynara);
 
        return (ret == CYNARA_API_ACCESS_ALLOWED) ? true : false;
 }
index 5b2ca796c3bed2a86a93f01bbc140e2439f4cb45..fc1bdf1471e75f52f33578c48a5c3b6a500fcbfb 100644 (file)
@@ -33,6 +33,7 @@
 #include <libgssdp/gssdp.h>
 #include <dlog.h>
 #include <cynara-client.h>
+#include <cynara-creds-self.h>
 
 /*****************************************************************************
  * Network Service Discovery headers
@@ -151,13 +152,11 @@ static void __g_hash_free_service(gpointer key, gpointer value,
 //LCOV_EXCL_START
 static bool __ssdp_check_permission()
 {
-       FILE *fd;
-
        int ret;
-       char smack_label[SMACK_LABEL_LEN + 1];
        char uid[10];
        char *client_session = "";
        char *privilege = "http://tizen.org/privilege/internet";
+       char *smack_label = NULL;
 
        cynara *p_cynara = NULL;
 
@@ -166,29 +165,20 @@ static bool __ssdp_check_permission()
                return false;
        }
 
-       memset(smack_label, 0x00, SMACK_LABEL_LEN + 1);
-
-       fd = fopen("/proc/self/attr/current", "r");
-       if (fd == NULL) {
-               SSDP_LOGE("Failed to open /proc/self/attr/current");
-               cynara_finish(p_cynara);
-               return false;
-       }
-       ret = fread(smack_label, SMACK_LABEL_LEN, 1, fd);
-       if (ret == 0 && ferror(fd)) {
-               SSDP_LOGE("Failed to read /proc/self/attr/current");
-               if (fclose(fd) != 0)
-                       SSDP_LOGE("Failed to fclose");
+       ret = cynara_creds_self_get_client(CLIENT_METHOD_DEFAULT, &smack_label);
+       if (ret != CYNARA_API_SUCCESS) {
+               SSDP_LOGE("Failed to get smack label");
                cynara_finish(p_cynara);
                return false;
        }
-       if (fclose(fd) != 0)
-               SSDP_LOGE("Failed to fclose");
 
        snprintf(uid, sizeof(uid), "%d", getuid());
 
        ret = cynara_check(p_cynara, smack_label, client_session, uid, privilege);
-       cynara_finish(p_cynara);
+       if (smack_label)
+               free(smack_label);
+       if (p_cynara)
+               cynara_finish(p_cynara);
 
        return (ret == CYNARA_API_ACCESS_ALLOWED) ? true : false;
 }