From 46ffb9818eb51ce769b4747592bd60316e4ac2bd Mon Sep 17 00:00:00 2001 From: Koichiro IWAO Date: Wed, 12 Jul 2017 17:48:00 +0900 Subject: [PATCH] sesman: delete socket files when session exits --- sesman/session.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sesman/session.h | 7 +++++++ 2 files changed, 70 insertions(+) diff --git a/sesman/session.c b/sesman/session.c index f2dc087d7..ae3194da0 100644 --- a/sesman/session.c +++ b/sesman/session.c @@ -796,6 +796,7 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c, auth_end(data); g_sigterm(display_pid); g_sigterm(chansrv_pid); + cleanup_sockets(display); g_deinit(); g_exit(0); } @@ -1116,3 +1117,65 @@ session_get_byuser(const char *user, int *cnt, unsigned char flags) (*cnt) = count; return sess; } + +/******************************************************************************/ +int +cleanup_sockets(int display) +{ + log_message(LOG_LEVEL_DEBUG, "cleanup_sockets:"); + char file[256]; + int error; + + error = 0; + + g_snprintf(file, 255, CHANSRV_PORT_OUT_STR, display); + if (g_file_exist(file)) + { + log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + log_message(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + + g_snprintf(file, 255, CHANSRV_PORT_IN_STR, display); + if (g_file_exist(file)) + { + log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + log_message(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + + g_snprintf(file, 255, XRDP_CHANSRV_STR, display); + if (g_file_exist(file)) + { + log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + log_message(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + + g_snprintf(file, 255, CHANSRV_API_STR, display); + if (g_file_exist(file)) + { + log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + log_message(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + + return error; + +} diff --git a/sesman/session.h b/sesman/session.h index a9884a211..10cd4d572 100644 --- a/sesman/session.h +++ b/sesman/session.h @@ -150,4 +150,11 @@ session_get_bypid(int pid); struct SCP_DISCONNECTED_SESSION* session_get_byuser(const char *user, int *cnt, unsigned char flags); +/** + * + * @brief delete socket files + * @param display number + * @return non-zero value (number of errors) if failed + */ +int cleanup_sockets(int display); #endif