X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/e111b81fd51dc9e942c7eff1a94045a81b34cc9f..fae1a71b5a2fd1b2983be523350c3dae4b5e6903:/settings.c diff --git a/settings.c b/settings.c index 6197c1ea..c937d3c9 100644 --- a/settings.c +++ b/settings.c @@ -27,6 +27,7 @@ static const struct keyval kexnames[] = { { "dh-gex-sha1", KEX_DHGEX }, { "dh-group14-sha1", KEX_DHGROUP14 }, { "dh-group1-sha1", KEX_DHGROUP1 }, + { "rsa", KEX_RSA }, { "WARN", KEX_WARN } }; @@ -231,7 +232,7 @@ static void wprefs(void *sesskey, char *name, write_setting_s(sesskey, name, buf); } -char *save_settings(char *section, int do_host, Config * cfg) +char *save_settings(char *section, Config * cfg) { void *sesskey; char *errmsg; @@ -239,20 +240,18 @@ char *save_settings(char *section, int do_host, Config * cfg) sesskey = open_settings_w(section, &errmsg); if (!sesskey) return errmsg; - save_open_settings(sesskey, do_host, cfg); + save_open_settings(sesskey, cfg); close_settings_w(sesskey); return NULL; } -void save_open_settings(void *sesskey, int do_host, Config *cfg) +void save_open_settings(void *sesskey, Config *cfg) { int i; char *p; write_setting_i(sesskey, "Present", 1); - if (do_host) { - write_setting_s(sesskey, "HostName", cfg->host); - } + write_setting_s(sesskey, "HostName", cfg->host); write_setting_filename(sesskey, "LogFileName", cfg->logfilename); write_setting_i(sesskey, "LogType", cfg->logtype); write_setting_i(sesskey, "LogFileClash", cfg->logxfovr); @@ -297,6 +296,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_s(sesskey, "LocalUserName", cfg->localusername); write_setting_i(sesskey, "NoPTY", cfg->nopty); write_setting_i(sesskey, "Compression", cfg->compression); + write_setting_i(sesskey, "TryAgent", cfg->tryagent); write_setting_i(sesskey, "AgentFwd", cfg->agentfwd); write_setting_i(sesskey, "ChangeUsername", cfg->change_username); wprefs(sesskey, "Cipher", ciphernames, CIPHER_MAX, @@ -323,7 +323,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "NoRemoteResize", cfg->no_remote_resize); write_setting_i(sesskey, "NoAltScreen", cfg->no_alt_screen); write_setting_i(sesskey, "NoRemoteWinTitle", cfg->no_remote_wintitle); - write_setting_i(sesskey, "NoRemoteQTitle", cfg->no_remote_qtitle); + write_setting_i(sesskey, "RemoteQTitleAction", cfg->remote_qtitle_action); write_setting_i(sesskey, "NoDBackspace", cfg->no_dbackspace); write_setting_i(sesskey, "NoRemoteCharset", cfg->no_remote_charset); write_setting_i(sesskey, "ApplicationCursorKeys", cfg->app_cursor); @@ -372,6 +372,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "TermWidth", cfg->width); write_setting_i(sesskey, "TermHeight", cfg->height); write_setting_fontspec(sesskey, "Font", cfg->font); + write_setting_i(sesskey, "FontQuality", cfg->font_quality); write_setting_i(sesskey, "FontVTMode", cfg->vtmode); write_setting_i(sesskey, "UseSystemColours", cfg->system_colour); write_setting_i(sesskey, "TryPalette", cfg->try_palette); @@ -437,18 +438,24 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_fontspec(sesskey, "WideBoldFont", cfg->wideboldfont); write_setting_i(sesskey, "ShadowBold", cfg->shadowbold); write_setting_i(sesskey, "ShadowBoldOffset", cfg->shadowboldoffset); + write_setting_s(sesskey, "SerialLine", cfg->serline); + write_setting_i(sesskey, "SerialSpeed", cfg->serspeed); + write_setting_i(sesskey, "SerialDataBits", cfg->serdatabits); + write_setting_i(sesskey, "SerialStopHalfbits", cfg->serstopbits); + write_setting_i(sesskey, "SerialParity", cfg->serparity); + write_setting_i(sesskey, "SerialFlowControl", cfg->serflow); } -void load_settings(char *section, int do_host, Config * cfg) +void load_settings(char *section, Config * cfg) { void *sesskey; sesskey = open_settings_r(section); - load_open_settings(sesskey, do_host, cfg); + load_open_settings(sesskey, cfg); close_settings_r(sesskey); } -void load_open_settings(void *sesskey, int do_host, Config *cfg) +void load_open_settings(void *sesskey, Config *cfg) { int i; char prot[10]; @@ -456,12 +463,9 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) cfg->ssh_subsys = 0; /* FIXME: load this properly */ cfg->remote_cmd_ptr = NULL; cfg->remote_cmd_ptr2 = NULL; + cfg->ssh_nc_host[0] = '\0'; - if (do_host) { - gpps(sesskey, "HostName", "", cfg->host, sizeof(cfg->host)); - } else { - cfg->host[0] = '\0'; /* blank hostname */ - } + gpps(sesskey, "HostName", "", cfg->host, sizeof(cfg->host)); gppfile(sesskey, "LogFileName", &cfg->logfilename); gppi(sesskey, "LogType", 0, &cfg->logtype); gppi(sesskey, "LogFileClash", LGXF_ASK, &cfg->logxfovr); @@ -555,6 +559,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) sizeof(cfg->localusername)); gppi(sesskey, "NoPTY", 0, &cfg->nopty); gppi(sesskey, "Compression", 0, &cfg->compression); + gppi(sesskey, "TryAgent", 1, &cfg->tryagent); gppi(sesskey, "AgentFwd", 0, &cfg->agentfwd); gppi(sesskey, "ChangeUsername", 0, &cfg->change_username); gprefs(sesskey, "Cipher", "\0", @@ -567,9 +572,9 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) char *default_kexes; gppi(sesskey, "BugDHGEx2", 0, &i); i = 2-i; if (i == FORCE_ON) - default_kexes = "dh-group14-sha1,dh-group1-sha1,WARN,dh-gex-sha1"; + default_kexes = "dh-group14-sha1,dh-group1-sha1,rsa,WARN,dh-gex-sha1"; else - default_kexes = "dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,WARN"; + default_kexes = "dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,rsa,WARN"; gprefs(sesskey, "KEX", default_kexes, kexnames, KEX_MAX, cfg->ssh_kexlist); } @@ -596,7 +601,17 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gppi(sesskey, "NoRemoteResize", 0, &cfg->no_remote_resize); gppi(sesskey, "NoAltScreen", 0, &cfg->no_alt_screen); gppi(sesskey, "NoRemoteWinTitle", 0, &cfg->no_remote_wintitle); - gppi(sesskey, "NoRemoteQTitle", 1, &cfg->no_remote_qtitle); + { + /* Backward compatibility */ + int no_remote_qtitle; + gppi(sesskey, "NoRemoteQTitle", 1, &no_remote_qtitle); + /* We deliberately interpret the old setting of "no response" as + * "empty string". This changes the behaviour, but hopefully for + * the better; the user can always recover the old behaviour. */ + gppi(sesskey, "RemoteQTitleAction", + no_remote_qtitle ? TITLE_EMPTY : TITLE_REAL, + &cfg->remote_qtitle_action); + } gppi(sesskey, "NoDBackspace", 0, &cfg->no_dbackspace); gppi(sesskey, "NoRemoteCharset", 0, &cfg->no_remote_charset); gppi(sesskey, "ApplicationCursorKeys", 0, &cfg->app_cursor); @@ -649,6 +664,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gppi(sesskey, "TermWidth", 80, &cfg->width); gppi(sesskey, "TermHeight", 24, &cfg->height); gppfont(sesskey, "Font", &cfg->font); + gppi(sesskey, "FontQuality", FQ_DEFAULT, &cfg->font_quality); gppi(sesskey, "FontVTMode", VT_UNICODE, (int *) &cfg->vtmode); gppi(sesskey, "UseSystemColours", 0, &cfg->system_colour); gppi(sesskey, "TryPalette", 0, &cfg->try_palette); @@ -754,11 +770,17 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gppfont(sesskey, "WideFont", &cfg->widefont); gppfont(sesskey, "WideBoldFont", &cfg->wideboldfont); gppi(sesskey, "ShadowBoldOffset", 1, &cfg->shadowboldoffset); + gpps(sesskey, "SerialLine", "", cfg->serline, sizeof(cfg->serline)); + gppi(sesskey, "SerialSpeed", 9600, &cfg->serspeed); + gppi(sesskey, "SerialDataBits", 8, &cfg->serdatabits); + gppi(sesskey, "SerialStopHalfbits", 2, &cfg->serstopbits); + gppi(sesskey, "SerialParity", SER_PAR_NONE, &cfg->serparity); + gppi(sesskey, "SerialFlowControl", SER_FLOW_XONXOFF, &cfg->serflow); } void do_defaults(char *session, Config * cfg) { - load_settings(session, (session != NULL && *session), cfg); + load_settings(session, cfg); } static int sessioncmp(const void *av, const void *bv)