X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/9e164d82c8990d3c8cff58d866fb9938907d4d7b..42af6a672d16302ee1b8971a7cc164120f7572ab:/config.c diff --git a/config.c b/config.c index 39740b8d..60d98360 100644 --- a/config.c +++ b/config.c @@ -90,7 +90,7 @@ struct hostport { void config_protocolbuttons_handler(union control *ctrl, void *dlg, void *data, int event) { - int button, defport; + int button; Config *cfg = (Config *)data; struct hostport *hp = (struct hostport *)ctrl->radio.context.p; @@ -114,15 +114,20 @@ void config_protocolbuttons_handler(union control *ctrl, void *dlg, assert(button >= 0 && button < ctrl->radio.nbuttons); cfg->protocol = ctrl->radio.buttondata[button].i; if (oldproto != cfg->protocol) { - defport = -1; - switch (cfg->protocol) { - case PROT_SSH: defport = 22; break; - case PROT_TELNET: defport = 23; break; - case PROT_RLOGIN: defport = 513; break; - } - if (defport > 0 && cfg->port != defport) { - cfg->port = defport; - } + Backend *ob = backend_from_proto(oldproto); + Backend *nb = backend_from_proto(cfg->protocol); + assert(ob); + assert(nb); + /* Iff the user hasn't changed the port from the protocol + * default (if any), update it with the new protocol's + * default. + * (XXX: this isn't perfect; a default can become permanent + * by going via the serial backend. However, it helps with + * the common case of tabbing through the controls in order + * and setting a non-default port.) */ + if (cfg->port == ob->default_port && + cfg->port > 0 && nb->default_port > 0) + cfg->port = nb->default_port; } dlg_refresh(hp->host, dlg); dlg_refresh(hp->port, dlg); @@ -618,7 +623,7 @@ static void colour_handler(union control *ctrl, void *dlg, Config *cfg = (Config *)data; struct colour_data *cd = (struct colour_data *)ctrl->generic.context.p; - int update = FALSE, r, g, b; + int update = FALSE, clear = FALSE, r, g, b; if (event == EVENT_REFRESH) { if (ctrl == cd->listbox) { @@ -628,21 +633,21 @@ static void colour_handler(union control *ctrl, void *dlg, for (i = 0; i < lenof(colours); i++) dlg_listbox_add(ctrl, dlg, colours[i]); dlg_update_done(ctrl, dlg); - dlg_editbox_set(cd->redit, dlg, ""); - dlg_editbox_set(cd->gedit, dlg, ""); - dlg_editbox_set(cd->bedit, dlg, ""); + clear = TRUE; + update = TRUE; } } else if (event == EVENT_SELCHANGE) { if (ctrl == cd->listbox) { /* The user has selected a colour. Update the RGB text. */ int i = dlg_listbox_index(ctrl, dlg); if (i < 0) { - dlg_beep(dlg); - return; + clear = TRUE; + } else { + clear = FALSE; + r = cfg->colours[i][0]; + g = cfg->colours[i][1]; + b = cfg->colours[i][2]; } - r = cfg->colours[i][0]; - g = cfg->colours[i][1]; - b = cfg->colours[i][2]; update = TRUE; } } else if (event == EVENT_VALCHANGE) { @@ -695,16 +700,23 @@ static void colour_handler(union control *ctrl, void *dlg, cfg->colours[i][0] = r; cfg->colours[i][1] = g; cfg->colours[i][2] = b; + clear = FALSE; update = TRUE; } } } if (update) { - char buf[40]; - sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf); - sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf); - sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf); + if (clear) { + dlg_editbox_set(cd->redit, dlg, ""); + dlg_editbox_set(cd->gedit, dlg, ""); + dlg_editbox_set(cd->bedit, dlg, ""); + } else { + char buf[40]; + sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf); + sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf); + sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf); + } } } @@ -1044,7 +1056,9 @@ static void portfwd_handler(union control *ctrl, void *dlg, { static const char *const afs = "A46"; char *afp = strchr(afs, *p); +#ifndef NO_IPV6 int idx = afp ? afp-afs : 0; +#endif if (afp) p++; #ifndef NO_IPV6 @@ -1305,6 +1319,9 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_checkbox(s, "Implicit CR in every LF", 'r', HELPCTX(terminal_lfhascr), dlg_stdcheckbox_handler, I(offsetof(Config,lfhascr))); + ctrl_checkbox(s, "Implicit LF in every CR", 'f', + HELPCTX(terminal_crhaslf), + dlg_stdcheckbox_handler, I(offsetof(Config,crhaslf))); ctrl_checkbox(s, "Use background colour to erase screen", 'e', HELPCTX(terminal_bce), dlg_stdcheckbox_handler, I(offsetof(Config,bce))); @@ -1711,6 +1728,14 @@ void setup_config_box(struct controlbox *b, int midsession, "IPv6", '6', I(ADDRTYPE_IPV6), 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))); } /* @@ -2026,6 +2051,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', @@ -2035,6 +2067,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), @@ -2235,6 +2273,9 @@ void setup_config_box(struct controlbox *b, int midsession, ctrl_droplist(s, "Handles SSH-2 key re-exchange badly", 'k', 20, HELPCTX(ssh_bugs_rekey2), sshbug_handler, I(offsetof(Config,sshbug_rekey2))); + ctrl_droplist(s, "Ignores SSH-2 maximum packet size", 'x', 20, + HELPCTX(ssh_bugs_maxpkt2), + sshbug_handler, I(offsetof(Config,sshbug_maxpkt2))); } } }