xref: /aosp_15_r20/external/selinux/libsemanage/tests/test_user.c (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
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_user.h"
23*2d543d20SAndroid Build Coastguard Worker 
24*2d543d20SAndroid Build Coastguard Worker #define USER_COUNT 3
25*2d543d20SAndroid Build Coastguard Worker 
26*2d543d20SAndroid Build Coastguard Worker /* user_record.h */
27*2d543d20SAndroid Build Coastguard Worker static void test_user_compare(void);
28*2d543d20SAndroid Build Coastguard Worker static void test_user_compare2(void);
29*2d543d20SAndroid Build Coastguard Worker static void test_user_key_create(void);
30*2d543d20SAndroid Build Coastguard Worker static void test_user_key_extract(void);
31*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_name(void);
32*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_prefix(void);
33*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_mlslevel(void);
34*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_mlsrange(void);
35*2d543d20SAndroid Build Coastguard Worker static void test_user_roles(void);
36*2d543d20SAndroid Build Coastguard Worker static void test_user_create(void);
37*2d543d20SAndroid Build Coastguard Worker static void test_user_clone(void);
38*2d543d20SAndroid Build Coastguard Worker 
39*2d543d20SAndroid Build Coastguard Worker /* users_policy.h */
40*2d543d20SAndroid Build Coastguard Worker static void test_user_query(void);
41*2d543d20SAndroid Build Coastguard Worker static void test_user_exists(void);
42*2d543d20SAndroid Build Coastguard Worker static void test_user_count(void);
43*2d543d20SAndroid Build Coastguard Worker static void test_user_iterate(void);
44*2d543d20SAndroid Build Coastguard Worker static void test_user_list(void);
45*2d543d20SAndroid Build Coastguard Worker 
46*2d543d20SAndroid Build Coastguard Worker /* users_local.h */
47*2d543d20SAndroid Build Coastguard Worker static void test_user_modify_del_query_local(void);
48*2d543d20SAndroid Build Coastguard Worker static void test_user_exists_local(void);
49*2d543d20SAndroid Build Coastguard Worker static void test_user_count_local(void);
50*2d543d20SAndroid Build Coastguard Worker static void test_user_iterate_local(void);
51*2d543d20SAndroid Build Coastguard Worker static void test_user_list_local(void);
52*2d543d20SAndroid Build Coastguard Worker 
53*2d543d20SAndroid Build Coastguard Worker extern semanage_handle_t *sh;
54*2d543d20SAndroid Build Coastguard Worker 
user_test_init(void)55*2d543d20SAndroid Build Coastguard Worker int user_test_init(void)
56*2d543d20SAndroid Build Coastguard Worker {
57*2d543d20SAndroid Build Coastguard Worker 	if (create_test_store() < 0) {
58*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "Could not create test store\n");
59*2d543d20SAndroid Build Coastguard Worker 		return 1;
60*2d543d20SAndroid Build Coastguard Worker 	}
61*2d543d20SAndroid Build Coastguard Worker 
62*2d543d20SAndroid Build Coastguard Worker 	if (write_test_policy_from_file("test_user.policy") < 0) {
63*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "Could not write test policy\n");
64*2d543d20SAndroid Build Coastguard Worker 		return 1;
65*2d543d20SAndroid Build Coastguard Worker 	}
66*2d543d20SAndroid Build Coastguard Worker 
67*2d543d20SAndroid Build Coastguard Worker 	return 0;
68*2d543d20SAndroid Build Coastguard Worker }
69*2d543d20SAndroid Build Coastguard Worker 
user_test_cleanup(void)70*2d543d20SAndroid Build Coastguard Worker int user_test_cleanup(void)
71*2d543d20SAndroid Build Coastguard Worker {
72*2d543d20SAndroid Build Coastguard Worker 	if (destroy_test_store() < 0) {
73*2d543d20SAndroid Build Coastguard Worker 		fprintf(stderr, "Could not destroy test store\n");
74*2d543d20SAndroid Build Coastguard Worker 		return 1;
75*2d543d20SAndroid Build Coastguard Worker 	}
76*2d543d20SAndroid Build Coastguard Worker 
77*2d543d20SAndroid Build Coastguard Worker 	return 0;
78*2d543d20SAndroid Build Coastguard Worker }
79*2d543d20SAndroid Build Coastguard Worker 
user_add_tests(CU_pSuite suite)80*2d543d20SAndroid Build Coastguard Worker int user_add_tests(CU_pSuite suite)
81*2d543d20SAndroid Build Coastguard Worker {
82*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_compare", test_user_compare);
83*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_compare2", test_user_compare2);
84*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_key_create", test_user_key_create);
85*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_key_extract", test_user_key_extract);
86*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_get_set_name", test_user_get_set_name);
87*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_get_set_prefix", test_user_get_set_prefix);
88*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_get_set_mlslevel", test_user_get_set_mlslevel);
89*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_get_set_mlsrange", test_user_get_set_mlsrange);
90*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_roles", test_user_roles);
91*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_create", test_user_create);
92*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_clone", test_user_clone);
93*2d543d20SAndroid Build Coastguard Worker 
94*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_query", test_user_query);
95*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_exists", test_user_exists);
96*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_count", test_user_count);
97*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_iterate", test_user_iterate);
98*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_list", test_user_list);
99*2d543d20SAndroid Build Coastguard Worker 
100*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_modify_del_query_local",
101*2d543d20SAndroid Build Coastguard Worker 				test_user_modify_del_query_local);
102*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_exists_local", test_user_exists_local);
103*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_count_local", test_user_count_local);
104*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_iterate_local", test_user_iterate_local);
105*2d543d20SAndroid Build Coastguard Worker 	CU_add_test(suite, "user_list_local", test_user_list_local);
106*2d543d20SAndroid Build Coastguard Worker 
107*2d543d20SAndroid Build Coastguard Worker 	return 0;
108*2d543d20SAndroid Build Coastguard Worker }
109*2d543d20SAndroid Build Coastguard Worker 
110*2d543d20SAndroid Build Coastguard Worker /* Helpers */
111*2d543d20SAndroid Build Coastguard Worker 
get_user_nth(int idx)112*2d543d20SAndroid Build Coastguard Worker static semanage_user_t *get_user_nth(int idx)
113*2d543d20SAndroid Build Coastguard Worker {
114*2d543d20SAndroid Build Coastguard Worker 	int res;
115*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t **records;
116*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user;
117*2d543d20SAndroid Build Coastguard Worker 	unsigned int count;
118*2d543d20SAndroid Build Coastguard Worker 
119*2d543d20SAndroid Build Coastguard Worker 	if (idx == I_NULL)
120*2d543d20SAndroid Build Coastguard Worker 		return NULL;
121*2d543d20SAndroid Build Coastguard Worker 
122*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_list(sh, &records, &count);
123*2d543d20SAndroid Build Coastguard Worker 
124*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(res >= 0);
125*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(count >= (unsigned int) idx + 1);
126*2d543d20SAndroid Build Coastguard Worker 
127*2d543d20SAndroid Build Coastguard Worker 	user = records[idx];
128*2d543d20SAndroid Build Coastguard Worker 
129*2d543d20SAndroid Build Coastguard Worker 	for (unsigned int i = 0; i < count; i++)
130*2d543d20SAndroid Build Coastguard Worker 		if (i != (unsigned int) idx)
131*2d543d20SAndroid Build Coastguard Worker 			semanage_user_free(records[i]);
132*2d543d20SAndroid Build Coastguard Worker 
133*2d543d20SAndroid Build Coastguard Worker 	free(records);
134*2d543d20SAndroid Build Coastguard Worker 
135*2d543d20SAndroid Build Coastguard Worker 	return user;
136*2d543d20SAndroid Build Coastguard Worker }
137*2d543d20SAndroid Build Coastguard Worker 
get_user_key_nth(int idx)138*2d543d20SAndroid Build Coastguard Worker static semanage_user_key_t *get_user_key_nth(int idx)
139*2d543d20SAndroid Build Coastguard Worker {
140*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key;
141*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user;
142*2d543d20SAndroid Build Coastguard Worker 	int res;
143*2d543d20SAndroid Build Coastguard Worker 
144*2d543d20SAndroid Build Coastguard Worker 	if (idx == I_NULL)
145*2d543d20SAndroid Build Coastguard Worker 		return NULL;
146*2d543d20SAndroid Build Coastguard Worker 
147*2d543d20SAndroid Build Coastguard Worker 	user = get_user_nth(idx);
148*2d543d20SAndroid Build Coastguard Worker 
149*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_key_extract(sh, user, &key);
150*2d543d20SAndroid Build Coastguard Worker 
151*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(res >= 0);
152*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL_FATAL(key);
153*2d543d20SAndroid Build Coastguard Worker 
154*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
155*2d543d20SAndroid Build Coastguard Worker 
156*2d543d20SAndroid Build Coastguard Worker 	return key;
157*2d543d20SAndroid Build Coastguard Worker }
158*2d543d20SAndroid Build Coastguard Worker 
add_local_user(int user_idx)159*2d543d20SAndroid Build Coastguard Worker static void add_local_user(int user_idx)
160*2d543d20SAndroid Build Coastguard Worker {
161*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user;
162*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key = NULL;
163*2d543d20SAndroid Build Coastguard Worker 
164*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(user_idx != I_NULL);
165*2d543d20SAndroid Build Coastguard Worker 
166*2d543d20SAndroid Build Coastguard Worker 	user = get_user_nth(user_idx);
167*2d543d20SAndroid Build Coastguard Worker 
168*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(semanage_user_key_extract(sh, user, &key) >= 0);
169*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL_FATAL(key);
170*2d543d20SAndroid Build Coastguard Worker 
171*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(semanage_user_modify_local(sh, key, user) >= 0);
172*2d543d20SAndroid Build Coastguard Worker 
173*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
174*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
175*2d543d20SAndroid Build Coastguard Worker }
176*2d543d20SAndroid Build Coastguard Worker 
delete_local_user(int user_idx)177*2d543d20SAndroid Build Coastguard Worker static void delete_local_user(int user_idx)
178*2d543d20SAndroid Build Coastguard Worker {
179*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key = NULL;
180*2d543d20SAndroid Build Coastguard Worker 
181*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(user_idx != I_NULL);
182*2d543d20SAndroid Build Coastguard Worker 
183*2d543d20SAndroid Build Coastguard Worker 	key = get_user_key_nth(user_idx);
184*2d543d20SAndroid Build Coastguard Worker 
185*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_FATAL(semanage_user_del_local(sh, key) >= 0);
186*2d543d20SAndroid Build Coastguard Worker 
187*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
188*2d543d20SAndroid Build Coastguard Worker }
189*2d543d20SAndroid Build Coastguard Worker 
190*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_compare */
test_user_compare(void)191*2d543d20SAndroid Build Coastguard Worker static void test_user_compare(void)
192*2d543d20SAndroid Build Coastguard Worker {
193*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
194*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key1 = NULL;
195*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key2 = NULL;
196*2d543d20SAndroid Build Coastguard Worker 	int res = 42;
197*2d543d20SAndroid Build Coastguard Worker 
198*2d543d20SAndroid Build Coastguard Worker 	/* setup */
199*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
200*2d543d20SAndroid Build Coastguard Worker 	user = get_user_nth(I_FIRST);
201*2d543d20SAndroid Build Coastguard Worker 	key1 = get_user_key_nth(I_FIRST);
202*2d543d20SAndroid Build Coastguard Worker 	key2 = get_user_key_nth(I_SECOND);
203*2d543d20SAndroid Build Coastguard Worker 
204*2d543d20SAndroid Build Coastguard Worker 	/* test */
205*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_compare(user, key1);
206*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(res == 0);
207*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_compare(user, key2);
208*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(res != 0);
209*2d543d20SAndroid Build Coastguard Worker 
210*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
211*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
212*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key1);
213*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key2);
214*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
215*2d543d20SAndroid Build Coastguard Worker }
216*2d543d20SAndroid Build Coastguard Worker 
217*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_compare2 */
test_user_compare2(void)218*2d543d20SAndroid Build Coastguard Worker static void test_user_compare2(void)
219*2d543d20SAndroid Build Coastguard Worker {
220*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user1 = NULL;
221*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user2 = NULL;
222*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user3 = NULL;
223*2d543d20SAndroid Build Coastguard Worker 	int res = 42;
224*2d543d20SAndroid Build Coastguard Worker 
225*2d543d20SAndroid Build Coastguard Worker 	/* setup */
226*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
227*2d543d20SAndroid Build Coastguard Worker 	user1 = get_user_nth(I_FIRST);
228*2d543d20SAndroid Build Coastguard Worker 	user2 = get_user_nth(I_FIRST);
229*2d543d20SAndroid Build Coastguard Worker 	user3 = get_user_nth(I_SECOND);
230*2d543d20SAndroid Build Coastguard Worker 
231*2d543d20SAndroid Build Coastguard Worker 	/* test */
232*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_compare2(user1, user2);
233*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(res == 0);
234*2d543d20SAndroid Build Coastguard Worker 	res = semanage_user_compare2(user1, user3);
235*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(res != 0);
236*2d543d20SAndroid Build Coastguard Worker 
237*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
238*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user1);
239*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user2);
240*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user3);
241*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
242*2d543d20SAndroid Build Coastguard Worker }
243*2d543d20SAndroid Build Coastguard Worker 
244*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_key_create */
test_user_key_create(void)245*2d543d20SAndroid Build Coastguard Worker static void test_user_key_create(void)
246*2d543d20SAndroid Build Coastguard Worker {
247*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key = NULL;
248*2d543d20SAndroid Build Coastguard Worker 
249*2d543d20SAndroid Build Coastguard Worker 	/* setup */
250*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
251*2d543d20SAndroid Build Coastguard Worker 
252*2d543d20SAndroid Build Coastguard Worker 	/* test */
253*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_key_create(sh, "asdf", &key) >= 0);
254*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL(key);
255*2d543d20SAndroid Build Coastguard Worker 
256*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
257*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
258*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
259*2d543d20SAndroid Build Coastguard Worker }
260*2d543d20SAndroid Build Coastguard Worker 
261*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_key_extract */
test_user_key_extract(void)262*2d543d20SAndroid Build Coastguard Worker static void test_user_key_extract(void)
263*2d543d20SAndroid Build Coastguard Worker {
264*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
265*2d543d20SAndroid Build Coastguard Worker 	semanage_user_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 	user = get_user_nth(I_FIRST);
270*2d543d20SAndroid Build Coastguard Worker 
271*2d543d20SAndroid Build Coastguard Worker 	/* test */
272*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_key_extract(sh, user, &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_user_free(user);
277*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
278*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
279*2d543d20SAndroid Build Coastguard Worker }
280*2d543d20SAndroid Build Coastguard Worker 
281*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_get_name, semanage_user_set_name */
test_user_get_set_name(void)282*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_name(void)
283*2d543d20SAndroid Build Coastguard Worker {
284*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = 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 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
289*2d543d20SAndroid Build Coastguard Worker 
290*2d543d20SAndroid Build Coastguard Worker 	/* test */
291*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_name(sh, user, "user_u") == 0);
292*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_name(user), "user_u");
293*2d543d20SAndroid Build Coastguard Worker 
294*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
295*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
296*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
297*2d543d20SAndroid Build Coastguard Worker }
298*2d543d20SAndroid Build Coastguard Worker 
299*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_get_prefix, semanage_user_set_prefix */
test_user_get_set_prefix(void)300*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_prefix(void)
301*2d543d20SAndroid Build Coastguard Worker {
302*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
303*2d543d20SAndroid Build Coastguard Worker 
304*2d543d20SAndroid Build Coastguard Worker 	/* setup */
305*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
306*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
307*2d543d20SAndroid Build Coastguard Worker 
308*2d543d20SAndroid Build Coastguard Worker 	/* test */
309*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_prefix(sh, user, "user") == 0);
310*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_prefix(user), "user");
311*2d543d20SAndroid Build Coastguard Worker 
312*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
313*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
314*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
315*2d543d20SAndroid Build Coastguard Worker }
316*2d543d20SAndroid Build Coastguard Worker 
317*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_get_mlslevel, semanage_user_set_mlslevel */
test_user_get_set_mlslevel(void)318*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_mlslevel(void)
319*2d543d20SAndroid Build Coastguard Worker {
320*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
321*2d543d20SAndroid Build Coastguard Worker 
322*2d543d20SAndroid Build Coastguard Worker 	/* setup */
323*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
324*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
325*2d543d20SAndroid Build Coastguard Worker 
326*2d543d20SAndroid Build Coastguard Worker 	/* test */
327*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlslevel(sh, user, "s0") == 0);
328*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_mlslevel(user), "s0");
329*2d543d20SAndroid Build Coastguard Worker 
330*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
331*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
332*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
333*2d543d20SAndroid Build Coastguard Worker }
334*2d543d20SAndroid Build Coastguard Worker 
335*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_get_mlsrange, semanage_user_set_mlsrange */
test_user_get_set_mlsrange(void)336*2d543d20SAndroid Build Coastguard Worker static void test_user_get_set_mlsrange(void)
337*2d543d20SAndroid Build Coastguard Worker {
338*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
339*2d543d20SAndroid Build Coastguard Worker 
340*2d543d20SAndroid Build Coastguard Worker 	/* setup */
341*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
342*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
343*2d543d20SAndroid Build Coastguard Worker 
344*2d543d20SAndroid Build Coastguard Worker 	/* test */
345*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlsrange(sh, user, "s0-s15") == 0);
346*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_mlsrange(user), "s0-s15");
347*2d543d20SAndroid Build Coastguard Worker 
348*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
349*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
350*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
351*2d543d20SAndroid Build Coastguard Worker }
352*2d543d20SAndroid Build Coastguard Worker 
353*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_get_num_roles, semanage_user_add_role,
354*2d543d20SAndroid Build Coastguard Worker  * semanage_user_del_role, semanage_user_has_role, semanage_user_get_roles
355*2d543d20SAndroid Build Coastguard Worker  * semanage_user_set_roles
356*2d543d20SAndroid Build Coastguard Worker  */
test_user_roles(void)357*2d543d20SAndroid Build Coastguard Worker static void test_user_roles(void)
358*2d543d20SAndroid Build Coastguard Worker {
359*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
360*2d543d20SAndroid Build Coastguard Worker 	const char **roles_arr = NULL;
361*2d543d20SAndroid Build Coastguard Worker 	unsigned int num_roles = 42;
362*2d543d20SAndroid Build Coastguard Worker 	const char *new_roles_arr[] = { "new_role_r", "new_my_role_r" };
363*2d543d20SAndroid Build Coastguard Worker 	unsigned int new_num_roles = 2;
364*2d543d20SAndroid Build Coastguard Worker 
365*2d543d20SAndroid Build Coastguard Worker 	/* setup */
366*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
367*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
368*2d543d20SAndroid Build Coastguard Worker 
369*2d543d20SAndroid Build Coastguard Worker 	/* test */
370*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_num_roles(user) == 0);
371*2d543d20SAndroid Build Coastguard Worker 
372*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_add_role(sh, user, "role_r") == 0);
373*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_num_roles(user) == 1);
374*2d543d20SAndroid Build Coastguard Worker 
375*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_has_role(user, "role_r"));
376*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(!semanage_user_has_role(user, "my_role_r"));
377*2d543d20SAndroid Build Coastguard Worker 
378*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_add_role(sh, user, "my_role_r") == 0);
379*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_num_roles(user) == 2);
380*2d543d20SAndroid Build Coastguard Worker 
381*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_roles(sh, user, &roles_arr,
382*2d543d20SAndroid Build Coastguard Worker 					  &num_roles) >= 0);
383*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(num_roles == 2);
384*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(roles_arr[0], "role_r");
385*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(roles_arr[1], "my_role_r");
386*2d543d20SAndroid Build Coastguard Worker 
387*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_roles(sh, user, new_roles_arr,
388*2d543d20SAndroid Build Coastguard Worker 					  new_num_roles) >= 0);
389*2d543d20SAndroid Build Coastguard Worker 
390*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_has_role(user, "new_role_r"));
391*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_has_role(user, "new_my_role_r"));
392*2d543d20SAndroid Build Coastguard Worker 
393*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(!semanage_user_has_role(user, "role_r"));
394*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(!semanage_user_has_role(user, "my_role_r"));
395*2d543d20SAndroid Build Coastguard Worker 
396*2d543d20SAndroid Build Coastguard Worker 	semanage_user_del_role(user, "new_my_role_r");
397*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_num_roles(user) == 1);
398*2d543d20SAndroid Build Coastguard Worker 
399*2d543d20SAndroid Build Coastguard Worker 	semanage_user_del_role(user, "new_role_r");
400*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_get_num_roles(user) == 0);
401*2d543d20SAndroid Build Coastguard Worker 
402*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
403*2d543d20SAndroid Build Coastguard Worker 	free(roles_arr);
404*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
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_user_create */
test_user_create(void)409*2d543d20SAndroid Build Coastguard Worker static void test_user_create(void)
410*2d543d20SAndroid Build Coastguard Worker {
411*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = 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 
416*2d543d20SAndroid Build Coastguard Worker 	/* test */
417*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
418*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_name(sh, user, "user_u") >= 0);
419*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_prefix(sh, user, "user") >= 0);
420*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlslevel(sh, user, "s0") >= 0);
421*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlsrange(sh, user, "s0-s15") >= 0);
422*2d543d20SAndroid Build Coastguard Worker 
423*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
424*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
425*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
426*2d543d20SAndroid Build Coastguard Worker }
427*2d543d20SAndroid Build Coastguard Worker 
428*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_clone */
test_user_clone(void)429*2d543d20SAndroid Build Coastguard Worker static void test_user_clone(void)
430*2d543d20SAndroid Build Coastguard Worker {
431*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
432*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user_clone = NULL;
433*2d543d20SAndroid Build Coastguard Worker 
434*2d543d20SAndroid Build Coastguard Worker 	/* setup */
435*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
436*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_create(sh, &user) >= 0);
437*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_name(sh, user, "user_u") >= 0);
438*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_prefix(sh, user, "user") >= 0);
439*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlslevel(sh, user, "s0") >= 0);
440*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_set_mlsrange(sh, user, "s0-s15") >= 0);
441*2d543d20SAndroid Build Coastguard Worker 
442*2d543d20SAndroid Build Coastguard Worker 	/* test */
443*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_clone(sh, user, &user_clone) >= 0);
444*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_name(user), "user_u");
445*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_prefix(user), "user");
446*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_mlslevel(user), "s0");
447*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_STRING_EQUAL(semanage_user_get_mlsrange(user), "s0-s15");
448*2d543d20SAndroid Build Coastguard Worker 
449*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
450*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
451*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user_clone);
452*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
453*2d543d20SAndroid Build Coastguard Worker }
454*2d543d20SAndroid Build Coastguard Worker 
455*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_query */
test_user_query(void)456*2d543d20SAndroid Build Coastguard Worker static void test_user_query(void)
457*2d543d20SAndroid Build Coastguard Worker {
458*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
459*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key = NULL;
460*2d543d20SAndroid Build Coastguard Worker 
461*2d543d20SAndroid Build Coastguard Worker 	/* setup */
462*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
463*2d543d20SAndroid Build Coastguard Worker 	key = get_user_key_nth(I_FIRST);
464*2d543d20SAndroid Build Coastguard Worker 
465*2d543d20SAndroid Build Coastguard Worker 	/* test */
466*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_query(sh, key, &user) >= 0);
467*2d543d20SAndroid Build Coastguard Worker 
468*2d543d20SAndroid Build Coastguard Worker 	/* TODO: test values */
469*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL(user);
470*2d543d20SAndroid Build Coastguard Worker 
471*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
472*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
473*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
474*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
475*2d543d20SAndroid Build Coastguard Worker }
476*2d543d20SAndroid Build Coastguard Worker 
477*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_exists */
test_user_exists(void)478*2d543d20SAndroid Build Coastguard Worker static void test_user_exists(void)
479*2d543d20SAndroid Build Coastguard Worker {
480*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key1 = NULL;
481*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key2 = NULL;
482*2d543d20SAndroid Build Coastguard Worker 	int resp = 42;
483*2d543d20SAndroid Build Coastguard Worker 
484*2d543d20SAndroid Build Coastguard Worker 	/* setup */
485*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
486*2d543d20SAndroid Build Coastguard Worker 	key1 = get_user_key_nth(I_FIRST);
487*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_key_create(sh, "asdf", &key2) >= 0);
488*2d543d20SAndroid Build Coastguard Worker 
489*2d543d20SAndroid Build Coastguard Worker 	/* test */
490*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_exists(sh, key1, &resp) >= 0);
491*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(resp);
492*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_exists(sh, key2, &resp) >= 0);
493*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(!resp);
494*2d543d20SAndroid Build Coastguard Worker 
495*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
496*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key1);
497*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key2);
498*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
499*2d543d20SAndroid Build Coastguard Worker }
500*2d543d20SAndroid Build Coastguard Worker 
501*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_count */
test_user_count(void)502*2d543d20SAndroid Build Coastguard Worker static void test_user_count(void)
503*2d543d20SAndroid Build Coastguard Worker {
504*2d543d20SAndroid Build Coastguard Worker 	unsigned int count = 42;
505*2d543d20SAndroid Build Coastguard Worker 
506*2d543d20SAndroid Build Coastguard Worker 	/* setup */
507*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
508*2d543d20SAndroid Build Coastguard Worker 
509*2d543d20SAndroid Build Coastguard Worker 	/* test */
510*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_count(sh, &count) >= 0);
511*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(count == USER_COUNT);
512*2d543d20SAndroid Build Coastguard Worker 
513*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
514*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
515*2d543d20SAndroid Build Coastguard Worker }
516*2d543d20SAndroid Build Coastguard Worker 
517*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_iterate */
518*2d543d20SAndroid Build Coastguard Worker unsigned int counter_user_iterate = 0;
519*2d543d20SAndroid Build Coastguard Worker 
handler_user_iterate(const semanage_user_t * record,void * varg)520*2d543d20SAndroid Build Coastguard Worker static int handler_user_iterate(const semanage_user_t *record, void *varg)
521*2d543d20SAndroid Build Coastguard Worker {
522*2d543d20SAndroid Build Coastguard Worker 	counter_user_iterate++;
523*2d543d20SAndroid Build Coastguard Worker 	return 0;
524*2d543d20SAndroid Build Coastguard Worker }
525*2d543d20SAndroid Build Coastguard Worker 
test_user_iterate(void)526*2d543d20SAndroid Build Coastguard Worker static void test_user_iterate(void)
527*2d543d20SAndroid Build Coastguard Worker {
528*2d543d20SAndroid Build Coastguard Worker 	/* setup */
529*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
530*2d543d20SAndroid Build Coastguard Worker 
531*2d543d20SAndroid Build Coastguard Worker 	/* test */
532*2d543d20SAndroid Build Coastguard Worker 	semanage_user_iterate(sh, handler_user_iterate, NULL);
533*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(counter_user_iterate == USER_COUNT);
534*2d543d20SAndroid Build Coastguard Worker 
535*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
536*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
537*2d543d20SAndroid Build Coastguard Worker }
538*2d543d20SAndroid Build Coastguard Worker 
539*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_list */
test_user_list(void)540*2d543d20SAndroid Build Coastguard Worker static void test_user_list(void)
541*2d543d20SAndroid Build Coastguard Worker {
542*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t **records = NULL;
543*2d543d20SAndroid Build Coastguard Worker 	unsigned int count = 42;
544*2d543d20SAndroid Build Coastguard Worker 
545*2d543d20SAndroid Build Coastguard Worker 	/* setup */
546*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_CONNECT);
547*2d543d20SAndroid Build Coastguard Worker 
548*2d543d20SAndroid Build Coastguard Worker 	/* test */
549*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_list(sh, &records, &count) >= 0);
550*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(count == USER_COUNT);
551*2d543d20SAndroid Build Coastguard Worker 
552*2d543d20SAndroid Build Coastguard Worker 	/* TODO: check real values */
553*2d543d20SAndroid Build Coastguard Worker 	for (unsigned int i = 0; i < count; i++)
554*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT_PTR_NOT_NULL(records[i]);
555*2d543d20SAndroid Build Coastguard Worker 
556*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
557*2d543d20SAndroid Build Coastguard Worker 	for (unsigned int i = 0; i < count; i++)
558*2d543d20SAndroid Build Coastguard Worker 		semanage_user_free(records[i]);
559*2d543d20SAndroid Build Coastguard Worker 
560*2d543d20SAndroid Build Coastguard Worker 	free(records);
561*2d543d20SAndroid Build Coastguard Worker 
562*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_CONNECT);
563*2d543d20SAndroid Build Coastguard Worker }
564*2d543d20SAndroid Build Coastguard Worker 
565*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_modify_local, semanage_user_del_local,
566*2d543d20SAndroid Build Coastguard Worker  * semanage_user_query_local
567*2d543d20SAndroid Build Coastguard Worker  */
test_user_modify_del_query_local(void)568*2d543d20SAndroid Build Coastguard Worker static void test_user_modify_del_query_local(void)
569*2d543d20SAndroid Build Coastguard Worker {
570*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user;
571*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user_local;
572*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key = NULL;
573*2d543d20SAndroid Build Coastguard Worker 
574*2d543d20SAndroid Build Coastguard Worker 	/* setup */
575*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_TRANS);
576*2d543d20SAndroid Build Coastguard Worker 	user = get_user_nth(I_FIRST);
577*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_key_extract(sh, user, &key) >= 0);
578*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL(key);
579*2d543d20SAndroid Build Coastguard Worker 
580*2d543d20SAndroid Build Coastguard Worker 	/* test */
581*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_modify_local(sh, key, user) >= 0);
582*2d543d20SAndroid Build Coastguard Worker 
583*2d543d20SAndroid Build Coastguard Worker 	/* write changes to file */
584*2d543d20SAndroid Build Coastguard Worker 	helper_commit();
585*2d543d20SAndroid Build Coastguard Worker 	helper_begin_transaction();
586*2d543d20SAndroid Build Coastguard Worker 
587*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_query_local(sh, key, &user_local) >= 0);
588*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL_FATAL(user_local);
589*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user_local);
590*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_del_local(sh, key) >= 0);
591*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_query_local(sh, key, &user_local) < 0);
592*2d543d20SAndroid Build Coastguard Worker 
593*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
594*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key);
595*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
596*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_TRANS);
597*2d543d20SAndroid Build Coastguard Worker }
598*2d543d20SAndroid Build Coastguard Worker 
599*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_exists_local */
test_user_exists_local(void)600*2d543d20SAndroid Build Coastguard Worker static void test_user_exists_local(void)
601*2d543d20SAndroid Build Coastguard Worker {
602*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t *user = NULL;
603*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key1 = NULL;
604*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_t *key2 = NULL;
605*2d543d20SAndroid Build Coastguard Worker 	int resp = 42;
606*2d543d20SAndroid Build Coastguard Worker 
607*2d543d20SAndroid Build Coastguard Worker 	/* setup */
608*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_TRANS);
609*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_FIRST);
610*2d543d20SAndroid Build Coastguard Worker 	key1 = get_user_key_nth(I_FIRST);
611*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_key_create(sh, "asdf", &key2) >= 0);
612*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT_PTR_NOT_NULL(key2);
613*2d543d20SAndroid Build Coastguard Worker 
614*2d543d20SAndroid Build Coastguard Worker 	/* test */
615*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_exists_local(sh, key1, &resp) >= 0);
616*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(resp);
617*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_exists_local(sh, key2, &resp) >= 0);
618*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(!resp);
619*2d543d20SAndroid Build Coastguard Worker 
620*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
621*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_del_local(sh, key1) >= 0);
622*2d543d20SAndroid Build Coastguard Worker 	semanage_user_free(user);
623*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key1);
624*2d543d20SAndroid Build Coastguard Worker 	semanage_user_key_free(key2);
625*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_TRANS);
626*2d543d20SAndroid Build Coastguard Worker }
627*2d543d20SAndroid Build Coastguard Worker 
628*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_count_local */
test_user_count_local(void)629*2d543d20SAndroid Build Coastguard Worker static void test_user_count_local(void)
630*2d543d20SAndroid Build Coastguard Worker {
631*2d543d20SAndroid Build Coastguard Worker 	unsigned int count = 42;
632*2d543d20SAndroid Build Coastguard Worker 
633*2d543d20SAndroid Build Coastguard Worker 	/* setup */
634*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_TRANS);
635*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_FIRST);
636*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_SECOND);
637*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_THIRD);
638*2d543d20SAndroid Build Coastguard Worker 
639*2d543d20SAndroid Build Coastguard Worker 	/* test */
640*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_count_local(sh, &count) >= 0);
641*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(count == 3);
642*2d543d20SAndroid Build Coastguard Worker 
643*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
644*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_FIRST);
645*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_SECOND);
646*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_THIRD);
647*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_TRANS);
648*2d543d20SAndroid Build Coastguard Worker }
649*2d543d20SAndroid Build Coastguard Worker 
650*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_iterate_local */
651*2d543d20SAndroid Build Coastguard Worker unsigned int counter_user_iterate_local = 0;
652*2d543d20SAndroid Build Coastguard Worker 
handler_user_iterate_local(const semanage_user_t * record,void * varg)653*2d543d20SAndroid Build Coastguard Worker static int handler_user_iterate_local(const semanage_user_t *record, void *varg)
654*2d543d20SAndroid Build Coastguard Worker {
655*2d543d20SAndroid Build Coastguard Worker 	counter_user_iterate_local++;
656*2d543d20SAndroid Build Coastguard Worker 	return 0;
657*2d543d20SAndroid Build Coastguard Worker }
658*2d543d20SAndroid Build Coastguard Worker 
test_user_iterate_local(void)659*2d543d20SAndroid Build Coastguard Worker static void test_user_iterate_local(void)
660*2d543d20SAndroid Build Coastguard Worker {
661*2d543d20SAndroid Build Coastguard Worker 	/* setup */
662*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_TRANS);
663*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_FIRST);
664*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_SECOND);
665*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_THIRD);
666*2d543d20SAndroid Build Coastguard Worker 
667*2d543d20SAndroid Build Coastguard Worker 	/* test */
668*2d543d20SAndroid Build Coastguard Worker 	semanage_user_iterate_local(sh, handler_user_iterate_local, NULL);
669*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(counter_user_iterate_local == 3);
670*2d543d20SAndroid Build Coastguard Worker 
671*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
672*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_FIRST);
673*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_SECOND);
674*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_THIRD);
675*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_TRANS);
676*2d543d20SAndroid Build Coastguard Worker }
677*2d543d20SAndroid Build Coastguard Worker 
678*2d543d20SAndroid Build Coastguard Worker /* Function semanage_user_list_local */
test_user_list_local(void)679*2d543d20SAndroid Build Coastguard Worker static void test_user_list_local(void)
680*2d543d20SAndroid Build Coastguard Worker {
681*2d543d20SAndroid Build Coastguard Worker 	semanage_user_t **records = NULL;
682*2d543d20SAndroid Build Coastguard Worker 	unsigned int count = 42;
683*2d543d20SAndroid Build Coastguard Worker 
684*2d543d20SAndroid Build Coastguard Worker 	/* setup */
685*2d543d20SAndroid Build Coastguard Worker 	setup_handle(SH_TRANS);
686*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_FIRST);
687*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_SECOND);
688*2d543d20SAndroid Build Coastguard Worker 	add_local_user(I_THIRD);
689*2d543d20SAndroid Build Coastguard Worker 
690*2d543d20SAndroid Build Coastguard Worker 	/* test */
691*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(semanage_user_list_local(sh, &records, &count) >= 0);
692*2d543d20SAndroid Build Coastguard Worker 	CU_ASSERT(count == 3);
693*2d543d20SAndroid Build Coastguard Worker 
694*2d543d20SAndroid Build Coastguard Worker 	for (unsigned int i = 0; i < count; i++)
695*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT_PTR_NOT_NULL(records[i]);
696*2d543d20SAndroid Build Coastguard Worker 
697*2d543d20SAndroid Build Coastguard Worker 	/* cleanup */
698*2d543d20SAndroid Build Coastguard Worker 	for (unsigned int i = 0; i < count; i++)
699*2d543d20SAndroid Build Coastguard Worker 		semanage_user_free(records[i]);
700*2d543d20SAndroid Build Coastguard Worker 
701*2d543d20SAndroid Build Coastguard Worker 	free(records);
702*2d543d20SAndroid Build Coastguard Worker 
703*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_FIRST);
704*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_SECOND);
705*2d543d20SAndroid Build Coastguard Worker 	delete_local_user(I_THIRD);
706*2d543d20SAndroid Build Coastguard Worker 	cleanup_handle(SH_TRANS);
707*2d543d20SAndroid Build Coastguard Worker }
708