X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/2875af115c2baa3d5a14422b088fa3df73c177f9..b3d375b244187cd77f45dc013668e6273e133179:/config.c diff --git a/config.c b/config.c index 8d492df1..d689ede9 100644 --- a/config.c +++ b/config.c @@ -236,6 +236,33 @@ static void cipherlist_handler(union control *ctrl, void *dlg, } } +#ifndef NO_GSSAPI +static void gsslist_handler(union control *ctrl, void *dlg, + void *data, int event) +{ + Config *cfg = (Config *)data; + if (event == EVENT_REFRESH) { + int i; + + dlg_update_start(ctrl, dlg); + dlg_listbox_clear(ctrl, dlg); + for (i = 0; i < ngsslibs; i++) { + int id = cfg->ssh_gsslist[i]; + assert(id >= 0 && id < ngsslibs); + dlg_listbox_addwithid(ctrl, dlg, gsslibnames[id], id); + } + dlg_update_done(ctrl, dlg); + + } else if (event == EVENT_VALCHANGE) { + int i; + + /* Update array to match the list box. */ + for (i=0; i < ngsslibs; i++) + cfg->ssh_gsslist[i] = dlg_listbox_getid(ctrl, dlg, i); + } +} +#endif + static void kexlist_handler(union control *ctrl, void *dlg, void *data, int event) { @@ -317,14 +344,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 +1043,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); @@ -1170,7 +1203,7 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_radiobuttons(s, "Connection type:", NO_SHORTCUT, 3, HELPCTX(session_hostname), config_protocolbuttons_handler, P(hp), - "Raw", 'r', I(PROT_RAW), + "Raw", 'w', I(PROT_RAW), "Telnet", 't', I(PROT_TELNET), "Rlogin", 'i', I(PROT_RLOGIN), NULL); @@ -1178,7 +1211,7 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_radiobuttons(s, "Connection type:", NO_SHORTCUT, 4, HELPCTX(session_hostname), config_protocolbuttons_handler, P(hp), - "Raw", 'r', I(PROT_RAW), + "Raw", 'w', I(PROT_RAW), "Telnet", 't', I(PROT_TELNET), "Rlogin", 'i', I(PROT_RLOGIN), "SSH", 's', I(PROT_SSH), @@ -1236,7 +1269,7 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_columns(s, 1, 100); s = ctrl_getset(b, "Session", "otheropts", NULL); - c = ctrl_radiobuttons(s, "Close window on exit:", 'w', 4, + c = ctrl_radiobuttons(s, "Close window on exit:", 'x', 4, HELPCTX(session_coe), dlg_stdradiobutton_handler, I(offsetof(Config, close_on_exit)), @@ -1759,7 +1792,8 @@ void setup_config_box(struct controlbox *b, int midsession, /* 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); + char *userlabel = dupprintf("Use system username (%s)", + user ? user : ""); sfree(user); ctrl_radiobuttons(s, "When username is not specified:", 'n', 4, HELPCTX(connection_username_from_env), @@ -2082,7 +2116,7 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_checkbox(s, "Allow agent forwarding", 'f', HELPCTX(ssh_auth_agentfwd), dlg_stdcheckbox_handler, I(offsetof(Config,agentfwd))); - ctrl_checkbox(s, "Allow attempted changes of username in SSH-2", 'u', + ctrl_checkbox(s, "Allow attempted changes of username in SSH-2", NO_SHORTCUT, HELPCTX(ssh_auth_changeuser), dlg_stdcheckbox_handler, I(offsetof(Config,change_username))); @@ -2096,6 +2130,18 @@ void setup_config_box(struct controlbox *b, int midsession, FILTER_KEY_FILES, FALSE, "Select private key file", HELPCTX(ssh_auth_privkey), dlg_stdfilesel_handler, I(offsetof(Config, keyfile))); + +#ifndef NO_GSSAPI + /* + * GSSAPI library selection. + */ + if (ngsslibs > 1) { + c = ctrl_draglist(s, "Preference order for GSSAPI libraries:", NO_SHORTCUT, + HELPCTX(no_help), + gsslist_handler, P(NULL)); + c->listbox.height = ngsslibs; + } +#endif } if (!midsession) { @@ -2277,6 +2323,9 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_droplist(s, "Chokes on SSH-1 RSA authentication", 'r', 20, HELPCTX(ssh_bugs_rsa1), sshbug_handler, I(offsetof(Config,sshbug_rsa1))); + ctrl_droplist(s, "Chokes on SSH-2 ignore messages", '2', 20, + HELPCTX(ssh_bugs_ignore2), + sshbug_handler, I(offsetof(Config,sshbug_ignore2))); ctrl_droplist(s, "Miscomputes SSH-2 HMAC keys", 'm', 20, HELPCTX(ssh_bugs_hmac2), sshbug_handler, I(offsetof(Config,sshbug_hmac2)));