X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/33f07e9636e80bb17f25f97145ca2e0eb262db30..18e62ad8969d5b38cfdc28c943f05c59ea7fba5d:/psftp.c diff --git a/psftp.c b/psftp.c index 10056bd5..218d363c 100644 --- a/psftp.c +++ b/psftp.c @@ -1812,11 +1812,27 @@ static int psftp_connect(char *userhost, char *user, int portnumber) user = userhost; } - /* Try to load settings for this host */ - do_defaults(host, &cfg); - if (cfg.host[0] == '\0') { - /* No settings for this host; use defaults */ - do_defaults(NULL, &cfg); + /* + * If we haven't loaded session details already (e.g., from -load), + * try looking for a session called "host". + */ + 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); cfg.host[sizeof(cfg.host) - 1] = '\0'; } @@ -1996,6 +2012,10 @@ int psftp_main(int argc, char *argv[]) userhost = user = NULL; + /* Load Default Settings before doing anything else. */ + do_defaults(NULL, &cfg); + loaded_session = FALSE; + errors = 0; for (i = 1; i < argc; i++) { int ret;