Blob Blame History Raw
From 46ffb9818eb51ce769b4747592bd60316e4ac2bd Mon Sep 17 00:00:00 2001
From: Koichiro IWAO <meta@vmeta.jp>
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