More use of sockaddr_union (above and beyond that necessary to remove current
[sgt/putty] / config.c
index 67a018f..3f0ea93 100644 (file)
--- a/config.c
+++ b/config.c
@@ -317,14 +317,14 @@ static void codepage_handler(union control *ctrl, void *dlg,
     Config *cfg = (Config *)data;
     if (event == EVENT_REFRESH) {
        int i;
-       const char *cp;
+       const char *cp, *thiscp;
        dlg_update_start(ctrl, dlg);
-       strcpy(cfg->line_codepage,
-              cp_name(decode_codepage(cfg->line_codepage)));
+       thiscp = cp_name(decode_codepage(cfg->line_codepage));
        dlg_listbox_clear(ctrl, dlg);
        for (i = 0; (cp = cp_enumerate(i)) != NULL; i++)
            dlg_listbox_add(ctrl, dlg, cp);
-       dlg_editbox_set(ctrl, dlg, cfg->line_codepage);
+       dlg_editbox_set(ctrl, dlg, thiscp);
+       strcpy(cfg->line_codepage, thiscp);
        dlg_update_done(ctrl, dlg);
     } else if (event == EVENT_VALCHANGE) {
        dlg_editbox_get(ctrl, dlg, cfg->line_codepage,
@@ -1729,13 +1729,17 @@ void setup_config_box(struct controlbox *b, int midsession,
                          NULL);
 #endif
 
-           s = ctrl_getset(b, "Connection", "identity",
-                           "Logical name of remote host");
-           ctrl_editbox(s, "Logical name of remote host (e.g. for SSH key lookup):",
-                        'm', 100,
-                        HELPCTX(connection_loghost),
-                        dlg_stdeditbox_handler, I(offsetof(Config,loghost)),
-                        I(sizeof(((Config *)0)->loghost)));
+           {
+               char *label = backend_from_proto(PROT_SSH) ?
+                   "Logical name of remote host (e.g. for SSH key lookup):" :
+                   "Logical name of remote host:";
+               s = ctrl_getset(b, "Connection", "identity",
+                               "Logical name of remote host");
+               ctrl_editbox(s, label, 'm', 100,
+                            HELPCTX(connection_loghost),
+                            dlg_stdeditbox_handler, I(offsetof(Config,loghost)),
+                            I(sizeof(((Config *)0)->loghost)));
+           }
        }
 
        /*
@@ -1751,6 +1755,21 @@ void setup_config_box(struct controlbox *b, int midsession,
                         HELPCTX(connection_username),
                         dlg_stdeditbox_handler, I(offsetof(Config,username)),
                         I(sizeof(((Config *)0)->username)));
+           {
+               /* We assume the local username is sufficiently stable
+                * to include on the dialog box. */
+               char *user = get_username();
+               char *userlabel = dupprintf("Use system username (%s)", user);
+               sfree(user);
+               ctrl_radiobuttons(s, "When username is not specified:", 'n', 4,
+                                 HELPCTX(connection_username_from_env),
+                                 dlg_stdradiobutton_handler,
+                                 I(offsetof(Config, username_from_env)),
+                                 "Prompt", I(FALSE),
+                                 userlabel, I(TRUE),
+                                 NULL);
+               sfree(userlabel);
+           }
 
            s = ctrl_getset(b, "Connection/Data", "term",
                            "Terminal details");