shell: Skip clients that we forked ourselves in kill binding
authorTiago Vignatti <tiago.vignatti@intel.com>
Thu, 27 Sep 2012 14:48:35 +0000 (17:48 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 4 Oct 2012 15:03:49 +0000 (11:03 -0400)
When we fork a client and give one end of a socketpair, the credentials
on the socket fd comes back as ourselves.  When that happens, do not kill
the process.

Also remove superfluous variables.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
src/shell.c

index e043004..7827977 100644 (file)
@@ -3506,15 +3506,18 @@ force_kill_binding(struct wl_seat *seat, uint32_t time, uint32_t key,
        struct wl_surface *focus_surface;
        struct wl_client *client;
        pid_t pid;
-       uid_t uid;
-       gid_t gid;
 
        focus_surface = seat->keyboard->focus;
        if (!focus_surface)
                return;
 
        client = focus_surface->resource.client;
-       wl_client_get_credentials(client, &pid, &uid, &gid);
+       wl_client_get_credentials(client, &pid, NULL, NULL);
+
+       /* Skip clients that we launched ourselves (the credentials of
+        * the socketpair is ours) */
+       if (pid == getpid())
+               return;
 
        kill(pid, SIGKILL);
 }