X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/e65096f25904d6ac34414fb99d4ad62eb3fd823b..881da16842e210236b12a040a19bf480de3a5a92:/settings.c diff --git a/settings.c b/settings.c index 0d3798aa..a175e4d7 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 } }; @@ -51,6 +52,29 @@ const char *const ttymodes[] = { "CS8", "PARENB", "PARODD", NULL }; +/* + * Convenience functions to access the backends[] array + * (which is only present in tools that manage settings). + */ + +Backend *backend_from_name(const char *name) +{ + Backend **p; + for (p = backends; *p != NULL; p++) + if (!strcmp((*p)->name, name)) + return *p; + return NULL; +} + +Backend *backend_from_proto(int proto) +{ + Backend **p; + for (p = backends; *p != NULL; p++) + if ((*p)->protocol == proto) + return *p; + return NULL; +} + static void gpps(void *handle, const char *name, const char *def, char *val, int len) { @@ -231,7 +255,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 +263,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); @@ -260,11 +282,11 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "SSHLogOmitPasswords", cfg->logomitpass); write_setting_i(sesskey, "SSHLogOmitData", cfg->logomitdata); p = "raw"; - for (i = 0; backends[i].name != NULL; i++) - if (backends[i].protocol == cfg->protocol) { - p = backends[i].name; - break; - } + { + const Backend *b = backend_from_proto(cfg->protocol); + if (b) + p = b->name; + } write_setting_s(sesskey, "Protocol", p); write_setting_i(sesskey, "PortNumber", cfg->port); /* The CloseOnExit numbers are arranged in a different order from @@ -310,6 +332,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "AuthKI", cfg->try_ki_auth); write_setting_i(sesskey, "SshNoShell", cfg->ssh_no_shell); write_setting_i(sesskey, "SshProt", cfg->sshprot); + write_setting_s(sesskey, "LogHost", cfg->loghost); write_setting_i(sesskey, "SSH2DES", cfg->ssh2_des_cbc); write_setting_filename(sesskey, "PublicKeyFile", cfg->keyfile); write_setting_s(sesskey, "RemoteCommand", cfg->remote_cmd); @@ -366,6 +389,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "DECOriginMode", cfg->dec_om); write_setting_i(sesskey, "AutoWrapMode", cfg->wrap_mode); write_setting_i(sesskey, "LFImpliesCR", cfg->lfhascr); + write_setting_i(sesskey, "CRImpliesLF", cfg->crhaslf); write_setting_i(sesskey, "DisableArabicShaping", cfg->arabicshaping); write_setting_i(sesskey, "DisableBidi", cfg->bidi); write_setting_i(sesskey, "WinNameAlways", cfg->win_name_always); @@ -431,6 +455,7 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) write_setting_i(sesskey, "BugRSAPad2", 2-cfg->sshbug_rsapad2); write_setting_i(sesskey, "BugPKSessID2", 2-cfg->sshbug_pksessid2); write_setting_i(sesskey, "BugRekey2", 2-cfg->sshbug_rekey2); + write_setting_i(sesskey, "BugMaxPkt2", 2-cfg->sshbug_maxpkt2); write_setting_i(sesskey, "StampUtmp", cfg->stamp_utmp); write_setting_i(sesskey, "LoginShell", cfg->login_shell); write_setting_i(sesskey, "ScrollbarOnLeft", cfg->scrollbar_on_left); @@ -447,16 +472,16 @@ void save_open_settings(void *sesskey, int do_host, Config *cfg) 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]; @@ -466,11 +491,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) 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); @@ -481,12 +502,13 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gpps(sesskey, "Protocol", "default", prot, 10); cfg->protocol = default_protocol; cfg->port = default_port; - for (i = 0; backends[i].name != NULL; i++) - if (!strcmp(prot, backends[i].name)) { - cfg->protocol = backends[i].protocol; + { + const Backend *b = backend_from_name(prot); + if (b) { + cfg->protocol = b->protocol; gppi(sesskey, "PortNumber", default_port, &cfg->port); - break; } + } /* Address family selection */ gppi(sesskey, "AddressFamily", ADDRTYPE_UNSPEC, &cfg->addressfamily); @@ -577,9 +599,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); } @@ -587,6 +609,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gpps(sesskey, "RekeyBytes", "1G", cfg->ssh_rekey_data, sizeof(cfg->ssh_rekey_data)); gppi(sesskey, "SshProt", 2, &cfg->sshprot); + gpps(sesskey, "LogHost", "", cfg->loghost, sizeof(cfg->loghost)); gppi(sesskey, "SSH2DES", 0, &cfg->ssh2_des_cbc); gppi(sesskey, "SshNoAuth", 0, &cfg->ssh_no_userauth); gppi(sesskey, "AuthTIS", 0, &cfg->try_tis_auth); @@ -662,6 +685,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gppi(sesskey, "DECOriginMode", 0, &cfg->dec_om); gppi(sesskey, "AutoWrapMode", 1, &cfg->wrap_mode); gppi(sesskey, "LFImpliesCR", 0, &cfg->lfhascr); + gppi(sesskey, "CRImpliesLF", 0, &cfg->crhaslf); gppi(sesskey, "DisableArabicShaping", 0, &cfg->arabicshaping); gppi(sesskey, "DisableBidi", 0, &cfg->bidi); gppi(sesskey, "WinNameAlways", 1, &cfg->win_name_always); @@ -767,6 +791,8 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) gppi(sesskey, "BugRSAPad2", 0, &i); cfg->sshbug_rsapad2 = 2-i; gppi(sesskey, "BugPKSessID2", 0, &i); cfg->sshbug_pksessid2 = 2-i; gppi(sesskey, "BugRekey2", 0, &i); cfg->sshbug_rekey2 = 2-i; + gppi(sesskey, "BugMaxPkt2", 0, &i); cfg->sshbug_maxpkt2 = 2-i; + cfg->ssh_simple = FALSE; gppi(sesskey, "StampUtmp", 1, &cfg->stamp_utmp); gppi(sesskey, "LoginShell", 1, &cfg->login_shell); gppi(sesskey, "ScrollbarOnLeft", 0, &cfg->scrollbar_on_left); @@ -785,7 +811,7 @@ void load_open_settings(void *sesskey, int do_host, Config *cfg) 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)