version 1.29, 2001/12/18 10:04:21 |
version 1.30, 2002/07/24 16:11:18 |
|
|
* in the list of our known hosts. Returns HOST_OK if the host is known and |
* 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 |
* 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 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. |
*/ |
*/ |
|
|
HostStatus |
static HostStatus |
check_host_in_hostfile(const char *filename, const char *host, Key *key, |
check_host_in_hostfile_by_key_or_type(const char *filename, |
Key *found, int *numret) |
const char *host, Key *key, int keytype, Key *found, int *numret) |
{ |
{ |
FILE *f; |
FILE *f; |
char line[8192]; |
char line[8192]; |
|
|
HostStatus end_return; |
HostStatus end_return; |
|
|
debug3("check_host_in_hostfile: filename %s", filename); |
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. */ |
/* Open the file containing the list of known hosts. */ |
f = fopen(filename, "r"); |
f = fopen(filename, "r"); |
if (!f) |
if (!f) |
|
|
*/ |
*/ |
if (!hostfile_read_key(&cp, &kbits, found)) |
if (!hostfile_read_key(&cp, &kbits, found)) |
continue; |
continue; |
if (!hostfile_check_key(kbits, found, host, filename, linenum)) |
|
continue; |
|
|
|
if (numret != NULL) |
if (numret != NULL) |
*numret = linenum; |
*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. */ |
/* Check if the current key is the same as the given key. */ |
if (key_equal(key, found)) { |
if (key_equal(key, found)) { |
/* Ok, they match. */ |
/* Ok, they match. */ |
|
|
* saw a different key for the host. |
* saw a different key for the host. |
*/ |
*/ |
return end_return; |
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); |
} |
} |
|
|
/* |
/* |