00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <config.h>
00028
00029 #include <CUnit/CUnit.h>
00030 #include <qpol/policy.h>
00031
00032 #include <stdbool.h>
00033
00034 #define POLICY_ROOT TEST_POLICIES "/policy-versions"
00035
00036 struct capability_answer
00037 {
00038 const char *policy_name;
00039 int policy_type;
00040 unsigned int policy_version;
00041 bool has_attributes;
00042 bool has_syn_rules;
00043 bool has_line_numbers;
00044 bool has_conditionals;
00045 bool has_mls;
00046 bool has_polcaps;
00047 bool has_source;
00048 bool has_modules;
00049 };
00050
00051 static void capability_test(const struct capability_answer *ca)
00052 {
00053 qpol_policy_t *q = NULL;
00054 int policy_type = qpol_policy_open_from_file(ca->policy_name, &q, NULL, NULL, QPOL_POLICY_OPTION_NO_NEVERALLOWS);
00055 CU_ASSERT_FATAL(policy_type >= 0);
00056 CU_ASSERT_EQUAL(policy_type, ca->policy_type);
00057
00058 unsigned policy_version;
00059 int retval;
00060 retval = qpol_policy_get_policy_version(q, &policy_version);
00061 CU_ASSERT_EQUAL_FATAL(retval, 0);
00062 CU_ASSERT_EQUAL(policy_version, ca->policy_version);
00063
00064 bool cap;
00065
00066 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_ATTRIB_NAMES);
00067 CU_ASSERT_EQUAL(cap, ca->has_attributes);
00068
00069 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_SYN_RULES);
00070 CU_ASSERT_EQUAL(cap, ca->has_syn_rules);
00071
00072 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_LINE_NUMBERS);
00073 CU_ASSERT_EQUAL(cap, ca->has_line_numbers);
00074
00075 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_CONDITIONALS);
00076 CU_ASSERT_EQUAL(cap, ca->has_conditionals);
00077
00078 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_MLS);
00079 CU_ASSERT_EQUAL(cap, ca->has_mls);
00080
00081 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_POLCAPS);
00082 CU_ASSERT_EQUAL(cap, ca->has_polcaps);
00083
00084 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_SOURCE);
00085 CU_ASSERT_EQUAL(cap, ca->has_source);
00086
00087 cap = (bool) qpol_policy_has_capability(q, QPOL_CAP_MODULES);
00088 CU_ASSERT_EQUAL(cap, ca->has_modules);
00089
00090 qpol_policy_destroy(&q);
00091 }
00092
00093 static void capability_v12_source()
00094 {
00095 struct capability_answer cap = {
00096 POLICY_ROOT "/policy-12.conf",
00097 QPOL_POLICY_KERNEL_SOURCE,
00098 12U,
00099 true,
00100 true,
00101 true,
00102 false,
00103 false,
00104 false,
00105 true,
00106 false
00107 };
00108 capability_test(&cap);
00109 }
00110
00111 static void capability_v15_source()
00112 {
00113 struct capability_answer cap = {
00114 POLICY_ROOT "/policy-15.conf",
00115 QPOL_POLICY_KERNEL_SOURCE,
00116 15U,
00117 true,
00118 true,
00119 true,
00120 false,
00121 false,
00122 false,
00123 true,
00124 false
00125 };
00126 capability_test(&cap);
00127 }
00128
00129 static void capability_v15_binary()
00130 {
00131 struct capability_answer cap = {
00132 POLICY_ROOT "/policy.15",
00133 QPOL_POLICY_KERNEL_BINARY,
00134 15U,
00135 false,
00136 false,
00137 false,
00138 false,
00139 false,
00140 false,
00141 false,
00142 false
00143 };
00144 capability_test(&cap);
00145 }
00146
00147 static void capability_v16_source()
00148 {
00149 struct capability_answer cap = {
00150 POLICY_ROOT "/policy-16.conf",
00151 QPOL_POLICY_KERNEL_SOURCE,
00152 16U,
00153 true,
00154 true,
00155 true,
00156 true,
00157 false,
00158 false,
00159 true,
00160 false
00161 };
00162 capability_test(&cap);
00163 }
00164
00165 static void capability_v16_binary()
00166 {
00167 struct capability_answer cap = {
00168 POLICY_ROOT "/policy.16",
00169 QPOL_POLICY_KERNEL_BINARY,
00170 16U,
00171 false,
00172 false,
00173 false,
00174 true,
00175 false,
00176 false,
00177 false,
00178 false
00179 };
00180 capability_test(&cap);
00181 }
00182
00183 static void capability_v17_source()
00184 {
00185 struct capability_answer cap = {
00186 POLICY_ROOT "/policy-17.conf",
00187 QPOL_POLICY_KERNEL_SOURCE,
00188 17U,
00189 true,
00190 true,
00191 true,
00192 true,
00193 false,
00194 false,
00195 true,
00196 false
00197 };
00198 capability_test(&cap);
00199 }
00200
00201 static void capability_v17_binary()
00202 {
00203 struct capability_answer cap = {
00204 POLICY_ROOT "/policy.17",
00205 QPOL_POLICY_KERNEL_BINARY,
00206 17U,
00207 false,
00208 false,
00209 false,
00210 true,
00211 false,
00212 false,
00213 false,
00214 false
00215 };
00216 capability_test(&cap);
00217 }
00218
00219 static void capability_v18_source()
00220 {
00221 struct capability_answer cap = {
00222 POLICY_ROOT "/policy-18.conf",
00223 QPOL_POLICY_KERNEL_SOURCE,
00224 18U,
00225 true,
00226 true,
00227 true,
00228 true,
00229 false,
00230 false,
00231 true,
00232 false
00233 };
00234 capability_test(&cap);
00235 }
00236
00237 static void capability_v18_binary()
00238 {
00239 struct capability_answer cap = {
00240 POLICY_ROOT "/policy.18",
00241 QPOL_POLICY_KERNEL_BINARY,
00242 18U,
00243 false,
00244 false,
00245 false,
00246 true,
00247 false,
00248 false,
00249 false,
00250 false
00251 };
00252 capability_test(&cap);
00253 }
00254
00255 static void capability_v19_binary()
00256 {
00257 struct capability_answer cap = {
00258 POLICY_ROOT "/policy.19",
00259 QPOL_POLICY_KERNEL_BINARY,
00260 19U,
00261 false,
00262 false,
00263 false,
00264 true,
00265 false,
00266 false,
00267 false,
00268 false
00269 };
00270 capability_test(&cap);
00271 }
00272
00273 static void capability_v19_binary_mls()
00274 {
00275 struct capability_answer cap = {
00276 POLICY_ROOT "/policy-mls.19",
00277 QPOL_POLICY_KERNEL_BINARY,
00278 19U,
00279 false,
00280 false,
00281 false,
00282 true,
00283 true,
00284 false,
00285 false,
00286 false
00287 };
00288 capability_test(&cap);
00289 }
00290
00291 static void capability_v20_binary()
00292 {
00293 struct capability_answer cap = {
00294 POLICY_ROOT "/policy.20",
00295 QPOL_POLICY_KERNEL_BINARY,
00296 20U,
00297 false,
00298 false,
00299 false,
00300 true,
00301 false,
00302 false,
00303 false,
00304 false
00305 };
00306 capability_test(&cap);
00307 }
00308
00309 static void capability_v20_binary_mls()
00310 {
00311 struct capability_answer cap = {
00312 POLICY_ROOT "/policy-mls.20",
00313 QPOL_POLICY_KERNEL_BINARY,
00314 20U,
00315 false,
00316 false,
00317 false,
00318 true,
00319 true,
00320 false,
00321 false,
00322 false
00323 };
00324 capability_test(&cap);
00325 }
00326
00327 static void capability_v21_source()
00328 {
00329 struct capability_answer cap = {
00330 POLICY_ROOT "/policy-mls-21.conf",
00331 QPOL_POLICY_KERNEL_SOURCE,
00332 21U,
00333 true,
00334 true,
00335 true,
00336 true,
00337 true,
00338 false,
00339 true,
00340 false
00341 };
00342 capability_test(&cap);
00343 }
00344
00345 static void capability_v21_binary()
00346 {
00347 struct capability_answer cap = {
00348 POLICY_ROOT "/policy-mls.21",
00349 QPOL_POLICY_KERNEL_BINARY,
00350 21U,
00351 false,
00352 false,
00353 false,
00354 true,
00355 true,
00356 false,
00357 false,
00358 false
00359 };
00360 capability_test(&cap);
00361 }
00362
00363 static void capability_v22_source()
00364 {
00365 struct capability_answer cap = {
00366 POLICY_ROOT "/policy-mls-22.conf",
00367 QPOL_POLICY_KERNEL_SOURCE,
00368 22U,
00369 true,
00370 true,
00371 true,
00372 true,
00373 true,
00374 true,
00375 true,
00376 false
00377 };
00378 capability_test(&cap);
00379 }
00380
00381 static void capability_v22_binary()
00382 {
00383 struct capability_answer cap = {
00384 POLICY_ROOT "/policy-mls.22",
00385 QPOL_POLICY_KERNEL_BINARY,
00386 22U,
00387 false,
00388 false,
00389 false,
00390 true,
00391 true,
00392 true,
00393 false,
00394 false
00395 };
00396 capability_test(&cap);
00397 }
00398
00399 static void capability_modv6_base_binary()
00400 {
00401 struct capability_answer cap = {
00402 POLICY_ROOT "/base-6.pp",
00403 QPOL_POLICY_MODULE_BINARY,
00404 6U,
00405 true,
00406 true,
00407 false,
00408 true,
00409 true,
00410 false,
00411 false,
00412 true
00413 };
00414 capability_test(&cap);
00415 }
00416
00417 CU_TestInfo capabilities_tests[] = {
00418 {"v12, source", capability_v12_source},
00419 {"v15, source", capability_v15_source},
00420 {"v15, binary", capability_v15_binary},
00421 {"v16, source", capability_v16_source},
00422 {"v16, binary", capability_v16_binary},
00423 {"v17, source", capability_v17_source},
00424 {"v17, binary", capability_v17_binary},
00425 {"v18, source", capability_v18_source},
00426 {"v18, binary", capability_v18_binary},
00427 {"v19, binary", capability_v19_binary},
00428 {"v19, binary mls", capability_v19_binary_mls},
00429 {"v20, binary", capability_v20_binary},
00430 {"v20, binary mls", capability_v20_binary_mls},
00431 {"v21, source", capability_v21_source},
00432 {"v21, binary", capability_v21_binary},
00433 {"v22, source", capability_v22_source},
00434 {"v22, binary", capability_v22_binary},
00435 {"mod v6, base binary", capability_modv6_base_binary},
00436 CU_TEST_INFO_NULL
00437 };
00438
00439 int capabilities_init()
00440 {
00441 return 0;
00442 }
00443
00444 int capabilities_cleanup()
00445 {
00446 return 0;
00447 }