From b598e258a43dc3ca6f3dcc37ceb6a2a6c18227d1 Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Tue, 1 Oct 2013 22:42:12 -0700 Subject: [PATCH] add pid logging --- common/os_calls.c | 32 ++++++++++++++++++++++++++++++++ common/os_calls.h | 1 + xup/xup.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/common/os_calls.c b/common/os_calls.c index c5a15bb0..a26a180f 100644 --- a/common/os_calls.c +++ b/common/os_calls.c @@ -503,6 +503,38 @@ g_tcp_local_socket(void) #endif } +/*****************************************************************************/ +int APP_CC +g_sck_get_peer_cred(int sck, int *pid, int *uid, int *gid) +{ + int ucred_length; + struct myucred + { + pid_t pid; + uid_t uid; + gid_t gid; + } credentials; + + ucred_length = sizeof(credentials); + if (getsockopt(sck, SOL_SOCKET, SO_PEERCRED, &credentials, &ucred_length)) + { + return 1; + } + if (pid != 0) + { + *pid = credentials.pid; + } + if (uid != 0) + { + *uid = credentials.uid; + } + if (gid != 0) + { + *gid = credentials.gid; + } + return 0; +} + /*****************************************************************************/ void APP_CC g_tcp_close(int sck) diff --git a/common/os_calls.h b/common/os_calls.h index 443a1840..b68dd4bf 100644 --- a/common/os_calls.h +++ b/common/os_calls.h @@ -46,6 +46,7 @@ int APP_CC g_tcp_set_no_delay(int sck); int APP_CC g_tcp_set_keepalive(int sck); int APP_CC g_tcp_socket(void); int APP_CC g_tcp_local_socket(void); +int APP_CC g_sck_get_peer_cred(int sck, int *pid, int *uid, int *gid); void APP_CC g_tcp_close(int sck); int APP_CC g_tcp_connect(int sck, const char* address, const char* port); int APP_CC g_tcp_local_connect(int sck, const char* port); diff --git a/xup/xup.c b/xup/xup.c index 7c68cbcf..e2e32de7 100644 --- a/xup/xup.c +++ b/xup/xup.c @@ -136,6 +136,28 @@ lib_mod_start(struct mod *mod, int w, int h, int bpp) return 0; } +/******************************************************************************/ +static int APP_CC +lib_mod_log_peer(struct mod *mod) +{ + int my_pid; + int pid; + int uid; + int gid; + + my_pid = g_get_pid(); + if (g_sck_get_peer_cred(mod->sck, &pid, &uid, &gid) == 0) + { + g_writeln("lib_mod_connect: xrdp pid %d", my_pid); + g_writeln(" X11rdp pid %d, uid %d gid %d", pid, uid, gid); + } + else + { + g_writeln("lib_mod_connect: g_sck_get_peer_cred failed"); + } + return 0; +} + /******************************************************************************/ /* return error */ int DEFAULT_CC @@ -252,6 +274,14 @@ lib_mod_connect(struct mod *mod) g_sleep(250); } + if (error == 0) + { + if (use_uds) + { + lib_mod_log_peer(mod); + } + } + if (error == 0) { /* send version message */