X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/daa621ff751ebfd3ad55d3b8c3a0ff079cb314e9..16707d1c7eb2a7e182b5ed1f4b1f38f746a73b1a:/config.c diff --git a/config.c b/config.c index 85e13c2e..d0931f89 100644 --- 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, @@ -1016,19 +1016,25 @@ static void portfwd_handler(union control *ctrl, void *dlg, *p = '\0'; p = cfg->portfwd; while (*p) { + if (strcmp(p,str) == 0) { + dlg_error_msg(dlg, "Specified forwarding already exists"); + break; + } while (*p) p++; p++; } - if ((p - cfg->portfwd) + strlen(str) + 2 <= - sizeof(cfg->portfwd)) { - strcpy(p, str); - p[strlen(str) + 1] = '\0'; - dlg_listbox_add(pfd->listbox, dlg, str); - dlg_editbox_set(pfd->sourcebox, dlg, ""); - dlg_editbox_set(pfd->destbox, dlg, ""); - } else { - dlg_error_msg(dlg, "Too many forwardings"); + if (!*p) { + if ((p - cfg->portfwd) + strlen(str) + 2 <= + sizeof(cfg->portfwd)) { + strcpy(p, str); + p[strlen(str) + 1] = '\0'; + dlg_listbox_add(pfd->listbox, dlg, str); + dlg_editbox_set(pfd->sourcebox, dlg, ""); + dlg_editbox_set(pfd->destbox, dlg, ""); + } else { + dlg_error_msg(dlg, "Too many forwardings"); + } } } else if (ctrl == pfd->rembutton) { int i = dlg_listbox_index(pfd->listbox, dlg); @@ -1577,8 +1583,8 @@ void setup_config_box(struct controlbox *b, int midsession, "Options controlling character set translation"); s = ctrl_getset(b, "Window/Translation", "trans", - "Character set translation on received data"); - ctrl_combobox(s, "Received data assumed to be in which character set:", + "Character set translation"); + ctrl_combobox(s, "Remote character set:", 'r', 100, HELPCTX(translation_codepage), codepage_handler, P(NULL), P(NULL)); @@ -1729,13 +1735,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 +1761,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"); @@ -2051,6 +2076,13 @@ void setup_config_box(struct controlbox *b, int midsession, dlg_stdcheckbox_handler, I(offsetof(Config,try_ki_auth))); +#ifndef NO_GSSAPI + ctrl_checkbox(s, "Attempt GSSAPI auth (SSH-2)", + NO_SHORTCUT, HELPCTX(no_help), + dlg_stdcheckbox_handler, + I(offsetof(Config,try_gssapi_auth))); +#endif + s = ctrl_getset(b, "Connection/SSH/Auth", "params", "Authentication parameters"); ctrl_checkbox(s, "Allow agent forwarding", 'f', @@ -2060,6 +2092,12 @@ void setup_config_box(struct controlbox *b, int midsession, HELPCTX(ssh_auth_changeuser), dlg_stdcheckbox_handler, I(offsetof(Config,change_username))); +#ifndef NO_GSSAPI + ctrl_checkbox(s, "Allow GSSAPI credential delegation in SSH-2", NO_SHORTCUT, + HELPCTX(no_help), + dlg_stdcheckbox_handler, + I(offsetof(Config,gssapifwd))); +#endif ctrl_filesel(s, "Private key file for authentication:", 'k', FILTER_KEY_FILES, FALSE, "Select private key file", HELPCTX(ssh_auth_privkey),