Miloslav Cempirek Ing points out that we should return from
[u/mdw/putty] / config.c
index 25c6f47..99882a1 100644 (file)
--- a/config.c
+++ b/config.c
@@ -358,9 +358,11 @@ static void sessionsaver_handler(union control *ctrl, void *dlg,
                /* If at this point we have a valid session, go! */
                if (*cfg2.host) {
                    *cfg = cfg2;       /* structure copy */
+                   cfg->remote_cmd_ptr = cfg->remote_cmd; /* nasty */
                    dlg_end(dlg, 1);
                } else
                    dlg_beep(dlg);
+                return;
            }
 
            /*
@@ -884,6 +886,18 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                      "Always append to the end of it", I(LGXF_APN),
                      "Ask the user every time", I(LGXF_ASK), NULL);
 
+    if ((midsession && protocol == PROT_SSH) ||
+       (!midsession && backends[3].name != NULL)) {
+       s = ctrl_getset(b, "Session/Logging", "ssh",
+                       "Options specific to SSH packet logging");
+       ctrl_checkbox(s, "Omit known password fields", 'k',
+                     HELPCTX(logging_ssh_omit_password),
+                     dlg_stdcheckbox_handler, I(offsetof(Config,logomitpass)));
+       ctrl_checkbox(s, "Omit session data", 'd',
+                     HELPCTX(logging_ssh_omit_data),
+                     dlg_stdcheckbox_handler, I(offsetof(Config,logomitdata)));
+    }
+
     /*
      * The Terminal panel.
      */
@@ -1036,6 +1050,12 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     ctrl_checkbox(s, "Disable remote-controlled character set configuration",
                  'r', HELPCTX(features_charset), dlg_stdcheckbox_handler,
                  I(offsetof(Config,no_remote_charset)));
