summaryrefslogtreecommitdiffstats
path: root/ssh.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2023-07-27 01:06:00 +0200
committerDamien Miller <djm@mindrot.org>2023-07-27 01:11:22 +0200
commit2d34205dab08ede9b0676efa57647fc49e6decbe (patch)
tree4cc432d78f8152d057f354440e0d89b9d6f7d0f8 /ssh.c
parentupstream: man page typos; ok jmc@ (diff)
downloadopenssh-2d34205dab08ede9b0676efa57647fc49e6decbe.tar.xz
openssh-2d34205dab08ede9b0676efa57647fc49e6decbe.zip
upstream: make ssh -f (fork after authentication) work properly in
multiplexed cases (inc. ControlPersist). bz3589 bz3589 Based on patches by Peter Chubb; ok dtucker@ OpenBSD-Commit-ID: a7a2976a54b93e6767dc846b85647e6ec26969ac
Diffstat (limited to 'ssh.c')
-rw-r--r--ssh.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/ssh.c b/ssh.c
index c8fcfb2b9..caf3c692c 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh.c,v 1.592 2023/07/17 05:41:53 jmc Exp $ */
+/* $OpenBSD: ssh.c,v 1.593 2023/07/26 23:06:00 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -130,10 +130,11 @@ int tty_flag = 0;
* Flag indicating that the current process should be backgrounded and
* a new mux-client launched in the foreground for ControlPersist.
*/
-int need_controlpersist_detach = 0;
+static int need_controlpersist_detach = 0;
/* Copies of flags for ControlPersist foreground mux-client */
-int ostdin_null_flag, osession_type, otty_flag, orequest_tty;
+static int ostdin_null_flag, osession_type, otty_flag, orequest_tty;
+static int ofork_after_authentication;
/*
* General data structure for command line options and options configurable
@@ -1757,11 +1758,15 @@ control_persist_detach(void)
/* Child: master process continues mainloop */
break;
default:
- /* Parent: set up mux client to connect to backgrounded master */
+ /*
+ * Parent: set up mux client to connect to backgrounded
+ * master.
+ */
debug2_f("background process is %ld", (long)pid);
options.stdin_null = ostdin_null_flag;
options.request_tty = orequest_tty;
tty_flag = otty_flag;
+ options.fork_after_authentication = ofork_after_authentication;
options.session_type = osession_type;
close(muxserver_sock);
muxserver_sock = -1;
@@ -2173,11 +2178,11 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
osession_type = options.session_type;
orequest_tty = options.request_tty;
otty_flag = tty_flag;
+ ofork_after_authentication = options.fork_after_authentication;
options.stdin_null = 1;
options.session_type = SESSION_TYPE_NONE;
tty_flag = 0;
- if (!options.fork_after_authentication &&
- (osession_type != SESSION_TYPE_NONE ||
+ if ((osession_type != SESSION_TYPE_NONE ||
options.stdio_forward_host != NULL))
need_controlpersist_detach = 1;
options.fork_after_authentication = 1;