diff options
| author | William Jon McCann <mccann@jhu.edu> | 2007-08-17 10:52:19 -0400 | 
|---|---|---|
| committer | William Jon McCann <mccann@jhu.edu> | 2007-08-17 10:52:19 -0400 | 
| commit | c0c74f8064392598cd29401142804fcc241841ed (patch) | |
| tree | 3864ce14bba2c6e6ecb0beb2eac7f0e46d5d92f2 | |
| parent | 577099aea3ed75c1298d7a4cfa32784a1800bb09 (diff) | |
a few fixes for peer cred stuff
| -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); +                        }                  }          }  | 
