SET(INC_DIR include)
INCLUDE_DIRECTORIES(${INC_DIR})
-SET(dependents "dlog gio-2.0 gio-unix-2.0 glib-2.0 capi-base-common capi-network-connection libcurl cynara-client")
+SET(dependents "dlog gio-2.0 gio-unix-2.0 glib-2.0 capi-base-common capi-network-connection libcurl cynara-client cynara-creds-self")
IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
SET(CMAKE_BUILD_TYPE "Release")
BuildRequires: pkgconfig(capi-network-connection)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(cynara-client)
+BuildRequires: pkgconfig(cynara-creds-self)
BuildRequires: pkgconfig(gmock)
BuildRequires: cmake
%if 0%{?gcov:1}
#include <unistd.h>
#include <pthread.h>
#include <cynara-client.h>
+#include <cynara-creds-self.h>
#define SMACK_LABEL_LEN 255
bool _http_check_permission(http_privilege_e _privilege)
{
- FILE *fd;
int ret;
- char smack_label[SMACK_LABEL_LEN + 1] = {0, };
char uid[10];
char *client_session = "";
char *privilege = NULL;
+ char *smack_label = NULL;
cynara *p_cynara;
return false;
}
- bzero(smack_label, SMACK_LABEL_LEN + 1);
-
/* get smack label */
- fd = fopen("/proc/self/attr/current", "r");
- if (fd == NULL) {
- ERR("Failed to open /proc/self/attr/current\n");
+ ret = cynara_creds_self_get_client(CLIENT_METHOD_DEFAULT, &smack_label);
+ if (ret != CYNARA_API_SUCCESS) {
+ ERR("failed to get smack label");
return false;
}
- ret = fread(smack_label, SMACK_LABEL_LEN, 1, fd);
- if (ret < 0) {
- ERR("Failed[%d] to read /proc/self/attr/current\n", ferror(fd));
- fclose(fd);
- return false;
- }
- fclose(fd);
-
/* get uid */
snprintf(uid, sizeof(uid), "%d", getuid());
/* cynara check */
ret = cynara_check(p_cynara, smack_label, client_session, uid, privilege);
+ if (smack_label)
+ free(smack_label);
cynara_finish(p_cynara);
+
return (ret == CYNARA_API_ACCESS_ALLOWED) ? true : false;
}