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 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/ck-sysdeps-unix.c') 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; } -- cgit