1*2d543d20SAndroid Build Coastguard Worker /*
2*2d543d20SAndroid Build Coastguard Worker * Authors: Jan Zarsky <[email protected]>
3*2d543d20SAndroid Build Coastguard Worker *
4*2d543d20SAndroid Build Coastguard Worker * Copyright (C) 2019 Red Hat, Inc.
5*2d543d20SAndroid Build Coastguard Worker *
6*2d543d20SAndroid Build Coastguard Worker * This library is free software; you can redistribute it and/or
7*2d543d20SAndroid Build Coastguard Worker * modify it under the terms of the GNU Lesser General Public
8*2d543d20SAndroid Build Coastguard Worker * License as published by the Free Software Foundation; either
9*2d543d20SAndroid Build Coastguard Worker * version 2.1 of the License, or (at your option) any later version.
10*2d543d20SAndroid Build Coastguard Worker *
11*2d543d20SAndroid Build Coastguard Worker * This library is distributed in the hope that it will be useful,
12*2d543d20SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2d543d20SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14*2d543d20SAndroid Build Coastguard Worker * Lesser General Public License for more details.
15*2d543d20SAndroid Build Coastguard Worker *
16*2d543d20SAndroid Build Coastguard Worker * You should have received a copy of the GNU Lesser General Public
17*2d543d20SAndroid Build Coastguard Worker * License along with this library; if not, write to the Free Software
18*2d543d20SAndroid Build Coastguard Worker * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19*2d543d20SAndroid Build Coastguard Worker */
20*2d543d20SAndroid Build Coastguard Worker
21*2d543d20SAndroid Build Coastguard Worker #include "utilities.h"
22*2d543d20SAndroid Build Coastguard Worker #include "test_node.h"
23*2d543d20SAndroid Build Coastguard Worker
24*2d543d20SAndroid Build Coastguard Worker #define NODE_COUNT 3
25*2d543d20SAndroid Build Coastguard Worker
26*2d543d20SAndroid Build Coastguard Worker #define NODE1_ADDR "192.168.0.0"
27*2d543d20SAndroid Build Coastguard Worker #define NODE1_MASK "255.255.255.0"
28*2d543d20SAndroid Build Coastguard Worker #define NODE1_PROTO SEPOL_PROTO_IP4
29*2d543d20SAndroid Build Coastguard Worker #define NODE1_CONTEXT "system_u:object_r:first_node_t:s0"
30*2d543d20SAndroid Build Coastguard Worker
31*2d543d20SAndroid Build Coastguard Worker #define NODE2_ADDR "2001:db8:85a3::8a2e:370:7334"
32*2d543d20SAndroid Build Coastguard Worker #define NODE2_MASK "2001:db8:85a3::8a2e:370:7334"
33*2d543d20SAndroid Build Coastguard Worker #define NODE2_PROTO SEPOL_PROTO_IP6
34*2d543d20SAndroid Build Coastguard Worker #define NODE2_CONTEXT "system_u:object_r:second_node_t:s0"
35*2d543d20SAndroid Build Coastguard Worker
36*2d543d20SAndroid Build Coastguard Worker #define NODE3_ADDR "127.0.0.1"
37*2d543d20SAndroid Build Coastguard Worker #define NODE3_MASK "255.255.0.0"
38*2d543d20SAndroid Build Coastguard Worker #define NODE3_PROTO SEPOL_PROTO_IP4
39*2d543d20SAndroid Build Coastguard Worker #define NODE3_CONTEXT "system_u:object_r:third_node_t:s0"
40*2d543d20SAndroid Build Coastguard Worker
41*2d543d20SAndroid Build Coastguard Worker /* node_record.h */
42*2d543d20SAndroid Build Coastguard Worker static void test_node_compare(void);
43*2d543d20SAndroid Build Coastguard Worker static void test_node_compare2(void);
44*2d543d20SAndroid Build Coastguard Worker static void test_node_key_create(void);
45*2d543d20SAndroid Build Coastguard Worker static void test_node_key_extract(void);
46*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_addr(void);
47*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_addr_bytes(void);
48*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_mask(void);
49*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_mask_bytes(void);
50*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_proto(void);
51*2d543d20SAndroid Build Coastguard Worker static void test_node_get_proto_str(void);
52*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_con(void);
53*2d543d20SAndroid Build Coastguard Worker static void test_node_create(void);
54*2d543d20SAndroid Build Coastguard Worker static void test_node_clone(void);
55*2d543d20SAndroid Build Coastguard Worker
56*2d543d20SAndroid Build Coastguard Worker /* nodes_policy.h */
57*2d543d20SAndroid Build Coastguard Worker static void test_node_query(void);
58*2d543d20SAndroid Build Coastguard Worker static void test_node_exists(void);
59*2d543d20SAndroid Build Coastguard Worker static void test_node_count(void);
60*2d543d20SAndroid Build Coastguard Worker static void test_node_iterate(void);
61*2d543d20SAndroid Build Coastguard Worker static void test_node_list(void);
62*2d543d20SAndroid Build Coastguard Worker
63*2d543d20SAndroid Build Coastguard Worker /* nodes_local.h */
64*2d543d20SAndroid Build Coastguard Worker static void test_node_modify_del_query_local(void);
65*2d543d20SAndroid Build Coastguard Worker static void test_node_exists_local(void);
66*2d543d20SAndroid Build Coastguard Worker static void test_node_count_local(void);
67*2d543d20SAndroid Build Coastguard Worker static void test_node_iterate_local(void);
68*2d543d20SAndroid Build Coastguard Worker static void test_node_list_local(void);
69*2d543d20SAndroid Build Coastguard Worker
70*2d543d20SAndroid Build Coastguard Worker extern semanage_handle_t *sh;
71*2d543d20SAndroid Build Coastguard Worker
node_test_init(void)72*2d543d20SAndroid Build Coastguard Worker int node_test_init(void)
73*2d543d20SAndroid Build Coastguard Worker {
74*2d543d20SAndroid Build Coastguard Worker if (create_test_store() < 0) {
75*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could not create test store\n");
76*2d543d20SAndroid Build Coastguard Worker return 1;
77*2d543d20SAndroid Build Coastguard Worker }
78*2d543d20SAndroid Build Coastguard Worker
79*2d543d20SAndroid Build Coastguard Worker if (write_test_policy_from_file("test_node.policy") < 0) {
80*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could not write test policy\n");
81*2d543d20SAndroid Build Coastguard Worker return 1;
82*2d543d20SAndroid Build Coastguard Worker }
83*2d543d20SAndroid Build Coastguard Worker
84*2d543d20SAndroid Build Coastguard Worker return 0;
85*2d543d20SAndroid Build Coastguard Worker }
86*2d543d20SAndroid Build Coastguard Worker
node_test_cleanup(void)87*2d543d20SAndroid Build Coastguard Worker int node_test_cleanup(void)
88*2d543d20SAndroid Build Coastguard Worker {
89*2d543d20SAndroid Build Coastguard Worker if (destroy_test_store() < 0) {
90*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could destroy test store\n");
91*2d543d20SAndroid Build Coastguard Worker return 1;
92*2d543d20SAndroid Build Coastguard Worker }
93*2d543d20SAndroid Build Coastguard Worker
94*2d543d20SAndroid Build Coastguard Worker return 0;
95*2d543d20SAndroid Build Coastguard Worker }
96*2d543d20SAndroid Build Coastguard Worker
node_add_tests(CU_pSuite suite)97*2d543d20SAndroid Build Coastguard Worker int node_add_tests(CU_pSuite suite)
98*2d543d20SAndroid Build Coastguard Worker {
99*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_compare", test_node_compare);
100*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_compare2", test_node_compare2);
101*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_key_create", test_node_key_create);
102*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_key_extract", test_node_key_extract);
103*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_addr", test_node_get_set_addr);
104*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_addr_bytes",
105*2d543d20SAndroid Build Coastguard Worker test_node_get_set_addr_bytes);
106*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_mask", test_node_get_set_mask);
107*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_mask_bytes",
108*2d543d20SAndroid Build Coastguard Worker test_node_get_set_mask_bytes);
109*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_proto", test_node_get_set_proto);
110*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_proto_str", test_node_get_proto_str);
111*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_get_set_con", test_node_get_set_con);
112*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_create", test_node_create);
113*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_clone", test_node_clone);
114*2d543d20SAndroid Build Coastguard Worker
115*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_query", test_node_query);
116*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_exists", test_node_exists);
117*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_count", test_node_count);
118*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_iterate", test_node_iterate);
119*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_list", test_node_list);
120*2d543d20SAndroid Build Coastguard Worker
121*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_modify_del_query_local",
122*2d543d20SAndroid Build Coastguard Worker test_node_modify_del_query_local);
123*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_exists_local", test_node_exists_local);
124*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_count_local", test_node_count_local);
125*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_iterate_local", test_node_iterate_local);
126*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "node_list_local", test_node_list_local);
127*2d543d20SAndroid Build Coastguard Worker
128*2d543d20SAndroid Build Coastguard Worker return 0;
129*2d543d20SAndroid Build Coastguard Worker }
130*2d543d20SAndroid Build Coastguard Worker
131*2d543d20SAndroid Build Coastguard Worker /* Helpers */
132*2d543d20SAndroid Build Coastguard Worker
get_node_nth(int idx)133*2d543d20SAndroid Build Coastguard Worker static semanage_node_t *get_node_nth(int idx)
134*2d543d20SAndroid Build Coastguard Worker {
135*2d543d20SAndroid Build Coastguard Worker semanage_node_t **records;
136*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node;
137*2d543d20SAndroid Build Coastguard Worker unsigned int count;
138*2d543d20SAndroid Build Coastguard Worker
139*2d543d20SAndroid Build Coastguard Worker if (idx == I_NULL)
140*2d543d20SAndroid Build Coastguard Worker return NULL;
141*2d543d20SAndroid Build Coastguard Worker
142*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_node_list(sh, &records, &count) >= 0);
143*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(count >= (unsigned int) idx + 1);
144*2d543d20SAndroid Build Coastguard Worker
145*2d543d20SAndroid Build Coastguard Worker node = records[idx];
146*2d543d20SAndroid Build Coastguard Worker
147*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
148*2d543d20SAndroid Build Coastguard Worker if (i != (unsigned int) idx)
149*2d543d20SAndroid Build Coastguard Worker semanage_node_free(records[i]);
150*2d543d20SAndroid Build Coastguard Worker
151*2d543d20SAndroid Build Coastguard Worker free(records);
152*2d543d20SAndroid Build Coastguard Worker
153*2d543d20SAndroid Build Coastguard Worker return node;
154*2d543d20SAndroid Build Coastguard Worker }
155*2d543d20SAndroid Build Coastguard Worker
get_node_key_nth(int idx)156*2d543d20SAndroid Build Coastguard Worker static semanage_node_key_t *get_node_key_nth(int idx)
157*2d543d20SAndroid Build Coastguard Worker {
158*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key;
159*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node;
160*2d543d20SAndroid Build Coastguard Worker int res;
161*2d543d20SAndroid Build Coastguard Worker
162*2d543d20SAndroid Build Coastguard Worker if (idx == I_NULL)
163*2d543d20SAndroid Build Coastguard Worker return NULL;
164*2d543d20SAndroid Build Coastguard Worker
165*2d543d20SAndroid Build Coastguard Worker node = get_node_nth(idx);
166*2d543d20SAndroid Build Coastguard Worker
167*2d543d20SAndroid Build Coastguard Worker res = semanage_node_key_extract(sh, node, &key);
168*2d543d20SAndroid Build Coastguard Worker
169*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(res >= 0);
170*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(key);
171*2d543d20SAndroid Build Coastguard Worker
172*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
173*2d543d20SAndroid Build Coastguard Worker
174*2d543d20SAndroid Build Coastguard Worker return key;
175*2d543d20SAndroid Build Coastguard Worker }
176*2d543d20SAndroid Build Coastguard Worker
add_local_node(int idx)177*2d543d20SAndroid Build Coastguard Worker static void add_local_node(int idx)
178*2d543d20SAndroid Build Coastguard Worker {
179*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node;
180*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
181*2d543d20SAndroid Build Coastguard Worker
182*2d543d20SAndroid Build Coastguard Worker node = get_node_nth(idx);
183*2d543d20SAndroid Build Coastguard Worker
184*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_node_key_extract(sh, node, &key) >= 0);
185*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(key);
186*2d543d20SAndroid Build Coastguard Worker
187*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_node_modify_local(sh, key, node) >= 0);
188*2d543d20SAndroid Build Coastguard Worker
189*2d543d20SAndroid Build Coastguard Worker /* cleanup */
190*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
191*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
192*2d543d20SAndroid Build Coastguard Worker }
193*2d543d20SAndroid Build Coastguard Worker
delete_local_node(int idx)194*2d543d20SAndroid Build Coastguard Worker static void delete_local_node(int idx)
195*2d543d20SAndroid Build Coastguard Worker {
196*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
197*2d543d20SAndroid Build Coastguard Worker
198*2d543d20SAndroid Build Coastguard Worker key = get_node_key_nth(idx);
199*2d543d20SAndroid Build Coastguard Worker
200*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_node_del_local(sh, key) >= 0);
201*2d543d20SAndroid Build Coastguard Worker
202*2d543d20SAndroid Build Coastguard Worker /* cleanup */
203*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
204*2d543d20SAndroid Build Coastguard Worker }
205*2d543d20SAndroid Build Coastguard Worker
206*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_compare */
test_node_compare(void)207*2d543d20SAndroid Build Coastguard Worker static void test_node_compare(void)
208*2d543d20SAndroid Build Coastguard Worker {
209*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
210*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key1 = NULL;
211*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key2 = NULL;
212*2d543d20SAndroid Build Coastguard Worker int res = 42;
213*2d543d20SAndroid Build Coastguard Worker
214*2d543d20SAndroid Build Coastguard Worker /* setup */
215*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
216*2d543d20SAndroid Build Coastguard Worker node = get_node_nth(I_FIRST);
217*2d543d20SAndroid Build Coastguard Worker key1 = get_node_key_nth(I_FIRST);
218*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_create(sh, "192.168.0.1", "255.255.0.0",
219*2d543d20SAndroid Build Coastguard Worker SEMANAGE_PROTO_IP4, &key2) >= 0);
220*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key2);
221*2d543d20SAndroid Build Coastguard Worker
222*2d543d20SAndroid Build Coastguard Worker /* test */
223*2d543d20SAndroid Build Coastguard Worker res = semanage_node_compare(node, key1);
224*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res == 0);
225*2d543d20SAndroid Build Coastguard Worker res = semanage_node_compare(node, key2);
226*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res != 0);
227*2d543d20SAndroid Build Coastguard Worker
228*2d543d20SAndroid Build Coastguard Worker /* cleanup */
229*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
230*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key1);
231*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key2);
232*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
233*2d543d20SAndroid Build Coastguard Worker }
234*2d543d20SAndroid Build Coastguard Worker
235*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_compare2 */
test_node_compare2(void)236*2d543d20SAndroid Build Coastguard Worker static void test_node_compare2(void)
237*2d543d20SAndroid Build Coastguard Worker {
238*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node1 = NULL;
239*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node2 = NULL;
240*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node3 = NULL;
241*2d543d20SAndroid Build Coastguard Worker int res = 42;
242*2d543d20SAndroid Build Coastguard Worker
243*2d543d20SAndroid Build Coastguard Worker /* setup */
244*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
245*2d543d20SAndroid Build Coastguard Worker node1 = get_node_nth(I_FIRST);
246*2d543d20SAndroid Build Coastguard Worker node2 = get_node_nth(I_FIRST);
247*2d543d20SAndroid Build Coastguard Worker node3 = get_node_nth(I_SECOND);
248*2d543d20SAndroid Build Coastguard Worker
249*2d543d20SAndroid Build Coastguard Worker /* test */
250*2d543d20SAndroid Build Coastguard Worker res = semanage_node_compare2(node1, node2);
251*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res == 0);
252*2d543d20SAndroid Build Coastguard Worker res = semanage_node_compare2(node1, node3);
253*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res != 0);
254*2d543d20SAndroid Build Coastguard Worker
255*2d543d20SAndroid Build Coastguard Worker /* cleanup */
256*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node1);
257*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node2);
258*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node3);
259*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
260*2d543d20SAndroid Build Coastguard Worker }
261*2d543d20SAndroid Build Coastguard Worker
262*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_key_create */
test_node_key_create(void)263*2d543d20SAndroid Build Coastguard Worker static void test_node_key_create(void)
264*2d543d20SAndroid Build Coastguard Worker {
265*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
266*2d543d20SAndroid Build Coastguard Worker
267*2d543d20SAndroid Build Coastguard Worker /* setup */
268*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
269*2d543d20SAndroid Build Coastguard Worker
270*2d543d20SAndroid Build Coastguard Worker /* test */
271*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_create(sh, "127.0.0.1", "255.255.255.255",
272*2d543d20SAndroid Build Coastguard Worker SEMANAGE_PROTO_IP4, &key) >= 0);
273*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
274*2d543d20SAndroid Build Coastguard Worker
275*2d543d20SAndroid Build Coastguard Worker /* cleanup */
276*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
277*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
278*2d543d20SAndroid Build Coastguard Worker }
279*2d543d20SAndroid Build Coastguard Worker
280*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_key_extract */
test_node_key_extract(void)281*2d543d20SAndroid Build Coastguard Worker static void test_node_key_extract(void)
282*2d543d20SAndroid Build Coastguard Worker {
283*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
284*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
285*2d543d20SAndroid Build Coastguard Worker
286*2d543d20SAndroid Build Coastguard Worker /* setup */
287*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
288*2d543d20SAndroid Build Coastguard Worker node = get_node_nth(I_FIRST);
289*2d543d20SAndroid Build Coastguard Worker
290*2d543d20SAndroid Build Coastguard Worker /* test */
291*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_extract(sh, node, &key) >= 0);
292*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
293*2d543d20SAndroid Build Coastguard Worker
294*2d543d20SAndroid Build Coastguard Worker /* cleanup */
295*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
296*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
297*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
298*2d543d20SAndroid Build Coastguard Worker }
299*2d543d20SAndroid Build Coastguard Worker
300*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_addr, semanage_node_set_addr */
test_node_get_set_addr(void)301*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_addr(void)
302*2d543d20SAndroid Build Coastguard Worker {
303*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
304*2d543d20SAndroid Build Coastguard Worker char *addr = NULL;
305*2d543d20SAndroid Build Coastguard Worker
306*2d543d20SAndroid Build Coastguard Worker /* setup */
307*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
308*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
309*2d543d20SAndroid Build Coastguard Worker
310*2d543d20SAndroid Build Coastguard Worker /* test */
311*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_addr(sh, node, SEMANAGE_PROTO_IP4,
312*2d543d20SAndroid Build Coastguard Worker "192.168.0.1") == 0);
313*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_addr(sh, node, &addr) >= 0);
314*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(addr);
315*2d543d20SAndroid Build Coastguard Worker assert(addr);
316*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(addr, "192.168.0.1");
317*2d543d20SAndroid Build Coastguard Worker
318*2d543d20SAndroid Build Coastguard Worker /* cleanup */
319*2d543d20SAndroid Build Coastguard Worker free(addr);
320*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
321*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
322*2d543d20SAndroid Build Coastguard Worker }
323*2d543d20SAndroid Build Coastguard Worker
324*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_addr_bytes, semanage_node_set_addr_bytes */
test_node_get_set_addr_bytes(void)325*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_addr_bytes(void)
326*2d543d20SAndroid Build Coastguard Worker {
327*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
328*2d543d20SAndroid Build Coastguard Worker char addr1[] = { 192, 168, 0, 1 };
329*2d543d20SAndroid Build Coastguard Worker size_t addr1_size = sizeof(addr1);
330*2d543d20SAndroid Build Coastguard Worker char *addr2 = NULL;
331*2d543d20SAndroid Build Coastguard Worker size_t addr2_size = 0;
332*2d543d20SAndroid Build Coastguard Worker
333*2d543d20SAndroid Build Coastguard Worker /* setup */
334*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
335*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
336*2d543d20SAndroid Build Coastguard Worker
337*2d543d20SAndroid Build Coastguard Worker /* test */
338*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_addr_bytes(sh, node, addr1,
339*2d543d20SAndroid Build Coastguard Worker addr1_size) == 0);
340*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_addr_bytes(sh, node, &addr2,
341*2d543d20SAndroid Build Coastguard Worker &addr2_size) >= 0);
342*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(addr2);
343*2d543d20SAndroid Build Coastguard Worker assert(addr2);
344*2d543d20SAndroid Build Coastguard Worker
345*2d543d20SAndroid Build Coastguard Worker for (size_t i = 0; i < addr2_size; i++)
346*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(addr1[i] == addr2[i]);
347*2d543d20SAndroid Build Coastguard Worker
348*2d543d20SAndroid Build Coastguard Worker /* cleanup */
349*2d543d20SAndroid Build Coastguard Worker free(addr2);
350*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
351*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
352*2d543d20SAndroid Build Coastguard Worker }
353*2d543d20SAndroid Build Coastguard Worker
354*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_mask, semanage_node_set_mask */
test_node_get_set_mask(void)355*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_mask(void)
356*2d543d20SAndroid Build Coastguard Worker {
357*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
358*2d543d20SAndroid Build Coastguard Worker char *mask = NULL;
359*2d543d20SAndroid Build Coastguard Worker
360*2d543d20SAndroid Build Coastguard Worker /* setup */
361*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
362*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
363*2d543d20SAndroid Build Coastguard Worker
364*2d543d20SAndroid Build Coastguard Worker /* test */
365*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_mask(sh, node, SEMANAGE_PROTO_IP4,
366*2d543d20SAndroid Build Coastguard Worker "255.255.255.0") == 0);
367*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_mask(sh, node, &mask) >= 0);
368*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(mask);
369*2d543d20SAndroid Build Coastguard Worker assert(mask);
370*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(mask, "255.255.255.0");
371*2d543d20SAndroid Build Coastguard Worker
372*2d543d20SAndroid Build Coastguard Worker /* cleanup */
373*2d543d20SAndroid Build Coastguard Worker free(mask);
374*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
375*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
376*2d543d20SAndroid Build Coastguard Worker }
377*2d543d20SAndroid Build Coastguard Worker
378*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_mask_bytes, semanage_node_set_mask_bytes */
test_node_get_set_mask_bytes(void)379*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_mask_bytes(void)
380*2d543d20SAndroid Build Coastguard Worker {
381*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
382*2d543d20SAndroid Build Coastguard Worker char mask1[] = { 255, 255, 255, 0 };
383*2d543d20SAndroid Build Coastguard Worker size_t mask1_size = sizeof(mask1);
384*2d543d20SAndroid Build Coastguard Worker char *mask2 = NULL;
385*2d543d20SAndroid Build Coastguard Worker size_t mask2_size = 0;
386*2d543d20SAndroid Build Coastguard Worker
387*2d543d20SAndroid Build Coastguard Worker /* setup */
388*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
389*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
390*2d543d20SAndroid Build Coastguard Worker
391*2d543d20SAndroid Build Coastguard Worker /* test */
392*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_mask_bytes(sh, node, mask1,
393*2d543d20SAndroid Build Coastguard Worker mask1_size) == 0);
394*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_mask_bytes(sh, node, &mask2,
395*2d543d20SAndroid Build Coastguard Worker &mask2_size) >= 0);
396*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(mask2);
397*2d543d20SAndroid Build Coastguard Worker assert(mask2);
398*2d543d20SAndroid Build Coastguard Worker
399*2d543d20SAndroid Build Coastguard Worker for (size_t i = 0; i < mask2_size; i++)
400*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(mask1[i] == mask2[i]);
401*2d543d20SAndroid Build Coastguard Worker
402*2d543d20SAndroid Build Coastguard Worker /* cleanup */
403*2d543d20SAndroid Build Coastguard Worker free(mask2);
404*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
405*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
406*2d543d20SAndroid Build Coastguard Worker }
407*2d543d20SAndroid Build Coastguard Worker
408*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_proto, semanage_node_set_proto */
test_node_get_set_proto(void)409*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_proto(void)
410*2d543d20SAndroid Build Coastguard Worker {
411*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
412*2d543d20SAndroid Build Coastguard Worker
413*2d543d20SAndroid Build Coastguard Worker /* setup */
414*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
415*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
416*2d543d20SAndroid Build Coastguard Worker
417*2d543d20SAndroid Build Coastguard Worker /* test */
418*2d543d20SAndroid Build Coastguard Worker semanage_node_set_proto(node, SEMANAGE_PROTO_IP4);
419*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_proto(node) == SEMANAGE_PROTO_IP4);
420*2d543d20SAndroid Build Coastguard Worker
421*2d543d20SAndroid Build Coastguard Worker /* cleanup */
422*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
423*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
424*2d543d20SAndroid Build Coastguard Worker }
425*2d543d20SAndroid Build Coastguard Worker
426*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_proto_str */
test_node_get_proto_str(void)427*2d543d20SAndroid Build Coastguard Worker static void test_node_get_proto_str(void)
428*2d543d20SAndroid Build Coastguard Worker {
429*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(semanage_node_get_proto_str(SEMANAGE_PROTO_IP4),
430*2d543d20SAndroid Build Coastguard Worker "ipv4");
431*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(semanage_node_get_proto_str(SEMANAGE_PROTO_IP6),
432*2d543d20SAndroid Build Coastguard Worker "ipv6");
433*2d543d20SAndroid Build Coastguard Worker }
434*2d543d20SAndroid Build Coastguard Worker
435*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_get_con, semanage_node_set_con */
test_node_get_set_con(void)436*2d543d20SAndroid Build Coastguard Worker static void test_node_get_set_con(void)
437*2d543d20SAndroid Build Coastguard Worker {
438*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
439*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con1 = NULL;
440*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con2 = NULL;
441*2d543d20SAndroid Build Coastguard Worker
442*2d543d20SAndroid Build Coastguard Worker /* setup */
443*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
444*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
445*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh,
446*2d543d20SAndroid Build Coastguard Worker "my_user_u:my_role_r:my_type_t:s0", &con1) >= 0);
447*2d543d20SAndroid Build Coastguard Worker
448*2d543d20SAndroid Build Coastguard Worker /* test */
449*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_con(sh, node, con1) == 0);
450*2d543d20SAndroid Build Coastguard Worker con2 = semanage_node_get_con(node);
451*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con1, con2);
452*2d543d20SAndroid Build Coastguard Worker
453*2d543d20SAndroid Build Coastguard Worker /* cleanup */
454*2d543d20SAndroid Build Coastguard Worker semanage_context_free(con1);
455*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
456*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
457*2d543d20SAndroid Build Coastguard Worker }
458*2d543d20SAndroid Build Coastguard Worker
459*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_create */
test_node_create(void)460*2d543d20SAndroid Build Coastguard Worker static void test_node_create(void)
461*2d543d20SAndroid Build Coastguard Worker {
462*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
463*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con = NULL;
464*2d543d20SAndroid Build Coastguard Worker
465*2d543d20SAndroid Build Coastguard Worker /* setup */
466*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
467*2d543d20SAndroid Build Coastguard Worker
468*2d543d20SAndroid Build Coastguard Worker /* test */
469*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
470*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_addr(sh, node, SEMANAGE_PROTO_IP4,
471*2d543d20SAndroid Build Coastguard Worker "127.0.0.1") >= 0);
472*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_mask(sh, node, SEMANAGE_PROTO_IP4,
473*2d543d20SAndroid Build Coastguard Worker "255.255.255.0") >= 0);
474*2d543d20SAndroid Build Coastguard Worker semanage_node_set_proto(node, SEMANAGE_PROTO_IP4);
475*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:type_t:s0",
476*2d543d20SAndroid Build Coastguard Worker &con) >= 0);
477*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_con(sh, node, con) >= 0);
478*2d543d20SAndroid Build Coastguard Worker
479*2d543d20SAndroid Build Coastguard Worker /* cleanup */
480*2d543d20SAndroid Build Coastguard Worker semanage_context_free(con);
481*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
482*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
483*2d543d20SAndroid Build Coastguard Worker }
484*2d543d20SAndroid Build Coastguard Worker
485*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_clone */
test_node_clone(void)486*2d543d20SAndroid Build Coastguard Worker static void test_node_clone(void)
487*2d543d20SAndroid Build Coastguard Worker {
488*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
489*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node_clone = NULL;
490*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con = NULL;
491*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con2 = NULL;
492*2d543d20SAndroid Build Coastguard Worker const char *addr1 = "127.0.0.1";
493*2d543d20SAndroid Build Coastguard Worker char *addr2 = NULL;
494*2d543d20SAndroid Build Coastguard Worker const char *mask1 = "255.255.255.0";
495*2d543d20SAndroid Build Coastguard Worker char *mask2 = NULL;
496*2d543d20SAndroid Build Coastguard Worker
497*2d543d20SAndroid Build Coastguard Worker /* setup */
498*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
499*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_create(sh, &node) >= 0);
500*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_addr(sh, node, SEMANAGE_PROTO_IP4,
501*2d543d20SAndroid Build Coastguard Worker addr1) >= 0);
502*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_mask(sh, node, SEMANAGE_PROTO_IP4,
503*2d543d20SAndroid Build Coastguard Worker mask1) >= 0);
504*2d543d20SAndroid Build Coastguard Worker semanage_node_set_proto(node, SEMANAGE_PROTO_IP4);
505*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:type_t:s0",
506*2d543d20SAndroid Build Coastguard Worker &con) >= 0);
507*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_con(sh, node, con) >= 0);
508*2d543d20SAndroid Build Coastguard Worker
509*2d543d20SAndroid Build Coastguard Worker /* test */
510*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_clone(sh, node, &node_clone) >= 0);
511*2d543d20SAndroid Build Coastguard Worker
512*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_addr(sh, node_clone, &addr2) >= 0);
513*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(addr2);
514*2d543d20SAndroid Build Coastguard Worker assert(addr2);
515*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(addr1, addr2);
516*2d543d20SAndroid Build Coastguard Worker
517*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_mask(sh, node_clone, &mask2) >= 0);
518*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(mask2);
519*2d543d20SAndroid Build Coastguard Worker assert(mask2);
520*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(mask1, mask2);
521*2d543d20SAndroid Build Coastguard Worker
522*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_proto(node_clone) == SEMANAGE_PROTO_IP4);
523*2d543d20SAndroid Build Coastguard Worker
524*2d543d20SAndroid Build Coastguard Worker con2 = semanage_node_get_con(node_clone);
525*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con, con2);
526*2d543d20SAndroid Build Coastguard Worker
527*2d543d20SAndroid Build Coastguard Worker /* cleanup */
528*2d543d20SAndroid Build Coastguard Worker free(mask2);
529*2d543d20SAndroid Build Coastguard Worker free(addr2);
530*2d543d20SAndroid Build Coastguard Worker semanage_context_free(con);
531*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
532*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node_clone);
533*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
534*2d543d20SAndroid Build Coastguard Worker }
535*2d543d20SAndroid Build Coastguard Worker
536*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_query */
test_node_query(void)537*2d543d20SAndroid Build Coastguard Worker static void test_node_query(void)
538*2d543d20SAndroid Build Coastguard Worker {
539*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node = NULL;
540*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node_exp = NULL;
541*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
542*2d543d20SAndroid Build Coastguard Worker char *str = NULL;
543*2d543d20SAndroid Build Coastguard Worker char *str_exp = NULL;
544*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con = NULL;
545*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con_exp = NULL;
546*2d543d20SAndroid Build Coastguard Worker
547*2d543d20SAndroid Build Coastguard Worker /* setup */
548*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
549*2d543d20SAndroid Build Coastguard Worker key = get_node_key_nth(I_FIRST);
550*2d543d20SAndroid Build Coastguard Worker node_exp = get_node_nth(I_FIRST);
551*2d543d20SAndroid Build Coastguard Worker
552*2d543d20SAndroid Build Coastguard Worker /* test */
553*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_query(sh, key, &node) >= 0);
554*2d543d20SAndroid Build Coastguard Worker
555*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_addr(sh, node, &str) >= 0);
556*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_addr(sh, node_exp, &str_exp) >= 0);
557*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str, str_exp);
558*2d543d20SAndroid Build Coastguard Worker free(str);
559*2d543d20SAndroid Build Coastguard Worker free(str_exp);
560*2d543d20SAndroid Build Coastguard Worker
561*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_mask(sh, node, &str) >= 0);
562*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_mask(sh, node_exp, &str_exp) >= 0);
563*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str, str_exp);
564*2d543d20SAndroid Build Coastguard Worker free(str);
565*2d543d20SAndroid Build Coastguard Worker free(str_exp);
566*2d543d20SAndroid Build Coastguard Worker
567*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_get_proto(node) ==
568*2d543d20SAndroid Build Coastguard Worker semanage_node_get_proto(node_exp));
569*2d543d20SAndroid Build Coastguard Worker
570*2d543d20SAndroid Build Coastguard Worker con = semanage_node_get_con(node);
571*2d543d20SAndroid Build Coastguard Worker con_exp = semanage_node_get_con(node_exp);
572*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con, con_exp);
573*2d543d20SAndroid Build Coastguard Worker
574*2d543d20SAndroid Build Coastguard Worker /* cleanup */
575*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
576*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node_exp);
577*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
578*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
579*2d543d20SAndroid Build Coastguard Worker }
580*2d543d20SAndroid Build Coastguard Worker
581*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_exists */
test_node_exists(void)582*2d543d20SAndroid Build Coastguard Worker static void test_node_exists(void)
583*2d543d20SAndroid Build Coastguard Worker {
584*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key1 = NULL;
585*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key2 = NULL;
586*2d543d20SAndroid Build Coastguard Worker int resp = 42;
587*2d543d20SAndroid Build Coastguard Worker
588*2d543d20SAndroid Build Coastguard Worker /* setup */
589*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
590*2d543d20SAndroid Build Coastguard Worker key1 = get_node_key_nth(I_FIRST);
591*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_create(sh, "1.2.3.4", "255.255.0.0",
592*2d543d20SAndroid Build Coastguard Worker SEMANAGE_PROTO_IP4, &key2) >= 0);
593*2d543d20SAndroid Build Coastguard Worker
594*2d543d20SAndroid Build Coastguard Worker /* test */
595*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_exists(sh, key1, &resp) >= 0);
596*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(resp);
597*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_exists(sh, key2, &resp) >= 0);
598*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(!resp);
599*2d543d20SAndroid Build Coastguard Worker
600*2d543d20SAndroid Build Coastguard Worker /* cleanup */
601*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key1);
602*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key2);
603*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
604*2d543d20SAndroid Build Coastguard Worker }
605*2d543d20SAndroid Build Coastguard Worker
606*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_count */
test_node_count(void)607*2d543d20SAndroid Build Coastguard Worker static void test_node_count(void)
608*2d543d20SAndroid Build Coastguard Worker {
609*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
610*2d543d20SAndroid Build Coastguard Worker
611*2d543d20SAndroid Build Coastguard Worker /* setup */
612*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
613*2d543d20SAndroid Build Coastguard Worker
614*2d543d20SAndroid Build Coastguard Worker /* test */
615*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count(sh, &count) >= 0);
616*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == NODE_COUNT);
617*2d543d20SAndroid Build Coastguard Worker
618*2d543d20SAndroid Build Coastguard Worker /* cleanup */
619*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
620*2d543d20SAndroid Build Coastguard Worker }
621*2d543d20SAndroid Build Coastguard Worker
622*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_iterate */
623*2d543d20SAndroid Build Coastguard Worker unsigned int counter_node_iterate = 0;
624*2d543d20SAndroid Build Coastguard Worker
handler_node_iterate(const semanage_node_t * record,void * varg)625*2d543d20SAndroid Build Coastguard Worker static int handler_node_iterate(const semanage_node_t *record, void *varg)
626*2d543d20SAndroid Build Coastguard Worker {
627*2d543d20SAndroid Build Coastguard Worker counter_node_iterate++;
628*2d543d20SAndroid Build Coastguard Worker return 0;
629*2d543d20SAndroid Build Coastguard Worker }
630*2d543d20SAndroid Build Coastguard Worker
test_node_iterate(void)631*2d543d20SAndroid Build Coastguard Worker static void test_node_iterate(void)
632*2d543d20SAndroid Build Coastguard Worker {
633*2d543d20SAndroid Build Coastguard Worker /* setup */
634*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
635*2d543d20SAndroid Build Coastguard Worker
636*2d543d20SAndroid Build Coastguard Worker /* test */
637*2d543d20SAndroid Build Coastguard Worker semanage_node_iterate(sh, handler_node_iterate, NULL);
638*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(counter_node_iterate == NODE_COUNT);
639*2d543d20SAndroid Build Coastguard Worker
640*2d543d20SAndroid Build Coastguard Worker /* cleanup */
641*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
642*2d543d20SAndroid Build Coastguard Worker }
643*2d543d20SAndroid Build Coastguard Worker
644*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_list */
test_node_list(void)645*2d543d20SAndroid Build Coastguard Worker static void test_node_list(void)
646*2d543d20SAndroid Build Coastguard Worker {
647*2d543d20SAndroid Build Coastguard Worker semanage_node_t **records = NULL;
648*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
649*2d543d20SAndroid Build Coastguard Worker
650*2d543d20SAndroid Build Coastguard Worker /* setup */
651*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
652*2d543d20SAndroid Build Coastguard Worker
653*2d543d20SAndroid Build Coastguard Worker /* test */
654*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_list(sh, &records, &count) >= 0);
655*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == NODE_COUNT);
656*2d543d20SAndroid Build Coastguard Worker
657*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
658*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(records[i]);
659*2d543d20SAndroid Build Coastguard Worker
660*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
661*2d543d20SAndroid Build Coastguard Worker semanage_node_free(records[i]);
662*2d543d20SAndroid Build Coastguard Worker
663*2d543d20SAndroid Build Coastguard Worker free(records);
664*2d543d20SAndroid Build Coastguard Worker
665*2d543d20SAndroid Build Coastguard Worker /* cleanup */
666*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
667*2d543d20SAndroid Build Coastguard Worker }
668*2d543d20SAndroid Build Coastguard Worker
669*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_modify_local, semanage_node_del_local,
670*2d543d20SAndroid Build Coastguard Worker * semanage_node_query_local
671*2d543d20SAndroid Build Coastguard Worker */
test_node_modify_del_query_local(void)672*2d543d20SAndroid Build Coastguard Worker static void test_node_modify_del_query_local(void)
673*2d543d20SAndroid Build Coastguard Worker {
674*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node;
675*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node_local;
676*2d543d20SAndroid Build Coastguard Worker semanage_node_t *node_tmp;
677*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key = NULL;
678*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key_tmp = NULL;
679*2d543d20SAndroid Build Coastguard Worker
680*2d543d20SAndroid Build Coastguard Worker /* setup */
681*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
682*2d543d20SAndroid Build Coastguard Worker node = get_node_nth(I_FIRST);
683*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_extract(sh, node, &key) >= 0);
684*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
685*2d543d20SAndroid Build Coastguard Worker
686*2d543d20SAndroid Build Coastguard Worker /* add second record, so that semanage_node_compare2_qsort
687*2d543d20SAndroid Build Coastguard Worker * will be called
688*2d543d20SAndroid Build Coastguard Worker */
689*2d543d20SAndroid Build Coastguard Worker node_tmp = get_node_nth(I_FIRST);
690*2d543d20SAndroid Build Coastguard Worker
691*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_set_addr(sh, node_tmp, SEMANAGE_PROTO_IP4,
692*2d543d20SAndroid Build Coastguard Worker "10.0.0.1") >= 0);
693*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_key_extract(sh, node_tmp, &key_tmp) >= 0);
694*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key_tmp);
695*2d543d20SAndroid Build Coastguard Worker
696*2d543d20SAndroid Build Coastguard Worker /* test */
697*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_modify_local(sh, key, node) >= 0);
698*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_modify_local(sh, key_tmp, node_tmp) >= 0);
699*2d543d20SAndroid Build Coastguard Worker
700*2d543d20SAndroid Build Coastguard Worker /* write changes to file */
701*2d543d20SAndroid Build Coastguard Worker helper_commit();
702*2d543d20SAndroid Build Coastguard Worker helper_begin_transaction();
703*2d543d20SAndroid Build Coastguard Worker
704*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_query_local(sh, key, &node_local) >= 0);
705*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(node_local);
706*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node_local);
707*2d543d20SAndroid Build Coastguard Worker
708*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_del_local(sh, key) >= 0);
709*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_del_local(sh, key_tmp) >= 0);
710*2d543d20SAndroid Build Coastguard Worker
711*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_query_local(sh, key, &node_local) < 0);
712*2d543d20SAndroid Build Coastguard Worker
713*2d543d20SAndroid Build Coastguard Worker /* cleanup */
714*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key_tmp);
715*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key);
716*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node);
717*2d543d20SAndroid Build Coastguard Worker semanage_node_free(node_tmp);
718*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
719*2d543d20SAndroid Build Coastguard Worker }
720*2d543d20SAndroid Build Coastguard Worker
721*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_exists_local */
test_node_exists_local(void)722*2d543d20SAndroid Build Coastguard Worker static void test_node_exists_local(void)
723*2d543d20SAndroid Build Coastguard Worker {
724*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key1 = NULL;
725*2d543d20SAndroid Build Coastguard Worker semanage_node_key_t *key2 = NULL;
726*2d543d20SAndroid Build Coastguard Worker int resp = 42;
727*2d543d20SAndroid Build Coastguard Worker
728*2d543d20SAndroid Build Coastguard Worker /* setup */
729*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
730*2d543d20SAndroid Build Coastguard Worker add_local_node(I_FIRST);
731*2d543d20SAndroid Build Coastguard Worker key1 = get_node_key_nth(I_FIRST);
732*2d543d20SAndroid Build Coastguard Worker key2 = get_node_key_nth(I_SECOND);
733*2d543d20SAndroid Build Coastguard Worker
734*2d543d20SAndroid Build Coastguard Worker /* test */
735*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_exists_local(sh, key1, &resp) >= 0);
736*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(resp);
737*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_exists_local(sh, key2, &resp) >= 0);
738*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(!resp);
739*2d543d20SAndroid Build Coastguard Worker
740*2d543d20SAndroid Build Coastguard Worker /* cleanup */
741*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_del_local(sh, key1) >= 0);
742*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key1);
743*2d543d20SAndroid Build Coastguard Worker semanage_node_key_free(key2);
744*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
745*2d543d20SAndroid Build Coastguard Worker }
746*2d543d20SAndroid Build Coastguard Worker
747*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_count_local */
test_node_count_local(void)748*2d543d20SAndroid Build Coastguard Worker static void test_node_count_local(void)
749*2d543d20SAndroid Build Coastguard Worker {
750*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
751*2d543d20SAndroid Build Coastguard Worker
752*2d543d20SAndroid Build Coastguard Worker /* setup */
753*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
754*2d543d20SAndroid Build Coastguard Worker
755*2d543d20SAndroid Build Coastguard Worker /* test */
756*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count_local(sh, &count) >= 0);
757*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 0);
758*2d543d20SAndroid Build Coastguard Worker
759*2d543d20SAndroid Build Coastguard Worker add_local_node(I_FIRST);
760*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count_local(sh, &count) >= 0);
761*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 1);
762*2d543d20SAndroid Build Coastguard Worker
763*2d543d20SAndroid Build Coastguard Worker add_local_node(I_SECOND);
764*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count_local(sh, &count) >= 0);
765*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 2);
766*2d543d20SAndroid Build Coastguard Worker
767*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_SECOND);
768*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count_local(sh, &count) >= 0);
769*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 1);
770*2d543d20SAndroid Build Coastguard Worker
771*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_FIRST);
772*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_count_local(sh, &count) >= 0);
773*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 0);
774*2d543d20SAndroid Build Coastguard Worker
775*2d543d20SAndroid Build Coastguard Worker /* cleanup */
776*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
777*2d543d20SAndroid Build Coastguard Worker }
778*2d543d20SAndroid Build Coastguard Worker
779*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_iterate_local */
780*2d543d20SAndroid Build Coastguard Worker unsigned int counter_node_iterate_local = 0;
781*2d543d20SAndroid Build Coastguard Worker
handler_node_iterate_local(const semanage_node_t * record,void * varg)782*2d543d20SAndroid Build Coastguard Worker static int handler_node_iterate_local(const semanage_node_t *record, void *varg)
783*2d543d20SAndroid Build Coastguard Worker {
784*2d543d20SAndroid Build Coastguard Worker counter_node_iterate_local++;
785*2d543d20SAndroid Build Coastguard Worker return 0;
786*2d543d20SAndroid Build Coastguard Worker }
787*2d543d20SAndroid Build Coastguard Worker
test_node_iterate_local(void)788*2d543d20SAndroid Build Coastguard Worker static void test_node_iterate_local(void)
789*2d543d20SAndroid Build Coastguard Worker {
790*2d543d20SAndroid Build Coastguard Worker /* setup */
791*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
792*2d543d20SAndroid Build Coastguard Worker add_local_node(I_FIRST);
793*2d543d20SAndroid Build Coastguard Worker add_local_node(I_SECOND);
794*2d543d20SAndroid Build Coastguard Worker add_local_node(I_THIRD);
795*2d543d20SAndroid Build Coastguard Worker
796*2d543d20SAndroid Build Coastguard Worker /* test */
797*2d543d20SAndroid Build Coastguard Worker semanage_node_iterate_local(sh, handler_node_iterate_local, NULL);
798*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(counter_node_iterate_local == 3);
799*2d543d20SAndroid Build Coastguard Worker
800*2d543d20SAndroid Build Coastguard Worker /* cleanup */
801*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_FIRST);
802*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_SECOND);
803*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_THIRD);
804*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
805*2d543d20SAndroid Build Coastguard Worker }
806*2d543d20SAndroid Build Coastguard Worker
807*2d543d20SAndroid Build Coastguard Worker /* Function semanage_node_list_local */
test_node_list_local(void)808*2d543d20SAndroid Build Coastguard Worker static void test_node_list_local(void)
809*2d543d20SAndroid Build Coastguard Worker {
810*2d543d20SAndroid Build Coastguard Worker semanage_node_t **records = NULL;
811*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
812*2d543d20SAndroid Build Coastguard Worker
813*2d543d20SAndroid Build Coastguard Worker /* setup */
814*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
815*2d543d20SAndroid Build Coastguard Worker add_local_node(I_FIRST);
816*2d543d20SAndroid Build Coastguard Worker add_local_node(I_SECOND);
817*2d543d20SAndroid Build Coastguard Worker add_local_node(I_THIRD);
818*2d543d20SAndroid Build Coastguard Worker
819*2d543d20SAndroid Build Coastguard Worker /* test */
820*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_node_list_local(sh, &records, &count) >= 0);
821*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 3);
822*2d543d20SAndroid Build Coastguard Worker
823*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
824*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(records[i]);
825*2d543d20SAndroid Build Coastguard Worker
826*2d543d20SAndroid Build Coastguard Worker /* cleanup */
827*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
828*2d543d20SAndroid Build Coastguard Worker semanage_node_free(records[i]);
829*2d543d20SAndroid Build Coastguard Worker
830*2d543d20SAndroid Build Coastguard Worker free(records);
831*2d543d20SAndroid Build Coastguard Worker
832*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_FIRST);
833*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_SECOND);
834*2d543d20SAndroid Build Coastguard Worker delete_local_node(I_THIRD);
835*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
836*2d543d20SAndroid Build Coastguard Worker }
837