From 577099aea3ed75c1298d7a4cfa32784a1800bb09 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Thu, 16 Aug 2007 23:09:44 -0400 Subject: move peercred stuff into sysdeps. add solaris support. --- tools/ck-get-x11-display-device.c | 34 +++++----------------------------- tools/ck-get-x11-server-pid.c | 31 ++++++++----------------------- 2 files changed, 13 insertions(+), 52 deletions(-) (limited to 'tools') diff --git a/tools/ck-get-x11-display-device.c b/tools/ck-get-x11-display-device.c index 92a7936..723d239 100644 --- a/tools/ck-get-x11-display-device.c +++ b/tools/ck-get-x11-display-device.c @@ -58,31 +58,6 @@ get_tty_for_pid (int pid) return device; } -static int -get_peer_pid (int fd) -{ - int pid = -1; -#ifdef SO_PEERCRED - struct ucred cr; - socklen_t cr_len; - - cr_len = sizeof (cr); - - if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) == 0 && cr_len == sizeof (cr)) { - /* paranoia check for peer running as root */ - if (cr.uid == 0) { - pid = cr.pid; - } - } else { - g_warning ("Failed to getsockopt() credentials, returned len %d/%d: %s\n", - cr_len, - (int) sizeof (cr), - g_strerror (errno)); - } -#endif - return pid; -} - static Display * display_init (const char *display_name) { @@ -134,12 +109,13 @@ main (int argc, fd = ConnectionNumber (xdisplay); if (fd > 0) { - int pid; - char *device; + int pid; + char *device; + gboolean res; ret = 0; - pid = get_peer_pid (fd); - if (pid != -1) { + res = ck_get_socket_peer_credentials (fd, &pid, NULL, NULL); + if (res) { device = get_tty_for_pid (pid); if (device != NULL) { printf ("%s\n", device); diff --git a/tools/ck-get-x11-server-pid.c b/tools/ck-get-x11-server-pid.c index cd48cd1..eedb9af 100644 --- a/tools/ck-get-x11-server-pid.c +++ b/tools/ck-get-x11-server-pid.c @@ -32,28 +32,7 @@ #include #include -static void -print_peer_pid (int fd) -{ -#ifdef SO_PEERCRED - struct ucred cr; - socklen_t cr_len; - - cr_len = sizeof (cr); - - if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) == 0 && cr_len == sizeof (cr)) { - /* paranoia check for peer running as root */ - if (cr.uid == 0) { - printf ("%u\n", cr.pid); - } - } else { - g_warning ("Failed to getsockopt() credentials, returned len %d/%d: %s\n", - cr_len, - (int) sizeof (cr), - g_strerror (errno)); - } -#endif -} +#include "ck-sysdeps.h" static Display * display_init (int *argc, char ***argv) @@ -92,8 +71,14 @@ main (int argc, fd = ConnectionNumber (xdisplay); if (fd > 0) { + int pid; + gboolean res; + ret = 0; - print_peer_pid (fd); + res = ck_get_socket_peer_credentials (fd, &pid, NULL, NULL); + if (res) { + printf ("%u\n", pid); + } } return ret; -- cgit