summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/ssh/ssh.h4
-rw-r--r--usr.bin/ssh/sshconnect.c12
2 files changed, 9 insertions, 7 deletions
diff --git a/usr.bin/ssh/ssh.h b/usr.bin/ssh/ssh.h
index d7a568fa555..239aa640fcb 100644
--- a/usr.bin/ssh/ssh.h
+++ b/usr.bin/ssh/ssh.h
@@ -13,7 +13,7 @@ Generic header file for ssh.
*/
-/* RCSID("$Id: ssh.h,v 1.11 1999/10/14 18:17:42 markus Exp $"); */
+/* RCSID("$Id: ssh.h,v 1.12 1999/10/16 19:23:35 provos Exp $"); */
#ifndef SSH_H
#define SSH_H
@@ -300,7 +300,7 @@ int match_hostname(const char *host, const char *pattern, unsigned int len);
Returns HOST_OK if the host is known and has the specified key,
HOST_NEW if the host is not known, and HOST_CHANGED if the host is known
but used to have a different host key. The host must be in all lowercase. */
-typedef enum { HOST_OK, HOST_NEW, HOST_CHANGED, HOST_DIFFER } HostStatus;
+typedef enum { HOST_OK, HOST_NEW, HOST_CHANGED } HostStatus;
HostStatus check_host_in_hostfile(const char *filename,
const char *host, unsigned int bits,
BIGNUM *e, BIGNUM *n,
diff --git a/usr.bin/ssh/sshconnect.c b/usr.bin/ssh/sshconnect.c
index d23f51e9026..7e5840ef2b9 100644
--- a/usr.bin/ssh/sshconnect.c
+++ b/usr.bin/ssh/sshconnect.c
@@ -15,7 +15,7 @@ login (authentication) dialog.
*/
#include "includes.h"
-RCSID("$Id: sshconnect.c,v 1.19 1999/10/15 20:51:01 markus Exp $");
+RCSID("$Id: sshconnect.c,v 1.20 1999/10/16 19:23:35 provos Exp $");
#include <ssl/bn.h>
#include "xmalloc.h"
@@ -1014,6 +1014,7 @@ void ssh_login(int host_key_valid,
unsigned int supported_ciphers, supported_authentications, protocol_flags;
HostStatus host_status;
HostStatus ip_status;
+ int host_ip_differ = 0;
int local = (ntohl(hostaddr->sin_addr.s_addr) >> 24) == IN_LOOPBACKNET;
int payload_len, clen, sum_len = 0;
u_int32_t rand = 0;
@@ -1137,9 +1138,10 @@ void ssh_login(int host_key_valid,
BN_num_bits(host_key->n),
host_key->e, host_key->n,
ip_key->e, ip_key->n);
- if (ip_status == HOST_CHANGED && host_status == HOST_CHANGED &&
- (BN_cmp(ip_key->e, file_key->e) || BN_cmp(ip_key->n, file_key->n)))
- ip_status = HOST_DIFFER;
+ if (host_status == HOST_CHANGED &&
+ (ip_status != HOST_CHANGED ||
+ (BN_cmp(ip_key->e, file_key->e) || BN_cmp(ip_key->n, file_key->n))))
+ host_ip_differ = 1;
RSA_free(ip_key);
} else
@@ -1203,7 +1205,7 @@ void ssh_login(int host_key_valid,
}
case HOST_CHANGED:
if (options->check_host_ip) {
- if (ip_status != HOST_CHANGED) {
+ if (host_ip_differ) {
error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
error("@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @");
error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");