Fix cynara checking logic 11/224311/1 accepted/tizen/unified/20200211.132125 submit/tizen/20200210.071743
authorwn.jang <wn.jang@samsung.com>
Sat, 8 Feb 2020 12:54:39 +0000 (21:54 +0900)
committerwn.jang <wn.jang@samsung.com>
Sat, 8 Feb 2020 12:54:39 +0000 (21:54 +0900)
Change-Id: Ie02989902a5f5f0ae74c6d14886191d6198df3a6

client/vc_mgr.c
common/vc_command.c

index 22a145a..7a18e56 100644 (file)
@@ -64,6 +64,8 @@ static int g_daemon_pid = 0;
 
 static int g_feature_enabled = -1;
 
+static bool g_privilege_allowed = false;
+
 static cynara *p_cynara = NULL;
 static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
 
@@ -210,35 +212,42 @@ static int __vc_mgr_check_privilege()
 {
        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 (false == g_privilege_allowed) {
+               bool ret = true;
+               ret = __check_privilege_initialize();
+               if (false == ret) {
+                       SLOG(LOG_ERROR, TAG_VCM, "[ERROR] privilege initialize is failed");
+                       g_privilege_allowed = false;
+                       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);
-       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;
-       }
+               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();
+                       g_privilege_allowed = false;
+                       pthread_mutex_unlock(&g_cynara_mutex);
+                       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();
+                       g_privilege_allowed = false;
+                       pthread_mutex_unlock(&g_cynara_mutex);
+                       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;
        }
 
-       __check_privilege_deinitialize();
+       g_privilege_allowed = true;
        pthread_mutex_unlock(&g_cynara_mutex);
        return VC_ERROR_NONE;
 }
index ebd9b8a..6319427 100644 (file)
@@ -34,6 +34,7 @@
 #include "voice_control_key_defines.h"
 
 static int g_feature_enabled = -1;
+static bool g_privilege_allowed = false; 
 
 static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
 static cynara *p_cynara = NULL;
@@ -132,25 +133,30 @@ static int __vc_cmd_check_privilege()
 {
        pthread_mutex_lock(&g_cynara_mutex);
 
-       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;
-       }
+       if (false == g_privilege_allowed) {
+               bool ret = true;
+               ret = __check_privilege_initialize();
+               if (false == ret) {
+                       SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] privilege initialize is failed");
+                       g_privilege_allowed = false;
+                       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_VCCMD, "[ERROR] Permission is denied");
-               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_VCCMD, "[ERROR] Permission is denied");
+                       g_privilege_allowed = false;
+                       pthread_mutex_unlock(&g_cynara_mutex);
+                       return VC_ERROR_PERMISSION_DENIED;
+               }
        }
 
+       g_privilege_allowed = true;
        pthread_mutex_unlock(&g_cynara_mutex);
        return VC_ERROR_NONE;
 }