diff options
author | Damien Miller <djm@cvs.openbsd.org> | 2005-03-02 01:00:07 +0000 |
---|---|---|
committer | Damien Miller <djm@cvs.openbsd.org> | 2005-03-02 01:00:07 +0000 |
commit | 0de5fd17bb72e774d446cda3f9230070d3c87342 (patch) | |
tree | c068e5dc16ffc3be330a5cf7dd460a82eca16068 /usr.bin | |
parent | e39b2e5847c851b57d88cf2f05165ba576503c70 (diff) |
fix addition of new hashed hostnames when CheckHostIP=yes;
found and ok dtucker@
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/ssh/sshconnect.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/usr.bin/ssh/sshconnect.c b/usr.bin/ssh/sshconnect.c index 9ac67b9a371..518423cb693 100644 --- a/usr.bin/ssh/sshconnect.c +++ b/usr.bin/ssh/sshconnect.c @@ -13,7 +13,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: sshconnect.c,v 1.160 2005/03/01 10:40:27 djm Exp $"); +RCSID("$OpenBSD: sshconnect.c,v 1.161 2005/03/02 01:00:06 djm Exp $"); #include <openssl/bn.h> @@ -550,7 +550,7 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key, char hostline[1000], *hostp, *fp; HostStatus host_status; HostStatus ip_status; - int local = 0, host_ip_differ = 0; + int r, local = 0, host_ip_differ = 0; char ntop[NI_MAXHOST]; char msg[1024]; int len, host_line, ip_line; @@ -726,18 +726,33 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key, if (!confirm(msg)) goto fail; } - if (options.check_host_ip && ip_status == HOST_NEW) { - snprintf(hostline, sizeof(hostline), "%s,%s", host, ip); - hostp = hostline; - } else - hostp = host; - /* * If not in strict mode, add the key automatically to the * local known_hosts file. */ - if (!add_host_to_hostfile(user_hostfile, hostp, host_key, - options.hash_known_hosts)) + if (options.check_host_ip && ip_status == HOST_NEW) { + snprintf(hostline, sizeof(hostline), "%s,%s", + host, ip); + hostp = hostline; + if (options.hash_known_hosts) { + /* Add hash of host and IP separately */ + r = add_host_to_hostfile(user_hostfile, host, + host_key, options.hash_known_hosts) && + add_host_to_hostfile(user_hostfile, ip, + host_key, options.hash_known_hosts); + } else { + /* Add unhashed "host,ip" */ + r = add_host_to_hostfile(user_hostfile, + hostline, host_key, + options.hash_known_hosts); + } + } else { + r = add_host_to_hostfile(user_hostfile, host, host_key, + options.hash_known_hosts); + hostp = host; + } + + if (!r) logit("Failed to add the host to the list of known " "hosts (%.500s).", user_hostfile); else |