19200ce32SEd Maste /* $OpenBSD: test_iterate.c,v 1.9 2024/01/11 01:45:58 djm Exp $ */
2c1e08615SDag-Erling Smørgrav /*
3c1e08615SDag-Erling Smørgrav * Regress test for hostfile.h hostkeys_foreach()
4c1e08615SDag-Erling Smørgrav *
5c1e08615SDag-Erling Smørgrav * Placed in the public domain
6c1e08615SDag-Erling Smørgrav */
7c1e08615SDag-Erling Smørgrav
8c1e08615SDag-Erling Smørgrav #include "includes.h"
9c1e08615SDag-Erling Smørgrav
10c1e08615SDag-Erling Smørgrav #include <sys/types.h>
11c1e08615SDag-Erling Smørgrav #include <stdio.h>
12c1e08615SDag-Erling Smørgrav #ifdef HAVE_STDINT_H
13c1e08615SDag-Erling Smørgrav #include <stdint.h>
14c1e08615SDag-Erling Smørgrav #endif
15c1e08615SDag-Erling Smørgrav #include <stdlib.h>
16c1e08615SDag-Erling Smørgrav #include <string.h>
17c1e08615SDag-Erling Smørgrav
18c1e08615SDag-Erling Smørgrav #include "../test_helper/test_helper.h"
19c1e08615SDag-Erling Smørgrav
20c1e08615SDag-Erling Smørgrav #include "sshkey.h"
21c1e08615SDag-Erling Smørgrav #include "authfile.h"
22c1e08615SDag-Erling Smørgrav #include "hostfile.h"
23c1e08615SDag-Erling Smørgrav
24c1e08615SDag-Erling Smørgrav struct expected {
25c1e08615SDag-Erling Smørgrav const char *key_file; /* Path for key, NULL for none */
26c1e08615SDag-Erling Smørgrav int no_parse_status; /* Expected status w/o key parsing */
27c1e08615SDag-Erling Smørgrav int no_parse_keytype; /* Expected keytype w/o key parsing */
28c1e08615SDag-Erling Smørgrav int match_host_p; /* Match 'prometheus.example.com' */
29c1e08615SDag-Erling Smørgrav int match_host_s; /* Match 'sisyphus.example.com' */
30c1e08615SDag-Erling Smørgrav int match_ipv4; /* Match '192.0.2.1' */
31c1e08615SDag-Erling Smørgrav int match_ipv6; /* Match '2001:db8::1' */
32c1e08615SDag-Erling Smørgrav int match_flags; /* Expected flags from match */
33c1e08615SDag-Erling Smørgrav struct hostkey_foreach_line l; /* Expected line contents */
34c1e08615SDag-Erling Smørgrav };
35c1e08615SDag-Erling Smørgrav
36c1e08615SDag-Erling Smørgrav struct cbctx {
37c1e08615SDag-Erling Smørgrav const struct expected *expected;
38c1e08615SDag-Erling Smørgrav size_t nexpected;
39c1e08615SDag-Erling Smørgrav size_t i;
40c1e08615SDag-Erling Smørgrav int flags;
41c1e08615SDag-Erling Smørgrav int match_host_p;
42c1e08615SDag-Erling Smørgrav int match_host_s;
43c1e08615SDag-Erling Smørgrav int match_ipv4;
44c1e08615SDag-Erling Smørgrav int match_ipv6;
45c1e08615SDag-Erling Smørgrav };
46c1e08615SDag-Erling Smørgrav
47c1e08615SDag-Erling Smørgrav /*
48c1e08615SDag-Erling Smørgrav * hostkeys_foreach() iterator callback that verifies the line passed
49c1e08615SDag-Erling Smørgrav * against an array of expected entries.
50c1e08615SDag-Erling Smørgrav */
51c1e08615SDag-Erling Smørgrav static int
check(struct hostkey_foreach_line * l,void * _ctx)52c1e08615SDag-Erling Smørgrav check(struct hostkey_foreach_line *l, void *_ctx)
53c1e08615SDag-Erling Smørgrav {
54c1e08615SDag-Erling Smørgrav struct cbctx *ctx = (struct cbctx *)_ctx;
55c1e08615SDag-Erling Smørgrav const struct expected *expected;
56c1e08615SDag-Erling Smørgrav int parse_key = (ctx->flags & HKF_WANT_PARSE_KEY) != 0;
57c1e08615SDag-Erling Smørgrav const int matching = (ctx->flags & HKF_WANT_MATCH) != 0;
58c1e08615SDag-Erling Smørgrav u_int expected_status, expected_match;
590194e6d0SEd Maste int expected_keytype, skip = 0;
60c1e08615SDag-Erling Smørgrav
61c1e08615SDag-Erling Smørgrav test_subtest_info("entry %zu/%zu, file line %ld",
62c1e08615SDag-Erling Smørgrav ctx->i + 1, ctx->nexpected, l->linenum);
63c1e08615SDag-Erling Smørgrav
64c1e08615SDag-Erling Smørgrav for (;;) {
65c1e08615SDag-Erling Smørgrav ASSERT_SIZE_T_LT(ctx->i, ctx->nexpected);
66c1e08615SDag-Erling Smørgrav expected = ctx->expected + ctx->i++;
67c1e08615SDag-Erling Smørgrav /* If we are matching host/IP then skip entries that don't */
68c1e08615SDag-Erling Smørgrav if (!matching)
69c1e08615SDag-Erling Smørgrav break;
70c1e08615SDag-Erling Smørgrav if (ctx->match_host_p && expected->match_host_p)
71c1e08615SDag-Erling Smørgrav break;
72c1e08615SDag-Erling Smørgrav if (ctx->match_host_s && expected->match_host_s)
73c1e08615SDag-Erling Smørgrav break;
74c1e08615SDag-Erling Smørgrav if (ctx->match_ipv4 && expected->match_ipv4)
75c1e08615SDag-Erling Smørgrav break;
76c1e08615SDag-Erling Smørgrav if (ctx->match_ipv6 && expected->match_ipv6)
77c1e08615SDag-Erling Smørgrav break;
78c1e08615SDag-Erling Smørgrav }
79c1e08615SDag-Erling Smørgrav expected_status = (parse_key || expected->no_parse_status < 0) ?
80c1e08615SDag-Erling Smørgrav expected->l.status : (u_int)expected->no_parse_status;
81c1e08615SDag-Erling Smørgrav expected_match = expected->l.match;
82c1e08615SDag-Erling Smørgrav #define UPDATE_MATCH_STATUS(x) do { \
83c1e08615SDag-Erling Smørgrav if (ctx->x && expected->x) { \
84c1e08615SDag-Erling Smørgrav expected_match |= expected->x; \
85c1e08615SDag-Erling Smørgrav if (expected_status == HKF_STATUS_OK) \
86c1e08615SDag-Erling Smørgrav expected_status = HKF_STATUS_MATCHED; \
87c1e08615SDag-Erling Smørgrav } \
88c1e08615SDag-Erling Smørgrav } while (0)
89c1e08615SDag-Erling Smørgrav expected_keytype = (parse_key || expected->no_parse_keytype < 0) ?
90c1e08615SDag-Erling Smørgrav expected->l.keytype : expected->no_parse_keytype;
91c1e08615SDag-Erling Smørgrav
92c1e08615SDag-Erling Smørgrav #ifndef OPENSSL_HAS_ECC
93c1e08615SDag-Erling Smørgrav if (expected->l.keytype == KEY_ECDSA ||
940194e6d0SEd Maste expected->no_parse_keytype == KEY_ECDSA)
950194e6d0SEd Maste skip = 1;
960194e6d0SEd Maste #endif /* OPENSSL_HAS_ECC */
979200ce32SEd Maste #ifndef WITH_DSA
989200ce32SEd Maste if (expected->l.keytype == KEY_DSA ||
999200ce32SEd Maste expected->no_parse_keytype == KEY_DSA)
1009200ce32SEd Maste skip = 1;
1019200ce32SEd Maste #endif
1020194e6d0SEd Maste #ifndef WITH_OPENSSL
1030194e6d0SEd Maste if (expected->l.keytype == KEY_DSA ||
1040194e6d0SEd Maste expected->no_parse_keytype == KEY_DSA ||
1050194e6d0SEd Maste expected->l.keytype == KEY_RSA ||
1060194e6d0SEd Maste expected->no_parse_keytype == KEY_RSA ||
1070194e6d0SEd Maste expected->l.keytype == KEY_ECDSA ||
1080194e6d0SEd Maste expected->no_parse_keytype == KEY_ECDSA)
1090194e6d0SEd Maste skip = 1;
1100194e6d0SEd Maste #endif /* WITH_OPENSSL */
1110194e6d0SEd Maste if (skip) {
112c1e08615SDag-Erling Smørgrav expected_status = HKF_STATUS_INVALID;
113c1e08615SDag-Erling Smørgrav expected_keytype = KEY_UNSPEC;
114c1e08615SDag-Erling Smørgrav parse_key = 0;
115c1e08615SDag-Erling Smørgrav }
116c1e08615SDag-Erling Smørgrav UPDATE_MATCH_STATUS(match_host_p);
117c1e08615SDag-Erling Smørgrav UPDATE_MATCH_STATUS(match_host_s);
118c1e08615SDag-Erling Smørgrav UPDATE_MATCH_STATUS(match_ipv4);
119c1e08615SDag-Erling Smørgrav UPDATE_MATCH_STATUS(match_ipv6);
120c1e08615SDag-Erling Smørgrav
121c1e08615SDag-Erling Smørgrav ASSERT_PTR_NE(l->path, NULL); /* Don't care about path */
122c1e08615SDag-Erling Smørgrav ASSERT_LONG_LONG_EQ(l->linenum, expected->l.linenum);
123c1e08615SDag-Erling Smørgrav ASSERT_U_INT_EQ(l->status, expected_status);
124c1e08615SDag-Erling Smørgrav ASSERT_U_INT_EQ(l->match, expected_match);
125c1e08615SDag-Erling Smørgrav /* Not all test entries contain fulltext */
126c1e08615SDag-Erling Smørgrav if (expected->l.line != NULL)
127c1e08615SDag-Erling Smørgrav ASSERT_STRING_EQ(l->line, expected->l.line);
128c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(l->marker, expected->l.marker);
129c1e08615SDag-Erling Smørgrav /* XXX we skip hashed hostnames for now; implement checking */
130c1e08615SDag-Erling Smørgrav if (expected->l.hosts != NULL)
131c1e08615SDag-Erling Smørgrav ASSERT_STRING_EQ(l->hosts, expected->l.hosts);
132c1e08615SDag-Erling Smørgrav /* Not all test entries contain raw keys */
133c1e08615SDag-Erling Smørgrav if (expected->l.rawkey != NULL)
134c1e08615SDag-Erling Smørgrav ASSERT_STRING_EQ(l->rawkey, expected->l.rawkey);
135c1e08615SDag-Erling Smørgrav /* XXX synthesise raw key for cases lacking and compare */
136c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(l->keytype, expected_keytype);
137c1e08615SDag-Erling Smørgrav if (parse_key) {
138c1e08615SDag-Erling Smørgrav if (expected->l.key == NULL)
139c1e08615SDag-Erling Smørgrav ASSERT_PTR_EQ(l->key, NULL);
140c1e08615SDag-Erling Smørgrav if (expected->l.key != NULL) {
141c1e08615SDag-Erling Smørgrav ASSERT_PTR_NE(l->key, NULL);
142c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(sshkey_equal(l->key, expected->l.key), 1);
143c1e08615SDag-Erling Smørgrav }
144c1e08615SDag-Erling Smørgrav }
145c1e08615SDag-Erling Smørgrav if (parse_key && !(l->comment == NULL && expected->l.comment == NULL))
146c1e08615SDag-Erling Smørgrav ASSERT_STRING_EQ(l->comment, expected->l.comment);
147c1e08615SDag-Erling Smørgrav return 0;
148c1e08615SDag-Erling Smørgrav }
149c1e08615SDag-Erling Smørgrav
150c1e08615SDag-Erling Smørgrav /* Loads public keys for a set of expected results */
151c1e08615SDag-Erling Smørgrav static void
prepare_expected(struct expected * expected,size_t n)152c1e08615SDag-Erling Smørgrav prepare_expected(struct expected *expected, size_t n)
153c1e08615SDag-Erling Smørgrav {
154c1e08615SDag-Erling Smørgrav size_t i;
155c1e08615SDag-Erling Smørgrav
156c1e08615SDag-Erling Smørgrav for (i = 0; i < n; i++) {
157c1e08615SDag-Erling Smørgrav if (expected[i].key_file == NULL)
158c1e08615SDag-Erling Smørgrav continue;
159c1e08615SDag-Erling Smørgrav #ifndef OPENSSL_HAS_ECC
160c1e08615SDag-Erling Smørgrav if (expected[i].l.keytype == KEY_ECDSA)
161c1e08615SDag-Erling Smørgrav continue;
1620194e6d0SEd Maste #endif /* OPENSSL_HAS_ECC */
1639200ce32SEd Maste #ifndef WITH_DSA
1649200ce32SEd Maste if (expected[i].l.keytype == KEY_DSA)
1659200ce32SEd Maste continue;
1669200ce32SEd Maste #endif
1670194e6d0SEd Maste #ifndef WITH_OPENSSL
1680194e6d0SEd Maste switch (expected[i].l.keytype) {
1690194e6d0SEd Maste case KEY_RSA:
1700194e6d0SEd Maste case KEY_DSA:
1710194e6d0SEd Maste case KEY_ECDSA:
1720194e6d0SEd Maste continue;
1730194e6d0SEd Maste }
1740194e6d0SEd Maste #endif /* WITH_OPENSSL */
175c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(sshkey_load_public(
176c1e08615SDag-Erling Smørgrav test_data_file(expected[i].key_file), &expected[i].l.key,
177c1e08615SDag-Erling Smørgrav NULL), 0);
178c1e08615SDag-Erling Smørgrav }
179c1e08615SDag-Erling Smørgrav }
180c1e08615SDag-Erling Smørgrav
181d46065dfSDag-Erling Smørgrav static void
cleanup_expected(struct expected * expected,size_t n)182d46065dfSDag-Erling Smørgrav cleanup_expected(struct expected *expected, size_t n)
183d46065dfSDag-Erling Smørgrav {
184d46065dfSDag-Erling Smørgrav size_t i;
185d46065dfSDag-Erling Smørgrav
186d46065dfSDag-Erling Smørgrav for (i = 0; i < n; i++) {
187d46065dfSDag-Erling Smørgrav sshkey_free(expected[i].l.key);
188d46065dfSDag-Erling Smørgrav expected[i].l.key = NULL;
189d46065dfSDag-Erling Smørgrav }
190d46065dfSDag-Erling Smørgrav }
191d46065dfSDag-Erling Smørgrav
192c1e08615SDag-Erling Smørgrav struct expected expected_full[] = {
193c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
194c1e08615SDag-Erling Smørgrav NULL, /* path, don't care */
195c1e08615SDag-Erling Smørgrav 1, /* line number */
196c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT, /* status */
197c1e08615SDag-Erling Smørgrav 0, /* match flags */
198c1e08615SDag-Erling Smørgrav "# Plain host keys, plain host names", /* full line, optional */
199c1e08615SDag-Erling Smørgrav MRK_NONE, /* marker (CA / revoked) */
200c1e08615SDag-Erling Smørgrav NULL, /* hosts text */
201c1e08615SDag-Erling Smørgrav NULL, /* raw key, optional */
202c1e08615SDag-Erling Smørgrav KEY_UNSPEC, /* key type */
203c1e08615SDag-Erling Smørgrav NULL, /* deserialised key */
204c1e08615SDag-Erling Smørgrav NULL, /* comment */
205206be79aSEd Maste 0, /* note */
206c1e08615SDag-Erling Smørgrav } },
207c1e08615SDag-Erling Smørgrav { "dsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
208c1e08615SDag-Erling Smørgrav NULL,
209c1e08615SDag-Erling Smørgrav 2,
210c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
211c1e08615SDag-Erling Smørgrav 0,
212c1e08615SDag-Erling Smørgrav NULL,
213c1e08615SDag-Erling Smørgrav MRK_NONE,
214c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
215c1e08615SDag-Erling Smørgrav NULL,
216c1e08615SDag-Erling Smørgrav KEY_DSA,
217c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
218c1e08615SDag-Erling Smørgrav "DSA #1",
219206be79aSEd Maste 0,
220c1e08615SDag-Erling Smørgrav } },
221c1e08615SDag-Erling Smørgrav { "ecdsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
222c1e08615SDag-Erling Smørgrav NULL,
223c1e08615SDag-Erling Smørgrav 3,
224c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
225c1e08615SDag-Erling Smørgrav 0,
226c1e08615SDag-Erling Smørgrav NULL,
227c1e08615SDag-Erling Smørgrav MRK_NONE,
228c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
229c1e08615SDag-Erling Smørgrav NULL,
230c1e08615SDag-Erling Smørgrav KEY_ECDSA,
231c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
232c1e08615SDag-Erling Smørgrav "ECDSA #1",
233206be79aSEd Maste 0,
234c1e08615SDag-Erling Smørgrav } },
235c1e08615SDag-Erling Smørgrav { "ed25519_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
236c1e08615SDag-Erling Smørgrav NULL,
237c1e08615SDag-Erling Smørgrav 4,
238c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
239c1e08615SDag-Erling Smørgrav 0,
240c1e08615SDag-Erling Smørgrav NULL,
241c1e08615SDag-Erling Smørgrav MRK_NONE,
242c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
243c1e08615SDag-Erling Smørgrav NULL,
244c1e08615SDag-Erling Smørgrav KEY_ED25519,
245c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
246c1e08615SDag-Erling Smørgrav "ED25519 #1",
247206be79aSEd Maste 0,
248c1e08615SDag-Erling Smørgrav } },
249c1e08615SDag-Erling Smørgrav { "rsa_1.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
250c1e08615SDag-Erling Smørgrav NULL,
25120adc8f2SDag-Erling Smørgrav 5,
252c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
253c1e08615SDag-Erling Smørgrav 0,
254c1e08615SDag-Erling Smørgrav NULL,
255c1e08615SDag-Erling Smørgrav MRK_NONE,
256c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
257c1e08615SDag-Erling Smørgrav NULL,
258c1e08615SDag-Erling Smørgrav KEY_RSA,
259c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
260c1e08615SDag-Erling Smørgrav "RSA #1",
261206be79aSEd Maste 0,
262c1e08615SDag-Erling Smørgrav } },
263c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
264c1e08615SDag-Erling Smørgrav NULL,
26520adc8f2SDag-Erling Smørgrav 6,
266c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
267c1e08615SDag-Erling Smørgrav 0,
268c1e08615SDag-Erling Smørgrav "",
269c1e08615SDag-Erling Smørgrav MRK_NONE,
270c1e08615SDag-Erling Smørgrav NULL,
271c1e08615SDag-Erling Smørgrav NULL,
272c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
273c1e08615SDag-Erling Smørgrav NULL,
274c1e08615SDag-Erling Smørgrav NULL,
275206be79aSEd Maste 0,
276c1e08615SDag-Erling Smørgrav } },
277c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
278c1e08615SDag-Erling Smørgrav NULL,
27920adc8f2SDag-Erling Smørgrav 7,
280c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
281c1e08615SDag-Erling Smørgrav 0,
282c1e08615SDag-Erling Smørgrav "# Plain host keys, hostnames + addresses",
283c1e08615SDag-Erling Smørgrav MRK_NONE,
284c1e08615SDag-Erling Smørgrav NULL,
285c1e08615SDag-Erling Smørgrav NULL,
286c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
287c1e08615SDag-Erling Smørgrav NULL,
288c1e08615SDag-Erling Smørgrav NULL,
289206be79aSEd Maste 0,
290c1e08615SDag-Erling Smørgrav } },
291c1e08615SDag-Erling Smørgrav { "dsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
292c1e08615SDag-Erling Smørgrav NULL,
29320adc8f2SDag-Erling Smørgrav 8,
294c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
295c1e08615SDag-Erling Smørgrav 0,
296c1e08615SDag-Erling Smørgrav NULL,
297c1e08615SDag-Erling Smørgrav MRK_NONE,
298c1e08615SDag-Erling Smørgrav "prometheus.example.com,192.0.2.1,2001:db8::1",
299c1e08615SDag-Erling Smørgrav NULL,
300c1e08615SDag-Erling Smørgrav KEY_DSA,
301c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
302c1e08615SDag-Erling Smørgrav "DSA #2",
303206be79aSEd Maste 0,
304c1e08615SDag-Erling Smørgrav } },
305c1e08615SDag-Erling Smørgrav { "ecdsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
306c1e08615SDag-Erling Smørgrav NULL,
30720adc8f2SDag-Erling Smørgrav 9,
308c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
309c1e08615SDag-Erling Smørgrav 0,
310c1e08615SDag-Erling Smørgrav NULL,
311c1e08615SDag-Erling Smørgrav MRK_NONE,
312c1e08615SDag-Erling Smørgrav "prometheus.example.com,192.0.2.1,2001:db8::1",
313c1e08615SDag-Erling Smørgrav NULL,
314c1e08615SDag-Erling Smørgrav KEY_ECDSA,
315c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
316c1e08615SDag-Erling Smørgrav "ECDSA #2",
317206be79aSEd Maste 0,
318c1e08615SDag-Erling Smørgrav } },
319c1e08615SDag-Erling Smørgrav { "ed25519_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
320c1e08615SDag-Erling Smørgrav NULL,
32120adc8f2SDag-Erling Smørgrav 10,
322c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
323c1e08615SDag-Erling Smørgrav 0,
324c1e08615SDag-Erling Smørgrav NULL,
325c1e08615SDag-Erling Smørgrav MRK_NONE,
326c1e08615SDag-Erling Smørgrav "prometheus.example.com,192.0.2.1,2001:db8::1",
327c1e08615SDag-Erling Smørgrav NULL,
328c1e08615SDag-Erling Smørgrav KEY_ED25519,
329c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
330c1e08615SDag-Erling Smørgrav "ED25519 #2",
331206be79aSEd Maste 0,
332c1e08615SDag-Erling Smørgrav } },
333c1e08615SDag-Erling Smørgrav { "rsa_2.pub" , -1, -1, HKF_MATCH_HOST, 0, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
334c1e08615SDag-Erling Smørgrav NULL,
33520adc8f2SDag-Erling Smørgrav 11,
336c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
337c1e08615SDag-Erling Smørgrav 0,
338c1e08615SDag-Erling Smørgrav NULL,
339c1e08615SDag-Erling Smørgrav MRK_NONE,
340c1e08615SDag-Erling Smørgrav "prometheus.example.com,192.0.2.1,2001:db8::1",
341c1e08615SDag-Erling Smørgrav NULL,
342c1e08615SDag-Erling Smørgrav KEY_RSA,
343c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
344c1e08615SDag-Erling Smørgrav "RSA #2",
345206be79aSEd Maste 0,
346c1e08615SDag-Erling Smørgrav } },
347c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
348c1e08615SDag-Erling Smørgrav NULL,
34920adc8f2SDag-Erling Smørgrav 12,
350c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
351c1e08615SDag-Erling Smørgrav 0,
352c1e08615SDag-Erling Smørgrav "",
353c1e08615SDag-Erling Smørgrav MRK_NONE,
354c1e08615SDag-Erling Smørgrav NULL,
355c1e08615SDag-Erling Smørgrav NULL,
356c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
357c1e08615SDag-Erling Smørgrav NULL,
358c1e08615SDag-Erling Smørgrav NULL,
359206be79aSEd Maste 0,
360c1e08615SDag-Erling Smørgrav } },
361c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
362c1e08615SDag-Erling Smørgrav NULL,
36320adc8f2SDag-Erling Smørgrav 13,
364c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
365c1e08615SDag-Erling Smørgrav 0,
366c1e08615SDag-Erling Smørgrav "# Some hosts with wildcard names / IPs",
367c1e08615SDag-Erling Smørgrav MRK_NONE,
368c1e08615SDag-Erling Smørgrav NULL,
369c1e08615SDag-Erling Smørgrav NULL,
370c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
371c1e08615SDag-Erling Smørgrav NULL,
372c1e08615SDag-Erling Smørgrav NULL,
373206be79aSEd Maste 0,
374c1e08615SDag-Erling Smørgrav } },
375c1e08615SDag-Erling Smørgrav { "dsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
376c1e08615SDag-Erling Smørgrav NULL,
37720adc8f2SDag-Erling Smørgrav 14,
378c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
379c1e08615SDag-Erling Smørgrav 0,
380c1e08615SDag-Erling Smørgrav NULL,
381c1e08615SDag-Erling Smørgrav MRK_NONE,
382c1e08615SDag-Erling Smørgrav "*.example.com,192.0.2.*,2001:*",
383c1e08615SDag-Erling Smørgrav NULL,
384c1e08615SDag-Erling Smørgrav KEY_DSA,
385c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
386c1e08615SDag-Erling Smørgrav "DSA #3",
387206be79aSEd Maste 0,
388c1e08615SDag-Erling Smørgrav } },
389c1e08615SDag-Erling Smørgrav { "ecdsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
390c1e08615SDag-Erling Smørgrav NULL,
39120adc8f2SDag-Erling Smørgrav 15,
392c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
393c1e08615SDag-Erling Smørgrav 0,
394c1e08615SDag-Erling Smørgrav NULL,
395c1e08615SDag-Erling Smørgrav MRK_NONE,
396c1e08615SDag-Erling Smørgrav "*.example.com,192.0.2.*,2001:*",
397c1e08615SDag-Erling Smørgrav NULL,
398c1e08615SDag-Erling Smørgrav KEY_ECDSA,
399c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
400c1e08615SDag-Erling Smørgrav "ECDSA #3",
401206be79aSEd Maste 0,
402c1e08615SDag-Erling Smørgrav } },
403c1e08615SDag-Erling Smørgrav { "ed25519_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
404c1e08615SDag-Erling Smørgrav NULL,
40520adc8f2SDag-Erling Smørgrav 16,
406c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
407c1e08615SDag-Erling Smørgrav 0,
408c1e08615SDag-Erling Smørgrav NULL,
409c1e08615SDag-Erling Smørgrav MRK_NONE,
410c1e08615SDag-Erling Smørgrav "*.example.com,192.0.2.*,2001:*",
411c1e08615SDag-Erling Smørgrav NULL,
412c1e08615SDag-Erling Smørgrav KEY_ED25519,
413c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
414c1e08615SDag-Erling Smørgrav "ED25519 #3",
415206be79aSEd Maste 0,
416c1e08615SDag-Erling Smørgrav } },
417c1e08615SDag-Erling Smørgrav { "rsa_3.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, HKF_MATCH_IP, HKF_MATCH_IP, -1, {
418c1e08615SDag-Erling Smørgrav NULL,
41920adc8f2SDag-Erling Smørgrav 17,
420c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
421c1e08615SDag-Erling Smørgrav 0,
422c1e08615SDag-Erling Smørgrav NULL,
423c1e08615SDag-Erling Smørgrav MRK_NONE,
424c1e08615SDag-Erling Smørgrav "*.example.com,192.0.2.*,2001:*",
425c1e08615SDag-Erling Smørgrav NULL,
426c1e08615SDag-Erling Smørgrav KEY_RSA,
427c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
428c1e08615SDag-Erling Smørgrav "RSA #3",
429206be79aSEd Maste 0,
430c1e08615SDag-Erling Smørgrav } },
431c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
432c1e08615SDag-Erling Smørgrav NULL,
43320adc8f2SDag-Erling Smørgrav 18,
434c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
435c1e08615SDag-Erling Smørgrav 0,
436c1e08615SDag-Erling Smørgrav "",
437c1e08615SDag-Erling Smørgrav MRK_NONE,
438c1e08615SDag-Erling Smørgrav NULL,
439c1e08615SDag-Erling Smørgrav NULL,
440c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
441c1e08615SDag-Erling Smørgrav NULL,
442c1e08615SDag-Erling Smørgrav NULL,
443206be79aSEd Maste 0,
444c1e08615SDag-Erling Smørgrav } },
445c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
446c1e08615SDag-Erling Smørgrav NULL,
44720adc8f2SDag-Erling Smørgrav 19,
448c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
449c1e08615SDag-Erling Smørgrav 0,
450c1e08615SDag-Erling Smørgrav "# Hashed hostname and address entries",
451c1e08615SDag-Erling Smørgrav MRK_NONE,
452c1e08615SDag-Erling Smørgrav NULL,
453c1e08615SDag-Erling Smørgrav NULL,
454c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
455c1e08615SDag-Erling Smørgrav NULL,
456c1e08615SDag-Erling Smørgrav NULL,
457206be79aSEd Maste 0,
458c1e08615SDag-Erling Smørgrav } },
459c1e08615SDag-Erling Smørgrav { "dsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, {
460c1e08615SDag-Erling Smørgrav NULL,
46120adc8f2SDag-Erling Smørgrav 20,
462c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
463c1e08615SDag-Erling Smørgrav 0,
464c1e08615SDag-Erling Smørgrav NULL,
465c1e08615SDag-Erling Smørgrav MRK_NONE,
466c1e08615SDag-Erling Smørgrav NULL,
467c1e08615SDag-Erling Smørgrav NULL,
468c1e08615SDag-Erling Smørgrav KEY_DSA,
469c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
470c1e08615SDag-Erling Smørgrav "DSA #5",
471206be79aSEd Maste 0,
472c1e08615SDag-Erling Smørgrav } },
473c1e08615SDag-Erling Smørgrav { "ecdsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, {
474c1e08615SDag-Erling Smørgrav NULL,
47520adc8f2SDag-Erling Smørgrav 21,
476c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
477c1e08615SDag-Erling Smørgrav 0,
478c1e08615SDag-Erling Smørgrav NULL,
479c1e08615SDag-Erling Smørgrav MRK_NONE,
480c1e08615SDag-Erling Smørgrav NULL,
481c1e08615SDag-Erling Smørgrav NULL,
482c1e08615SDag-Erling Smørgrav KEY_ECDSA,
483c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
484c1e08615SDag-Erling Smørgrav "ECDSA #5",
485206be79aSEd Maste 0,
486c1e08615SDag-Erling Smørgrav } },
487c1e08615SDag-Erling Smørgrav { "ed25519_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, {
488c1e08615SDag-Erling Smørgrav NULL,
48920adc8f2SDag-Erling Smørgrav 22,
490c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
491c1e08615SDag-Erling Smørgrav 0,
492c1e08615SDag-Erling Smørgrav NULL,
493c1e08615SDag-Erling Smørgrav MRK_NONE,
494c1e08615SDag-Erling Smørgrav NULL,
495c1e08615SDag-Erling Smørgrav NULL,
496c1e08615SDag-Erling Smørgrav KEY_ED25519,
497c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
498c1e08615SDag-Erling Smørgrav "ED25519 #5",
499206be79aSEd Maste 0,
500c1e08615SDag-Erling Smørgrav } },
501c1e08615SDag-Erling Smørgrav { "rsa_5.pub" , -1, -1, 0, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, -1, {
502c1e08615SDag-Erling Smørgrav NULL,
50320adc8f2SDag-Erling Smørgrav 23,
504c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
505c1e08615SDag-Erling Smørgrav 0,
506c1e08615SDag-Erling Smørgrav NULL,
507c1e08615SDag-Erling Smørgrav MRK_NONE,
508c1e08615SDag-Erling Smørgrav NULL,
509c1e08615SDag-Erling Smørgrav NULL,
510c1e08615SDag-Erling Smørgrav KEY_RSA,
511c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
512c1e08615SDag-Erling Smørgrav "RSA #5",
513206be79aSEd Maste 0,
514c1e08615SDag-Erling Smørgrav } },
515c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
516c1e08615SDag-Erling Smørgrav NULL,
51720adc8f2SDag-Erling Smørgrav 24,
518c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
519c1e08615SDag-Erling Smørgrav 0,
520c1e08615SDag-Erling Smørgrav "",
521c1e08615SDag-Erling Smørgrav MRK_NONE,
522c1e08615SDag-Erling Smørgrav NULL,
523c1e08615SDag-Erling Smørgrav NULL,
524c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
525c1e08615SDag-Erling Smørgrav NULL,
526c1e08615SDag-Erling Smørgrav NULL,
527206be79aSEd Maste 0,
528c1e08615SDag-Erling Smørgrav } },
529c1e08615SDag-Erling Smørgrav /*
530c1e08615SDag-Erling Smørgrav * The next series have each key listed multiple times, as the
531c1e08615SDag-Erling Smørgrav * hostname and addresses in the pre-hashed known_hosts are split
532c1e08615SDag-Erling Smørgrav * to separate lines.
533c1e08615SDag-Erling Smørgrav */
534c1e08615SDag-Erling Smørgrav { "dsa_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, {
535c1e08615SDag-Erling Smørgrav NULL,
53620adc8f2SDag-Erling Smørgrav 25,
537c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
538c1e08615SDag-Erling Smørgrav 0,
539c1e08615SDag-Erling Smørgrav NULL,
540c1e08615SDag-Erling Smørgrav MRK_NONE,
541c1e08615SDag-Erling Smørgrav NULL,
542c1e08615SDag-Erling Smørgrav NULL,
543c1e08615SDag-Erling Smørgrav KEY_DSA,
544c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
545c1e08615SDag-Erling Smørgrav "DSA #6",
546206be79aSEd Maste 0,
547c1e08615SDag-Erling Smørgrav } },
548c1e08615SDag-Erling Smørgrav { "dsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, {
549c1e08615SDag-Erling Smørgrav NULL,
55020adc8f2SDag-Erling Smørgrav 26,
551c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
552c1e08615SDag-Erling Smørgrav 0,
553c1e08615SDag-Erling Smørgrav NULL,
554c1e08615SDag-Erling Smørgrav MRK_NONE,
555c1e08615SDag-Erling Smørgrav NULL,
556c1e08615SDag-Erling Smørgrav NULL,
557c1e08615SDag-Erling Smørgrav KEY_DSA,
558c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
559c1e08615SDag-Erling Smørgrav "DSA #6",
560206be79aSEd Maste 0,
561c1e08615SDag-Erling Smørgrav } },
562c1e08615SDag-Erling Smørgrav { "dsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, {
563c1e08615SDag-Erling Smørgrav NULL,
56420adc8f2SDag-Erling Smørgrav 27,
565c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
566c1e08615SDag-Erling Smørgrav 0,
567c1e08615SDag-Erling Smørgrav NULL,
568c1e08615SDag-Erling Smørgrav MRK_NONE,
569c1e08615SDag-Erling Smørgrav NULL,
570c1e08615SDag-Erling Smørgrav NULL,
571c1e08615SDag-Erling Smørgrav KEY_DSA,
572c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
573c1e08615SDag-Erling Smørgrav "DSA #6",
574206be79aSEd Maste 0,
575c1e08615SDag-Erling Smørgrav } },
576c1e08615SDag-Erling Smørgrav { "ecdsa_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, {
577c1e08615SDag-Erling Smørgrav NULL,
57820adc8f2SDag-Erling Smørgrav 28,
579c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
580c1e08615SDag-Erling Smørgrav 0,
581c1e08615SDag-Erling Smørgrav NULL,
582c1e08615SDag-Erling Smørgrav MRK_NONE,
583c1e08615SDag-Erling Smørgrav NULL,
584c1e08615SDag-Erling Smørgrav NULL,
585c1e08615SDag-Erling Smørgrav KEY_ECDSA,
586c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
587c1e08615SDag-Erling Smørgrav "ECDSA #6",
588206be79aSEd Maste 0,
589c1e08615SDag-Erling Smørgrav } },
590c1e08615SDag-Erling Smørgrav { "ecdsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, {
591c1e08615SDag-Erling Smørgrav NULL,
59220adc8f2SDag-Erling Smørgrav 29,
593c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
594c1e08615SDag-Erling Smørgrav 0,
595c1e08615SDag-Erling Smørgrav NULL,
596c1e08615SDag-Erling Smørgrav MRK_NONE,
597c1e08615SDag-Erling Smørgrav NULL,
598c1e08615SDag-Erling Smørgrav NULL,
599c1e08615SDag-Erling Smørgrav KEY_ECDSA,
600c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
601c1e08615SDag-Erling Smørgrav "ECDSA #6",
602206be79aSEd Maste 0,
603c1e08615SDag-Erling Smørgrav } },
604c1e08615SDag-Erling Smørgrav { "ecdsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, {
605c1e08615SDag-Erling Smørgrav NULL,
60620adc8f2SDag-Erling Smørgrav 30,
607c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
608c1e08615SDag-Erling Smørgrav 0,
609c1e08615SDag-Erling Smørgrav NULL,
610c1e08615SDag-Erling Smørgrav MRK_NONE,
611c1e08615SDag-Erling Smørgrav NULL,
612c1e08615SDag-Erling Smørgrav NULL,
613c1e08615SDag-Erling Smørgrav KEY_ECDSA,
614c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
615c1e08615SDag-Erling Smørgrav "ECDSA #6",
616206be79aSEd Maste 0,
617c1e08615SDag-Erling Smørgrav } },
618c1e08615SDag-Erling Smørgrav { "ed25519_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, {
619c1e08615SDag-Erling Smørgrav NULL,
62020adc8f2SDag-Erling Smørgrav 31,
621c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
622c1e08615SDag-Erling Smørgrav 0,
623c1e08615SDag-Erling Smørgrav NULL,
624c1e08615SDag-Erling Smørgrav MRK_NONE,
625c1e08615SDag-Erling Smørgrav NULL,
626c1e08615SDag-Erling Smørgrav NULL,
627c1e08615SDag-Erling Smørgrav KEY_ED25519,
628c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
629c1e08615SDag-Erling Smørgrav "ED25519 #6",
630206be79aSEd Maste 0,
631c1e08615SDag-Erling Smørgrav } },
632c1e08615SDag-Erling Smørgrav { "ed25519_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, {
633c1e08615SDag-Erling Smørgrav NULL,
63420adc8f2SDag-Erling Smørgrav 32,
635c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
636c1e08615SDag-Erling Smørgrav 0,
637c1e08615SDag-Erling Smørgrav NULL,
638c1e08615SDag-Erling Smørgrav MRK_NONE,
639c1e08615SDag-Erling Smørgrav NULL,
640c1e08615SDag-Erling Smørgrav NULL,
641c1e08615SDag-Erling Smørgrav KEY_ED25519,
642c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
643c1e08615SDag-Erling Smørgrav "ED25519 #6",
644206be79aSEd Maste 0,
645c1e08615SDag-Erling Smørgrav } },
646c1e08615SDag-Erling Smørgrav { "ed25519_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, {
647c1e08615SDag-Erling Smørgrav NULL,
64820adc8f2SDag-Erling Smørgrav 33,
649c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
650c1e08615SDag-Erling Smørgrav 0,
651c1e08615SDag-Erling Smørgrav NULL,
652c1e08615SDag-Erling Smørgrav MRK_NONE,
653c1e08615SDag-Erling Smørgrav NULL,
654c1e08615SDag-Erling Smørgrav NULL,
655c1e08615SDag-Erling Smørgrav KEY_ED25519,
656c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
657c1e08615SDag-Erling Smørgrav "ED25519 #6",
658206be79aSEd Maste 0,
659c1e08615SDag-Erling Smørgrav } },
660c1e08615SDag-Erling Smørgrav { "rsa_6.pub" , -1, -1, HKF_MATCH_HOST|HKF_MATCH_HOST_HASHED, 0, 0, 0, -1, {
661c1e08615SDag-Erling Smørgrav NULL,
66220adc8f2SDag-Erling Smørgrav 34,
663c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
664c1e08615SDag-Erling Smørgrav 0,
665c1e08615SDag-Erling Smørgrav NULL,
666c1e08615SDag-Erling Smørgrav MRK_NONE,
667c1e08615SDag-Erling Smørgrav NULL,
668c1e08615SDag-Erling Smørgrav NULL,
669c1e08615SDag-Erling Smørgrav KEY_RSA,
670c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
671c1e08615SDag-Erling Smørgrav "RSA #6",
672206be79aSEd Maste 0,
673c1e08615SDag-Erling Smørgrav } },
674c1e08615SDag-Erling Smørgrav { "rsa_6.pub" , -1, -1, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, 0, -1, {
675c1e08615SDag-Erling Smørgrav NULL,
67620adc8f2SDag-Erling Smørgrav 35,
677c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
678c1e08615SDag-Erling Smørgrav 0,
679c1e08615SDag-Erling Smørgrav NULL,
680c1e08615SDag-Erling Smørgrav MRK_NONE,
681c1e08615SDag-Erling Smørgrav NULL,
682c1e08615SDag-Erling Smørgrav NULL,
683c1e08615SDag-Erling Smørgrav KEY_RSA,
684c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
685c1e08615SDag-Erling Smørgrav "RSA #6",
686206be79aSEd Maste 0,
687c1e08615SDag-Erling Smørgrav } },
688c1e08615SDag-Erling Smørgrav { "rsa_6.pub" , -1, -1, 0, 0, 0, HKF_MATCH_IP|HKF_MATCH_IP_HASHED, -1, {
689c1e08615SDag-Erling Smørgrav NULL,
69020adc8f2SDag-Erling Smørgrav 36,
691c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
692c1e08615SDag-Erling Smørgrav 0,
693c1e08615SDag-Erling Smørgrav NULL,
694c1e08615SDag-Erling Smørgrav MRK_NONE,
695c1e08615SDag-Erling Smørgrav NULL,
696c1e08615SDag-Erling Smørgrav NULL,
697c1e08615SDag-Erling Smørgrav KEY_RSA,
698c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
699c1e08615SDag-Erling Smørgrav "RSA #6",
700206be79aSEd Maste 0,
701c1e08615SDag-Erling Smørgrav } },
702c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
703c1e08615SDag-Erling Smørgrav NULL,
70420adc8f2SDag-Erling Smørgrav 37,
705c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
706c1e08615SDag-Erling Smørgrav 0,
707c1e08615SDag-Erling Smørgrav "",
708c1e08615SDag-Erling Smørgrav MRK_NONE,
709c1e08615SDag-Erling Smørgrav NULL,
710c1e08615SDag-Erling Smørgrav NULL,
711c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
712c1e08615SDag-Erling Smørgrav NULL,
713c1e08615SDag-Erling Smørgrav NULL,
714206be79aSEd Maste 0,
715c1e08615SDag-Erling Smørgrav } },
716c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
717c1e08615SDag-Erling Smørgrav NULL,
71820adc8f2SDag-Erling Smørgrav 38,
719c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
720c1e08615SDag-Erling Smørgrav 0,
721c1e08615SDag-Erling Smørgrav "",
722c1e08615SDag-Erling Smørgrav MRK_NONE,
723c1e08615SDag-Erling Smørgrav NULL,
724c1e08615SDag-Erling Smørgrav NULL,
725c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
726c1e08615SDag-Erling Smørgrav NULL,
727c1e08615SDag-Erling Smørgrav NULL,
728206be79aSEd Maste 0,
729c1e08615SDag-Erling Smørgrav } },
730c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
731c1e08615SDag-Erling Smørgrav NULL,
73220adc8f2SDag-Erling Smørgrav 39,
733c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
734c1e08615SDag-Erling Smørgrav 0,
735c1e08615SDag-Erling Smørgrav "# Revoked and CA keys",
736c1e08615SDag-Erling Smørgrav MRK_NONE,
737c1e08615SDag-Erling Smørgrav NULL,
738c1e08615SDag-Erling Smørgrav NULL,
739c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
740c1e08615SDag-Erling Smørgrav NULL,
741c1e08615SDag-Erling Smørgrav NULL,
742206be79aSEd Maste 0,
743c1e08615SDag-Erling Smørgrav } },
744c1e08615SDag-Erling Smørgrav { "ed25519_4.pub" , -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
745c1e08615SDag-Erling Smørgrav NULL,
74620adc8f2SDag-Erling Smørgrav 40,
747c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
748c1e08615SDag-Erling Smørgrav 0,
749c1e08615SDag-Erling Smørgrav NULL,
750c1e08615SDag-Erling Smørgrav MRK_REVOKE,
751c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
752c1e08615SDag-Erling Smørgrav NULL,
753c1e08615SDag-Erling Smørgrav KEY_ED25519,
754c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
755c1e08615SDag-Erling Smørgrav "ED25519 #4",
756206be79aSEd Maste 0,
757c1e08615SDag-Erling Smørgrav } },
758c1e08615SDag-Erling Smørgrav { "ecdsa_4.pub" , -1, -1, HKF_MATCH_HOST, 0, 0, 0, -1, {
759c1e08615SDag-Erling Smørgrav NULL,
76020adc8f2SDag-Erling Smørgrav 41,
761c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
762c1e08615SDag-Erling Smørgrav 0,
763c1e08615SDag-Erling Smørgrav NULL,
764c1e08615SDag-Erling Smørgrav MRK_CA,
765c1e08615SDag-Erling Smørgrav "prometheus.example.com",
766c1e08615SDag-Erling Smørgrav NULL,
767c1e08615SDag-Erling Smørgrav KEY_ECDSA,
768c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
769c1e08615SDag-Erling Smørgrav "ECDSA #4",
770206be79aSEd Maste 0,
771c1e08615SDag-Erling Smørgrav } },
772c1e08615SDag-Erling Smørgrav { "dsa_4.pub" , -1, -1, HKF_MATCH_HOST, HKF_MATCH_HOST, 0, 0, -1, {
773c1e08615SDag-Erling Smørgrav NULL,
77420adc8f2SDag-Erling Smørgrav 42,
775c1e08615SDag-Erling Smørgrav HKF_STATUS_OK,
776c1e08615SDag-Erling Smørgrav 0,
777c1e08615SDag-Erling Smørgrav NULL,
778c1e08615SDag-Erling Smørgrav MRK_CA,
779c1e08615SDag-Erling Smørgrav "*.example.com",
780c1e08615SDag-Erling Smørgrav NULL,
781c1e08615SDag-Erling Smørgrav KEY_DSA,
782c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
783c1e08615SDag-Erling Smørgrav "DSA #4",
784206be79aSEd Maste 0,
785c1e08615SDag-Erling Smørgrav } },
786c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
787c1e08615SDag-Erling Smørgrav NULL,
78820adc8f2SDag-Erling Smørgrav 43,
789c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
790c1e08615SDag-Erling Smørgrav 0,
791c1e08615SDag-Erling Smørgrav "",
792c1e08615SDag-Erling Smørgrav MRK_NONE,
793c1e08615SDag-Erling Smørgrav NULL,
794c1e08615SDag-Erling Smørgrav NULL,
795c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
796c1e08615SDag-Erling Smørgrav NULL,
797c1e08615SDag-Erling Smørgrav NULL,
798206be79aSEd Maste 0,
799c1e08615SDag-Erling Smørgrav } },
800c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
801c1e08615SDag-Erling Smørgrav NULL,
80220adc8f2SDag-Erling Smørgrav 44,
803c1e08615SDag-Erling Smørgrav HKF_STATUS_COMMENT,
804c1e08615SDag-Erling Smørgrav 0,
805c1e08615SDag-Erling Smørgrav "# Some invalid lines",
806c1e08615SDag-Erling Smørgrav MRK_NONE,
807c1e08615SDag-Erling Smørgrav NULL,
808c1e08615SDag-Erling Smørgrav NULL,
809c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
810c1e08615SDag-Erling Smørgrav NULL,
811c1e08615SDag-Erling Smørgrav NULL,
812206be79aSEd Maste 0,
813c1e08615SDag-Erling Smørgrav } },
814c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, 0, 0, 0, -1, {
815c1e08615SDag-Erling Smørgrav NULL,
81620adc8f2SDag-Erling Smørgrav 45,
817c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID,
818c1e08615SDag-Erling Smørgrav 0,
819c1e08615SDag-Erling Smørgrav NULL,
820c1e08615SDag-Erling Smørgrav MRK_ERROR,
821c1e08615SDag-Erling Smørgrav NULL,
822c1e08615SDag-Erling Smørgrav NULL,
823c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
824c1e08615SDag-Erling Smørgrav NULL,
825c1e08615SDag-Erling Smørgrav NULL,
826206be79aSEd Maste 0,
827c1e08615SDag-Erling Smørgrav } },
828c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
829c1e08615SDag-Erling Smørgrav NULL,
83020adc8f2SDag-Erling Smørgrav 46,
831c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID,
832c1e08615SDag-Erling Smørgrav 0,
833c1e08615SDag-Erling Smørgrav NULL,
834c1e08615SDag-Erling Smørgrav MRK_NONE,
835c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
836c1e08615SDag-Erling Smørgrav NULL,
837c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
838c1e08615SDag-Erling Smørgrav NULL,
839c1e08615SDag-Erling Smørgrav NULL,
840206be79aSEd Maste 0,
841c1e08615SDag-Erling Smørgrav } },
842c1e08615SDag-Erling Smørgrav { NULL, -1, -1, HKF_MATCH_HOST, 0, 0, 0, -1, {
843c1e08615SDag-Erling Smørgrav NULL,
84420adc8f2SDag-Erling Smørgrav 47,
845c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID,
846c1e08615SDag-Erling Smørgrav 0,
847c1e08615SDag-Erling Smørgrav NULL,
848c1e08615SDag-Erling Smørgrav MRK_NONE,
849c1e08615SDag-Erling Smørgrav "prometheus.example.com",
850c1e08615SDag-Erling Smørgrav NULL,
851c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
852c1e08615SDag-Erling Smørgrav NULL,
853c1e08615SDag-Erling Smørgrav NULL,
854206be79aSEd Maste 0,
855c1e08615SDag-Erling Smørgrav } },
856c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
857c1e08615SDag-Erling Smørgrav NULL,
85820adc8f2SDag-Erling Smørgrav 48,
859c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID, /* Would be ok if key not parsed */
860c1e08615SDag-Erling Smørgrav 0,
861c1e08615SDag-Erling Smørgrav NULL,
862c1e08615SDag-Erling Smørgrav MRK_NONE,
863c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
864c1e08615SDag-Erling Smørgrav NULL,
865c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
866c1e08615SDag-Erling Smørgrav NULL,
867c1e08615SDag-Erling Smørgrav NULL,
868206be79aSEd Maste 0,
869c1e08615SDag-Erling Smørgrav } },
870c1e08615SDag-Erling Smørgrav { NULL, -1, -1, 0, HKF_MATCH_HOST, 0, 0, -1, {
871c1e08615SDag-Erling Smørgrav NULL,
87220adc8f2SDag-Erling Smørgrav 49,
873c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID,
874c1e08615SDag-Erling Smørgrav 0,
875c1e08615SDag-Erling Smørgrav NULL,
876c1e08615SDag-Erling Smørgrav MRK_NONE,
877c1e08615SDag-Erling Smørgrav "sisyphus.example.com",
878c1e08615SDag-Erling Smørgrav NULL,
879c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
880c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
881c1e08615SDag-Erling Smørgrav NULL,
882206be79aSEd Maste 0,
883c1e08615SDag-Erling Smørgrav } },
884c1e08615SDag-Erling Smørgrav { NULL, HKF_STATUS_OK, KEY_RSA, HKF_MATCH_HOST, 0, 0, 0, -1, {
885c1e08615SDag-Erling Smørgrav NULL,
88620adc8f2SDag-Erling Smørgrav 50,
887c1e08615SDag-Erling Smørgrav HKF_STATUS_INVALID, /* Would be ok if key not parsed */
888c1e08615SDag-Erling Smørgrav 0,
889c1e08615SDag-Erling Smørgrav NULL,
890c1e08615SDag-Erling Smørgrav MRK_NONE,
891c1e08615SDag-Erling Smørgrav "prometheus.example.com",
892c1e08615SDag-Erling Smørgrav NULL,
893c1e08615SDag-Erling Smørgrav KEY_UNSPEC,
894c1e08615SDag-Erling Smørgrav NULL, /* filled at runtime */
895c1e08615SDag-Erling Smørgrav NULL,
896206be79aSEd Maste 0,
897c1e08615SDag-Erling Smørgrav } },
898c1e08615SDag-Erling Smørgrav };
899c1e08615SDag-Erling Smørgrav
900c1e08615SDag-Erling Smørgrav void test_iterate(void);
901c1e08615SDag-Erling Smørgrav
902c1e08615SDag-Erling Smørgrav void
test_iterate(void)903c1e08615SDag-Erling Smørgrav test_iterate(void)
904c1e08615SDag-Erling Smørgrav {
905c1e08615SDag-Erling Smørgrav struct cbctx ctx;
906c1e08615SDag-Erling Smørgrav
907c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate all with key parse");
908c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
909c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
910c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
911c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_PARSE_KEY;
912c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
913c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
914206be79aSEd Maste check, &ctx, NULL, NULL, ctx.flags, 0), 0);
915d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
916c1e08615SDag-Erling Smørgrav TEST_DONE();
917c1e08615SDag-Erling Smørgrav
918c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate all without key parse");
919c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
920c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
921c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
922c1e08615SDag-Erling Smørgrav ctx.flags = 0;
923c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
924c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
925206be79aSEd Maste check, &ctx, NULL, NULL, ctx.flags, 0), 0);
926d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
927c1e08615SDag-Erling Smørgrav TEST_DONE();
928c1e08615SDag-Erling Smørgrav
929c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify host 1");
930c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
931c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
932c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
933c1e08615SDag-Erling Smørgrav ctx.flags = 0;
934c1e08615SDag-Erling Smørgrav ctx.match_host_p = 1;
935c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
936c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
937206be79aSEd Maste check, &ctx, "prometheus.example.com", NULL, ctx.flags, 0), 0);
938d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
939c1e08615SDag-Erling Smørgrav TEST_DONE();
940c1e08615SDag-Erling Smørgrav
941c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify host 2");
942c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
943c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
944c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
945c1e08615SDag-Erling Smørgrav ctx.flags = 0;
946c1e08615SDag-Erling Smørgrav ctx.match_host_s = 1;
947c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
948c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
949206be79aSEd Maste check, &ctx, "sisyphus.example.com", NULL, ctx.flags, 0), 0);
950d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
951c1e08615SDag-Erling Smørgrav TEST_DONE();
952c1e08615SDag-Erling Smørgrav
953c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match host 1");
954c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
955c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
956c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
957c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
958c1e08615SDag-Erling Smørgrav ctx.match_host_p = 1;
959c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
960c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
961206be79aSEd Maste check, &ctx, "prometheus.example.com", NULL, ctx.flags, 0), 0);
962d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
963c1e08615SDag-Erling Smørgrav TEST_DONE();
964c1e08615SDag-Erling Smørgrav
965c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match host 2");
966c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
967c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
968c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
969c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
970c1e08615SDag-Erling Smørgrav ctx.match_host_s = 1;
971c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
972c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
973206be79aSEd Maste check, &ctx, "sisyphus.example.com", NULL, ctx.flags, 0), 0);
974d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
975c1e08615SDag-Erling Smørgrav TEST_DONE();
976c1e08615SDag-Erling Smørgrav
977c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify host missing");
978c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
979c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
980c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
981c1e08615SDag-Erling Smørgrav ctx.flags = 0;
982c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
983c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
984206be79aSEd Maste check, &ctx, "actaeon.example.org", NULL, ctx.flags, 0), 0);
985d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
986c1e08615SDag-Erling Smørgrav TEST_DONE();
987c1e08615SDag-Erling Smørgrav
988c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match host missing");
989c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
990c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
991c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
992c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
993c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
994c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
995206be79aSEd Maste check, &ctx, "actaeon.example.org", NULL, ctx.flags, 0), 0);
996d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
997c1e08615SDag-Erling Smørgrav TEST_DONE();
998c1e08615SDag-Erling Smørgrav
999c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify IPv4");
1000c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1001c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1002c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1003c1e08615SDag-Erling Smørgrav ctx.flags = 0;
1004c1e08615SDag-Erling Smørgrav ctx.match_ipv4 = 1;
1005c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1006c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1007206be79aSEd Maste check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags, 0), 0);
1008d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1009c1e08615SDag-Erling Smørgrav TEST_DONE();
1010c1e08615SDag-Erling Smørgrav
1011c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify IPv6");
1012c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1013c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1014c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1015c1e08615SDag-Erling Smørgrav ctx.flags = 0;
1016c1e08615SDag-Erling Smørgrav ctx.match_ipv6 = 1;
1017c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1018c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1019206be79aSEd Maste check, &ctx, "tiresias.example.org", "2001:db8::1",
1020206be79aSEd Maste ctx.flags, 0), 0);
1021d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1022c1e08615SDag-Erling Smørgrav TEST_DONE();
1023c1e08615SDag-Erling Smørgrav
1024c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match IPv4");
1025c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1026c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1027c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1028c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
1029c1e08615SDag-Erling Smørgrav ctx.match_ipv4 = 1;
1030c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1031c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1032206be79aSEd Maste check, &ctx, "tiresias.example.org", "192.0.2.1", ctx.flags, 0), 0);
1033d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1034c1e08615SDag-Erling Smørgrav TEST_DONE();
1035c1e08615SDag-Erling Smørgrav
1036c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match IPv6");
1037c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1038c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1039c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1040c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
1041c1e08615SDag-Erling Smørgrav ctx.match_ipv6 = 1;
1042c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1043c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1044206be79aSEd Maste check, &ctx, "tiresias.example.org", "2001:db8::1",
1045206be79aSEd Maste ctx.flags, 0), 0);
1046d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1047c1e08615SDag-Erling Smørgrav TEST_DONE();
1048c1e08615SDag-Erling Smørgrav
1049c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify addr missing");
1050c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1051c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1052c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1053c1e08615SDag-Erling Smørgrav ctx.flags = 0;
1054c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1055c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1056206be79aSEd Maste check, &ctx, "tiresias.example.org", "192.168.0.1",
1057206be79aSEd Maste ctx.flags, 0), 0);
1058d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1059c1e08615SDag-Erling Smørgrav TEST_DONE();
1060c1e08615SDag-Erling Smørgrav
1061c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match addr missing");
1062c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1063c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1064c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1065c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
1066c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1067c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1068206be79aSEd Maste check, &ctx, "tiresias.example.org", "::1", ctx.flags, 0), 0);
1069d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1070c1e08615SDag-Erling Smørgrav TEST_DONE();
1071c1e08615SDag-Erling Smørgrav
1072c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify host 2 and IPv4");
1073c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1074c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1075c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1076c1e08615SDag-Erling Smørgrav ctx.flags = 0;
1077c1e08615SDag-Erling Smørgrav ctx.match_host_s = 1;
1078c1e08615SDag-Erling Smørgrav ctx.match_ipv4 = 1;
1079c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1080c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1081206be79aSEd Maste check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags, 0), 0);
1082d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1083c1e08615SDag-Erling Smørgrav TEST_DONE();
1084c1e08615SDag-Erling Smørgrav
1085c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match host 1 and IPv6");
1086c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1087c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1088c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1089c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH;
1090c1e08615SDag-Erling Smørgrav ctx.match_host_p = 1;
1091c1e08615SDag-Erling Smørgrav ctx.match_ipv6 = 1;
1092c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1093c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1094d46065dfSDag-Erling Smørgrav check, &ctx, "prometheus.example.com",
1095206be79aSEd Maste "2001:db8::1", ctx.flags, 0), 0);
1096d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1097c1e08615SDag-Erling Smørgrav TEST_DONE();
1098c1e08615SDag-Erling Smørgrav
1099c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate specify host 2 and IPv4 w/ key parse");
1100c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1101c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1102c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1103c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_PARSE_KEY;
1104c1e08615SDag-Erling Smørgrav ctx.match_host_s = 1;
1105c1e08615SDag-Erling Smørgrav ctx.match_ipv4 = 1;
1106c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1107c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1108206be79aSEd Maste check, &ctx, "sisyphus.example.com", "192.0.2.1", ctx.flags, 0), 0);
1109d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1110c1e08615SDag-Erling Smørgrav TEST_DONE();
1111c1e08615SDag-Erling Smørgrav
1112c1e08615SDag-Erling Smørgrav TEST_START("hostkeys_iterate match host 1 and IPv6 w/ key parse");
1113c1e08615SDag-Erling Smørgrav memset(&ctx, 0, sizeof(ctx));
1114c1e08615SDag-Erling Smørgrav ctx.expected = expected_full;
1115c1e08615SDag-Erling Smørgrav ctx.nexpected = sizeof(expected_full)/sizeof(*expected_full);
1116c1e08615SDag-Erling Smørgrav ctx.flags = HKF_WANT_MATCH|HKF_WANT_PARSE_KEY;
1117c1e08615SDag-Erling Smørgrav ctx.match_host_p = 1;
1118c1e08615SDag-Erling Smørgrav ctx.match_ipv6 = 1;
1119c1e08615SDag-Erling Smørgrav prepare_expected(expected_full, ctx.nexpected);
1120c1e08615SDag-Erling Smørgrav ASSERT_INT_EQ(hostkeys_foreach(test_data_file("known_hosts"),
1121d46065dfSDag-Erling Smørgrav check, &ctx, "prometheus.example.com",
1122206be79aSEd Maste "2001:db8::1", ctx.flags, 0), 0);
1123d46065dfSDag-Erling Smørgrav cleanup_expected(expected_full, ctx.nexpected);
1124c1e08615SDag-Erling Smørgrav TEST_DONE();
1125c1e08615SDag-Erling Smørgrav }
1126c1e08615SDag-Erling Smørgrav
1127