mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 01:48:00 +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:
parent
87ecc7e052
commit
97fb4184d8
49
plink.c
49
plink.c
@ -368,7 +368,7 @@ int main(int argc, char **argv)
|
||||
strncpy(cfg.host, q, sizeof(cfg.host) - 1);
|
||||
cfg.host[sizeof(cfg.host) - 1] = '\0';
|
||||
} else {
|
||||
char *r;
|
||||
char *r, *user, *host;
|
||||
/*
|
||||
* Before we process the [user@]host string, we
|
||||
* 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
|
||||
* length string followed by an @, in which
|
||||
* case that's user and the remainder is host.
|
||||
* Or (b) there's only one string, not counting
|
||||
* a potential initial @, and it exists in the
|
||||
* saved-sessions database. Or (c) only one
|
||||
* string and it _doesn't_ exist in the
|
||||
* database.
|
||||
* A nonzero length string followed by an @ is treated
|
||||
* as a username. (We discount an _initial_ @.) The
|
||||
* rest of the string (or the whole string if no @)
|
||||
* is treated as a session name and/or hostname.
|
||||
*/
|
||||
r = strrchr(p, '@');
|
||||
if (r == p)
|
||||
p++, r = NULL; /* discount initial @ */
|
||||
if (r == NULL) {
|
||||
/*
|
||||
* One string.
|
||||
*/
|
||||
if (r) {
|
||||
*r++ = '\0';
|
||||
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;
|
||||
do_defaults(p, &cfg2);
|
||||
do_defaults(host, &cfg2);
|
||||
if (loaded_session || cfg2.host[0] == '\0') {
|
||||
/* 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, host, sizeof(cfg.host) - 1);
|
||||
cfg.host[sizeof(cfg.host) - 1] = '\0';
|
||||
cfg.port = default_port;
|
||||
} else {
|
||||
@ -421,14 +425,15 @@ int main(int argc, char **argv)
|
||||
/* Ick: patch up internal pointer after copy */
|
||||
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 {
|
||||
char *command;
|
||||
|
@ -355,7 +355,7 @@ int main(int argc, char **argv)
|
||||
strncpy(cfg.host, q, sizeof(cfg.host) - 1);
|
||||
cfg.host[sizeof(cfg.host) - 1] = '\0';
|
||||
} else {
|
||||
char *r;
|
||||
char *r, *user, *host;
|
||||
/*
|
||||
* Before we process the [user@]host string, we
|
||||
* 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
|
||||
* length string followed by an @, in which
|
||||
* case that's user and the remainder is host.
|
||||
* Or (b) there's only one string, not counting
|
||||
* a potential initial @, and it exists in the
|
||||
* saved-sessions database. Or (c) only one
|
||||
* string and it _doesn't_ exist in the
|
||||
* database.
|
||||
* A nonzero length string followed by an @ is treated
|
||||
* as a username. (We discount an _initial_ @.) The
|
||||
* rest of the string (or the whole string if no @)
|
||||
* is treated as a session name and/or hostname.
|
||||
*/
|
||||
r = strrchr(p, '@');
|
||||
if (r == p)
|
||||
p++, r = NULL; /* discount initial @ */
|
||||
if (r == NULL) {
|
||||
/*
|
||||
* One string.
|
||||
*/
|
||||
if (r) {
|
||||
*r++ = '\0';
|
||||
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;
|
||||
do_defaults(p, &cfg2);
|
||||
do_defaults(host, &cfg2);
|
||||
if (loaded_session || cfg2.host[0] == '\0') {
|
||||
/* 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, host, sizeof(cfg.host) - 1);
|
||||
cfg.host[sizeof(cfg.host) - 1] = '\0';
|
||||
cfg.port = default_port;
|
||||
} else {
|
||||
@ -408,14 +412,15 @@ int main(int argc, char **argv)
|
||||
/* Ick: patch up internal pointer after copy */
|
||||
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 {
|
||||
char *command;
|
||||
|
Loading…
Reference in New Issue
Block a user