mirror of git://anongit.mindrot.org/openssh.git
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
This commit is contained in:
parent
076aeda86a
commit
2d34205dab
16
mux.c
16
mux.c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: mux.c,v 1.97 2023/06/20 23:59:33 djm Exp $ */
|
/* $OpenBSD: mux.c,v 1.98 2023/07/26 23:06:00 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
|
* Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
|
||||||
*
|
*
|
||||||
|
@ -1881,7 +1881,7 @@ mux_client_request_session(int fd)
|
||||||
const char *term = NULL;
|
const char *term = NULL;
|
||||||
u_int i, echar, rid, sid, esid, exitval, type, exitval_seen;
|
u_int i, echar, rid, sid, esid, exitval, type, exitval_seen;
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
int r, rawmode;
|
int r, rawmode = 0;
|
||||||
|
|
||||||
debug3_f("entering");
|
debug3_f("entering");
|
||||||
|
|
||||||
|
@ -1991,9 +1991,15 @@ mux_client_request_session(int fd)
|
||||||
ssh_signal(SIGTERM, control_client_sighandler);
|
ssh_signal(SIGTERM, control_client_sighandler);
|
||||||
ssh_signal(SIGWINCH, control_client_sigrelay);
|
ssh_signal(SIGWINCH, control_client_sigrelay);
|
||||||
|
|
||||||
rawmode = tty_flag;
|
if (options.fork_after_authentication)
|
||||||
if (tty_flag)
|
daemon(1, 1);
|
||||||
enter_raw_mode(options.request_tty == REQUEST_TTY_FORCE);
|
else {
|
||||||
|
rawmode = tty_flag;
|
||||||
|
if (tty_flag) {
|
||||||
|
enter_raw_mode(
|
||||||
|
options.request_tty == REQUEST_TTY_FORCE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stick around until the controlee closes the client_fd.
|
* Stick around until the controlee closes the client_fd.
|
||||||
|
|
17
ssh.c
17
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>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* 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
|
* Flag indicating that the current process should be backgrounded and
|
||||||
* a new mux-client launched in the foreground for ControlPersist.
|
* 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 */
|
/* 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
|
* General data structure for command line options and options configurable
|
||||||
|
@ -1757,11 +1758,15 @@ control_persist_detach(void)
|
||||||
/* Child: master process continues mainloop */
|
/* Child: master process continues mainloop */
|
||||||
break;
|
break;
|
||||||
default:
|
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);
|
debug2_f("background process is %ld", (long)pid);
|
||||||
options.stdin_null = ostdin_null_flag;
|
options.stdin_null = ostdin_null_flag;
|
||||||
options.request_tty = orequest_tty;
|
options.request_tty = orequest_tty;
|
||||||
tty_flag = otty_flag;
|
tty_flag = otty_flag;
|
||||||
|
options.fork_after_authentication = ofork_after_authentication;
|
||||||
options.session_type = osession_type;
|
options.session_type = osession_type;
|
||||||
close(muxserver_sock);
|
close(muxserver_sock);
|
||||||
muxserver_sock = -1;
|
muxserver_sock = -1;
|
||||||
|
@ -2173,11 +2178,11 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
|
||||||
osession_type = options.session_type;
|
osession_type = options.session_type;
|
||||||
orequest_tty = options.request_tty;
|
orequest_tty = options.request_tty;
|
||||||
otty_flag = tty_flag;
|
otty_flag = tty_flag;
|
||||||
|
ofork_after_authentication = options.fork_after_authentication;
|
||||||
options.stdin_null = 1;
|
options.stdin_null = 1;
|
||||||
options.session_type = SESSION_TYPE_NONE;
|
options.session_type = SESSION_TYPE_NONE;
|
||||||
tty_flag = 0;
|
tty_flag = 0;
|
||||||
if (!options.fork_after_authentication &&
|
if ((osession_type != SESSION_TYPE_NONE ||
|
||||||
(osession_type != SESSION_TYPE_NONE ||
|
|
||||||
options.stdio_forward_host != NULL))
|
options.stdio_forward_host != NULL))
|
||||||
need_controlpersist_detach = 1;
|
need_controlpersist_detach = 1;
|
||||||
options.fork_after_authentication = 1;
|
options.fork_after_authentication = 1;
|
||||||
|
|
Loading…
Reference in New Issue