mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-06-30 11:02:48 -05:00
Factor out common pre-session-launch preparation.
A more or less identical piece of code to sanitise the CONF_host
string prior to session launch existed in Windows PuTTY and both
Windows and Unix Plink. It's long past time it was centralised.
While I'm here, I've added a couple of extra comments in the
centralised version, including one that - unfortunately - tries _but
fails_ to explain why a string of the form "host.name:1234" doesn't
get the suffix moved into CONF_port the way "user@host" moves the
prefix into CONF_username. Commit c1c1bc471
is the one I'm referring
to in the comment, and unfortunately it has an unexplained one-liner
log message from before I got into the habit of being usefully
verbose.
This commit is contained in:
@ -823,63 +823,7 @@ int main(int argc, char **argv)
|
||||
usage();
|
||||
}
|
||||
|
||||
/*
|
||||
* Muck about with the hostname in various ways.
|
||||
*/
|
||||
{
|
||||
char *hostbuf = dupstr(conf_get_str(conf, CONF_host));
|
||||
char *host = hostbuf;
|
||||
char *p, *q;
|
||||
|
||||
/*
|
||||
* Trim leading whitespace.
|
||||
*/
|
||||
host += strspn(host, " \t");
|
||||
|
||||
/*
|
||||
* See if host is of the form user@host, and separate out
|
||||
* the username if so.
|
||||
*/
|
||||
if (host[0] != '\0') {
|
||||
char *atsign = strrchr(host, '@');
|
||||
if (atsign) {
|
||||
*atsign = '\0';
|
||||
conf_set_str(conf, CONF_username, host);
|
||||
host = atsign + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
p = hostbuf;
|
||||
q = host;
|
||||
while (*q) {
|
||||
if (*q != ' ' && *q != '\t')
|
||||
*p++ = *q;
|
||||
q++;
|
||||
}
|
||||
*p = '\0';
|
||||
|
||||
conf_set_str(conf, CONF_host, hostbuf);
|
||||
sfree(hostbuf);
|
||||
}
|
||||
prepare_session(conf);
|
||||
|
||||
/*
|
||||
* Perform command-line overrides on session configuration.
|
||||
|
Reference in New Issue
Block a user