summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-08-16 23:09:44 -0400
committerWilliam Jon McCann <mccann@jhu.edu>2007-08-16 23:09:44 -0400
commit577099aea3ed75c1298d7a4cfa32784a1800bb09 (patch)
tree527dc4dd144379290c4cd54807b4855d57710e10 /tools
parentfcb0f32632f74950c361a0a23128ebca05efdca0 (diff)
move peercred stuff into sysdeps. add solaris support.
Diffstat (limited to 'tools')
-rw-r--r--tools/ck-get-x11-display-device.c34
-rw-r--r--tools/ck-get-x11-server-pid.c31
2 files changed, 13 insertions, 52 deletions
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 <X11/Xlib.h>
#include <glib.h>
-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;