+    ctrl_checkbox(s, "Disable Arabic text shaping",
+                 'l', HELPCTX(features_arabicshaping), dlg_stdcheckbox_handler,
+                 I(offsetof(Config, arabicshaping)));
+    ctrl_checkbox(s, "Disable bidirectional text display",
+                 'd', HELPCTX(features_bidi), dlg_stdcheckbox_handler,
+                 I(offsetof(Config, bidi)));
 
     /*
      * The Window panel.
@@ -1214,6 +1234,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
 
     s = ctrl_getset(b, "Window/Colours", "general",
                    "General options for colour usage");
+    ctrl_checkbox(s, "Allow terminal to specify ANSI colours", 'i',
+                 HELPCTX(colours_ansi),
+                 dlg_stdcheckbox_handler, I(offsetof(Config,ansi_colour)));
     ctrl_checkbox(s, "Bolded text is a different colour", 'b',
                  HELPCTX(colours_bold),
                  dlg_stdcheckbox_handler, I(offsetof(Config,bold_colour)));
@@ -1261,10 +1284,44 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                         HELPCTX(connection_termtype),
                         dlg_stdeditbox_handler, I(offsetof(Config,termtype)),
                         I(sizeof(((Config *)0)->termtype)));
+           ctrl_editbox(s, "Terminal speeds", 's', 50,
+                        HELPCTX(connection_termspeed),
+                        dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
+                        I(sizeof(((Config *)0)->termspeed)));
            ctrl_editbox(s, "Auto-login username", 'u', 50,
                         HELPCTX(connection_username),
                         dlg_stdeditbox_handler, I(offsetof(Config,username)),
                         I(sizeof(((Config *)0)->username)));
+
+           ctrl_text(s, "Environment variables:", HELPCTX(telnet_environ));
+           ctrl_columns(s, 2, 80, 20);
+           ed = (struct environ_data *)
+               ctrl_alloc(b, sizeof(struct environ_data));
+           ed->varbox = ctrl_editbox(s, "Variable", 'v', 60,
+                                     HELPCTX(telnet_environ),
+                                     environ_handler, P(ed), P(NULL));
+           ed->varbox->generic.column = 0;
+           ed->valbox = ctrl_editbox(s, "Value", 'l', 60,
+                                     HELPCTX(telnet_environ),
+                                     environ_handler, P(ed), P(NULL));
+           ed->valbox->generic.column = 0;
+           ed->addbutton = ctrl_pushbutton(s, "Add", 'd',
+                                           HELPCTX(telnet_environ),
+                                           environ_handler, P(ed));
+           ed->addbutton->generic.column = 1;
+           ed->rembutton = ctrl_pushbutton(s, "Remove", 'r',
+                                           HELPCTX(telnet_environ),
+                                           environ_handler, P(ed));
+           ed->rembutton->generic.column = 1;
+           ctrl_columns(s, 1, 100);
+           ed->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT,
+                                      HELPCTX(telnet_environ),
+                                      environ_handler, P(ed));
+           ed->listbox->listbox.height = 3;
+           ed->listbox->listbox.ncols = 2;
+           ed->listbox->listbox.percentages = snewn(2, int);
+           ed->listbox->listbox.percentages[0] = 30;
+           ed->listbox->listbox.percentages[1] = 70;
        }
 
        s = ctrl_getset(b, "Connection", "keepalive",
@@ -1281,6 +1338,10 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                          'n', HELPCTX(connection_nodelay),
                          dlg_stdcheckbox_handler,
                          I(offsetof(Config,tcp_nodelay)));
+           ctrl_checkbox(s, "Enable TCP keepalives (SO_KEEPALIVE option)",
+                         'p', HELPCTX(connection_tcpkeepalive),
+                         dlg_stdcheckbox_handler,
+                         I(offsetof(Config,tcp_keepalives)));
        }
 
     }
@@ -1362,44 +1423,6 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
        ctrl_settitle(b, "Connection/Telnet",
                      "Options controlling Telnet connections");
 
-       if (!midsession) {
-           s = ctrl_getset(b, "Connection/Telnet", "data",
-                           "Data to send to the server");
-           ctrl_editbox(s, "Terminal-speed string", 's', 50,
-                        HELPCTX(telnet_termspeed),
-                        dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
-                        I(sizeof(((Config *)0)->termspeed)));
-           ctrl_text(s, "Environment variables:", HELPCTX(telnet_environ));
-           ctrl_columns(s, 2, 80, 20);
-           ed = (struct environ_data *)
-               ctrl_alloc(b, sizeof(struct environ_data));
-           ed->varbox = ctrl_editbox(s, "Variable", 'v', 60,
-                                     HELPCTX(telnet_environ),
-                                     environ_handler, P(ed), P(NULL));
-           ed->varbox->generic.column = 0;
-           ed->valbox = ctrl_editbox(s, "Value", 'l', 60,
-                                     HELPCTX(telnet_environ),
-                                     environ_handler, P(ed), P(NULL));
-           ed->valbox->generic.column = 0;
-           ed->addbutton = ctrl_pushbutton(s, "Add", 'd',
-                                           HELPCTX(telnet_environ),
-                                           environ_handler, P(ed));
-           ed->addbutton->generic.column = 1;
-           ed->rembutton = ctrl_pushbutton(s, "Remove", 'r',
-                                           HELPCTX(telnet_environ),
-                                           environ_handler, P(ed));
-           ed->rembutton->generic.column = 1;
-           ctrl_columns(s, 1, 100);
-           ed->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT,
-                                      HELPCTX(telnet_environ),
-                                      environ_handler, P(ed));
-           ed->listbox->listbox.height = 3;
-           ed->listbox->listbox.ncols = 2;
-           ed->listbox->listbox.percentages = snewn(2, int);
-           ed->listbox->listbox.percentages[0] = 30;
-           ed->listbox->listbox.percentages[1] = 70;
-       }
-
        s = ctrl_getset(b, "Connection/Telnet", "protocol",
                        "Telnet protocol adjustments");
 
@@ -1417,12 +1440,12 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                              I(offsetof(Config, passive_telnet)),
                              "Passive", I(1), "Active", I(0), NULL);
        }
-       ctrl_checkbox(s, "Keyboard sends telnet Backspace and Interrupt", 'k',
+       ctrl_checkbox(s, "Keyboard sends Telnet special commands", 'k',
                      HELPCTX(telnet_specialkeys),
                      dlg_stdcheckbox_handler,
                      I(offsetof(Config,telnet_keyboard)));
-       ctrl_checkbox(s, "Return key sends telnet New Line instead of ^M",
-                     NO_SHORTCUT, HELPCTX(telnet_newline),
+       ctrl_checkbox(s, "Return key sends Telnet New Line instead of ^M",
+                     'm', HELPCTX(telnet_newline),
                      dlg_stdcheckbox_handler,
                      I(offsetof(Config,telnet_newline)));
     }
@@ -1437,10 +1460,6 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
 
        s = ctrl_getset(b, "Connection/Rlogin", "data",
                        "Data to send to the server");
-       ctrl_editbox(s, "Terminal-speed string", 's', 50,
-                    HELPCTX(rlogin_termspeed),
-                    dlg_stdeditbox_handler, I(offsetof(Config,termspeed)),
-                    I(sizeof(((Config *)0)->termspeed)));
        ctrl_editbox(s, "Local username:", 'l', 50,
                     HELPCTX(rlogin_localuser),
                     dlg_stdeditbox_handler, I(offsetof(Config,localusername)),
@@ -1472,6 +1491,10 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                      HELPCTX(ssh_nopty),
                      dlg_stdcheckbox_handler,
                      I(offsetof(Config,nopty)));
+       ctrl_checkbox(s, "Don't start a shell or command at all", 'n',
+                     HELPCTX(ssh_noshell),
+                     dlg_stdcheckbox_handler,
+                     I(offsetof(Config,ssh_no_shell)));
        ctrl_checkbox(s, "Enable compression", 'e',
                      HELPCTX(ssh_compress),
                      dlg_stdcheckbox_handler,
@@ -1483,7 +1506,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                          "1 only", 'l', I(0),
                          "1", '1', I(1),
                          "2", '2', I(2),
-                         "2 only", 'n', I(3), NULL);
+                         "2 only", 'y', I(3), NULL);
 
        s = ctrl_getset(b, "Connection/SSH", "encryption", "Encryption options");
        c = ctrl_draglist(s, "Encryption cipher selection policy:", 's',