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:
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);
|
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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user