Fixed cynara code. 96/220096/1
authorsungrae jo <seongrae.jo@samsung.com>
Fri, 13 Dec 2019 05:19:26 +0000 (14:19 +0900)
committersungrae jo <seongrae.jo@samsung.com>
Fri, 13 Dec 2019 05:19:26 +0000 (14:19 +0900)
Change-Id: I003147805de8550c63f68df7100a147bf3ea7311
Signed-off-by: sungrae jo <seongrae.jo@samsung.com>
client/vc.c
client/vc_mgr.c
common/vc_command.c
server/vce.c

index ebd15ba..467120a 100644 (file)
@@ -56,7 +56,7 @@ static int g_daemon_pid = 0;
 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);
@@ -142,29 +142,28 @@ static void __check_privilege_deinitialize()
 
 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;
 }
 
index e6111d8..b5f1b3c 100644 (file)
@@ -63,7 +63,6 @@ static int g_daemon_pid = 0;
 
 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;
 
@@ -154,31 +153,24 @@ static int __vc_mgr_get_feature_enabled()
 
 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;
        }
 
@@ -198,56 +190,55 @@ static int __check_privilege(const char* uid, const char * privilege)
                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;
 }
 
index d1ca79b..93ff07d 100644 (file)
@@ -35,7 +35,7 @@
 
 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;
@@ -130,28 +130,28 @@ static void __check_privilege_deinitialize()
 
 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;
 }
 
index 023d72e..7825c9a 100644 (file)
@@ -26,7 +26,7 @@
 #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()
@@ -107,27 +107,28 @@ static void __check_privilege_deinitialize()
 
 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;
 }