static int g_feature_enabled = -1;
static bool g_backup = false;
-static int g_privilege_allowed = -1;
+static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
static cynara *p_cynara = NULL;
static void __vc_notify_state_changed(void *data);
static int __vc_check_privilege()
{
- char uid[16];
+ pthread_mutex_lock(&g_cynara_mutex);
- if (0 == g_privilege_allowed) {
- //LCOV_EXCL_START
+ bool ret = true;
+ ret = __check_privilege_initialize();
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCC, "[ERROR] privilege initialize is failed"); //LCOV_EXCL_LINE
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
+ }
+
+ char uid[16];
+ snprintf(uid, 16, "%d", getuid());
+ ret = true;
+ ret = __check_privilege(uid, VC_PRIVILEGE);
+ __check_privilege_deinitialize();
+ if (false == ret) {
SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Permission is denied");
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_PERMISSION_DENIED;
- //LCOV_EXCL_STOP
- } else if (-1 == g_privilege_allowed) {
- if (false == __check_privilege_initialize()) {
- SLOG(LOG_ERROR, TAG_VCC, "[ERROR] privilege initialize is failed"); //LCOV_EXCL_LINE
- return VC_ERROR_PERMISSION_DENIED;
- }
- snprintf(uid, 16, "%d", getuid());
- if (false == __check_privilege(uid, VC_PRIVILEGE)) {
- SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Permission is denied");
- g_privilege_allowed = 0;
- __check_privilege_deinitialize();
- return VC_ERROR_PERMISSION_DENIED;
- }
- __check_privilege_deinitialize();
}
- g_privilege_allowed = 1;
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_NONE;
}
static int g_feature_enabled = -1;
-static int g_privilege_allowed = -1;
static cynara *p_cynara = NULL;
static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
static int __check_privilege_initialize()
{
- pthread_mutex_lock(&g_cynara_mutex);
-
int ret = cynara_initialize(&p_cynara, NULL);
if (NULL == p_cynara || CYNARA_API_SUCCESS != ret) {
SLOG(LOG_ERROR, TAG_VCM, "[ERROR] fail to initialize(%d)", ret);
- pthread_mutex_unlock(&g_cynara_mutex);
return ret;
}
SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] success to initialize cynara");
- pthread_mutex_unlock(&g_cynara_mutex);
-
return ret == CYNARA_API_SUCCESS;
}
static int __check_privilege(const char* uid, const char * privilege)
{
- pthread_mutex_lock(&g_cynara_mutex);
FILE *fp = NULL;
char label_path[1024] = "/proc/self/attr/current";
char smack_label[1024] = {'\0',};
if (!p_cynara) {
SLOG(LOG_ERROR, TAG_VCM, "[ERROR] p_cynara is NULL");
- pthread_mutex_unlock(&g_cynara_mutex);
return false;
}
free(session);
if (ret != CYNARA_API_ACCESS_ALLOWED) {
- pthread_mutex_unlock(&g_cynara_mutex);
return false;
}
- pthread_mutex_unlock(&g_cynara_mutex);
return true;
}
static void __check_privilege_deinitialize()
{
- pthread_mutex_lock(&g_cynara_mutex);
if (p_cynara) {
SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] cynara finish");
cynara_finish(p_cynara);
}
p_cynara = NULL;
- pthread_mutex_unlock(&g_cynara_mutex);
}
static int __vc_mgr_check_privilege()
{
- char uid[16];
+ pthread_mutex_lock(&g_cynara_mutex);
+
+ bool ret = true;
+ ret = __check_privilege_initialize();
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCM, "[ERROR] privilege initialize is failed");
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
+ }
- if (0 == g_privilege_allowed) {
- SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied");
+ char uid[16];
+ snprintf(uid, 16, "%d", getuid());
+ ret = true;
+ ret = __check_privilege(uid, VC_PRIVILEGE);
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_PRIVILEGE, uid);
+ __check_privilege_deinitialize();
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_PERMISSION_DENIED;
- } else if (-1 == g_privilege_allowed) {
- if (false == __check_privilege_initialize()) {
- SLOG(LOG_ERROR, TAG_VCM, "[ERROR] privilege initialize is failed");
- return VC_ERROR_PERMISSION_DENIED;
- }
- snprintf(uid, 16, "%d", getuid());
- /* check 'recorder' privilege */
- if (false == __check_privilege(uid, VC_PRIVILEGE)) {
- SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_PRIVILEGE, uid);
- g_privilege_allowed = 0;
- __check_privilege_deinitialize();
- return VC_ERROR_PERMISSION_DENIED;
- }
- /* check 'voicecontrol.manager' privilege */
- if (false == __check_privilege(uid, VC_MGR_PRIVILEGE)) {
- SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_MGR_PRIVILEGE, uid);
- g_privilege_allowed = 0;
- __check_privilege_deinitialize();
- return VC_ERROR_PERMISSION_DENIED;
- }
+ }
+
+ ret = true;
+ ret = __check_privilege(uid, VC_MGR_PRIVILEGE);
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_MGR_PRIVILEGE, uid);
__check_privilege_deinitialize();
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
}
- g_privilege_allowed = 1;
+ __check_privilege_deinitialize();
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_NONE;
}
static int g_feature_enabled = -1;
-static int g_privilege_allowed = 1; /* Always True */
+static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
static cynara *p_cynara = NULL;
static GList *g_cmd_list = NULL;
static GList *g_cmdlist_list = NULL;
static int __vc_cmd_check_privilege()
{
- char uid[16];
+ pthread_mutex_lock(&g_cynara_mutex);
- if (0 == g_privilege_allowed) {
- SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
+ bool ret = true;
+ ret = __check_privilege_initialize();
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] privilege initialize is failed");
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_PERMISSION_DENIED;
- } else if (-1 == g_privilege_allowed) {
- if (false == __check_privilege_initialize()) {
- SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] privilege initialize is failed");
- return VC_ERROR_PERMISSION_DENIED;
- }
- snprintf(uid, 16, "%d", getuid());
- if (false == __check_privilege(uid, VC_PRIVILEGE)) {
- SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
- g_privilege_allowed = 0;
- __check_privilege_deinitialize();
- return VC_ERROR_PERMISSION_DENIED;
- }
- __check_privilege_deinitialize();
}
- g_privilege_allowed = 1;
+ char uid[16];
+ snprintf(uid, 16, "%d", getuid());
+ ret = true;
+ ret = __check_privilege(uid, VC_PRIVILEGE);
+ __check_privilege_deinitialize();
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Permission is denied");
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
+ }
+ pthread_mutex_unlock(&g_cynara_mutex);
return VC_ERROR_NONE;
}
#include "vce.h"
static int g_feature_enabled = -1;
-static int g_privilege_allowed = -1;
+static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
static cynara *p_cynara = NULL;
static int __vce_get_feature_enabled()
static int __vce_check_privilege()
{
- char uid[16];
+ pthread_mutex_lock(&g_cynara_mutex);
+
+ bool ret = true;
+ ret = __check_privilege_initialize();
+ if (false == ret) {
+ SLOG(LOG_ERROR, TAG_VCD, "[ERROR] privilege initialize is failed");
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VCE_ERROR_PERMISSION_DENIED;
+ }
- if (0 == g_privilege_allowed) {
+ char uid[16];
+ snprintf(uid, 16, "%d", getuid());
+ ret = true;
+ ret = __check_privilege(uid, VC_PRIVILEGE);
+ __check_privilege_deinitialize();
+ if (false == ret) {
SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Permission is denied");
+ pthread_mutex_unlock(&g_cynara_mutex);
return VCE_ERROR_PERMISSION_DENIED;
- } else if (-1 == g_privilege_allowed) {
- if (false == __check_privilege_initialize()) {
- SLOG(LOG_ERROR, TAG_VCD, "[ERROR] privilege initialize is failed");
- return VCE_ERROR_PERMISSION_DENIED;
- }
- snprintf(uid, 16, "%d", getuid());
- if (false == __check_privilege(uid, VC_PRIVILEGE)) {
- SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Permission is denied");
- g_privilege_allowed = 0;
- __check_privilege_deinitialize();
- return VCE_ERROR_PERMISSION_DENIED;
- }
- __check_privilege_deinitialize();
}
- g_privilege_allowed = 1;
+ pthread_mutex_unlock(&g_cynara_mutex);
return VCE_ERROR_NONE;
}