*/
#include <aul.h>
+#include <cynara-client.h>
+#include <cynara-error.h>
+#include <cynara-session.h>
#include <dirent.h>
#include <Ecore.h>
#include <fcntl.h>
static int g_feature_enabled = -1;
+static int g_privilege_allowed = -1;
+static cynara *p_cynara = NULL;
+
static bool g_err_callback_status = false;
const char* stt_tag()
return 0;
}
+static int __check_privilege_initialize()
+{
+ int ret = cynara_initialize(&p_cynara, NULL);
+ if (CYNARA_API_SUCCESS != ret)
+ SLOG(LOG_ERROR, TAG_STTC, "[ERROR] fail to initialize");
+
+ return ret == CYNARA_API_SUCCESS;
+}
+
+static int __check_privilege(const char* uid, const char * privilege)
+{
+ FILE *fp = NULL;
+ char smack_label[1024] = "/proc/self/attr/current";
+
+ if (!p_cynara) {
+ return false;
+ }
+
+ fp = fopen(smack_label, "r");
+ if (fp != NULL) {
+ if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0)
+ SLOG(LOG_ERROR, TAG_STTC, "[ERROR] fail to fread");
+
+ fclose(fp);
+ }
+
+ pid_t pid = getpid();
+ char *session = cynara_session_from_pid(pid);
+ int ret = cynara_check(p_cynara, smack_label, session, uid, privilege);
+ SLOG(LOG_DEBUG, TAG_STTC, "[Client]cynara_check returned %d(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied");
+ if (session)
+ free(session);
+
+ if (ret != CYNARA_API_ACCESS_ALLOWED)
+ return false;
+ return true;
+}
+
+static void __check_privilege_deinitialize()
+{
+ if (p_cynara)
+ cynara_finish(p_cynara);
+ p_cynara = NULL;
+}
+
+static int __stt_check_privilege()
+{
+ char uid[16];
+
+ if (0 == g_privilege_allowed) {
+ SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Permission is denied");
+ return STT_ERROR_PERMISSION_DENIED;
+ } else if (-1 == g_privilege_allowed) {
+ if (false == __check_privilege_initialize()){
+ SLOG(LOG_ERROR, TAG_STTC, "[ERROR] privilege initialize is failed");
+ return STT_ERROR_PERMISSION_DENIED;
+ }
+ snprintf(uid, 16, "%d", getuid());
+ if (false == __check_privilege(uid, STT_PRIVILEGE)) {
+ SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Permission is denied");
+ g_privilege_allowed = 0;
+ __check_privilege_deinitialize();
+ return STT_ERROR_PERMISSION_DENIED;
+ }
+ __check_privilege_deinitialize();
+ }
+
+ g_privilege_allowed = 1;
+ return STT_ERROR_NONE;
+}
+
static const char* __stt_get_error_code(stt_error_e err)
{
switch (err) {
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Create STT");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Destroy STT");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach Supported engine");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Set current engine");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Set credential");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Prepare STT");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Unprepare STT");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach Supported Language");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== Get Default Language");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == state) {
SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == err_msg) {
SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == type || NULL == support) {
SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt) {
SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT SET START SOUND");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT UNSET START SOUND");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT SET STOP SOUND");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT UNSET STOP SOUND");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT START");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT STOP");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT CANCEL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == volume) {
SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
SLOG(LOG_DEBUG, TAG_STTC, "===== STT FOREACH DETAILED RESULT");
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (stt == NULL || callback == NULL)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == callback)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == callback)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == callback)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt || NULL == callback)
return STT_ERROR_INVALID_PARAMETER;
if (0 != __stt_get_feature_enabled()) {
return STT_ERROR_NOT_SUPPORTED;
}
+ if (0 != __stt_check_privilege()) {
+ return STT_ERROR_PERMISSION_DENIED;
+ }
if (NULL == stt)
return STT_ERROR_INVALID_PARAMETER;