X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=settings.c;h=898c0dabc97ea18841962689dfc6f71a67ece2f7;hb=cc66c86e7311c97db09da989c340ba3108c9e14f;hp=a561602c9f0698fae005a3d3131dc6ddb4ed27dd;hpb=71f0c7546dfa8930277c895b88f57585fd8ef854;p=PuTTY.git diff --git a/settings.c b/settings.c index a561602c..898c0dab 100644 --- a/settings.c +++ b/settings.c @@ -138,7 +138,8 @@ static void gppi(void *handle, char *name, int def, Conf *conf, int primary) * Read a set of name-value pairs in the format we occasionally use: * NAME\tVALUE\0NAME\tVALUE\0\0 in memory * NAME=VALUE,NAME=VALUE, in storage - * `def' is in the storage format. + * If there's no "=VALUE" (e.g. just NAME,NAME,NAME) then those keys + * are mapped to the empty string. */ static int gppmap(void *handle, char *name, Conf *conf, int primary) { @@ -178,7 +179,7 @@ static int gppmap(void *handle, char *name, Conf *conf, int primary) val = q; *q = '\0'; - if (primary == CONF_portfwd && buf[0] == 'D') { + if (primary == CONF_portfwd && strchr(buf, 'D') != NULL) { /* * Backwards-compatibility hack: dynamic forwardings are * indexed in the data store as a third type letter in the @@ -188,9 +189,10 @@ static int gppmap(void *handle, char *name, Conf *conf, int primary) * _listening_ on a local port, and are hence mutually * exclusive on the same port number. So here we translate * the legacy storage format into the sensible internal - * form. + * form, by finding the D and turning it into a L. */ - char *newkey = dupcat("L", buf+1, NULL); + char *newkey = dupstr(buf); + *strchr(newkey, 'D') = 'L'; conf_set_str_str(conf, primary, newkey, "D"); sfree(newkey); } else { @@ -203,9 +205,11 @@ static int gppmap(void *handle, char *name, Conf *conf, int primary) } /* - * Write a set of name/value pairs in the above format. + * Write a set of name/value pairs in the above format, or just the + * names if include_values is FALSE. */ -static void wmap(void *handle, char const *outkey, Conf *conf, int primary) +static void wmap(void *handle, char const *outkey, Conf *conf, int primary, + int include_values) { char *buf, *p, *q, *key, *realkey, *val; int len; @@ -232,9 +236,13 @@ static void wmap(void *handle, char const *outkey, Conf *conf, int primary) * conceptually incoherent legacy storage format (key * "D", value empty). */ + char *L; + realkey = key; /* restore it at end of loop */ val = ""; - key = dupcat("D", key+1, NULL); + key = dupstr(key); + L = strchr(key, 'L'); + if (L) *L = 'D'; } else { realkey = NULL; } @@ -246,12 +254,14 @@ static void wmap(void *handle, char const *outkey, Conf *conf, int primary) *p++ = '\\'; *p++ = *q; } - *p++ = '='; - for (q = val; *q; q++) { - if (*q == '=' || *q == ',' || *q == '\\') - *p++ = '\\'; - *p++ = *q; - } + if (include_values) { + *p++ = '='; + for (q = val; *q; q++) { + if (*q == '=' || *q == ',' || *q == '\\') + *p++ = '\\'; + *p++ = *q; + } + } if (realkey) { free(key); @@ -451,7 +461,7 @@ void save_open_settings(void *sesskey, Conf *conf) write_setting_i(sesskey, "TCPKeepalives", conf_get_int(conf, CONF_tcp_keepalives)); write_setting_s(sesskey, "TerminalType", conf_get_str(conf, CONF_termtype)); write_setting_s(sesskey, "TerminalSpeed", conf_get_str(conf, CONF_termspeed)); - wmap(sesskey, "TerminalModes", conf, CONF_ttymodes); + wmap(sesskey, "TerminalModes", conf, CONF_ttymodes, TRUE); /* Address family selection */ write_setting_i(sesskey, "AddressFamily", conf_get_int(conf, CONF_addressfamily)); @@ -466,7 +476,7 @@ void save_open_settings(void *sesskey, Conf *conf) write_setting_s(sesskey, "ProxyUsername", conf_get_str(conf, CONF_proxy_username)); write_setting_s(sesskey, "ProxyPassword", conf_get_str(conf, CONF_proxy_password)); write_setting_s(sesskey, "ProxyTelnetCommand", conf_get_str(conf, CONF_proxy_telnet_command)); - wmap(sesskey, "Environment", conf, CONF_environmt); + wmap(sesskey, "Environment", conf, CONF_environmt, TRUE); write_setting_s(sesskey, "UserName", conf_get_str(conf, CONF_username)); write_setting_i(sesskey, "UserNameFromEnvironment", conf_get_int(conf, CONF_username_from_env)); write_setting_s(sesskey, "LocalUserName", conf_get_str(conf, CONF_localusername)); @@ -609,7 +619,7 @@ void save_open_settings(void *sesskey, Conf *conf) write_setting_filename(sesskey, "X11AuthFile", conf_get_filename(conf, CONF_xauthfile)); write_setting_i(sesskey, "LocalPortAcceptAll", conf_get_int(conf, CONF_lport_acceptall)); write_setting_i(sesskey, "RemotePortAcceptAll", conf_get_int(conf, CONF_rport_acceptall)); - wmap(sesskey, "PortForwardings", conf, CONF_portfwd); + wmap(sesskey, "PortForwardings", conf, CONF_portfwd, TRUE); write_setting_i(sesskey, "BugIgnore1", 2-conf_get_int(conf, CONF_sshbug_ignore1)); write_setting_i(sesskey, "BugPlainPW1", 2-conf_get_int(conf, CONF_sshbug_plainpw1)); write_setting_i(sesskey, "BugRSA1", 2-conf_get_int(conf, CONF_sshbug_rsa1)); @@ -621,6 +631,7 @@ void save_open_settings(void *sesskey, Conf *conf) write_setting_i(sesskey, "BugRekey2", 2-conf_get_int(conf, CONF_sshbug_rekey2)); write_setting_i(sesskey, "BugMaxPkt2", 2-conf_get_int(conf, CONF_sshbug_maxpkt2)); write_setting_i(sesskey, "BugWinadj", 2-conf_get_int(conf, CONF_sshbug_winadj)); + write_setting_i(sesskey, "BugChanReq", 2-conf_get_int(conf, CONF_sshbug_chanreq)); write_setting_i(sesskey, "StampUtmp", conf_get_int(conf, CONF_stamp_utmp)); write_setting_i(sesskey, "LoginShell", conf_get_int(conf, CONF_login_shell)); write_setting_i(sesskey, "ScrollbarOnLeft", conf_get_int(conf, CONF_scrollbar_on_left)); @@ -636,6 +647,10 @@ void save_open_settings(void *sesskey, Conf *conf) write_setting_i(sesskey, "SerialParity", conf_get_int(conf, CONF_serparity)); write_setting_i(sesskey, "SerialFlowControl", conf_get_int(conf, CONF_serflow)); write_setting_s(sesskey, "WindowClass", conf_get_str(conf, CONF_winclass)); + write_setting_i(sesskey, "ConnectionSharing", conf_get_int(conf, CONF_ssh_connection_sharing)); + write_setting_i(sesskey, "ConnectionSharingUpstream", conf_get_int(conf, CONF_ssh_connection_sharing_upstream)); + write_setting_i(sesskey, "ConnectionSharingDownstream", conf_get_int(conf, CONF_ssh_connection_sharing_downstream)); + wmap(sesskey, "SSHManualHostKeys", conf, CONF_ssh_manual_hostkeys, FALSE); } void load_settings(char *section, Conf *conf) @@ -848,7 +863,7 @@ void load_open_settings(void *sesskey, Conf *conf) / 1000 #endif ); - gppi(sesskey, "ScrollbackLines", 200, conf, CONF_savelines); + gppi(sesskey, "ScrollbackLines", 2000, conf, CONF_savelines); gppi(sesskey, "DECOriginMode", 0, conf, CONF_dec_om); gppi(sesskey, "AutoWrapMode", 1, conf, CONF_wrap_mode); gppi(sesskey, "LFImpliesCR", 0, conf, CONF_lfhascr); @@ -866,7 +881,7 @@ void load_open_settings(void *sesskey, Conf *conf) gppi(sesskey, "TryPalette", 0, conf, CONF_try_palette); gppi(sesskey, "ANSIColour", 1, conf, CONF_ansi_colour); gppi(sesskey, "Xterm256Colour", 1, conf, CONF_xterm_256_colour); - i = gppi_raw(sesskey, "BoldAsColour", 0); conf_set_int(conf, CONF_bold_style, i+1); + i = gppi_raw(sesskey, "BoldAsColour", 1); conf_set_int(conf, CONF_bold_style, i+1); for (i = 0; i < 22; i++) { static const char *const defaults[] = { @@ -962,6 +977,7 @@ void load_open_settings(void *sesskey, Conf *conf) i = gppi_raw(sesskey, "BugRekey2", 0); conf_set_int(conf, CONF_sshbug_rekey2, 2-i); i = gppi_raw(sesskey, "BugMaxPkt2", 0); conf_set_int(conf, CONF_sshbug_maxpkt2, 2-i); i = gppi_raw(sesskey, "BugWinadj", 0); conf_set_int(conf, CONF_sshbug_winadj, 2-i); + i = gppi_raw(sesskey, "BugChanReq", 0); conf_set_int(conf, CONF_sshbug_chanreq, 2-i); conf_set_int(conf, CONF_ssh_simple, FALSE); gppi(sesskey, "StampUtmp", 1, conf, CONF_stamp_utmp); gppi(sesskey, "LoginShell", 1, conf, CONF_login_shell); @@ -978,6 +994,10 @@ void load_open_settings(void *sesskey, Conf *conf) gppi(sesskey, "SerialParity", SER_PAR_NONE, conf, CONF_serparity); gppi(sesskey, "SerialFlowControl", SER_FLOW_XONXOFF, conf, CONF_serflow); gpps(sesskey, "WindowClass", "", conf, CONF_winclass); + gppi(sesskey, "ConnectionSharing", 0, conf, CONF_ssh_connection_sharing); + gppi(sesskey, "ConnectionSharingUpstream", 1, conf, CONF_ssh_connection_sharing_upstream); + gppi(sesskey, "ConnectionSharingDownstream", 1, conf, CONF_ssh_connection_sharing_downstream); + gppmap(sesskey, "SSHManualHostKeys", conf, CONF_ssh_manual_hostkeys); } void do_defaults(char *session, Conf *conf)