Branch data Line data Source code
1 : : /*
2 : : SSSD
3 : :
4 : : Simple access module -- Tests
5 : :
6 : : Authors:
7 : : Sumit Bose <sbose@redhat.com>
8 : :
9 : : Copyright (C) 2010 Red Hat
10 : :
11 : : This program is free software; you can redistribute it and/or modify
12 : : it under the terms of the GNU General Public License as published by
13 : : the Free Software Foundation; either version 3 of the License, or
14 : : (at your option) any later version.
15 : :
16 : : This program is distributed in the hope that it will be useful,
17 : : but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : GNU General Public License for more details.
20 : :
21 : : You should have received a copy of the GNU General Public License
22 : : along with this program. If not, see <http://www.gnu.org/licenses/>.
23 : : */
24 : :
25 : : #include <stdlib.h>
26 : : #include <popt.h>
27 : : #include <check.h>
28 : :
29 : : #include "confdb/confdb.h"
30 : : #include "providers/simple/simple_access.h"
31 : : #include "tests/common.h"
32 : :
33 : : const char *ulist_1[] = {"u1", "u2", NULL};
34 : :
35 : : struct simple_ctx *ctx = NULL;
36 : :
37 : 5 : void setup_simple(void)
38 : : {
39 : 5 : fail_unless(ctx == NULL, "Simple context already initialized.");
40 : 5 : ctx = talloc_zero(NULL, struct simple_ctx);
41 : 5 : fail_unless(ctx != NULL, "Cannot create simple context.");
42 : :
43 : 5 : ctx->domain = talloc_zero(ctx, struct sss_domain_info);
44 : 5 : fail_unless(ctx != NULL, "Cannot create domain in simple context.");
45 : 5 : ctx->domain->case_sensitive = true;
46 : 5 : }
47 : :
48 : 5 : void teardown_simple(void)
49 : : {
50 : : int ret;
51 : 5 : fail_unless(ctx != NULL, "Simple context already freed.");
52 : 5 : ret = talloc_free(ctx);
53 : 5 : ctx = NULL;
54 : 5 : fail_unless(ret == 0, "Connot free simple context.");
55 : 5 : }
56 : :
57 : 1 : START_TEST(test_both_empty)
58 : : {
59 : : int ret;
60 : 1 : bool access_granted = false;
61 : :
62 : 1 : ctx->allow_users = NULL;
63 : 1 : ctx->deny_users = NULL;
64 : :
65 : 1 : ret = simple_access_check(ctx, "u1", &access_granted);
66 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
67 : 1 : fail_unless(access_granted == true, "Access denied "
68 : : "while both lists are empty.");
69 : : }
70 : 1 : END_TEST
71 : :
72 : 1 : START_TEST(test_allow_empty)
73 : : {
74 : : int ret;
75 : 1 : bool access_granted = true;
76 : :
77 : 1 : ctx->allow_users = NULL;
78 : 1 : ctx->deny_users = discard_const(ulist_1);
79 : :
80 : 1 : ret = simple_access_check(ctx, "u1", &access_granted);
81 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
82 : 1 : fail_unless(access_granted == false, "Access granted "
83 : : "while user is in deny list.");
84 : :
85 : 1 : ret = simple_access_check(ctx, "u3", &access_granted);
86 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
87 : 1 : fail_unless(access_granted == true, "Access denied "
88 : : "while user is not in deny list.");
89 : : }
90 : 1 : END_TEST
91 : :
92 : 1 : START_TEST(test_deny_empty)
93 : : {
94 : : int ret;
95 : 1 : bool access_granted = false;
96 : :
97 : 1 : ctx->allow_users = discard_const(ulist_1);
98 : 1 : ctx->deny_users = NULL;
99 : :
100 : 1 : ret = simple_access_check(ctx, "u1", &access_granted);
101 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
102 : 1 : fail_unless(access_granted == true, "Access denied "
103 : : "while user is in allow list.");
104 : :
105 : 1 : ret = simple_access_check(ctx, "u3", &access_granted);
106 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
107 : 1 : fail_unless(access_granted == false, "Access granted "
108 : : "while user is not in allow list.");
109 : : }
110 : 1 : END_TEST
111 : :
112 : 1 : START_TEST(test_both_set)
113 : : {
114 : : int ret;
115 : 1 : bool access_granted = false;
116 : :
117 : 1 : ctx->allow_users = discard_const(ulist_1);
118 : 1 : ctx->deny_users = discard_const(ulist_1);
119 : :
120 : 1 : ret = simple_access_check(ctx, "u1", &access_granted);
121 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
122 : 1 : fail_unless(access_granted == false, "Access granted "
123 : : "while user is in deny list.");
124 : :
125 : 1 : ret = simple_access_check(ctx, "u3", &access_granted);
126 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
127 : 1 : fail_unless(access_granted == false, "Access granted "
128 : : "while user is not in allow list.");
129 : : }
130 : 1 : END_TEST
131 : :
132 : 1 : START_TEST(test_case)
133 : : {
134 : : int ret;
135 : 1 : bool access_granted = false;
136 : :
137 : 1 : ctx->allow_users = discard_const(ulist_1);
138 : 1 : ctx->deny_users = NULL;
139 : :
140 : 1 : ret = simple_access_check(ctx, "U1", &access_granted);
141 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
142 : 1 : fail_unless(access_granted == false, "Access granted "
143 : : "for user with different case "
144 : : "in case-sensitive domain");
145 : :
146 : 1 : ctx->domain->case_sensitive = false;
147 : :
148 : 1 : ret = simple_access_check(ctx, "U1", &access_granted);
149 : 1 : fail_unless(ret == EOK, "access_simple_check failed.");
150 : 1 : fail_unless(access_granted == true, "Access denied "
151 : : "for user with different case "
152 : : "in case-insensitive domain");
153 : : }
154 : 1 : END_TEST
155 : :
156 : 6 : Suite *access_simple_suite (void)
157 : : {
158 : 6 : Suite *s = suite_create("access_simple");
159 : :
160 : 6 : TCase *tc_allow_deny = tcase_create("allow/deny");
161 : 6 : tcase_add_checked_fixture(tc_allow_deny, setup_simple, teardown_simple);
162 : 6 : tcase_add_test(tc_allow_deny, test_both_empty);
163 : 6 : tcase_add_test(tc_allow_deny, test_allow_empty);
164 : 6 : tcase_add_test(tc_allow_deny, test_deny_empty);
165 : 6 : tcase_add_test(tc_allow_deny, test_both_set);
166 : 6 : tcase_add_test(tc_allow_deny, test_case);
167 : 6 : suite_add_tcase(s, tc_allow_deny);
168 : :
169 : 6 : return s;
170 : : }
171 : :
172 : 6 : int main(int argc, const char *argv[])
173 : : {
174 : : int opt;
175 : : poptContext pc;
176 : : int number_failed;
177 : :
178 : 30 : struct poptOption long_options[] = {
179 : : POPT_AUTOHELP
180 : 24 : SSSD_MAIN_OPTS
181 : : POPT_TABLEEND
182 : : };
183 : :
184 : : /* Set debug level to invalid value so we can deside if -d 0 was used. */
185 : 6 : debug_level = SSSDBG_INVALID;
186 : :
187 : 6 : pc = poptGetContext(argv[0], argc, argv, long_options, 0);
188 [ - + ]: 6 : while((opt = poptGetNextOpt(pc)) != -1) {
189 : : switch(opt) {
190 : : default:
191 : 0 : fprintf(stderr, "\nInvalid option %s: %s\n\n",
192 : : poptBadOption(pc, 0), poptStrerror(opt));
193 : 0 : poptPrintUsage(pc, stderr, 0);
194 : : return 1;
195 : : }
196 : : }
197 : 6 : poptFreeContext(pc);
198 : :
199 [ - + ]: 6 : DEBUG_INIT(debug_level);
200 : :
201 : 6 : tests_set_cwd();
202 : :
203 : 6 : Suite *s = access_simple_suite();
204 : 6 : SRunner *sr = srunner_create(s);
205 : 6 : srunner_run_all(sr, CK_ENV);
206 : 1 : number_failed = srunner_ntests_failed(sr);
207 : 1 : srunner_free(sr);
208 : 1 : return (number_failed==0 ? EXIT_SUCCESS : EXIT_FAILURE);
209 : : }
210 : :
|