From c0c74f8064392598cd29401142804fcc241841ed Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Fri, 17 Aug 2007 10:52:19 -0400 Subject: a few fixes for peer cred stuff --- src/ck-sysdeps-unix.c | 26 ++++++++++++++++++++------ tools/ck-get-x11-display-device.c | 13 ++++++------- 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 #include #include +#include +#include + #ifdef HAVE_GETPEERUCRED #include #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 #include -#include -#include -#include #include #include @@ -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); + } } } -- cgit