diff --git a/ssh.c b/ssh.c index d53b3926..c9394236 100644 --- a/ssh.c +++ b/ssh.c @@ -3549,6 +3549,43 @@ static void ssh_sent(Plug plug, int bufsize) ssh_throttle_all(ssh, 0, bufsize); } +static void ssh_hostport_setup(const char *host, int port, Conf *conf, + char **savedhost, int *savedport, + char **loghost_ret) +{ + char *loghost = conf_get_str(conf, CONF_loghost); + if (loghost_ret) + *loghost_ret = loghost; + + if (*loghost) { + char *tmphost; + char *colon; + + tmphost = dupstr(loghost); + *savedport = 22; /* default ssh port */ + + /* + * A colon suffix on the hostname string also lets us affect + * savedport. (Unless there are multiple colons, in which case + * we assume this is an unbracketed IPv6 literal.) + */ + colon = host_strrchr(tmphost, ':'); + if (colon && colon == host_strchr(tmphost, ':')) { + *colon++ = '\0'; + if (*colon) + *savedport = atoi(colon); + } + + *savedhost = host_strduptrim(tmphost); + sfree(tmphost); + } else { + *savedhost = host_strduptrim(host); + if (port < 0) + port = 22; /* default ssh port */ + *savedport = port; + } +} + /* * Connect to specified host and port. * Returns an error message, or NULL on success. @@ -3570,35 +3607,9 @@ static const char *connect_to_host(Ssh ssh, const char *host, int port, const char *err; char *loghost; int addressfamily, sshprot; - - loghost = conf_get_str(ssh->conf, CONF_loghost); - if (*loghost) { - char *tmphost; - char *colon; - tmphost = dupstr(loghost); - ssh->savedport = 22; /* default ssh port */ - - /* - * A colon suffix on the hostname string also lets us affect - * savedport. (Unless there are multiple colons, in which case - * we assume this is an unbracketed IPv6 literal.) - */ - colon = host_strrchr(tmphost, ':'); - if (colon && colon == host_strchr(tmphost, ':')) { - *colon++ = '\0'; - if (*colon) - ssh->savedport = atoi(colon); - } - - ssh->savedhost = host_strduptrim(tmphost); - sfree(tmphost); - } else { - ssh->savedhost = host_strduptrim(host); - if (port < 0) - port = 22; /* default ssh port */ - ssh->savedport = port; - } + ssh_hostport_setup(host, port, ssh->conf, + &ssh->savedhost, &ssh->savedport, &loghost); ssh->fn = &fn_table; /* make 'ssh' usable as a Plug */