mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
Avoid misidentifying unbracketed IPv6 literals as host:port.
Both GUI PuTTY front ends have a piece of logic whereby a string is interpreted as host:port if there's _one_ colon in it, but if there's more than one colon then it's assumed to be an IPv6 literal with no trailing port number. This permits the PuTTY command line to take strings such as 'host', 'host:22' or '[::1]:22', but also cope with a bare v6 literal such as '::1'. This logic is also required in the two Plink front ends and in the processing of CONF_loghost for host key indexing in ssh.c, but was missing in all those places. Add it. [originally from svn r10121]
This commit is contained in:
parent
8da4fa5063
commit
2b70f39061
5
ssh.c
5
ssh.c
@ -3419,10 +3419,11 @@ static const char *connect_to_host(Ssh ssh, char *host, int port,
|
||||
|
||||
/*
|
||||
* A colon suffix on the hostname string also lets us affect
|
||||
* savedport.
|
||||
* savedport. (Unless there are multiple colons, in which case
|
||||
* we assume this is an unbracketed IPv6 literal.)
|
||||
*/
|
||||
colon = host_strrchr(tmphost, ':');
|
||||
if (colon) {
|
||||
if (colon && colon == host_strchr(tmphost, ':')) {
|
||||
*colon++ = '\0';
|
||||
if (*colon)
|
||||
ssh->savedport = atoi(colon);
|
||||
|
@ -843,10 +843,21 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Trim off a colon suffix if it's there.
|
||||
*/
|
||||
host[host_strcspn(host, ":")] = '\0';
|
||||
/*
|
||||
* Trim a colon suffix off the hostname if it's there. In
|
||||
* order to protect unbracketed IPv6 address literals
|
||||
* against this treatment, we do not do this if there's
|
||||
* _more_ than one colon.
|
||||
*/
|
||||
{
|
||||
char *c = host_strchr(host, ':');
|
||||
|
||||
if (c) {
|
||||
char *d = host_strchr(c+1, ':');
|
||||
if (!d)
|
||||
*c = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove any remaining whitespace.
|
||||
|
@ -520,10 +520,21 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Trim off a colon suffix if it's there.
|
||||
*/
|
||||
host[host_strcspn(host, ":")] = '\0';
|
||||
/*
|
||||
* Trim a colon suffix off the hostname if it's there. In
|
||||
* order to protect unbracketed IPv6 address literals
|
||||
* against this treatment, we do not do this if there's
|
||||
* _more_ than one colon.
|
||||
*/
|
||||
{
|
||||
char *c = host_strchr(host, ':');
|
||||
|
||||
if (c) {
|
||||
char *d = host_strchr(c+1, ':');
|
||||
if (!d)
|
||||
*c = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove any remaining whitespace.
|
||||
|
Loading…
Reference in New Issue
Block a user