]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: set interactive mode for ControlPersist sessions if they
authordjm@openbsd.org <djm@openbsd.org>
Sun, 3 Sep 2023 23:59:32 +0000 (23:59 +0000)
committerDamien Miller <djm@mindrot.org>
Mon, 4 Sep 2023 00:09:52 +0000 (10:09 +1000)
originally requested a tty; enables keystroke timing obfuscation for most
ControlPersist sessions. Spotted by naddy@

OpenBSD-Commit-ID: 72783a26254202e2f3f41a2818a19956fe49a772

ssh.c

diff --git a/ssh.c b/ssh.c
index caf3c692c7ddc44f49ab9ffa7ece6194a8f4b4fd..1dbbda7d6e36d037b0ac5747e3344a9fe29d75e7 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh.c,v 1.593 2023/07/26 23:06:00 djm Exp $ */
+/* $OpenBSD: ssh.c,v 1.594 2023/09/03 23:59:32 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -2140,7 +2140,7 @@ ssh_session2_open(struct ssh *ssh)
 static int
 ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
 {
-       int r, id = -1;
+       int r, interactive, id = -1;
        char *cp, *tun_fwd_ifname = NULL;
 
        /* XXX should be pre-session */
@@ -2197,8 +2197,11 @@ ssh_session2(struct ssh *ssh, const struct ssh_conn_info *cinfo)
        if (options.session_type != SESSION_TYPE_NONE)
                id = ssh_session2_open(ssh);
        else {
-               ssh_packet_set_interactive(ssh,
-                   options.control_master == SSHCTL_MASTER_NO,
+               interactive = options.control_master == SSHCTL_MASTER_NO;
+               /* ControlPersist may have clobbered ControlMaster, so check */
+               if (need_controlpersist_detach)
+                       interactive = otty_flag != 0;
+               ssh_packet_set_interactive(ssh, interactive,
                    options.ip_qos_interactive, options.ip_qos_bulk);
        }