+
+static int __wfd_cynara_check(int client_sock, const char *privilege)
+{
+ __WDS_LOG_FUNC_ENTER__;
+
+ char *client_session = NULL;
+ char *clientSmack = NULL;
+ char *uid = NULL;
+ int ret = CYNARA_API_SUCCESS;
+ pid_t pid;
+
+ ret = cynara_creds_socket_get_pid(client_sock, &pid);
+ if (ret == CYNARA_API_SUCCESS) {
+ WDS_LOGD("PID is [%d].", pid);
+ } else {
+ WDS_LOGE("Failed to get pid");
+ return ret;
+ }
+
+ ret = cynara_creds_socket_get_client(client_sock, CLIENT_METHOD_SMACK, &clientSmack);
+ if (ret == CYNARA_API_SUCCESS) {
+ WDS_LOGD("cynara cred is [%s].", clientSmack);
+ } else {
+ WDS_LOGE("Failed to initialize cynara cred");
+ return ret;
+ }
+
+ ret = cynara_creds_socket_get_user(client_sock, USER_METHOD_UID, &uid);
+ if (ret == CYNARA_API_SUCCESS) {
+ WDS_LOGD("cynara UID is [%s].", uid);
+ } else {
+ WDS_LOGE("Failed to initialize cynara UID");
+ free(clientSmack);
+ return ret;
+ }
+
+ client_session = cynara_session_from_pid(pid);
+ if(client_session != NULL) {
+ WDS_LOGD("cynara session is [%s].", client_session);
+ ret = cynara_check(wfd_cynara_handle, clientSmack, client_session, uid, privilege);
+ } else {
+ ret = cynara_check(wfd_cynara_handle, clientSmack, "", uid, privilege);
+ }
+
+ g_free(uid);
+ g_free(clientSmack);
+ g_free(client_session);
+
+ return ret;
+}
+