From f662ff790c5bd2d133b8da8c1152c994499ab4f7 Mon Sep 17 00:00:00 2001 From: Jacob Nevins Date: Sun, 9 Nov 2014 00:10:46 +0000 Subject: [PATCH] Disable some mid-session configs for downstreams. Compression, encryption, and key exchange settings are all meaningless to reconfigure in connection-sharing downstreams. --- config.c | 12 +++++++----- ssh.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/config.c b/config.c index 711028c7..c2acd628 100644 --- a/config.c +++ b/config.c @@ -2136,7 +2136,8 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_settitle(b, "Connection/SSH", "Options controlling SSH connections"); - if (midsession && protcfginfo == 1) { + /* SSH-1 or connection-sharing downstream */ + if (midsession && (protcfginfo == 1 || protcfginfo == -1)) { s = ctrl_getset(b, "Connection/SSH", "disclaimer", NULL); ctrl_text(s, "Nothing on this panel may be reconfigured in mid-" "session; it is only here so that sub-panels of it can " @@ -2158,7 +2159,7 @@ void setup_config_box(struct controlbox *b, int midsession, I(CONF_ssh_no_shell)); } - if (!midsession || protcfginfo != 1) { + if (!midsession || !(protcfginfo == 1 || protcfginfo == -1)) { s = ctrl_getset(b, "Connection/SSH", "protocol", "Protocol options"); ctrl_checkbox(s, "Enable compression", 'e', @@ -2203,9 +2204,10 @@ void setup_config_box(struct controlbox *b, int midsession, /* * The Connection/SSH/Kex panel. (Owing to repeat key * exchange, much of this is meaningful in mid-session _if_ - * we're using SSH-2 or haven't decided yet.) + * we're using SSH-2 and are not a connection-sharing + * downstream, or haven't decided yet.) */ - if (protcfginfo != 1) { + if (protcfginfo != 1 && protcfginfo != -1) { ctrl_settitle(b, "Connection/SSH/Kex", "Options controlling SSH key exchange"); @@ -2276,7 +2278,7 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_columns(s, 1, 100); } - if (!midsession || protcfginfo != 1) { + if (!midsession || !(protcfginfo == 1 || protcfginfo == -1)) { /* * The Connection/SSH/Cipher panel. */ diff --git a/ssh.c b/ssh.c index 959025c4..48b3f38f 100644 --- a/ssh.c +++ b/ssh.c @@ -11241,13 +11241,19 @@ static int ssh_return_exitcode(void *handle) } /* - * cfg_info for SSH is the currently running version of the - * protocol. (1 for 1; 2 for 2; 0 for not-decided-yet.) + * cfg_info for SSH is the protocol running in this session. + * (1 or 2 for the full SSH-1 or SSH-2 protocol; -1 for the bare + * SSH-2 connection protocol, i.e. a downstream; 0 for not-decided-yet.) */ static int ssh_cfg_info(void *handle) { Ssh ssh = (Ssh) handle; - return ssh->version; + if (ssh->version == 0) + return 0; /* don't know yet */ + else if (ssh->bare_connection) + return -1; + else + return ssh->version; } /* -- 2.45.2