]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - config.c
Fix a dangerous cross-thread memory access.
[PuTTY.git] / config.c
index bfa9071bcfc54d29ca6051060e04c526a72e86ac..c2acd6287a83558c7147da29229d6605a76d4f9b 100644 (file)
--- 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',
@@ -2167,7 +2168,7 @@ void setup_config_box(struct controlbox *b, int midsession,
                          I(CONF_compression));
        }
 
-       if (!midsession || protcfginfo != 1) {
+       if (!midsession) {
            s = ctrl_getset(b, "Connection/SSH", "sharing", "Sharing an SSH connection between PuTTY tools");
 
            ctrl_checkbox(s, "Share SSH connections if possible", 's',
@@ -2202,10 +2203,11 @@ void setup_config_box(struct controlbox *b, int midsession,
 
        /*
         * The Connection/SSH/Kex panel. (Owing to repeat key
-        * exchange, this is all meaningful in mid-session _if_
-        * we're using SSH-2 or haven't decided yet.)
+        * exchange, much of this is meaningful in mid-session _if_
+        * 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");
 
@@ -2231,7 +2233,14 @@ void setup_config_box(struct controlbox *b, int midsession,
                         I(16));
            ctrl_text(s, "(Use 1M for 1 megabyte, 1G for 1 gigabyte etc)",
                      HELPCTX(ssh_kex_repeat));
+       }
 
+       /*
+        * Manual host key configuration is irrelevant mid-session,
+        * as we enforce that the host key for rekeys is the
+        * same as that used at the start of the session.
+        */
+       if (!midsession) {
            s = ctrl_getset(b, "Connection/SSH/Kex", "hostkeys",
                            "Manually configure host keys for this connection");
 
@@ -2269,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.
             */
@@ -2594,8 +2603,8 @@ void setup_config_box(struct controlbox *b, int midsession,
            ctrl_droplist(s, "Ignores SSH-2 maximum packet size", 'x', 20,
                          HELPCTX(ssh_bugs_maxpkt2),
                          sshbug_handler, I(CONF_sshbug_maxpkt2));
-           ctrl_droplist(s, "Replies to channel requests after channel close",
-                          'q', 20, HELPCTX(ssh_bugs_chanreq),
+           ctrl_droplist(s, "Replies to requests on closed channels", 'q', 20,
+                         HELPCTX(ssh_bugs_chanreq),
                          sshbug_handler, I(CONF_sshbug_chanreq));
        }
     }