e_keyrouter_keygrab: make _e_keyrouter_keygrab_no_privcheck 43/321743/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 27 Mar 2025 06:19:12 +0000 (15:19 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 27 Mar 2025 10:03:35 +0000 (19:03 +0900)
check no privilege of the key is done at e_keyrouter_keygrab.c file

Change-Id: I9e84f3b7c618bdb6204e09de8ef617d83c32d18d

src/bin/inputmgr/e_keyrouter_keygrab.c
src/bin/server/e_keyrouter_wl.c
src/bin/server/e_keyrouter_wl_intern.h

index 1c7a4a6781ee108e6fd3a28ab862e8956744130e..7476b05689e816389787c6eddc266ddfc6fec56f 100644 (file)
@@ -16,6 +16,23 @@ static uint32_t _modes[] = {TIZEN_KEYROUTER_MODE_NONE,
 
 static int _e_keyrouter_find_duplicated_grabbed_key(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode);
 
+static Eina_Bool
+_e_keyrouter_keygrab_no_privcheck(uint32_t keycode, uint32_t mode)
+{
+   Eina_Bool no_privcheck;
+
+   /* Top position grab is always allowed. This mode do not need privilege.*/
+   if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
+     return EINA_TRUE;
+
+   no_privcheck = e_keyrouter_hardkeys_no_privcheck_get(krt->HardKeys, keycode);
+   if (no_privcheck == EINA_TRUE &&
+       mode == TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE)
+     return EINA_TRUE;
+
+  return EINA_FALSE;
+}
+
 /* Function for checking whether the key has been grabbed already by the same wl_surface or not */
 static int
 _e_keyrouter_find_duplicated_grabbed_key(struct wl_resource *surface, struct wl_client *wc, uint32_t key, uint32_t mode)
@@ -200,10 +217,13 @@ e_keyrouter_keygrab_set(struct wl_client *client, struct wl_resource *surface, i
    int res;
 
 #ifdef HAVE_CYNARA
-   if (EINA_FALSE == e_keyrouter_wl_util_do_privilege_check(client, mode, key))
+   if (!_e_keyrouter_keygrab_no_privcheck(key, mode))
      {
-        INF("No permission for %d grab mode ! (key=%d)", mode, key);
-        return TIZEN_KEYROUTER_ERROR_NO_PERMISSION;
+        if (!e_keyrouter_wl_keygrab_privilege_check(client))
+          {
+              INF("No permission for %d grab mode ! (key=%d)", mode, key);
+              return TIZEN_KEYROUTER_ERROR_NO_PERMISSION;
+          }
      }
 #endif
 
@@ -331,8 +351,11 @@ e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface,
    g_rec_mutex_unlock(&krt->grab_key_mutex);
 
 #ifdef HAVE_CYNARA
-   if (!e_keyrouter_wl_util_do_privilege_check(client, TIZEN_KEYROUTER_MODE_NONE, key))
-     goto finish;
+   if (!_e_keyrouter_keygrab_no_privcheck(key, TIZEN_KEYROUTER_MODE_NONE))
+     {
+        if (!e_keyrouter_wl_keygrab_privilege_check(client))
+          goto finish;
+     }
 #endif
 
    g_rec_mutex_lock(&krt->grab_key_mutex);
index 4acf520d5f582f17c62b6bb53c44277290638f18..24447420147b395eabd4a03cb7f585d2ca89266c 100644 (file)
@@ -596,25 +596,16 @@ e_keyrouter_wl_add_surface_destroy_listener(struct wl_resource *surface)
 }
 
 #ifdef HAVE_CYNARA
-EINTERN EINTERN Eina_Bool
-e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode, uint32_t keycode)
+EINTERN Eina_Bool
+e_keyrouter_wl_keygrab_privilege_check(struct wl_client *client)
 {
-   Eina_Bool res = EINA_FALSE, no_privcheck;
+   Eina_Bool res = EINA_FALSE;
    Eina_List *l;
    struct wl_client *wc_data;
    pid_t pid = 0;
    uid_t uid = 0;
    gid_t gid = 0;
 
-   /* Top position grab is always allowed. This mode do not need privilege.*/
-   if (mode == TIZEN_KEYROUTER_MODE_TOPMOST)
-     return EINA_TRUE;
-
-   no_privcheck = e_keyrouter_hardkeys_no_privcheck_get(krt->HardKeys, keycode);
-   if (no_privcheck == EINA_TRUE &&
-       mode == TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE)
-     return EINA_TRUE;
-
    if (!client) return EINA_FALSE;
 
    EINA_LIST_FOREACH(g_tizen_keyrouter->grab_client_list, l, wc_data)
index da37872fe1104415cb8c14beda42809e928e7afe..87bc49a061a686d73238ad3b540a7ee72a5e1113 100644 (file)
@@ -17,6 +17,6 @@ EINTERN Eina_Bool e_keyrouter_wl_key_send(Ecore_Event_Key *ev, E_Device *dev, Ei
 EINTERN void      e_keyrouter_wl_keycancel_send(struct wl_client *client, unsigned int key);
 EINTERN void      e_keyrouter_wl_event_surface_send(struct wl_resource *surface, int key, int mode);
 
-EINTERN Eina_Bool e_keyrouter_wl_util_do_privilege_check(struct wl_client *client, uint32_t mode, uint32_t keycode);
+EINTERN Eina_Bool e_keyrouter_wl_keygrab_privilege_check(struct wl_client *client);
 
 #endif