From f38527d857a2ae505ea6988d9a94642b0188d358 Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Tue, 18 Feb 2020 13:37:05 +0900 Subject: [PATCH] Added no-repeat code for privilege Change-Id: Id53d6203e1c3b25d94b35c19061b25a689675a90 Signed-off-by: sungrae jo --- client/vc.c | 39 +++++++++++++++++++++++---------------- client/vc_mgr.c | 3 +++ common/vc_command.c | 5 ++++- server/vce.c | 40 ++++++++++++++++++++++++---------------- 4 files changed, 54 insertions(+), 33 deletions(-) diff --git a/client/vc.c b/client/vc.c index 7ee1667..cd57765 100644 --- a/client/vc.c +++ b/client/vc.c @@ -54,6 +54,7 @@ static vc_h g_vc = NULL; static int g_daemon_pid = 0; static int g_feature_enabled = -1; +static bool g_privilege_allowed = false; static bool g_backup = false; static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -146,27 +147,33 @@ static void __check_privilege_deinitialize() static int __vc_check_privilege() { + if (true == g_privilege_allowed) + return VC_ERROR_NONE; + pthread_mutex_lock(&g_cynara_mutex); - 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; - } + if (false == g_privilege_allowed) { + 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; + 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; + } } + g_privilege_allowed = true; pthread_mutex_unlock(&g_cynara_mutex); return VC_ERROR_NONE; } diff --git a/client/vc_mgr.c b/client/vc_mgr.c index b20079e..eb6c3b8 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -211,6 +211,9 @@ static void __check_privilege_deinitialize() static int __vc_mgr_check_privilege() { + if (true == g_privilege_allowed) + return VC_ERROR_NONE; + pthread_mutex_lock(&g_cynara_mutex); if (false == g_privilege_allowed) { diff --git a/common/vc_command.c b/common/vc_command.c index 2446284..0d22bc5 100644 --- a/common/vc_command.c +++ b/common/vc_command.c @@ -34,7 +34,7 @@ #include "voice_control_key_defines.h" static int g_feature_enabled = -1; -static bool g_privilege_allowed = false; +static bool g_privilege_allowed = false; static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER; static cynara *p_cynara = NULL; @@ -135,6 +135,9 @@ static void __check_privilege_deinitialize() static int __vc_cmd_check_privilege() { + if (true == g_privilege_allowed) + return VC_ERROR_NONE; + pthread_mutex_lock(&g_cynara_mutex); if (false == g_privilege_allowed) { diff --git a/server/vce.c b/server/vce.c index e9302f3..970f521 100644 --- a/server/vce.c +++ b/server/vce.c @@ -26,6 +26,8 @@ #include "vce.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; @@ -111,27 +113,33 @@ static void __check_privilege_deinitialize() static int __vce_check_privilege() { + if (true == g_privilege_allowed) + return VC_ERROR_NONE; + 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 (false == g_privilege_allowed) { + 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; + } - 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; + 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; + } } + g_privilege_allowed = true; pthread_mutex_unlock(&g_cynara_mutex); return VCE_ERROR_NONE; } -- 2.7.4