]> CyberLeo.Net >> Repos - FreeBSD/releng/9.3.git/blob - contrib/ntp/tests/ntpd/ntp_restrict.c
o Fix invalid TCP checksums with pf(4). [EN-16:02.pf]
[FreeBSD/releng/9.3.git] / contrib / ntp / tests / ntpd / ntp_restrict.c
1 #include "config.h"
2
3 #include "ntpd.h"
4 #include "ntp_lists.h"
5
6 #include "unity.h"
7
8 /* Helper functions */
9
10 sockaddr_u
11 create_sockaddr_u(short sin_family, unsigned short sin_port, char* ip_addr) {
12         sockaddr_u sockaddr;
13
14         sockaddr.sa4.sin_family = AF_INET;
15         sockaddr.sa4.sin_port = htons(sin_port);
16         memset(sockaddr.sa4.sin_zero, 0, 8);
17         sockaddr.sa4.sin_addr.s_addr = inet_addr(ip_addr);
18
19         return sockaddr;
20 }
21
22
23 void
24 setUp(void) {
25         init_restrict();
26 }
27
28
29 void
30 tearDown(void) {
31         restrict_u *empty_restrict = malloc(sizeof(restrict_u));
32         memset(empty_restrict, 0, sizeof(restrict_u));
33
34         restrict_u *current;
35
36         do {
37                 UNLINK_HEAD_SLIST(current, restrictlist4, link);
38                 if (current != NULL)
39                 {
40                         *current = *empty_restrict;
41                 }
42         } while (current != NULL);
43
44         do {
45                 UNLINK_HEAD_SLIST(current, restrictlist6, link);
46                 if (current != NULL)
47                 {
48                         *current = *empty_restrict;
49                 }
50         } while (current != NULL);
51
52         free(empty_restrict);
53 }
54
55
56 /* Tests */
57
58
59 void
60 test_RestrictionsAreEmptyAfterInit(void) {
61
62         restrict_u *rl4 = malloc(sizeof(restrict_u));
63         restrict_u *rl6 = malloc(sizeof(restrict_u));
64
65         memset(rl4, 0, sizeof(restrict_u));
66         memset(rl6, 0, sizeof(restrict_u));
67
68         TEST_ASSERT_EQUAL(rl4->count, restrictlist4->count);
69         TEST_ASSERT_EQUAL(rl4->flags, restrictlist4->flags);
70         TEST_ASSERT_EQUAL(rl4->mflags, restrictlist4->mflags);
71         TEST_ASSERT_EQUAL(rl4->expire, restrictlist4->expire);
72         TEST_ASSERT_EQUAL(rl4->u.v4.addr, restrictlist4->u.v4.addr);
73         TEST_ASSERT_EQUAL(rl4->u.v4.mask, restrictlist4->u.v4.mask);
74
75         TEST_ASSERT_EQUAL(rl6->count, restrictlist6->count);
76         TEST_ASSERT_EQUAL(rl6->flags, restrictlist6->flags);
77         TEST_ASSERT_EQUAL(rl6->mflags, restrictlist6->mflags);
78         TEST_ASSERT_EQUAL(rl6->expire, restrictlist6->expire);
79
80         free(rl4);
81         free(rl6);
82 }
83
84
85 void
86 test_ReturnsCorrectDefaultRestrictions(void) {
87         sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
88                 54321, "63.161.169.137");
89
90         u_short retval = restrictions(&sockaddr);
91
92         TEST_ASSERT_EQUAL(0, retval);
93 }
94
95
96 void
97 test_HackingDefaultRestriction(void) {
98         /*
99         *       We change the flag of the default restriction,
100         *       and check if restriction() returns that flag
101         */
102
103         const u_short flags = 42;
104
105         sockaddr_u resaddr = create_sockaddr_u(AF_INET,
106                 54321, "0.0.0.0");
107         sockaddr_u resmask = create_sockaddr_u(AF_INET,
108                 54321, "0.0.0.0");
109
110         hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
111
112         sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
113                 54321, "111.123.251.124");
114
115         TEST_ASSERT_EQUAL(flags, restrictions(&sockaddr));
116 }
117
118
119 void
120 test_CantRemoveDefaultEntry(void) {
121         sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
122         sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
123
124         hack_restrict(RESTRICT_REMOVE, &resaddr, &resmask, 0, 0, 0);
125
126         TEST_ASSERT_EQUAL(0, restrictions(&resaddr));
127 }
128
129
130 void
131 test_AddingNewRestriction(void) {
132         sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
133         sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "128.0.0.0");
134
135         const u_short flags = 42;
136
137         hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
138
139         TEST_ASSERT_EQUAL(flags, restrictions(&resaddr));
140 }
141
142
143 void
144 test_TheMostFittingRestrictionIsMatched(void) {
145         sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
146
147         sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
148         sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
149
150         sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
151         sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
152
153         /* it also matches, but we prefer the one above, as it's more specific */
154         sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
155         sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
156
157         hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
158         hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
159         hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
160
161         TEST_ASSERT_EQUAL(22, restrictions(&resaddr_target));
162 }
163
164
165 void
166 test_DeletedRestrictionIsNotMatched(void) {
167         sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
168
169         sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
170         sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
171
172         sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
173         sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
174
175         sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
176         sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
177
178         hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
179         hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
180         hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
181
182         /* deleting the best match*/
183         hack_restrict(RESTRICT_REMOVE, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
184
185         TEST_ASSERT_EQUAL(128, restrictions(&resaddr_target));
186 }
187
188
189 void
190 test_RestrictUnflagWorks(void) {
191         sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
192         sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
193
194         hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, 11, 0);
195
196         hack_restrict(RESTRICT_UNFLAG, &resaddr, &resmask, 0, 10, 0);
197
198         TEST_ASSERT_EQUAL(1, restrictions(&resaddr));
199 }