hostfile.c (98941) | hostfile.c (106130) |
---|---|
1/* 2 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * All rights reserved 5 * Functions for manipulating the known hosts files. 6 * 7 * As far as I am concerned, the code I have written for this software 8 * can be used freely for any purpose. Any derived versions of this --- 22 unchanged lines hidden (view full) --- 31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38#include "includes.h" | 1/* 2 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * All rights reserved 5 * Functions for manipulating the known hosts files. 6 * 7 * As far as I am concerned, the code I have written for this software 8 * can be used freely for any purpose. Any derived versions of this --- 22 unchanged lines hidden (view full) --- 31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38#include "includes.h" |
39RCSID("$OpenBSD: hostfile.c,v 1.29 2001/12/18 10:04:21 jakob Exp $"); | 39RCSID("$OpenBSD: hostfile.c,v 1.30 2002/07/24 16:11:18 markus Exp $"); 40RCSID("$FreeBSD: head/crypto/openssh/hostfile.c 106130 2002-10-29 10:16:02Z des $"); |
40 41#include "packet.h" 42#include "match.h" 43#include "key.h" 44#include "hostfile.h" 45#include "log.h" 46 47/* --- 38 unchanged lines hidden (view full) --- 86 return 1; 87} 88 89/* 90 * Checks whether the given host (which must be in all lowercase) is already 91 * in the list of our known hosts. Returns HOST_OK if the host is known and 92 * has the specified key, HOST_NEW if the host is not known, and HOST_CHANGED 93 * if the host is known but used to have a different host key. | 41 42#include "packet.h" 43#include "match.h" 44#include "key.h" 45#include "hostfile.h" 46#include "log.h" 47 48/* --- 38 unchanged lines hidden (view full) --- 87 return 1; 88} 89 90/* 91 * Checks whether the given host (which must be in all lowercase) is already 92 * in the list of our known hosts. Returns HOST_OK if the host is known and 93 * has the specified key, HOST_NEW if the host is not known, and HOST_CHANGED 94 * if the host is known but used to have a different host key. |
95 * 96 * If no 'key' has been specified and a key of type 'keytype' is known 97 * for the specified host, then HOST_FOUND is returned. |
|
94 */ 95 | 98 */ 99 |
96HostStatus 97check_host_in_hostfile(const char *filename, const char *host, Key *key, 98 Key *found, int *numret) | 100static HostStatus 101check_host_in_hostfile_by_key_or_type(const char *filename, 102 const char *host, Key *key, int keytype, Key *found, int *numret) |
99{ 100 FILE *f; 101 char line[8192]; 102 int linenum = 0; 103 u_int kbits; 104 char *cp, *cp2; 105 HostStatus end_return; 106 107 debug3("check_host_in_hostfile: filename %s", filename); | 103{ 104 FILE *f; 105 char line[8192]; 106 int linenum = 0; 107 u_int kbits; 108 char *cp, *cp2; 109 HostStatus end_return; 110 111 debug3("check_host_in_hostfile: filename %s", filename); |
108 if (key == NULL) 109 fatal("no key to look up"); | 112 |
110 /* Open the file containing the list of known hosts. */ 111 f = fopen(filename, "r"); 112 if (!f) 113 return HOST_NEW; 114 115 /* 116 * Return value when the loop terminates. This is set to 117 * HOST_CHANGED if we have seen a different key for the host and have --- 24 unchanged lines hidden (view full) --- 142 cp = cp2; 143 144 /* 145 * Extract the key from the line. This will skip any leading 146 * whitespace. Ignore badly formatted lines. 147 */ 148 if (!hostfile_read_key(&cp, &kbits, found)) 149 continue; | 113 /* Open the file containing the list of known hosts. */ 114 f = fopen(filename, "r"); 115 if (!f) 116 return HOST_NEW; 117 118 /* 119 * Return value when the loop terminates. This is set to 120 * HOST_CHANGED if we have seen a different key for the host and have --- 24 unchanged lines hidden (view full) --- 145 cp = cp2; 146 147 /* 148 * Extract the key from the line. This will skip any leading 149 * whitespace. Ignore badly formatted lines. 150 */ 151 if (!hostfile_read_key(&cp, &kbits, found)) 152 continue; |
150 if (!hostfile_check_key(kbits, found, host, filename, linenum)) 151 continue; | |
152 153 if (numret != NULL) 154 *numret = linenum; 155 | 153 154 if (numret != NULL) 155 *numret = linenum; 156 |
157 if (key == NULL) { 158 /* we found a key of the requested type */ 159 if (found->type == keytype) 160 return HOST_FOUND; 161 continue; 162 } 163 164 if (!hostfile_check_key(kbits, found, host, filename, linenum)) 165 continue; 166 |
|
156 /* Check if the current key is the same as the given key. */ 157 if (key_equal(key, found)) { 158 /* Ok, they match. */ 159 debug3("check_host_in_hostfile: match line %d", linenum); 160 fclose(f); 161 return HOST_OK; 162 } 163 /* --- 8 unchanged lines hidden (view full) --- 172 173 /* 174 * Return either HOST_NEW or HOST_CHANGED, depending on whether we 175 * saw a different key for the host. 176 */ 177 return end_return; 178} 179 | 167 /* Check if the current key is the same as the given key. */ 168 if (key_equal(key, found)) { 169 /* Ok, they match. */ 170 debug3("check_host_in_hostfile: match line %d", linenum); 171 fclose(f); 172 return HOST_OK; 173 } 174 /* --- 8 unchanged lines hidden (view full) --- 183 184 /* 185 * Return either HOST_NEW or HOST_CHANGED, depending on whether we 186 * saw a different key for the host. 187 */ 188 return end_return; 189} 190 |
191HostStatus 192check_host_in_hostfile(const char *filename, const char *host, Key *key, 193 Key *found, int *numret) 194{ 195 if (key == NULL) 196 fatal("no key to look up"); 197 return (check_host_in_hostfile_by_key_or_type(filename, host, key, 0, 198 found, numret)); 199} 200 201int 202lookup_key_in_hostfile_by_type(const char *filename, const char *host, 203 int keytype, Key *found, int *numret) 204{ 205 return (check_host_in_hostfile_by_key_or_type(filename, host, NULL, 206 keytype, found, numret) == HOST_FOUND); 207} 208 |
|
180/* 181 * Appends an entry to the host file. Returns false if the entry could not 182 * be appended. 183 */ 184 185int 186add_host_to_hostfile(const char *filename, const char *host, Key *key) 187{ --- 17 unchanged lines hidden --- | 209/* 210 * Appends an entry to the host file. Returns false if the entry could not 211 * be appended. 212 */ 213 214int 215add_host_to_hostfile(const char *filename, const char *host, Key *key) 216{ --- 17 unchanged lines hidden --- |