#define D kconfig->conf_hwkeys_edd
E_CONFIG_VAL(D, T, name, STR);
E_CONFIG_VAL(D, T, keycode, INT);
+ E_CONFIG_VAL(D, T, no_privcheck, INT);
kconfig->conf_edd = E_CONFIG_DD_NEW("Keyrouter_Config", E_Keyrouter_Conf_Edd);
#undef T
#ifdef ENABLE_CYNARA
static void _e_keyrouter_util_cynara_log(const char *func_name, int err);
-static Eina_Bool _e_keyrouter_util_do_privilege_check(struct wl_client *client, int socket_fd, uint32_t mode);
+static Eina_Bool _e_keyrouter_util_do_privilege_check(struct wl_client *client, int socket_fd, uint32_t mode, uint32_t keycode);
#define E_KEYROUTER_CYNARA_ERROR_CHECK_GOTO(func_name, ret, label) \
do \
#ifdef ENABLE_CYNARA
if (EINA_FALSE == _e_keyrouter_util_do_privilege_check(client,
- wl_client_get_fd(client), mode))
+ wl_client_get_fd(client), mode, key))
{
return TIZEN_KEYROUTER_ERROR_NO_PERMISSION;
}
#ifdef ENABLE_CYNARA
if (EINA_FALSE == _e_keyrouter_util_do_privilege_check(client,
- wl_client_get_fd(client), TIZEN_KEYROUTER_MODE_NONE))
+ wl_client_get_fd(client), TIZEN_KEYROUTER_MODE_NONE, key))
{
return TIZEN_KEYROUTER_ERROR_NONE;
}
krt->HardKeys[data->keycode].keycode = data->keycode;
krt->HardKeys[data->keycode].keyname = eina_stringshare_add(data->name);
+ krt->HardKeys[data->keycode].no_privcheck = data->no_privcheck ? EINA_TRUE : EINA_FALSE;
}
TRACE_END();
}
static Eina_Bool
-_e_keyrouter_util_do_privilege_check(struct wl_client *client, int socket_fd, uint32_t mode)
+_e_keyrouter_util_do_privilege_check(struct wl_client *client, int socket_fd, uint32_t mode, uint32_t keycode)
{
int ret, pid, retry_cnt=0;
char *clientSmack=NULL, *uid=NULL, *client_session=NULL;
if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
return EINA_TRUE;
+ if (krt->HardKeys[keycode].no_privcheck == EINA_TRUE)
+ return EINA_TRUE;
+
/* If initialize cynara is failed, allow keygrabs regardless of the previlege permition. */
if (krt->p_cynara == NULL)
{