X-Git-Url: http://andersk.mit.edu/gitweb/gssapi-openssh.git/blobdiff_plain/41b2f31402be54e00944779e69cf43bc23fa413a..d9ae70c5856554c6c874b8c12980fff3a32a454a:/openssh/hostfile.c?ds=sidebyside diff --git a/openssh/hostfile.c b/openssh/hostfile.c index dcee034..eeed920 100644 --- a/openssh/hostfile.c +++ b/openssh/hostfile.c @@ -36,7 +36,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: hostfile.c,v 1.30 2002/07/24 16:11:18 markus Exp $"); +RCSID("$OpenBSD: hostfile.c,v 1.28 2001/06/25 08:25:37 markus Exp $"); #include "packet.h" #include "match.h" @@ -49,7 +49,7 @@ RCSID("$OpenBSD: hostfile.c,v 1.30 2002/07/24 16:11:18 markus Exp $"); * pointer over the key. Skips any whitespace at the beginning and at end. */ -int +static int hostfile_read_key(char **cpp, u_int *bitsp, Key *ret) { char *cp; @@ -71,6 +71,17 @@ hostfile_read_key(char **cpp, u_int *bitsp, Key *ret) return 1; } +int +auth_rsa_read_key(char **cpp, u_int *bitsp, BIGNUM * e, BIGNUM * n) +{ + Key *k = key_new(KEY_RSA1); + int ret = hostfile_read_key(cpp, bitsp, k); + BN_copy(e, k->rsa->e); + BN_copy(n, k->rsa->n); + key_free(k); + return ret; +} + static int hostfile_check_key(int bits, Key *key, const char *host, const char *filename, int linenum) { @@ -91,14 +102,11 @@ hostfile_check_key(int bits, Key *key, const char *host, const char *filename, i * in the list of our known hosts. 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. - * - * If no 'key' has been specified and a key of type 'keytype' is known - * for the specified host, then HOST_FOUND is returned. */ -static HostStatus -check_host_in_hostfile_by_key_or_type(const char *filename, - const char *host, Key *key, int keytype, Key *found, int *numret) +HostStatus +check_host_in_hostfile(const char *filename, const char *host, Key *key, + Key *found, int *numret) { FILE *f; char line[8192]; @@ -108,7 +116,8 @@ check_host_in_hostfile_by_key_or_type(const char *filename, HostStatus end_return; debug3("check_host_in_hostfile: filename %s", filename); - + if (key == NULL) + fatal("no key to look up"); /* Open the file containing the list of known hosts. */ f = fopen(filename, "r"); if (!f) @@ -149,20 +158,12 @@ check_host_in_hostfile_by_key_or_type(const char *filename, */ if (!hostfile_read_key(&cp, &kbits, found)) continue; + if (!hostfile_check_key(kbits, found, host, filename, linenum)) + continue; if (numret != NULL) *numret = linenum; - if (key == NULL) { - /* we found a key of the requested type */ - if (found->type == keytype) - return HOST_FOUND; - continue; - } - - if (!hostfile_check_key(kbits, found, host, filename, linenum)) - continue; - /* Check if the current key is the same as the given key. */ if (key_equal(key, found)) { /* Ok, they match. */ @@ -187,24 +188,6 @@ check_host_in_hostfile_by_key_or_type(const char *filename, return end_return; } -HostStatus -check_host_in_hostfile(const char *filename, const char *host, Key *key, - Key *found, int *numret) -{ - if (key == NULL) - fatal("no key to look up"); - return (check_host_in_hostfile_by_key_or_type(filename, host, key, 0, - found, numret)); -} - -int -lookup_key_in_hostfile_by_type(const char *filename, const char *host, - int keytype, Key *found, int *numret) -{ - return (check_host_in_hostfile_by_key_or_type(filename, host, NULL, - keytype, found, numret) == HOST_FOUND); -} - /* * Appends an entry to the host file. Returns false if the entry could not * be appended.