xref: /freebsd/crypto/openssh/regress/unittests/match/tests.c (revision 1323ec571215a77ddd21294f0871979d5ad6b992)
1*1323ec57SEd Maste /* 	$OpenBSD: tests.c,v 1.8 2021/12/14 21:25:27 deraadt Exp $ */
2ca86bcf2SDag-Erling Smørgrav /*
3ca86bcf2SDag-Erling Smørgrav  * Regress test for matching functions
4ca86bcf2SDag-Erling Smørgrav  *
5ca86bcf2SDag-Erling Smørgrav  * Placed in the public domain
6ca86bcf2SDag-Erling Smørgrav  */
7ca86bcf2SDag-Erling Smørgrav 
8ca86bcf2SDag-Erling Smørgrav #include "includes.h"
9ca86bcf2SDag-Erling Smørgrav 
10ca86bcf2SDag-Erling Smørgrav #include <sys/types.h>
11ca86bcf2SDag-Erling Smørgrav #include <stdio.h>
12ca86bcf2SDag-Erling Smørgrav #ifdef HAVE_STDINT_H
13ca86bcf2SDag-Erling Smørgrav #include <stdint.h>
14ca86bcf2SDag-Erling Smørgrav #endif
15ca86bcf2SDag-Erling Smørgrav #include <stdlib.h>
16ca86bcf2SDag-Erling Smørgrav #include <string.h>
17ca86bcf2SDag-Erling Smørgrav 
18ca86bcf2SDag-Erling Smørgrav #include "../test_helper/test_helper.h"
19ca86bcf2SDag-Erling Smørgrav 
20ca86bcf2SDag-Erling Smørgrav #include "match.h"
21ca86bcf2SDag-Erling Smørgrav 
22ca86bcf2SDag-Erling Smørgrav void
tests(void)23ca86bcf2SDag-Erling Smørgrav tests(void)
24ca86bcf2SDag-Erling Smørgrav {
25ca86bcf2SDag-Erling Smørgrav 	TEST_START("match_pattern");
26ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("", ""), 1);
27ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("", "aaa"), 0);
28ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aaa", ""), 0);
29ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aaa", "aaaa"), 0);
30ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aaaa", "aaa"), 0);
31ca86bcf2SDag-Erling Smørgrav 	TEST_DONE();
32ca86bcf2SDag-Erling Smørgrav 
33ca86bcf2SDag-Erling Smørgrav 	TEST_START("match_pattern wildcard");
34ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("", "*"), 1);
35ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("a", "?"), 1);
36ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "a?"), 1);
37ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("a", "*"), 1);
38ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "a*"), 1);
39ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "?*"), 1);
40ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "**"), 1);
41ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "?a"), 1);
42ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("aa", "*a"), 1);
43ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("ba", "a?"), 0);
44ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("ba", "a*"), 0);
45ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("ab", "?a"), 0);
46ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern("ab", "*a"), 0);
47ca86bcf2SDag-Erling Smørgrav 	TEST_DONE();
48ca86bcf2SDag-Erling Smørgrav 
49ca86bcf2SDag-Erling Smørgrav 	TEST_START("match_pattern_list");
50ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "", 0), 0); /* no patterns */
51ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "*", 0), 1);
52ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "!*", 0), -1);
53ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "!a,*", 0), 1);
54ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "*,!a", 0), 1);
55ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "a,!*", 0), -1);
56ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("", "!*,a", 0), -1);
57ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "", 0), 0);
58ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "*", 0), 1);
59ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "!*", 0), -1);
60ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "!a", 0), -1);
61ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(match_pattern_list("a", "!b", 0), 1); */
62ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "!a,*", 0), -1);
63ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("b", "!a,*", 0), 1);
64ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "*,!a", 0), -1);
65ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("b", "*,!a", 0), 1);
66ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "a,!*", 0), -1);
67ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("b", "a,!*", 0), -1);
68ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "a,!a", 0), -1);
69ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(match_pattern_list("b", "a,!a", 0), 1); */
70ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("a", "!*,a", 0), -1);
71ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("b", "!*,a", 0), -1);
72ca86bcf2SDag-Erling Smørgrav 	TEST_DONE();
73ca86bcf2SDag-Erling Smørgrav 
74ca86bcf2SDag-Erling Smørgrav 	TEST_START("match_pattern_list lowercase");
75ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("abc", "ABC", 0), 0);
76ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("ABC", "abc", 0), 0);
77ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("abc", "ABC", 1), 1);
78ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(match_pattern_list("ABC", "abc", 1), 0);
79ca86bcf2SDag-Erling Smørgrav 	TEST_DONE();
80ca86bcf2SDag-Erling Smørgrav 
81ca86bcf2SDag-Erling Smørgrav 	TEST_START("addr_match_list");
82ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.1/44"), -2);
83ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list(NULL, "127.0.0.1/44"), -2);
84ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("a", "*"), 0);
85ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "*"), 1);
86ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list(NULL, "*"), 0);
87ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.1"), 1);
88ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.2"), 0);
89ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.1"), -1);
90ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.2"), 1); */
91ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.255", "127.0.0.0/24"), 1);
92ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.1.1", "127.0.0.0/24"), 0);
93ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.0/24"), 1);
94ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.1.0/24"), 0);
95ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.0/24"), -1);
96ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.1.0/24"), 1); */
97ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,!127.0.0.1"), -1);
98ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.1,10.0.0.1"), -1);
99ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,127.0.0.2"), 0);
100ca86bcf2SDag-Erling Smørgrav 	ASSERT_INT_EQ(addr_match_list("127.0.0.1", "127.0.0.2,10.0.0.1"), 0);
101ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "10.0.0.1,!127.0.0.2"), 1); */
102ca86bcf2SDag-Erling Smørgrav 	/* XXX negated ASSERT_INT_EQ(addr_match_list("127.0.0.1", "!127.0.0.2,10.0.0.1"), 1); */
103ca86bcf2SDag-Erling Smørgrav 	TEST_DONE();
104ca86bcf2SDag-Erling Smørgrav 
105d93a896eSDag-Erling Smørgrav #define CHECK_FILTER(string,filter,expected) \
106d93a896eSDag-Erling Smørgrav 	do { \
10719261079SEd Maste 		char *result = match_filter_denylist((string), (filter)); \
108d93a896eSDag-Erling Smørgrav 		ASSERT_STRING_EQ(result, expected); \
109d93a896eSDag-Erling Smørgrav 		free(result); \
110d93a896eSDag-Erling Smørgrav 	} while (0)
111d93a896eSDag-Erling Smørgrav 
112d93a896eSDag-Erling Smørgrav 	TEST_START("match_filter_list");
113d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "", "a,b,c");
114d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "a", "b,c");
115d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "b", "a,c");
116d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "c", "a,b");
117d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "a,b", "c");
118d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "a,c", "b");
119d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "b,c", "a");
120d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "a,b,c", "");
121d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("a,b,c", "b,c", "a");
122d93a896eSDag-Erling Smørgrav 	CHECK_FILTER("", "a,b,c", "");
123d93a896eSDag-Erling Smørgrav 	TEST_DONE();
124ca86bcf2SDag-Erling Smørgrav /*
125ca86bcf2SDag-Erling Smørgrav  * XXX TODO
126ca86bcf2SDag-Erling Smørgrav  * int      match_host_and_ip(const char *, const char *, const char *);
127ca86bcf2SDag-Erling Smørgrav  * int      match_user(const char *, const char *, const char *, const char *);
128ca86bcf2SDag-Erling Smørgrav  * char    *match_list(const char *, const char *, u_int *);
129ca86bcf2SDag-Erling Smørgrav  * int      addr_match_cidr_list(const char *, const char *);
130ca86bcf2SDag-Erling Smørgrav  */
131ca86bcf2SDag-Erling Smørgrav }
132