diff options
author | Jay Sorg <jay.sorg@gmail.com> | 2013-10-01 22:42:12 -0700 |
---|---|---|
committer | Jay Sorg <jay.sorg@gmail.com> | 2013-10-01 22:42:12 -0700 |
commit | b598e258a43dc3ca6f3dcc37ceb6a2a6c18227d1 (patch) | |
tree | 8860215afea0ca3c35e03fb9b86d33a1e3b83187 | |
parent | cd93db2c98425645c9c79fece04617c4d82184c3 (diff) | |
download | xrdp-proprietary-b598e258a43dc3ca6f3dcc37ceb6a2a6c18227d1.tar.gz xrdp-proprietary-b598e258a43dc3ca6f3dcc37ceb6a2a6c18227d1.zip |
add pid logging
-rw-r--r-- | common/os_calls.c | 32 | ||||
-rw-r--r-- | common/os_calls.h | 1 | ||||
-rw-r--r-- | xup/xup.c | 30 |
3 files changed, 63 insertions, 0 deletions
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 @@ -504,6 +504,38 @@ g_tcp_local_socket(void) } /*****************************************************************************/ +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); @@ -137,6 +137,28 @@ lib_mod_start(struct mod *mod, int w, int h, int bpp) } /******************************************************************************/ +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 lib_mod_connect(struct mod *mod) @@ -254,6 +276,14 @@ lib_mod_connect(struct mod *mod) if (error == 0) { + if (use_uds) + { + lib_mod_log_peer(mod); + } + } + + if (error == 0) + { /* send version message */ init_stream(s, 8192); s_push_layer(s, iso_hdr, 4); |