1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-26 09:42:25 +00:00

Fix an annoying inconsistency that's been bugging me for years: "plink host"

and "plink user@host" differed in that the former attempted to load session
`host' while the latter didn't. Now both forms attempt to load a session.
Someone will probably complain, but hey.

[originally from svn r4485]
This commit is contained in:
Jacob Nevins 2004-08-19 15:05:31 +00:00
parent 87ecc7e052
commit 97fb4184d8
2 changed files with 54 additions and 44 deletions

49
plink.c
View File

@ -368,7 +368,7 @@ int main(int argc, char **argv)
strncpy(cfg.host, q, sizeof(cfg.host) - 1); strncpy(cfg.host, q, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
} else { } else {
char *r; char *r, *user, *host;
/* /*
* Before we process the [user@]host string, we * Before we process the [user@]host string, we
* first check for the presence of a protocol * first check for the presence of a protocol
@ -392,28 +392,32 @@ int main(int argc, char **argv)
} }
/* /*
* Three cases. Either (a) there's a nonzero * A nonzero length string followed by an @ is treated
* length string followed by an @, in which * as a username. (We discount an _initial_ @.) The
* case that's user and the remainder is host. * rest of the string (or the whole string if no @)
* Or (b) there's only one string, not counting * is treated as a session name and/or hostname.
* a potential initial @, and it exists in the
* saved-sessions database. Or (c) only one
* string and it _doesn't_ exist in the
* database.
*/ */
r = strrchr(p, '@'); r = strrchr(p, '@');
if (r == p) if (r == p)
p++, r = NULL; /* discount initial @ */ p++, r = NULL; /* discount initial @ */
if (r == NULL) { if (r) {
/* *r++ = '\0';
* One string. user = p, host = r;
*/ } else {
user = NULL, host = p;
}
/*
* Now attempt to load a saved session with the
* same name as the hostname.
*/
{
Config cfg2; Config cfg2;
do_defaults(p, &cfg2); do_defaults(host, &cfg2);
if (loaded_session || 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) */ /* (or session was already loaded with -load) */
strncpy(cfg.host, p, 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';
cfg.port = default_port; cfg.port = default_port;
} else { } else {
@ -421,14 +425,15 @@ int main(int argc, char **argv)
/* Ick: patch up internal pointer after copy */ /* Ick: patch up internal pointer after copy */
cfg.remote_cmd_ptr = cfg.remote_cmd; cfg.remote_cmd_ptr = cfg.remote_cmd;
} }
} else {
*r++ = '\0';
strncpy(cfg.username, p, sizeof(cfg.username) - 1);
cfg.username[sizeof(cfg.username) - 1] = '\0';
strncpy(cfg.host, r, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0';
cfg.port = default_port;
} }
if (user) {
/* Patch in specified username. */
strncpy(cfg.username, user,
sizeof(cfg.username) - 1);
cfg.username[sizeof(cfg.username) - 1] = '\0';
}
} }
} else { } else {
char *command; char *command;

View File

@ -355,7 +355,7 @@ int main(int argc, char **argv)
strncpy(cfg.host, q, sizeof(cfg.host) - 1); strncpy(cfg.host, q, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0'; cfg.host[sizeof(cfg.host) - 1] = '\0';
} else { } else {
char *r; char *r, *user, *host;
/* /*
* Before we process the [user@]host string, we * Before we process the [user@]host string, we
* first check for the presence of a protocol * first check for the presence of a protocol
@ -379,28 +379,32 @@ int main(int argc, char **argv)
} }
/* /*
* Three cases. Either (a) there's a nonzero * A nonzero length string followed by an @ is treated
* length string followed by an @, in which * as a username. (We discount an _initial_ @.) The
* case that's user and the remainder is host. * rest of the string (or the whole string if no @)
* Or (b) there's only one string, not counting * is treated as a session name and/or hostname.
* a potential initial @, and it exists in the
* saved-sessions database. Or (c) only one
* string and it _doesn't_ exist in the
* database.
*/ */
r = strrchr(p, '@'); r = strrchr(p, '@');
if (r == p) if (r == p)
p++, r = NULL; /* discount initial @ */ p++, r = NULL; /* discount initial @ */
if (r == NULL) { if (r) {
/* *r++ = '\0';
* One string. user = p, host = r;
*/ } else {
user = NULL, host = p;
}
/*
* Now attempt to load a saved session with the
* same name as the hostname.
*/
{
Config cfg2; Config cfg2;
do_defaults(p, &cfg2); do_defaults(host, &cfg2);
if (loaded_session || 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) */ /* (or session was already loaded with -load) */
strncpy(cfg.host, p, 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';
cfg.port = default_port; cfg.port = default_port;
} else { } else {
@ -408,14 +412,15 @@ int main(int argc, char **argv)
/* Ick: patch up internal pointer after copy */ /* Ick: patch up internal pointer after copy */
cfg.remote_cmd_ptr = cfg.remote_cmd; cfg.remote_cmd_ptr = cfg.remote_cmd;
} }
} else {
*r++ = '\0';
strncpy(cfg.username, p, sizeof(cfg.username) - 1);
cfg.username[sizeof(cfg.username) - 1] = '\0';
strncpy(cfg.host, r, sizeof(cfg.host) - 1);
cfg.host[sizeof(cfg.host) - 1] = '\0';
cfg.port = default_port;
} }
if (user) {
/* Patch in specified username. */
strncpy(cfg.username, user,
sizeof(cfg.username) - 1);
cfg.username[sizeof(cfg.username) - 1] = '\0';
}
} }
} else { } else {
char *command; char *command;