Deleted Added
full compact
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 ---