diff options
author | djm@openbsd.org <djm@openbsd.org> | 2015-10-24 22:56:19 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2015-10-25 11:42:07 +1100 |
commit | 9ada37d36003a77902e90a3214981e417457cf13 (patch) | |
tree | 2f8aa3d1cc0daca40c066ed39208b1698a06d1d3 /ssh-keyscan.c | |
parent | 44fc7cd7dcef6c52c6b7e9ff830dfa32879bd319 (diff) |
upstream commit
fix keyscan output for multiple hosts/addrs on one line
when host hashing or a non standard port is in use; bz#2479 ok dtucker@
Upstream-ID: 5321dabfaeceba343da3c8a8b5754c6f4a0a307b
Diffstat (limited to 'ssh-keyscan.c')
-rw-r--r-- | ssh-keyscan.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 57d88429..7db0e10e 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.101 2015/04/10 00:08:55 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.102 2015/10/24 22:56:19 djm Exp $ */ /* * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. * @@ -296,13 +296,10 @@ keygrab_ssh2(con *c) } static void -keyprint(con *c, struct sshkey *key) +keyprint_one(char *host, struct sshkey *key) { - char *host = c->c_output_name ? c->c_output_name : c->c_name; - char *hostport = NULL; + char *hostport; - if (!key) - return; if (hash_hosts && (host = host_hash(host, NULL, 0)) == NULL) fatal("host_hash failed"); @@ -313,6 +310,24 @@ keyprint(con *c, struct sshkey *key) free(hostport); } +static void +keyprint(con *c, struct sshkey *key) +{ + char *hosts = c->c_output_name ? c->c_output_name : c->c_name; + char *host, *ohosts; + + if (key == NULL) + return; + if (!hash_hosts && ssh_port == SSH_DEFAULT_PORT) { + keyprint_one(hosts, key); + return; + } + ohosts = hosts = xstrdup(hosts); + while ((host = strsep(&hosts, ",")) != NULL) + keyprint_one(host, key); + free(ohosts); +} + static int tcpconnect(char *host) { |