1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-03-22 06:38:37 -05:00

Fix for `psftp-pscp-ignore-load': Default Settings is now loaded

before "-load" is processed so that it doesn't clobber it.

I've also changed the semantics of "-load" slightly for PSCP, PSFTP,
and Plink: if it's specified at all, it overrides (disables) the
implicit loading of session details based on a supplied hostname
elsewhere (on the grounds that the user is more likely to want the
"-load" session than the implicit session). (PuTTY itself doesn't do
implicit loading at all, so I haven't changed it.)

This means that all the PuTTY tools' behaviour is now consistent iff
"-load" is specified (otherwise, some tools have implicit-session, and
others don't).

However, I've not documented this behaviour, as there's a good chance
it will be swept away if and when we get round to sorting out how we
deal with settings from multiple sources. It's intended as a "do
something sensible" change.

[originally from svn r4352]
This commit is contained in:
Jacob Nevins 2004-07-25 14:00:26 +00:00
parent 67f5853cd2
commit c2914f2191
6 changed files with 64 additions and 12 deletions

View File

@ -137,6 +137,7 @@ int cmdline_process_param(char *p, char *value, int need_save, Config *cfg)
/* This parameter must be processed immediately rather than being /* This parameter must be processed immediately rather than being
* saved. */ * saved. */
do_defaults(value, cfg); do_defaults(value, cfg);
loaded_session = TRUE;
return 2; return 2;
} }
if (!strcmp(p, "-ssh")) { if (!strcmp(p, "-ssh")) {

View File

@ -295,6 +295,7 @@ int main(int argc, char **argv)
* Process the command line. * Process the command line.
*/ */
do_defaults(NULL, &cfg); do_defaults(NULL, &cfg);
loaded_session = FALSE;
default_protocol = cfg.protocol; default_protocol = cfg.protocol;
default_port = cfg.port; default_port = cfg.port;
errors = 0; errors = 0;
@ -409,13 +410,15 @@ int main(int argc, char **argv)
*/ */
Config cfg2; Config cfg2;
do_defaults(p, &cfg2); do_defaults(p, &cfg2);
if (cfg2.host[0] == '\0') { if (loaded_session || cfg2.host[0] == '\0') {
/* No settings for this host; use defaults */ /* No settings for this host; use defaults */
/* (or session was already loaded with -load) */
strncpy(cfg.host, p, sizeof(cfg.host) - 1); strncpy(cfg.host, p, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
cfg.port = default_port; cfg.port = default_port;
} else { } else {
cfg = cfg2; cfg = cfg2;
/* Ick: patch up internal pointer after copy */
cfg.remote_cmd_ptr = cfg.remote_cmd; cfg.remote_cmd_ptr = cfg.remote_cmd;
} }
} else { } else {

30
psftp.c
View File

@ -1812,11 +1812,27 @@ static int psftp_connect(char *userhost, char *user, int portnumber)
user = userhost; user = userhost;
} }
/* Try to load settings for this host */ /*
do_defaults(host, &cfg); * If we haven't loaded session details already (e.g., from -load),
if (cfg.host[0] == '\0') { * try looking for a session called "host".
/* No settings for this host; use defaults */ */
do_defaults(NULL, &cfg); if (!loaded_session) {
/* Try to load settings for `host' into a temporary config */
Config cfg2;
cfg2.host[0] = '\0';
do_defaults(host, &cfg2);
if (cfg2.host[0] != '\0') {
/* Settings present and include hostname */
/* Re-load data into the real config. */
do_defaults(host, &cfg);
} else {
/* Session doesn't exist or mention a hostname. */
/* Use `host' as a bare hostname. */
strncpy(cfg.host, host, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0';
}
} else {
/* Patch in hostname `host' to session details. */
strncpy(cfg.host, host, sizeof(cfg.host) - 1); strncpy(cfg.host, host, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
} }
@ -1996,6 +2012,10 @@ int psftp_main(int argc, char *argv[])
userhost = user = NULL; userhost = user = NULL;
/* Load Default Settings before doing anything else. */
do_defaults(NULL, &cfg);
loaded_session = FALSE;
errors = 0; errors = 0;
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
int ret; int ret;

View File

@ -517,6 +517,11 @@ GLOBAL int flags;
GLOBAL int default_protocol; GLOBAL int default_protocol;
GLOBAL int default_port; GLOBAL int default_port;
/*
* This is set TRUE by cmdline.c iff a session is loaded with "-load".
*/
GLOBAL int loaded_session;
struct RSAKey; /* be a little careful of scope */ struct RSAKey; /* be a little careful of scope */
/* /*

30
scp.c
View File

@ -321,11 +321,27 @@ static void do_cmd(char *host, char *user, char *cmd)
if (host == NULL || host[0] == '\0') if (host == NULL || host[0] == '\0')
bump("Empty host name"); bump("Empty host name");
/* Try to load settings for this host */ /*
do_defaults(host, &cfg); * If we haven't loaded session details already (e.g., from -load),
if (cfg.host[0] == '\0') { * try looking for a session called "host".
/* No settings for this host; use defaults */ */
do_defaults(NULL, &cfg); if (!loaded_session) {
/* Try to load settings for `host' into a temporary config */
Config cfg2;
cfg2.host[0] = '\0';
do_defaults(host, &cfg2);
if (cfg2.host[0] != '\0') {
/* Settings present and include hostname */
/* Re-load data into the real config. */
do_defaults(host, &cfg);
} else {
/* Session doesn't exist or mention a hostname. */
/* Use `host' as a bare hostname. */
strncpy(cfg.host, host, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0';
}
} else {
/* Patch in hostname `host' to session details. */
strncpy(cfg.host, host, sizeof(cfg.host) - 1); strncpy(cfg.host, host, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
} }
@ -2158,6 +2174,10 @@ int psftp_main(int argc, char *argv[])
ssh_get_line = &console_get_line; ssh_get_line = &console_get_line;
sk_init(); sk_init();
/* Load Default Settings before doing anything else. */
do_defaults(NULL, &cfg);
loaded_session = FALSE;
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
int ret; int ret;
if (argv[i][0] != '-') if (argv[i][0] != '-')

View File

@ -270,6 +270,7 @@ int main(int argc, char **argv)
* Process the command line. * Process the command line.
*/ */
do_defaults(NULL, &cfg); do_defaults(NULL, &cfg);
loaded_session = FALSE;
default_protocol = cfg.protocol; default_protocol = cfg.protocol;
default_port = cfg.port; default_port = cfg.port;
errors = 0; errors = 0;
@ -396,13 +397,15 @@ int main(int argc, char **argv)
*/ */
Config cfg2; Config cfg2;
do_defaults(p, &cfg2); do_defaults(p, &cfg2);
if (cfg2.host[0] == '\0') { if (loaded_session || cfg2.host[0] == '\0') {
/* No settings for this host; use defaults */ /* No settings for this host; use defaults */
/* (or session was already loaded with -load) */
strncpy(cfg.host, p, sizeof(cfg.host) - 1); strncpy(cfg.host, p, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
cfg.port = default_port; cfg.port = default_port;
} else { } else {
cfg = cfg2; cfg = cfg2;
/* Ick: patch up internal pointer after copy */
cfg.remote_cmd_ptr = cfg.remote_cmd; cfg.remote_cmd_ptr = cfg.remote_cmd;
} }
} else { } else {