]> prime8.dev >> repos - ttyd.git/commitdiff
protocol: set pty fd close-on-exec
authorShuanglei Tao <tsl0922@gmail.com>
Sat, 28 Sep 2019 15:28:14 +0000 (23:28 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Sat, 28 Sep 2019 15:31:15 +0000 (23:31 +0800)
src/protocol.c

index ce496c7d3232c5bf1d4825a4b86c504b5656823c..559da60b6c2f1db9b36898406437e64b0ae95c76 100644 (file)
@@ -176,14 +176,22 @@ spawn_process(struct tty_client *client) {
         return 1;
     } else if (pid == 0) { /* child */
         setenv("TERM", server->terminal_type, true);
-        // Don't pass the web socket onto child processes
+#if LWS_LIBRARY_VERSION_NUMBER < 3001000
+        // libwebsockets set FD_CLOEXEC since v3.1.0
         close(lws_get_socket_fd(client->wsi));
+#endif
         if (execvp(argv[0], argv) < 0) {
             perror("execvp failed\n");
             _exit(-errno);
         }
     }
 
+    // set the file descriptor close-on-exec
+    int status_flags = fcntl(pty, F_GETFL);
+    if (status_flags != -1) {
+        fcntl(pty, F_SETFD, status_flags | FD_CLOEXEC);
+    }
+
     lwsl_notice("started process, pid: %d\n", pid);
     client->pid = pid;
     client->pty = pty;