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