diff options
-rw-r--r-- | src/ck-sysdeps-unix.c | 26 | ||||
-rw-r--r-- | tools/ck-get-x11-display-device.c | 13 | ||||
-rw-r--r-- | tools/ck-get-x11-server-pid.c | 4 |
3 files changed, 29 insertions, 14 deletions
diff --git a/src/ck-sysdeps-unix.c b/src/ck-sysdeps-unix.c index 6520105..aadca48 100644 --- a/src/ck-sysdeps-unix.c +++ b/src/ck-sysdeps-unix.c @@ -27,12 +27,16 @@ #include <string.h> #include <sys/types.h> #include <sys/stat.h> +#include <sys/socket.h> +#include <errno.h> + #ifdef HAVE_GETPEERUCRED #include <ucred.h> #endif #include "ck-sysdeps.h" +/* Adapted from dbus-sysdeps-unix.c:_dbus_read_credentials_socket() */ gboolean ck_get_socket_peer_credentials (int socket_fd, pid_t *pid, @@ -43,17 +47,17 @@ ck_get_socket_peer_credentials (int socket_fd, uid_t uid_read; pid_t pid_read; - uid_read = 0; - pid_read = 0; + pid_read = -1; + uid_read = -1; ret = FALSE; #ifdef SO_PEERCRED struct ucred cr; - socklen_t cr_len; + socklen_t cr_len; cr_len = sizeof (cr); - if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) == 0 && cr_len == sizeof (cr)) { + if (getsockopt (socket_fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) == 0 && cr_len == sizeof (cr)) { pid_read = cr.pid; uid_read = cr.uid; ret = TRUE; @@ -64,8 +68,10 @@ ck_get_socket_peer_credentials (int socket_fd, g_strerror (errno)); } #elif defined(HAVE_GETPEERUCRED) - ucred_t * ucred = NULL; - if (getpeerucred (client_fd, &ucred) == 0) { + ucred_t *ucred; + + ucred = NULL; + if (getpeerucred (socket_fd, &ucred) == 0) { pid_read = ucred_getpid (ucred); uid_read = ucred_geteuid (ucred); ret = TRUE; @@ -80,5 +86,13 @@ ck_get_socket_peer_credentials (int socket_fd, g_warning ("Socket credentials not supported on this OS\n"); #endif + if (pid != NULL) { + *pid = pid_read; + } + + if (uid != NULL) { + *uid = uid_read; + } + return ret; } diff --git a/tools/ck-get-x11-display-device.c b/tools/ck-get-x11-display-device.c index 723d239..b349cc7 100644 --- a/tools/ck-get-x11-display-device.c +++ b/tools/ck-get-x11-display-device.c @@ -25,9 +25,6 @@ #include <stdlib.h> #include <stdio.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/socket.h> #include <X11/Xlib.h> #include <glib.h> @@ -116,10 +113,12 @@ main (int argc, ret = 0; 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); - g_free (device); + if (pid > 0) { + device = get_tty_for_pid (pid); + if (device != NULL) { + printf ("%s\n", device); + g_free (device); + } } } } diff --git a/tools/ck-get-x11-server-pid.c b/tools/ck-get-x11-server-pid.c index eedb9af..3324164 100644 --- a/tools/ck-get-x11-server-pid.c +++ b/tools/ck-get-x11-server-pid.c @@ -77,7 +77,9 @@ main (int argc, ret = 0; res = ck_get_socket_peer_credentials (fd, &pid, NULL, NULL); if (res) { - printf ("%u\n", pid); + if (pid > 0) { + printf ("%d\n", pid); + } } } |