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>
########################## 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})
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
#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"
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;
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;
}
#include <libgssdp/gssdp.h>
#include <dlog.h>
#include <cynara-client.h>
+#include <cynara-creds-self.h>
/*****************************************************************************
* Network Service Discovery headers
//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;
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;
}