}
}
+static void loggingbuttons_handler(union control *ctrl, void *dlg,
+ void *data, int event)
+{
+ int button;
+ Config *cfg = (Config *)data;
+ /* This function works just like the standard radio-button handler,
+ * but it has to fall back to "no logging" in situations where the
+ * configured logging type isn't applicable.
+ */
+ if (event == EVENT_REFRESH) {
+ for (button = 0; button < ctrl->radio.nbuttons; button++)
+ if (cfg->logtype == ctrl->radio.buttondata[button].i)
+ break;
+
+ /* We fell off the end, so we lack the configured logging type */
+ if (button == ctrl->radio.nbuttons) {
+ button=0;
+ cfg->logtype=LGTYP_NONE;
+ }
+ dlg_radiobutton_set(ctrl, dlg, button);
+ } else if (event == EVENT_VALCHANGE) {
+ button = dlg_radiobutton_get(ctrl, dlg);
+ assert(button >= 0 && button < ctrl->radio.nbuttons);
+ cfg->logtype = ctrl->radio.buttondata[button].i;
+ }
+}
+
static void numeric_keypad_handler(union control *ctrl, void *dlg,
void *data, int event)
{
{ "3DES", CIPHER_3DES },
{ "Blowfish", CIPHER_BLOWFISH },
{ "DES", CIPHER_DES },
- { "AES (SSH 2 only)", CIPHER_AES },
+ { "AES (SSH-2 only)", CIPHER_AES },
{ "-- warn below here --", CIPHER_WARN }
};
/* 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 */
+ cfg->remote_cmd_ptr = NULL;
dlg_end(dlg, 1);
} else
dlg_beep(dlg);
struct portfwd_data {
union control *addbutton, *rembutton, *listbox;
union control *sourcebox, *destbox, *direction;
+#ifndef NO_IPV6
union control *addressfamily;
+#endif
};
static void portfwd_handler(union control *ctrl, void *dlg,
* Default is Local.
*/
dlg_radiobutton_set(ctrl, dlg, 0);
- } else if (ctrl == pfd->addressfamily) {
+#ifndef NO_IPV6
+ } else if (ctrl == pfd->addressfamily) {
dlg_radiobutton_set(ctrl, dlg, 0);
+#endif
}
} else if (event == EVENT_ACTION) {
if (ctrl == pfd->addbutton) {
int whichbutton;
i = 0;
+#ifndef NO_IPV6
whichbutton = dlg_radiobutton_get(pfd->addressfamily, dlg);
if (whichbutton == 1)
str[i++] = '4';
else if (whichbutton == 2)
str[i++] = '6';
+#endif
whichbutton = dlg_radiobutton_get(pfd->direction, dlg);
if (whichbutton == 0)
str[i++] = type;
dlg_editbox_get(pfd->sourcebox, dlg, str+i, sizeof(str) - i);
- if (!str[2]) {
+ if (!str[i]) {
dlg_error_msg(dlg, "You need to specify a source port number");
return;
}
if (type != 'D') {
*p++ = '\t';
dlg_editbox_get(pfd->destbox, dlg, p,
- sizeof(str)-1 - (p - str));
+ sizeof(str) - (p - str));
if (!*p || !strchr(p, ':')) {
dlg_error_msg(dlg,
"You need to specify a destination address\n"
p++;
p++;
}
- if ((p - cfg->portfwd) + strlen(str) + 2 <
+ if ((p - cfg->portfwd) + strlen(str) + 2 <=
sizeof(cfg->portfwd)) {
strcpy(p, str);
p[strlen(str) + 1] = '\0';
* The Load/Save panel is available even in mid-session.
*/
s = ctrl_getset(b, "Session", "savedsessions",
+ midsession ? "Save the current session settings" :
"Load, save or delete a stored session");
ctrl_columns(s, 2, 75, 25);
ssd->sesslist = sesslist;
sshlogname = NULL; /* this will disable the button */
ctrl_radiobuttons(s, "Session logging:", NO_SHORTCUT, 1,
HELPCTX(logging_main),
- dlg_stdradiobutton_handler,
+ loggingbuttons_handler,
I(offsetof(Config, logtype)),
"Logging turned off completely", 't', I(LGTYP_NONE),
"Log printable output only", 'p', I(LGTYP_ASCII),
'r', 100, HELPCTX(translation_codepage),
codepage_handler, P(NULL), P(NULL));
+ s = ctrl_getset(b, "Window/Translation", "tweaks", NULL);
+ ctrl_checkbox(s, "Treat CJK ambiguous characters as wide", 'w',
+ HELPCTX(translation_cjk_ambig_wide),
+ dlg_stdcheckbox_handler, I(offsetof(Config,cjk_ambig_wide)));
+
str = dupprintf("Adjust how %s handles line drawing characters", appname);
s = ctrl_getset(b, "Window/Translation", "linedraw", str);
sfree(str);
'p', HELPCTX(connection_tcpkeepalive),
dlg_stdcheckbox_handler,
I(offsetof(Config,tcp_keepalives)));
+#ifndef NO_IPV6
s = ctrl_getset(b, "Connection", "ipversion",
"Internet protocol version");
- ctrl_radiobuttons(s, NULL, NO_SHORTCUT,
-#ifndef NO_IPV6
- 3,
-#else
- 2,
-#endif
+ ctrl_radiobuttons(s, NULL, NO_SHORTCUT, 3,
HELPCTX(connection_ipversion),
dlg_stdradiobutton_handler,
I(offsetof(Config, addressfamily)),
"Auto", NO_SHORTCUT, I(ADDRTYPE_UNSPEC),
"IPv4", NO_SHORTCUT, I(ADDRTYPE_IPV4),
-#ifndef NO_IPV6
"IPv6", NO_SHORTCUT, I(ADDRTYPE_IPV6),
-#endif
NULL);
+#endif
}
/*
cipherlist_handler, P(NULL));
c->listbox.height = 6;
- ctrl_checkbox(s, "Enable legacy use of single-DES in SSH 2", 'i',
+ ctrl_checkbox(s, "Enable legacy use of single-DES in SSH-2", 'i',
HELPCTX(ssh_ciphers),
dlg_stdcheckbox_handler,
I(offsetof(Config,ssh2_des_cbc)));
/*
* The Connection/SSH/Kex panel. (Owing to repeat key
* exchange, this is all meaningful in mid-session _if_
- * we're using SSH2 or haven't decided yet.)
+ * we're using SSH-2 or haven't decided yet.)
*/
if (protcfginfo != 1) {
ctrl_settitle(b, "Connection/SSH/Kex",
s = ctrl_getset(b, "Connection/SSH/Kex", "main",
"Key exchange algorithm options");
- c = ctrl_draglist(s, "Algorithm selection policy", 's',
+ c = ctrl_draglist(s, "Algorithm selection policy:", 's',
HELPCTX(ssh_kexlist),
kexlist_handler, P(NULL));
c->listbox.height = 5;
s = ctrl_getset(b, "Connection/SSH/Auth", "methods",
"Authentication methods");
- ctrl_checkbox(s, "Attempt TIS or CryptoCard auth (SSH1)", 'm',
+ ctrl_checkbox(s, "Attempt TIS or CryptoCard auth (SSH-1)", 'm',
HELPCTX(ssh_auth_tis),
dlg_stdcheckbox_handler,
I(offsetof(Config,try_tis_auth)));
- ctrl_checkbox(s, "Attempt \"keyboard-interactive\" auth (SSH2)",
+ ctrl_checkbox(s, "Attempt \"keyboard-interactive\" auth (SSH-2)",
'i', HELPCTX(ssh_auth_ki),
dlg_stdcheckbox_handler,
I(offsetof(Config,try_ki_auth)));
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 SSH2", 'u',
+ ctrl_checkbox(s, "Allow attempted changes of username in SSH-2", 'u',
HELPCTX(ssh_auth_changeuser),
dlg_stdcheckbox_handler,
I(offsetof(Config,change_username)));
HELPCTX(ssh_tunnels_portfwd_localhost),
dlg_stdcheckbox_handler,
I(offsetof(Config,lport_acceptall)));
- ctrl_checkbox(s, "Remote ports do the same (SSH v2 only)", 'p',
+ ctrl_checkbox(s, "Remote ports do the same (SSH-2 only)", 'p',
HELPCTX(ssh_tunnels_portfwd_localhost),
dlg_stdcheckbox_handler,
I(offsetof(Config,rport_acceptall)));
"Remote", 'm', P(NULL),
"Dynamic", 'y', P(NULL),
NULL);
- pfd->addressfamily =
- ctrl_radiobuttons(s, NULL, NO_SHORTCUT,
#ifndef NO_IPV6
- 3,
-#else
- 2,
-#endif
+ pfd->addressfamily =
+ ctrl_radiobuttons(s, NULL, NO_SHORTCUT, 3,
HELPCTX(ssh_tunnels_portfwd_ipversion),
portfwd_handler, P(pfd),
"Auto", NO_SHORTCUT, I(ADDRTYPE_UNSPEC),
"IPv4", NO_SHORTCUT, I(ADDRTYPE_IPV4),
-#ifndef NO_IPV6
"IPv6", NO_SHORTCUT, I(ADDRTYPE_IPV6),
-#endif
NULL);
+#endif
ctrl_tabdelay(s, pfd->addbutton);
ctrl_columns(s, 1, 100);
s = ctrl_getset(b, "Connection/SSH/Bugs", "main",
"Detection of known bugs in SSH servers");
- ctrl_droplist(s, "Chokes on SSH1 ignore messages", 'i', 20,
+ ctrl_droplist(s, "Chokes on SSH-1 ignore messages", 'i', 20,
HELPCTX(ssh_bugs_ignore1),
sshbug_handler, I(offsetof(Config,sshbug_ignore1)));
- ctrl_droplist(s, "Refuses all SSH1 password camouflage", 's', 20,
+ ctrl_droplist(s, "Refuses all SSH-1 password camouflage", 's', 20,
HELPCTX(ssh_bugs_plainpw1),
sshbug_handler, I(offsetof(Config,sshbug_plainpw1)));
- ctrl_droplist(s, "Chokes on SSH1 RSA authentication", 'r', 20,
+ 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, "Miscomputes SSH2 HMAC keys", 'm', 20,
+ ctrl_droplist(s, "Miscomputes SSH-2 HMAC keys", 'm', 20,
HELPCTX(ssh_bugs_hmac2),
sshbug_handler, I(offsetof(Config,sshbug_hmac2)));
- ctrl_droplist(s, "Miscomputes SSH2 encryption keys", 'e', 20,
+ ctrl_droplist(s, "Miscomputes SSH-2 encryption keys", 'e', 20,
HELPCTX(ssh_bugs_derivekey2),
sshbug_handler, I(offsetof(Config,sshbug_derivekey2)));
- ctrl_droplist(s, "Requires padding on SSH2 RSA signatures", 'p', 20,
+ ctrl_droplist(s, "Requires padding on SSH-2 RSA signatures", 'p', 20,
HELPCTX(ssh_bugs_rsapad2),
sshbug_handler, I(offsetof(Config,sshbug_rsapad2)));
- ctrl_droplist(s, "Misuses the session ID in PK auth", 'n', 20,
+ ctrl_droplist(s, "Misuses the session ID in SSH-2 PK auth", 'n', 20,
HELPCTX(ssh_bugs_pksessid2),
sshbug_handler, I(offsetof(Config,sshbug_pksessid2)));
+ ctrl_droplist(s, "Handles SSH-2 key re-exchange badly", 'k', 20,
+ HELPCTX(ssh_bugs_rekey2),
+ sshbug_handler, I(offsetof(Config,sshbug_rekey2)));
}
}
}