11 create_sockaddr_u(short sin_family, unsigned short sin_port, char* ip_addr) {
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);
30 restrict_u *empty_restrict = malloc(sizeof(restrict_u));
31 memset(empty_restrict, 0, sizeof(restrict_u));
36 UNLINK_HEAD_SLIST(current, restrictlist4, link);
39 *current = *empty_restrict;
41 } while (current != NULL);
44 UNLINK_HEAD_SLIST(current, restrictlist6, link);
47 *current = *empty_restrict;
49 } while (current != NULL);
59 test_RestrictionsAreEmptyAfterInit(void) {
61 restrict_u *rl4 = malloc(sizeof(restrict_u));
62 restrict_u *rl6 = malloc(sizeof(restrict_u));
64 memset(rl4, 0, sizeof(restrict_u));
65 memset(rl6, 0, sizeof(restrict_u));
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);
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);
85 test_ReturnsCorrectDefaultRestrictions(void) {
86 sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
87 54321, "63.161.169.137");
89 u_short retval = restrictions(&sockaddr);
91 TEST_ASSERT_EQUAL(0, retval);
96 test_HackingDefaultRestriction(void) {
98 * We change the flag of the default restriction,
99 * and check if restriction() returns that flag
102 const u_short flags = 42;
104 sockaddr_u resaddr = create_sockaddr_u(AF_INET,
106 sockaddr_u resmask = create_sockaddr_u(AF_INET,
109 hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
111 sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
112 54321, "111.123.251.124");
114 TEST_ASSERT_EQUAL(flags, restrictions(&sockaddr));
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");
123 hack_restrict(RESTRICT_REMOVE, &resaddr, &resmask, 0, 0, 0);
125 TEST_ASSERT_EQUAL(0, restrictions(&resaddr));
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");
134 const u_short flags = 42;
136 hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
138 TEST_ASSERT_EQUAL(flags, restrictions(&resaddr));
143 test_TheMostFittingRestrictionIsMatched(void) {
144 sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
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");
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");
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");
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);
160 TEST_ASSERT_EQUAL(22, restrictions(&resaddr_target));
165 test_DeletedRestrictionIsNotMatched(void) {
166 sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
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");
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");
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");
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);
181 /* deleting the best match*/
182 hack_restrict(RESTRICT_REMOVE, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
184 TEST_ASSERT_EQUAL(128, restrictions(&resaddr_target));
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");
193 hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, 11, 0);
195 hack_restrict(RESTRICT_UNFLAG, &resaddr, &resmask, 0, 10, 0);
197 TEST_ASSERT_EQUAL(1, restrictions(&resaddr));