1 /* 2 * Copyright 2011 Tresys Technology, LLC. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS 15 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17 * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 22 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 * The views and conclusions contained in the software and documentation are those 26 * of the authors and should not be interpreted as representing official policies, 27 * either expressed or implied, of Tresys Technology, LLC. 28 */ 29 30 #include "CuTest.h" 31 #include "CilTest.h" 32 33 #include "../../src/cil_internal.h" 34 #include "../../src/cil_copy_ast.h" 35 #include "../../src/cil_build_ast.h" 36 #include "../../src/cil_resolve_ast.h" 37 38 #define CIL_TEST_SYM_SIZE 1 39 40 int __cil_copy_node_helper(struct cil_tree_node *orig, uint32_t *finished, void *extra_args); 41 42 struct cil_args_copy { 43 struct cil_tree_node *dest; 44 struct cil_db *db; 45 }; 46 47 struct cil_args_copy *gen_copy_args(struct cil_tree_node *node, struct cil_db *db) 48 { 49 struct cil_args_copy *args = cil_malloc(sizeof(*args)); 50 args->dest = node; 51 args->db = db; 52 53 return args; 54 } 55 56 void test_cil_copy_list(CuTest *tc) { 57 char *line[] = {"(", "foo1", "foo2", ")", NULL}; 58 59 struct cil_tree *test_tree; 60 struct cil_list *cil_l; 61 62 gen_test_tree(&test_tree, line); 63 cil_list_init(&cil_l); 64 65 cil_set_to_list(test_tree->root->cl_head, cil_l, 1); 66 67 struct cil_list *copy_list; 68 cil_list_init(©_list); 69 70 int rc =cil_copy_list(cil_l, ©_list); 71 CuAssertIntEquals(tc, rc, SEPOL_OK); 72 CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data); 73 CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data); 74 CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor); 75 CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor); 76 } 77 78 void test_cil_copy_list_sublist(CuTest *tc) { 79 char *line[] = {"(", "foo1", "foo2", "(", "foo3", ")", ")", NULL}; 80 81 struct cil_tree *test_tree; 82 struct cil_list *cil_l; 83 84 gen_test_tree(&test_tree, line); 85 cil_list_init(&cil_l); 86 87 cil_set_to_list(test_tree->root->cl_head, cil_l, 1); 88 89 struct cil_list *copy_list; 90 cil_list_init(©_list); 91 92 int rc = cil_copy_list(cil_l, ©_list); 93 CuAssertIntEquals(tc, rc, SEPOL_OK); 94 CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data); 95 CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data); 96 CuAssertStrEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->data, ((struct cil_list *)cil_l->head->next->next->data)->head->data); 97 CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor); 98 CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor); 99 CuAssertIntEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->flavor, ((struct cil_list *)cil_l->head->next->next->data)->head->flavor); 100 } 101 102 void test_cil_copy_list_sublist_extra(CuTest *tc) { 103 char *line[] = {"(", "foo1", "foo2", "(", "foo3", ")", "foo4", ")", NULL}; 104 105 struct cil_tree *test_tree; 106 struct cil_list *cil_l; 107 108 gen_test_tree(&test_tree, line); 109 cil_list_init(&cil_l); 110 111 cil_set_to_list(test_tree->root->cl_head, cil_l, 1); 112 113 struct cil_list *copy_list; 114 cil_list_init(©_list); 115 116 int rc = cil_copy_list(cil_l, ©_list); 117 CuAssertIntEquals(tc, rc, SEPOL_OK); 118 CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data); 119 CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data); 120 CuAssertStrEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->data, ((struct cil_list *)cil_l->head->next->next->data)->head->data); 121 CuAssertStrEquals(tc, copy_list->head->next->next->next->data, cil_l->head->next->next->next->data); 122 CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor); 123 CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor); 124 CuAssertIntEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->flavor, ((struct cil_list *)cil_l->head->next->next->data)->head->flavor); 125 CuAssertIntEquals(tc, copy_list->head->next->next->next->flavor, cil_l->head->next->next->next->flavor); 126 } 127 128 void test_cil_copy_list_orignull_neg(CuTest *tc) { 129 char *line[] = {"(", "foo1", "foo2", ")", NULL}; 130 131 struct cil_tree *test_tree; 132 struct cil_list *cil_l = NULL; 133 134 gen_test_tree(&test_tree, line); 135 136 struct cil_list *copy_list; 137 cil_list_init(©_list); 138 139 int rc = cil_copy_list(cil_l, ©_list); 140 CuAssertIntEquals(tc, rc, SEPOL_ERR); 141 CuAssertPtrEquals(tc, copy_list->head, NULL); 142 } 143 144 void test_cil_copy_block(CuTest *tc) { 145 char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL}; 146 147 struct cil_tree *test_tree; 148 gen_test_tree(&test_tree, line); 149 150 struct cil_tree_node *test_ast_node; 151 cil_tree_node_init(&test_ast_node); 152 153 struct cil_db *test_db; 154 cil_db_init(&test_db); 155 156 test_ast_node->parent = test_db->ast->root; 157 test_ast_node->line = 1; 158 159 cil_gen_block(test_db, test_tree->root->cl_head->cl_head, test_ast_node, 0); 160 161 struct cil_tree_node *test_copy; 162 cil_tree_node_init(&test_copy); 163 164 symtab_t sym; 165 symtab_init(&sym, cil_sym_sizes[CIL_SYM_ARRAY_BLOCK][CIL_SYM_BLOCKS]); 166 167 int rc = cil_copy_block(test_db, test_ast_node->data, &test_copy->data, &sym); 168 CuAssertIntEquals(tc, rc, SEPOL_OK); 169 } 170 171 void test_cil_copy_perm(CuTest *tc) { 172 char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL}; 173 174 struct cil_tree *test_tree; 175 gen_test_tree(&test_tree, line); 176 177 struct cil_tree_node *test_ast_node; 178 cil_tree_node_init(&test_ast_node); 179 180 struct cil_db *test_db; 181 cil_db_init(&test_db); 182 183 struct cil_class *new_node; 184 cil_class_init(&new_node); 185 186 struct cil_tree_node *new_tree_node; 187 cil_tree_node_init(&new_tree_node); 188 new_tree_node->data = new_node; 189 new_tree_node->flavor = CIL_CLASS; 190 191 test_ast_node->parent = new_tree_node; 192 test_ast_node->line = 1; 193 194 struct cil_tree_node *test_copy; 195 cil_tree_node_init(&test_copy); 196 197 symtab_t sym; 198 symtab_init(&sym, CIL_CLASS_SYM_SIZE); 199 200 cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head, test_ast_node); 201 int rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym); 202 CuAssertIntEquals(tc, rc, SEPOL_OK); 203 cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head->next, test_ast_node); 204 rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym); 205 CuAssertIntEquals(tc, rc, SEPOL_OK); 206 cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head->next->next, test_ast_node); 207 rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym); 208 CuAssertIntEquals(tc, rc, SEPOL_OK); 209 210 } 211 212 void test_cil_copy_class(CuTest *tc) { 213 char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL}; 214 215 struct cil_tree *test_tree; 216 gen_test_tree(&test_tree, line); 217 218 struct cil_tree_node *test_ast_node; 219 cil_tree_node_init(&test_ast_node); 220 221 struct cil_db *test_db; 222 cil_db_init(&test_db); 223 224 test_ast_node->parent = test_db->ast->root; 225 test_ast_node->line = 1; 226 227 cil_gen_class(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 228 229 struct cil_tree_node *test_copy; 230 cil_tree_node_init(&test_copy); 231 232 symtab_t sym; 233 symtab_init(&sym, CIL_CLASS_SYM_SIZE); 234 235 int rc = cil_copy_class(test_db, test_ast_node->data, &test_copy->data, &sym); 236 CuAssertIntEquals(tc, rc, SEPOL_OK); 237 } 238 239 void test_cil_copy_common(CuTest *tc) { 240 char *line[] = {"(", "common", "test", "(", "read", "write", ")", ")", NULL}; 241 242 struct cil_tree *test_tree; 243 gen_test_tree(&test_tree, line); 244 245 struct cil_tree_node *test_ast_node; 246 cil_tree_node_init(&test_ast_node); 247 248 struct cil_db *test_db; 249 cil_db_init(&test_db); 250 251 test_ast_node->parent = test_db->ast->root; 252 test_ast_node->line = 1; 253 254 cil_gen_common(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 255 256 struct cil_tree_node *test_copy; 257 cil_tree_node_init(&test_copy); 258 259 symtab_t sym; 260 symtab_init(&sym, CIL_CLASS_SYM_SIZE); 261 262 int rc = cil_copy_common(test_db, test_ast_node->data, &test_copy->data, &sym); 263 CuAssertIntEquals(tc, rc, SEPOL_OK); 264 } 265 266 void test_cil_copy_classcommon(CuTest *tc) { 267 char *line[] = {"(", "classcommon", "file", "file", NULL}; 268 269 struct cil_tree *test_tree; 270 gen_test_tree(&test_tree, line); 271 272 struct cil_tree_node *test_ast_node; 273 cil_tree_node_init(&test_ast_node); 274 275 struct cil_db *test_db; 276 cil_db_init(&test_db); 277 278 char *test_key = test_tree->root->cl_head->cl_head->next->data; 279 struct cil_class *test_cls; 280 cil_class_init(&test_cls); 281 282 test_ast_node->parent = test_db->ast->root; 283 test_ast_node->line = 1; 284 285 cil_symtab_insert(&test_db->symtab[CIL_SYM_CLASSES], (hashtab_key_t)test_key, (struct cil_symtab_datum*)test_cls, test_ast_node); 286 287 test_ast_node->data = test_cls; 288 test_ast_node->flavor = CIL_CLASS; 289 290 cil_gen_classcommon(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 291 292 struct cil_classcommon *test_copy; 293 cil_classcommon_init(&test_copy); 294 295 symtab_t sym; 296 symtab_init(&sym, CIL_CLASS_SYM_SIZE); 297 298 int rc = cil_copy_classcommon(test_db, test_ast_node->data, (void**)&test_copy, &sym); 299 CuAssertIntEquals(tc, rc, SEPOL_OK); 300 CuAssertStrEquals(tc, ((struct cil_classcommon *)test_ast_node->data)->class_str, test_copy->class_str); 301 CuAssertStrEquals(tc, ((struct cil_classcommon *)test_ast_node->data)->common_str, test_copy->common_str); 302 } 303 304 void test_cil_copy_sid(CuTest *tc) { 305 char *line[] = {"(", "sid", "test", ")", NULL}; 306 307 struct cil_tree *test_tree; 308 gen_test_tree(&test_tree, line); 309 310 struct cil_tree_node *test_ast_node; 311 cil_tree_node_init(&test_ast_node); 312 313 struct cil_db *test_db; 314 cil_db_init(&test_db); 315 316 test_ast_node->parent = test_db->ast->root; 317 test_ast_node->line = 1; 318 319 cil_gen_sid(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 320 321 struct cil_tree_node *test_copy; 322 cil_tree_node_init(&test_copy); 323 324 symtab_t sym; 325 symtab_init(&sym, CIL_TEST_SYM_SIZE); 326 327 int rc = cil_copy_sid(test_db, test_ast_node->data, &test_copy->data, &sym); 328 CuAssertIntEquals(tc, rc, SEPOL_OK); 329 } 330 331 void test_cil_copy_sidcontext(CuTest *tc) { 332 char *line[] = {"(", "sidcontext", "test", "(", "blah_u", "blah_r", "blah_t", "(", "low", "high", ")", ")", ")", NULL}; 333 334 struct cil_tree *test_tree; 335 gen_test_tree(&test_tree, line); 336 337 struct cil_tree_node *test_ast_node; 338 cil_tree_node_init(&test_ast_node); 339 340 struct cil_db *test_db; 341 cil_db_init(&test_db); 342 343 test_ast_node->parent = test_db->ast->root; 344 test_ast_node->line = 1; 345 346 cil_gen_sidcontext(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 347 348 struct cil_tree_node *test_copy; 349 cil_tree_node_init(&test_copy); 350 351 symtab_t sym; 352 symtab_init(&sym, CIL_TEST_SYM_SIZE); 353 354 int rc = cil_copy_sidcontext(test_db, test_ast_node->data, &test_copy->data, &sym); 355 CuAssertIntEquals(tc, rc, SEPOL_OK); 356 CuAssertStrEquals(tc, ((struct cil_user *)test_copy->data)->datum.name, 357 ((struct cil_user *)test_ast_node->data)->datum.name); 358 } 359 360 void test_cil_copy_user(CuTest *tc) { 361 char *line[] = {"(", "user", "sysadm", ")", NULL}; 362 363 struct cil_tree *test_tree; 364 gen_test_tree(&test_tree, line); 365 366 struct cil_tree_node *test_ast_node; 367 cil_tree_node_init(&test_ast_node); 368 369 struct cil_db *test_db; 370 cil_db_init(&test_db); 371 372 test_ast_node->parent = test_db->ast->root; 373 test_ast_node->line = 1; 374 375 cil_gen_user(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 376 377 struct cil_tree_node *test_copy; 378 cil_tree_node_init(&test_copy); 379 380 symtab_t sym; 381 symtab_init(&sym, CIL_TEST_SYM_SIZE); 382 383 int rc = cil_copy_user(test_db, test_ast_node->data, &test_copy->data, &sym); 384 CuAssertIntEquals(tc, rc, SEPOL_OK); 385 } 386 387 void test_cil_copy_role(CuTest *tc) { 388 char *line[] = {"(", "role", "role_r", ")", NULL}; 389 390 struct cil_tree *test_tree; 391 gen_test_tree(&test_tree, line); 392 393 struct cil_tree_node *test_ast_node; 394 cil_tree_node_init(&test_ast_node); 395 396 struct cil_db *test_db; 397 cil_db_init(&test_db); 398 399 test_ast_node->parent = test_db->ast->root; 400 test_ast_node->line = 1; 401 402 cil_gen_role(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 403 404 struct cil_tree_node *test_copy; 405 cil_tree_node_init(&test_copy); 406 407 symtab_t sym; 408 symtab_init(&sym, CIL_TEST_SYM_SIZE); 409 410 int rc = cil_copy_role(test_db, test_ast_node->data, &test_copy->data, &sym); 411 CuAssertIntEquals(tc, rc, SEPOL_OK); 412 } 413 414 void test_cil_copy_userrole(CuTest *tc) { 415 char *line[] = {"(", "userrole", "staff_u", "staff_r", ")", NULL}; 416 417 struct cil_tree *test_tree; 418 gen_test_tree(&test_tree, line); 419 420 struct cil_tree_node *test_ast_node; 421 cil_tree_node_init(&test_ast_node); 422 423 struct cil_db *test_db; 424 cil_db_init(&test_db); 425 426 test_ast_node->parent = test_db->ast->root; 427 test_ast_node->line = 1; 428 429 cil_gen_userrole(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 430 431 struct cil_userrole *test_copy; 432 cil_userrole_init(&test_copy); 433 434 symtab_t sym; 435 symtab_init(&sym, CIL_TEST_SYM_SIZE); 436 437 int rc = cil_copy_userrole(test_db, test_ast_node->data, (void**)&test_copy, &sym); 438 CuAssertIntEquals(tc, rc, SEPOL_OK); 439 CuAssertStrEquals(tc, ((struct cil_userrole *)test_ast_node->data)->user_str, test_copy->user_str); 440 CuAssertStrEquals(tc, ((struct cil_userrole *)test_ast_node->data)->role_str, test_copy->role_str); 441 } 442 443 void test_cil_copy_type(CuTest *tc) { 444 char *line[] = {"(", "type", "test", ")", NULL}; 445 446 struct cil_tree *test_tree; 447 gen_test_tree(&test_tree, line); 448 449 struct cil_tree_node *test_ast_node; 450 cil_tree_node_init(&test_ast_node); 451 452 struct cil_db *test_db; 453 cil_db_init(&test_db); 454 455 test_ast_node->parent = test_db->ast->root; 456 test_ast_node->line = 1; 457 458 cil_gen_type(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 459 460 struct cil_tree_node *test_copy; 461 cil_tree_node_init(&test_copy); 462 463 symtab_t sym; 464 symtab_init(&sym, CIL_TEST_SYM_SIZE); 465 466 int rc = cil_copy_type(test_db, test_ast_node->data, &test_copy->data, &sym); 467 CuAssertIntEquals(tc, rc, SEPOL_OK); 468 } 469 470 void test_cil_copy_typealias(CuTest *tc) { 471 char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL}; 472 473 struct cil_tree *test_tree; 474 gen_test_tree(&test_tree, line); 475 476 struct cil_tree_node *test_ast_node; 477 cil_tree_node_init(&test_ast_node); 478 479 struct cil_db *test_db; 480 cil_db_init(&test_db); 481 482 test_ast_node->parent = test_db->ast->root; 483 test_ast_node->line = 1; 484 485 cil_gen_typealias(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 486 487 struct cil_tree_node *test_copy; 488 cil_tree_node_init(&test_copy); 489 490 symtab_t sym; 491 symtab_init(&sym, CIL_TEST_SYM_SIZE); 492 493 int rc = cil_copy_typealias(test_db, test_ast_node->data, &test_copy->data, &sym); 494 CuAssertIntEquals(tc, rc, SEPOL_OK); 495 } 496 497 void test_cil_copy_typeattribute(CuTest *tc) { 498 char *line[] = {"(", "typettribute", "type_t", ")", NULL}; 499 500 struct cil_tree *test_tree; 501 gen_test_tree(&test_tree, line); 502 503 struct cil_tree_node *test_ast_node; 504 cil_tree_node_init(&test_ast_node); 505 506 struct cil_db *test_db; 507 cil_db_init(&test_db); 508 509 test_ast_node->parent = test_db->ast->root; 510 test_ast_node->line = 1; 511 512 cil_gen_typeattribute(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 513 514 struct cil_tree_node *test_copy; 515 cil_tree_node_init(&test_copy); 516 517 symtab_t sym; 518 symtab_init(&sym, CIL_TEST_SYM_SIZE); 519 520 int rc = cil_copy_typeattribute(test_db, test_ast_node->data, &test_copy->data, &sym); 521 CuAssertIntEquals(tc, rc, SEPOL_OK); 522 } 523 524 void test_cil_copy_bool(CuTest *tc) { 525 char *line[] = {"(", "boolean", "foo", "true", ")", NULL}; 526 527 struct cil_tree *test_tree; 528 gen_test_tree(&test_tree, line); 529 530 struct cil_tree_node *test_ast_node; 531 cil_tree_node_init(&test_ast_node); 532 533 struct cil_db *test_db; 534 cil_db_init(&test_db); 535 536 test_ast_node->parent = test_db->ast->root; 537 test_ast_node->line = 1; 538 539 cil_gen_bool(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_BOOL); 540 541 struct cil_tree_node *test_copy; 542 cil_tree_node_init(&test_copy); 543 544 symtab_t sym; 545 symtab_init(&sym, CIL_TEST_SYM_SIZE); 546 547 int rc = cil_copy_bool(test_db, test_ast_node->data, &test_copy->data, &sym); 548 CuAssertIntEquals(tc, rc, SEPOL_OK); 549 CuAssertIntEquals(tc, ((struct cil_bool *)test_copy->data)->value, 550 ((struct cil_bool *)test_ast_node->data)->value); 551 } 552 553 void test_cil_copy_type_rule(CuTest *tc) { 554 char *line[] = {"(", "typetransition", "foo", "bar", "file", "foobar", ")", NULL}; 555 556 struct cil_tree *test_tree; 557 gen_test_tree(&test_tree, line); 558 559 struct cil_tree_node *test_ast_node; 560 cil_tree_node_init(&test_ast_node); 561 562 struct cil_db *test_db; 563 cil_db_init(&test_db); 564 565 test_ast_node->parent = test_db->ast->root; 566 test_ast_node->line = 1; 567 568 cil_gen_type_rule(test_tree->root->cl_head->cl_head, test_ast_node, CIL_TYPE_TRANSITION); 569 570 struct cil_type_rule *test_copy; 571 cil_type_rule_init(&test_copy); 572 573 symtab_t sym; 574 symtab_init(&sym, CIL_TEST_SYM_SIZE); 575 576 int rc = cil_copy_type_rule(test_db, test_ast_node->data, (void**)&test_copy, &sym); 577 CuAssertIntEquals(tc, rc, SEPOL_OK); 578 CuAssertIntEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->rule_kind, test_copy->rule_kind); 579 CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->src_str, test_copy->src_str); 580 CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->tgt_str, test_copy->tgt_str); 581 CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->obj_str, test_copy->obj_str); 582 } 583 584 void test_cil_copy_avrule(CuTest *tc) { 585 char *line[] = {"(", "allow", "test", "foo", "(", "bar", "(", "read", "write", ")", ")", ")", NULL}; 586 587 struct cil_tree *test_tree; 588 gen_test_tree(&test_tree, line); 589 590 struct cil_tree_node *test_ast_node; 591 cil_tree_node_init(&test_ast_node); 592 593 struct cil_db *test_db; 594 cil_db_init(&test_db); 595 596 test_ast_node->parent = test_db->ast->root; 597 test_ast_node->line = 1; 598 599 struct cil_tree_node *test_current; 600 test_current = test_tree->root->cl_head->cl_head; 601 602 cil_gen_avrule(test_current, test_ast_node, CIL_AVRULE_ALLOWED); 603 604 struct cil_avrule *test_copy; 605 cil_avrule_init(&test_copy); 606 607 symtab_t sym; 608 symtab_init(&sym, CIL_TEST_SYM_SIZE); 609 610 int rc = cil_copy_avrule(test_db, test_ast_node->data, (void**)&test_copy, &sym); 611 CuAssertIntEquals(tc, rc, SEPOL_OK); 612 CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->rule_kind, test_copy->rule_kind); 613 CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->src_str, test_copy->src_str); 614 CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->tgt_str, test_copy->tgt_str); 615 CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->class_str, test_copy->classpermset->class_str); 616 CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->flavor, test_copy->classpermset->permset->perms_list_str->head->flavor); 617 CuAssertStrEquals(tc, (char*)((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->data, (char*)test_copy->classpermset->permset->perms_list_str->head->data); 618 CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->next->flavor, test_copy->classpermset->permset->perms_list_str->head->next->flavor); 619 CuAssertStrEquals(tc, (char*)((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->next->data, (char*)test_copy->classpermset->permset->perms_list_str->head->next->data); 620 } 621 622 void test_cil_copy_sens(CuTest *tc) { 623 char *line[] = {"(", "sensitivity", "s0", ")", NULL}; 624 625 struct cil_tree *test_tree; 626 gen_test_tree(&test_tree, line); 627 628 struct cil_db *test_db; 629 cil_db_init(&test_db); 630 631 struct cil_tree_node *test_ast_node; 632 cil_tree_node_init(&test_ast_node); 633 634 test_ast_node->parent = test_db->ast->root; 635 test_ast_node->line = 1; 636 637 cil_gen_sensitivity(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 638 639 struct cil_tree_node *test_copy; 640 cil_tree_node_init(&test_copy); 641 642 symtab_t sym; 643 symtab_init(&sym, CIL_TEST_SYM_SIZE); 644 645 int rc = cil_copy_sens(test_db, test_ast_node->data, &test_copy->data, &sym); 646 CuAssertIntEquals(tc, rc, SEPOL_OK); 647 } 648 649 void test_cil_copy_sensalias(CuTest *tc) { 650 char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL}; 651 652 struct cil_tree *test_tree; 653 gen_test_tree(&test_tree, line); 654 655 struct cil_db *test_db; 656 cil_db_init(&test_db); 657 658 struct cil_tree_node *test_ast_node; 659 cil_tree_node_init(&test_ast_node); 660 661 test_ast_node->parent = test_db->ast->root; 662 test_ast_node->line = 1; 663 664 cil_gen_sensalias(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 665 666 struct cil_tree_node *test_copy; 667 cil_tree_node_init(&test_copy); 668 669 symtab_t sym; 670 symtab_init(&sym, CIL_TEST_SYM_SIZE); 671 672 int rc = cil_copy_sensalias(test_db, test_ast_node->data, &test_copy->data, &sym); 673 CuAssertIntEquals(tc, rc, SEPOL_OK); 674 CuAssertStrEquals(tc, ((struct cil_sensalias *)test_copy->data)->sens_str, 675 ((struct cil_sensalias *)test_ast_node->data)->sens_str); 676 } 677 678 void test_cil_copy_cat(CuTest *tc) { 679 char *line[] = {"(", "category", "c0", ")", NULL}; 680 681 struct cil_tree *test_tree; 682 gen_test_tree(&test_tree, line); 683 684 struct cil_db *test_db; 685 cil_db_init(&test_db); 686 687 struct cil_tree_node *test_ast_node; 688 cil_tree_node_init(&test_ast_node); 689 690 test_ast_node->parent = test_db->ast->root; 691 test_ast_node->line = 1; 692 693 cil_gen_category(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 694 695 struct cil_tree_node *test_copy; 696 cil_tree_node_init(&test_copy); 697 698 symtab_t sym; 699 symtab_init(&sym, CIL_TEST_SYM_SIZE); 700 701 int rc = cil_copy_cat(test_db, test_ast_node->data, &test_copy->data, &sym); 702 CuAssertIntEquals(tc, rc, SEPOL_OK); 703 } 704 705 void test_cil_copy_catalias(CuTest *tc) { 706 char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL}; 707 708 struct cil_tree *test_tree; 709 gen_test_tree(&test_tree, line); 710 711 struct cil_db *test_db; 712 cil_db_init(&test_db); 713 714 struct cil_tree_node *test_ast_node; 715 cil_tree_node_init(&test_ast_node); 716 717 test_ast_node->parent = test_db->ast->root; 718 test_ast_node->line = 1; 719 720 cil_gen_catalias(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 721 722 struct cil_tree_node *test_copy; 723 cil_tree_node_init(&test_copy); 724 725 symtab_t sym; 726 symtab_init(&sym, CIL_TEST_SYM_SIZE); 727 728 int rc = cil_copy_catalias(test_db, test_ast_node->data, &test_copy->data, &sym); 729 CuAssertIntEquals(tc, rc, SEPOL_OK); 730 CuAssertStrEquals(tc, ((struct cil_catalias *)test_copy->data)->cat_str, 731 ((struct cil_catalias *)test_ast_node->data)->cat_str); 732 } 733 734 void test_cil_copy_senscat(CuTest *tc) { 735 char *line[] = {"(", "sensitivity", "s0", ")", 736 "(", "sensitivity", "s1", ")", 737 "(", "dominance", "(", "s0", "s1", ")", ")", 738 "(", "category", "c0", ")", 739 "(", "category", "c255", ")", 740 "(", "categoryorder", "(", "c0", "c255", ")", ")", 741 "(", "sensitivitycategory", "s1", "(", "c0", "c255", ")", ")", NULL}; 742 743 struct cil_tree *test_tree; 744 gen_test_tree(&test_tree, line); 745 746 struct cil_tree_node *test_ast_node; 747 cil_tree_node_init(&test_ast_node); 748 749 struct cil_db *test_db; 750 cil_db_init(&test_db); 751 752 test_ast_node->parent = test_db->ast->root; 753 test_ast_node->line = 1; 754 755 cil_gen_senscat(test_db, test_tree->root->cl_head->next->next->next->next->next->next->cl_head, test_ast_node); 756 757 struct cil_senscat *test_copy; 758 cil_senscat_init(&test_copy); 759 760 symtab_t sym; 761 symtab_init(&sym, CIL_TEST_SYM_SIZE); 762 763 int rc = cil_copy_senscat(test_db, test_ast_node->data, (void**)&test_copy, &sym); 764 CuAssertIntEquals(tc, rc, SEPOL_OK); 765 CuAssertStrEquals(tc, ((struct cil_senscat *)test_ast_node->data)->sens_str, test_copy->sens_str); 766 CuAssertStrEquals(tc, (char*)((struct cil_senscat *)test_ast_node->data)->catset->cat_list_str->head->data, 767 (char*)test_copy->catset->cat_list_str->head->data); 768 CuAssertStrEquals(tc, (char*)((struct cil_senscat *)test_ast_node->data)->catset->cat_list_str->head->next->data, 769 (char*)test_copy->catset->cat_list_str->head->next->data); 770 } 771 772 void test_cil_copy_catorder(CuTest *tc) { 773 char *line[] = {"(", "category", "c0", ")", 774 "(", "category", "c255", ")", 775 "(", "categoryorder", "(", "c0", "c255", ")", ")", NULL}; 776 777 struct cil_tree *test_tree; 778 gen_test_tree(&test_tree, line); 779 780 struct cil_db *test_db; 781 cil_db_init(&test_db); 782 783 struct cil_tree_node *test_ast_node; 784 cil_tree_node_init(&test_ast_node); 785 786 test_ast_node->parent = test_db->ast->root; 787 test_ast_node->line = 1; 788 789 cil_gen_catorder(test_db, test_tree->root->cl_head->next->next->cl_head, test_ast_node); 790 791 struct cil_catorder *test_copy; 792 cil_catorder_init(&test_copy); 793 794 symtab_t sym; 795 symtab_init(&sym, CIL_TEST_SYM_SIZE); 796 797 int rc = cil_copy_catorder(test_db, test_ast_node->data, (void**)&test_copy, &sym); 798 CuAssertIntEquals(tc, rc, SEPOL_OK); 799 CuAssertStrEquals(tc, (char*)((struct cil_catorder *)test_ast_node->data)->cat_list_str->head->data, (char*)test_copy->cat_list_str->head->data); 800 CuAssertStrEquals(tc, (char*)((struct cil_catorder *)test_ast_node->data)->cat_list_str->head->next->data, (char*)test_copy->cat_list_str->head->next->data); 801 } 802 803 void test_cil_copy_dominance(CuTest *tc) { 804 char *line[] = {"(", "sensitivity", "s0", ")", 805 "(", "sensitivity", "s1", ")", 806 "(", "sensitivity", "s2", ")", 807 "(", "dominance", "(", "s0", "s1", ")", ")", NULL}; 808 809 struct cil_tree *test_tree; 810 gen_test_tree(&test_tree, line); 811 812 struct cil_tree_node *test_ast_node; 813 cil_tree_node_init(&test_ast_node); 814 815 struct cil_db *test_db; 816 cil_db_init(&test_db); 817 818 test_ast_node->parent = test_db->ast->root; 819 test_ast_node->line = 1; 820 821 cil_gen_dominance(test_db, test_tree->root->cl_head->next->next->next->cl_head, test_ast_node); 822 823 struct cil_sens_dominates *test_copy; 824 cil_sens_dominates_init(&test_copy); 825 826 symtab_t sym; 827 symtab_init(&sym, CIL_TEST_SYM_SIZE); 828 829 int rc = cil_copy_dominance(test_db, test_ast_node->data, (void**)&test_copy, &sym); 830 CuAssertIntEquals(tc, rc, SEPOL_OK); 831 CuAssertStrEquals(tc, (char*)((struct cil_sens_dominates *)test_ast_node->data)->sens_list_str->head->data, (char*)test_copy->sens_list_str->head->data); 832 CuAssertStrEquals(tc, (char*)((struct cil_sens_dominates *)test_ast_node->data)->sens_list_str->head->next->data, (char*)test_copy->sens_list_str->head->next->data); 833 } 834 835 void test_cil_copy_level(CuTest *tc) { 836 char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL}; 837 838 struct cil_tree *test_tree; 839 gen_test_tree(&test_tree, line); 840 841 struct cil_tree_node *test_ast_node; 842 cil_tree_node_init(&test_ast_node); 843 844 struct cil_db *test_db; 845 cil_db_init(&test_db); 846 847 test_ast_node->parent = test_db->ast->root; 848 test_ast_node->line = 1; 849 850 cil_gen_level(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 851 852 struct cil_tree_node *test_copy; 853 cil_tree_node_init(&test_copy); 854 855 symtab_t sym; 856 symtab_init(&sym, CIL_TEST_SYM_SIZE); 857 858 int rc = cil_copy_level(test_db, test_ast_node->data, &test_copy->data, &sym); 859 CuAssertIntEquals(tc, rc, SEPOL_OK); 860 } 861 862 void test_cil_copy_fill_level(CuTest *tc) { 863 char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL}; 864 865 struct cil_tree *test_tree; 866 gen_test_tree(&test_tree, line); 867 868 struct cil_tree_node *test_ast_node; 869 cil_tree_node_init(&test_ast_node); 870 871 struct cil_db *test_db; 872 cil_db_init(&test_db); 873 874 test_ast_node->parent = test_db->ast->root; 875 test_ast_node->line = 1; 876 877 cil_gen_level(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 878 879 struct cil_tree_node *test_copy; 880 cil_tree_node_init(&test_copy); 881 cil_level_init((struct cil_level**)&test_copy->data); 882 883 symtab_t sym; 884 symtab_init(&sym, CIL_TEST_SYM_SIZE); 885 886 int rc = cil_copy_fill_level((struct cil_level*)test_ast_node->data, (struct cil_level*)test_copy->data); 887 CuAssertIntEquals(tc, rc, SEPOL_OK); 888 CuAssertStrEquals(tc, ((struct cil_level *)test_copy->data)->sens_str, 889 ((struct cil_level *)test_ast_node->data)->sens_str); 890 } 891 892 void test_cil_copy_context(CuTest *tc) { 893 char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL}; 894 895 struct cil_tree *test_tree; 896 gen_test_tree(&test_tree, line); 897 898 struct cil_tree_node *test_ast_node; 899 cil_tree_node_init(&test_ast_node); 900 901 struct cil_db *test_db; 902 cil_db_init(&test_db); 903 904 test_ast_node->parent = test_db->ast->root; 905 test_ast_node->line = 1; 906 907 cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 908 909 struct cil_tree_node *test_copy; 910 cil_tree_node_init(&test_copy); 911 912 symtab_t sym; 913 symtab_init(&sym, CIL_TEST_SYM_SIZE); 914 915 int rc = cil_copy_context(test_db, test_ast_node->data, &test_copy->data, &sym); 916 CuAssertIntEquals(tc, rc, SEPOL_OK); 917 } 918 919 void test_cil_copy_netifcon(CuTest *tc) { 920 char *line[] = {"(", "netifcon", "eth0", "if_default", "packet_default", ")", NULL}; 921 922 struct cil_tree *test_tree; 923 gen_test_tree(&test_tree, line); 924 925 struct cil_tree_node *test_ast_node; 926 cil_tree_node_init(&test_ast_node); 927 928 struct cil_db *test_db; 929 cil_db_init(&test_db); 930 931 test_ast_node->parent = test_db->ast->root; 932 test_ast_node->line = 1; 933 934 cil_gen_netifcon(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 935 936 struct cil_netifcon *test_copy; 937 938 symtab_t sym; 939 symtab_init(&sym, CIL_TEST_SYM_SIZE); 940 941 int rc = cil_copy_netifcon(test_db, test_ast_node->data, (void**)&test_copy, &sym); 942 CuAssertIntEquals(tc, rc, SEPOL_OK); 943 CuAssertStrEquals(tc, test_copy->interface_str, 944 ((struct cil_netifcon *)test_ast_node->data)->interface_str); 945 CuAssertStrEquals(tc, test_copy->if_context_str, 946 ((struct cil_netifcon *)test_ast_node->data)->if_context_str); 947 CuAssertStrEquals(tc, test_copy->packet_context_str, 948 ((struct cil_netifcon *)test_ast_node->data)->packet_context_str); 949 } 950 951 void test_cil_copy_netifcon_nested(CuTest *tc) { 952 char *line[] = {"(", "netifcon", "eth1", 953 "(", "system_u", "object_r", "netif_t", "(", "low", "high", ")", ")", 954 "(", "system_u", "object_r", "netif_t", "(", "low", "high", ")", ")", ")", NULL}; 955 956 struct cil_tree *test_tree; 957 gen_test_tree(&test_tree, line); 958 959 struct cil_tree_node *test_ast_node; 960 cil_tree_node_init(&test_ast_node); 961 962 struct cil_db *test_db; 963 cil_db_init(&test_db); 964 965 test_ast_node->parent = test_db->ast->root; 966 test_ast_node->line = 1; 967 968 cil_gen_netifcon(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 969 970 struct cil_netifcon *test_copy; 971 972 symtab_t sym; 973 symtab_init(&sym, CIL_TEST_SYM_SIZE); 974 975 int rc = cil_copy_netifcon(test_db, test_ast_node->data, (void**)&test_copy, &sym); 976 CuAssertIntEquals(tc, rc, SEPOL_OK); 977 CuAssertStrEquals(tc, test_copy->interface_str, 978 ((struct cil_netifcon *)test_ast_node->data)->interface_str); 979 CuAssertStrEquals(tc, test_copy->if_context_str, 980 ((struct cil_netifcon *)test_ast_node->data)->if_context_str); 981 CuAssertStrEquals(tc, test_copy->packet_context_str, 982 ((struct cil_netifcon *)test_ast_node->data)->packet_context_str); 983 CuAssertStrEquals(tc, test_copy->packet_context->user_str, 984 ((struct cil_netifcon *)test_ast_node->data)->packet_context->user_str); 985 CuAssertStrEquals(tc, test_copy->packet_context->role_str, 986 ((struct cil_netifcon *)test_ast_node->data)->packet_context->role_str); 987 CuAssertStrEquals(tc, test_copy->packet_context->type_str, 988 ((struct cil_netifcon *)test_ast_node->data)->packet_context->type_str); 989 CuAssertStrEquals(tc, test_copy->packet_context->range_str, 990 ((struct cil_netifcon *)test_ast_node->data)->packet_context->range_str); 991 } 992 993 void test_cil_copy_fill_context(CuTest *tc) { 994 char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "range", ")", ")", NULL}; 995 996 struct cil_tree *test_tree; 997 gen_test_tree(&test_tree, line); 998 999 struct cil_tree_node *test_ast_node; 1000 cil_tree_node_init(&test_ast_node); 1001 1002 struct cil_db *test_db; 1003 cil_db_init(&test_db); 1004 1005 test_ast_node->parent = test_db->ast->root; 1006 test_ast_node->line = 1; 1007 1008 cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1009 1010 struct cil_tree_node *test_copy; 1011 cil_tree_node_init(&test_copy); 1012 cil_context_init((struct cil_context**)&test_copy->data); 1013 1014 symtab_t sym; 1015 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1016 1017 int rc = cil_copy_fill_context((struct cil_context*)test_ast_node->data, (struct cil_context*)test_copy->data); 1018 CuAssertIntEquals(tc, rc, SEPOL_OK); 1019 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->user_str, 1020 ((struct cil_context *)test_ast_node->data)->user_str); 1021 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->role_str, 1022 ((struct cil_context *)test_ast_node->data)->role_str); 1023 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->type_str, 1024 ((struct cil_context *)test_ast_node->data)->type_str); 1025 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->range_str, 1026 ((struct cil_context *)test_ast_node->data)->range_str); 1027 } 1028 1029 void test_cil_copy_fill_context_anonrange(CuTest *tc) { 1030 char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL}; 1031 1032 struct cil_tree *test_tree; 1033 gen_test_tree(&test_tree, line); 1034 1035 struct cil_tree_node *test_ast_node; 1036 cil_tree_node_init(&test_ast_node); 1037 1038 struct cil_db *test_db; 1039 cil_db_init(&test_db); 1040 1041 test_ast_node->parent = test_db->ast->root; 1042 test_ast_node->line = 1; 1043 1044 cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1045 1046 struct cil_tree_node *test_copy; 1047 cil_tree_node_init(&test_copy); 1048 cil_context_init((struct cil_context**)&test_copy->data); 1049 1050 symtab_t sym; 1051 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1052 1053 int rc = cil_copy_fill_context((struct cil_context*)test_ast_node->data, (struct cil_context*)test_copy->data); 1054 CuAssertIntEquals(tc, rc, SEPOL_OK); 1055 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->user_str, 1056 ((struct cil_context *)test_ast_node->data)->user_str); 1057 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->role_str, 1058 ((struct cil_context *)test_ast_node->data)->role_str); 1059 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->type_str, 1060 ((struct cil_context *)test_ast_node->data)->type_str); 1061 CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->range_str, 1062 ((struct cil_context *)test_ast_node->data)->range_str); 1063 } 1064 1065 void test_cil_copy_call(CuTest *tc) { 1066 char *line[] = {"(", "call", "mm", "(", "foo", ")", ")", NULL}; 1067 1068 struct cil_tree *test_tree; 1069 gen_test_tree(&test_tree, line); 1070 1071 struct cil_tree_node *test_ast_node; 1072 cil_tree_node_init(&test_ast_node); 1073 1074 struct cil_db *test_db; 1075 cil_db_init(&test_db); 1076 1077 test_ast_node->parent = test_db->ast->root; 1078 test_ast_node->line = 1; 1079 1080 cil_gen_call(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1081 1082 struct cil_call *test_copy; 1083 1084 symtab_t sym; 1085 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1086 1087 int rc = cil_copy_call(test_db, test_ast_node->data, (void**)&test_copy, &sym); 1088 CuAssertIntEquals(tc, rc, SEPOL_OK); 1089 CuAssertStrEquals(tc, test_copy->macro_str, ((struct cil_call *)test_ast_node->data)->macro_str); 1090 } 1091 1092 void test_cil_copy_optional(CuTest *tc) { 1093 char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL}; 1094 1095 struct cil_tree *test_tree; 1096 gen_test_tree(&test_tree, line); 1097 1098 struct cil_tree_node *test_ast_node; 1099 cil_tree_node_init(&test_ast_node); 1100 1101 struct cil_db *test_db; 1102 cil_db_init(&test_db); 1103 1104 test_ast_node->parent = test_db->ast->root; 1105 test_ast_node->line = 1; 1106 1107 cil_gen_optional(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1108 1109 struct cil_tree_node *test_copy; 1110 cil_tree_node_init(&test_copy); 1111 1112 symtab_t sym; 1113 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1114 1115 int rc = cil_copy_optional(test_db, test_ast_node->data, &test_copy->data, &sym); 1116 CuAssertIntEquals(tc, rc, SEPOL_OK); 1117 } 1118 1119 void test_cil_copy_nodecon(CuTest *tc) { 1120 char *line[] = {"(", "nodecon", "ipaddr", "ipaddr", "con", ")", NULL}; 1121 1122 struct cil_tree *test_tree; 1123 gen_test_tree(&test_tree, line); 1124 1125 struct cil_tree_node *test_ast_node; 1126 cil_tree_node_init(&test_ast_node); 1127 1128 struct cil_db *test_db; 1129 cil_db_init(&test_db); 1130 1131 test_ast_node->parent = test_db->ast->root; 1132 test_ast_node->line = 1; 1133 1134 cil_gen_nodecon(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1135 1136 struct cil_nodecon *test_copy; 1137 1138 symtab_t sym; 1139 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1140 1141 int rc = cil_copy_nodecon(test_db, test_ast_node->data, (void**)&test_copy, &sym); 1142 CuAssertIntEquals(tc, rc, SEPOL_OK); 1143 CuAssertStrEquals(tc, test_copy->addr_str, 1144 ((struct cil_nodecon *)test_ast_node->data)->addr_str); 1145 CuAssertStrEquals(tc, test_copy->mask_str, 1146 ((struct cil_nodecon *)test_ast_node->data)->mask_str); 1147 CuAssertStrEquals(tc, test_copy->context_str, 1148 ((struct cil_nodecon *)test_ast_node->data)->context_str); 1149 } 1150 1151 void test_cil_copy_nodecon_anon(CuTest *tc) { 1152 char *line[] = {"(", "nodecon", "(", "192.168.1.1", ")", "(", "192.168.1.1", ")", "(", "user", "role", "type", "(", "low", "high", ")", ")", ")", NULL}; 1153 1154 struct cil_tree *test_tree; 1155 gen_test_tree(&test_tree, line); 1156 1157 struct cil_tree_node *test_ast_node; 1158 cil_tree_node_init(&test_ast_node); 1159 1160 struct cil_db *test_db; 1161 cil_db_init(&test_db); 1162 1163 test_ast_node->parent = test_db->ast->root; 1164 test_ast_node->line = 1; 1165 1166 cil_gen_nodecon(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1167 1168 struct cil_nodecon *test_copy; 1169 1170 symtab_t sym; 1171 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1172 1173 int rc = cil_copy_nodecon(test_db, test_ast_node->data, (void**)&test_copy, &sym); 1174 CuAssertIntEquals(tc, rc, SEPOL_OK); 1175 CuAssertStrEquals(tc, test_copy->addr_str, 1176 ((struct cil_nodecon *)test_ast_node->data)->addr_str); 1177 CuAssertStrEquals(tc, test_copy->mask_str, 1178 ((struct cil_nodecon *)test_ast_node->data)->mask_str); 1179 CuAssertStrEquals(tc, test_copy->context_str, 1180 ((struct cil_nodecon *)test_ast_node->data)->context_str); 1181 } 1182 1183 void test_cil_copy_fill_ipaddr(CuTest *tc) { 1184 char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL}; 1185 1186 struct cil_tree *test_tree; 1187 gen_test_tree(&test_tree, line); 1188 1189 struct cil_tree_node *test_ast_node; 1190 cil_tree_node_init(&test_ast_node); 1191 1192 struct cil_db *test_db; 1193 cil_db_init(&test_db); 1194 1195 test_ast_node->parent = test_db->ast->root; 1196 test_ast_node->line = 1; 1197 1198 cil_gen_ipaddr(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1199 1200 symtab_t sym; 1201 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1202 1203 struct cil_ipaddr *new; 1204 cil_ipaddr_init(&new); 1205 struct cil_ipaddr *old; 1206 cil_ipaddr_init(&new); 1207 1208 old = (struct cil_ipaddr*)test_ast_node->data; 1209 int rc = cil_copy_fill_ipaddr(old, new); 1210 CuAssertIntEquals(tc, rc, SEPOL_OK); 1211 1212 CuAssertIntEquals(tc, old->family, new->family); 1213 } 1214 1215 void test_cil_copy_ipaddr(CuTest *tc) { 1216 char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL}; 1217 1218 struct cil_tree *test_tree; 1219 gen_test_tree(&test_tree, line); 1220 1221 struct cil_tree_node *test_ast_node; 1222 cil_tree_node_init(&test_ast_node); 1223 1224 struct cil_db *test_db; 1225 cil_db_init(&test_db); 1226 1227 test_ast_node->parent = test_db->ast->root; 1228 test_ast_node->line = 1; 1229 1230 cil_gen_ipaddr(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1231 1232 struct cil_tree_node *test_copy; 1233 cil_tree_node_init(&test_copy); 1234 1235 symtab_t sym; 1236 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1237 1238 int rc = cil_copy_ipaddr(test_db, test_ast_node->data, &test_copy->data, &sym); 1239 CuAssertIntEquals(tc, rc, SEPOL_OK); 1240 } 1241 1242 void test_cil_copy_conditional(CuTest *tc) { 1243 char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")", 1244 "(", "true", 1245 "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL}; 1246 1247 struct cil_tree *test_tree; 1248 gen_test_tree(&test_tree, line); 1249 1250 struct cil_tree_node *test_ast_node; 1251 cil_tree_node_init(&test_ast_node); 1252 1253 struct cil_db *test_db; 1254 cil_db_init(&test_db); 1255 1256 test_ast_node->parent = test_db->ast->root; 1257 test_ast_node->line = 1; 1258 1259 cil_gen_boolif(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1260 1261 struct cil_list_item *curr_old; 1262 curr_old = ((struct cil_booleanif*)test_ast_node->data)->expr_stack->head; 1263 1264 struct cil_conditional *cond_new; 1265 1266 symtab_t sym; 1267 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1268 1269 int rc = cil_copy_conditional(test_db, curr_old->data, (void**)&cond_new, &sym); 1270 CuAssertIntEquals(tc, rc, SEPOL_OK); 1271 1272 CuAssertStrEquals(tc, ((struct cil_conditional*)curr_old->data)->str, cond_new->str); 1273 CuAssertIntEquals(tc, ((struct cil_conditional*)curr_old->data)->flavor, cond_new->flavor); 1274 } 1275 1276 void test_cil_copy_boolif(CuTest *tc) { 1277 char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")", 1278 "(", "true", 1279 "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL}; 1280 1281 struct cil_tree *test_tree; 1282 gen_test_tree(&test_tree, line); 1283 1284 struct cil_tree_node *test_ast_node; 1285 cil_tree_node_init(&test_ast_node); 1286 1287 struct cil_db *test_db; 1288 cil_db_init(&test_db); 1289 1290 test_ast_node->parent = test_db->ast->root; 1291 test_ast_node->line = 1; 1292 1293 cil_gen_boolif(test_db, test_tree->root->cl_head->cl_head, test_ast_node); 1294 1295 struct cil_booleanif *test_copy; 1296 1297 symtab_t sym; 1298 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1299 1300 int rc = cil_copy_boolif(test_db, test_ast_node->data, (void**)&test_copy, &sym); 1301 CuAssertIntEquals(tc, rc, SEPOL_OK); 1302 } 1303 1304 void test_cil_copy_constrain(CuTest *tc) { 1305 char *line[] = {"(", "mlsconstrain", "(", "file", "(", "create", "relabelto", ")", ")", "(", "eq", "l2", "h2", ")", ")", NULL}; 1306 1307 struct cil_tree *test_tree; 1308 gen_test_tree(&test_tree, line); 1309 1310 struct cil_tree_node *test_ast_node; 1311 cil_tree_node_init(&test_ast_node); 1312 1313 struct cil_db *test_db; 1314 cil_db_init(&test_db); 1315 1316 test_ast_node->parent = test_db->ast->root; 1317 test_ast_node->line = 1; 1318 1319 cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN); 1320 1321 struct cil_constrain *test_copy; 1322 1323 symtab_t sym; 1324 symtab_init(&sym, CIL_TEST_SYM_SIZE); 1325 1326 int rc = cil_copy_constrain(test_db, test_ast_node->data, (void**)&test_copy, &sym); 1327 CuAssertIntEquals(tc, rc, SEPOL_OK); 1328 CuAssertStrEquals(tc, ((struct cil_constrain*)test_copy)->classpermset->class_str, ((struct cil_constrain *)test_ast_node->data)->classpermset->class_str); 1329 } 1330 /* 1331 void test_cil_copy_ast(CuTest *tc) { 1332 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "l2", "h2", ")", ")", NULL}; 1333 1334 struct cil_tree *test_tree; 1335 gen_test_tree(&test_tree, line); 1336 1337 struct cil_tree_node *test_ast_node; 1338 cil_tree_node_init(&test_ast_node); 1339 1340 struct cil_db *test_db; 1341 cil_db_init(&test_db); 1342 1343 test_ast_node->parent = test_db->ast->root; 1344 test_ast_node->line = 1; 1345 1346 cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN); 1347 1348 struct cil_tree_node *test_current; 1349 test_current = test_tree->root->cl_head->cl_head; 1350 1351 struct cil_constrain *test_copy; 1352 cil_constrain_init(&test_copy); 1353 cil_list_init(&test_copy->expr); 1354 1355 int rc = cil_copy_ast(((struct cil_constrain *)test_ast_node->data)->expr, test_copy->expr); 1356 CuAssertIntEquals(tc, rc, SEPOL_OK); 1357 } 1358 1359 void test_cil_copy_ast_neg(CuTest *tc) { 1360 char *line[] = {"(", "mlsconstrain", ")", NULL}; 1361 1362 struct cil_tree *test_tree; 1363 gen_test_tree(&test_tree, line); 1364 1365 struct cil_tree_node *test_ast_node; 1366 cil_tree_node_init(&test_ast_node); 1367 1368 struct cil_db *test_db; 1369 cil_db_init(&test_db); 1370 1371 test_ast_node->parent = test_db->ast->root; 1372 test_ast_node->line = 1; 1373 1374 cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN); 1375 1376 struct cil_tree_node *test_current; 1377 test_current = test_tree->root->cl_head->cl_head; 1378 1379 struct cil_constrain *test_copy; 1380 cil_constrain_init(&test_copy); 1381 cil_list_init(&test_copy->expr); 1382 1383 int rc = cil_copy_ast(((struct cil_constrain *)test_ast_node->data)->expr, test_copy->expr); 1384 CuAssertIntEquals(tc, rc, SEPOL_ERR); 1385 } 1386 */ 1387 /* node_helper functions */ 1388 1389 void test_cil_copy_node_helper_block(CuTest *tc) { 1390 char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL}; 1391 1392 struct cil_tree *test_tree; 1393 gen_test_tree(&test_tree, line); 1394 1395 struct cil_db *test_db; 1396 cil_db_init(&test_db); 1397 1398 struct cil_db *test_db2; 1399 cil_db_init(&test_db2); 1400 1401 uint32_t finished = 0; 1402 1403 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1404 1405 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1406 1407 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1408 CuAssertIntEquals(tc, finished, 0); 1409 CuAssertIntEquals(tc, SEPOL_OK, rc); 1410 } 1411 1412 void test_cil_copy_node_helper_block_merge(CuTest *tc) { 1413 char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL}; 1414 1415 struct cil_tree *test_tree; 1416 gen_test_tree(&test_tree, line); 1417 1418 struct cil_db *test_db; 1419 cil_db_init(&test_db); 1420 1421 uint32_t finished = 0; 1422 1423 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1424 1425 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1426 1427 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1428 CuAssertIntEquals(tc, finished, 0); 1429 CuAssertIntEquals(tc, SEPOL_OK, rc); 1430 } 1431 1432 void test_cil_copy_node_helper_perm(CuTest *tc) { 1433 char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL}; 1434 1435 struct cil_tree *test_tree; 1436 gen_test_tree(&test_tree, line); 1437 1438 struct cil_db *test_db; 1439 cil_db_init(&test_db); 1440 1441 struct cil_db *test_db2; 1442 cil_db_init(&test_db2); 1443 1444 uint32_t finished = 0; 1445 1446 struct cil_class *test_class; 1447 cil_class_init(&test_class); 1448 1449 struct cil_tree_node *parent_node; 1450 cil_tree_node_init(&parent_node); 1451 parent_node->flavor = CIL_CLASS; 1452 parent_node->data = test_class; 1453 struct cil_tree_node *root; 1454 cil_tree_node_init(&root); 1455 root->flavor = CIL_ROOT; 1456 parent_node->parent = root; 1457 1458 struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2); 1459 1460 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1461 1462 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->cl_head, &finished, extra_args); 1463 CuAssertIntEquals(tc, finished, 0); 1464 CuAssertIntEquals(tc, SEPOL_OK, rc); 1465 } 1466 1467 void test_cil_copy_node_helper_perm_neg(CuTest *tc) { 1468 char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL}; 1469 1470 struct cil_tree *test_tree; 1471 gen_test_tree(&test_tree, line); 1472 1473 struct cil_db *test_db; 1474 cil_db_init(&test_db); 1475 1476 uint32_t finished = 0; 1477 1478 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1479 1480 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1481 1482 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->cl_head, &finished, extra_args); 1483 CuAssertIntEquals(tc, finished, 0); 1484 CuAssertIntEquals(tc, SEPOL_ERR, rc); 1485 } 1486 1487 void test_cil_copy_node_helper_class(CuTest *tc) { 1488 char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL}; 1489 1490 struct cil_tree *test_tree; 1491 gen_test_tree(&test_tree, line); 1492 1493 struct cil_db *test_db; 1494 cil_db_init(&test_db); 1495 1496 struct cil_db *test_db2; 1497 cil_db_init(&test_db2); 1498 1499 uint32_t finished = 0; 1500 1501 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1502 1503 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1504 1505 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1506 CuAssertIntEquals(tc, finished, 0); 1507 CuAssertIntEquals(tc, SEPOL_OK, rc); 1508 } 1509 1510 void test_cil_copy_node_helper_class_dup_neg(CuTest *tc) { 1511 char *line[] = {"(", "class", "test", "(", "read", "write", ")", ")", NULL}; 1512 1513 struct cil_tree *test_tree; 1514 gen_test_tree(&test_tree, line); 1515 1516 struct cil_db *test_db; 1517 cil_db_init(&test_db); 1518 1519 uint32_t finished = 0; 1520 1521 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1522 1523 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1524 1525 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1526 CuAssertIntEquals(tc, finished, 0); 1527 CuAssertIntEquals(tc, SEPOL_ERR, rc); 1528 } 1529 1530 void test_cil_copy_node_helper_common(CuTest *tc) { 1531 char *line[] = {"(", "common", "test", "(", "read", "write", ")", ")", NULL}; 1532 1533 struct cil_tree *test_tree; 1534 gen_test_tree(&test_tree, line); 1535 1536 struct cil_db *test_db; 1537 cil_db_init(&test_db); 1538 1539 struct cil_db *test_db2; 1540 cil_db_init(&test_db2); 1541 1542 uint32_t finished = 0; 1543 1544 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1545 1546 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1547 1548 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1549 CuAssertIntEquals(tc, finished, 0); 1550 CuAssertIntEquals(tc, SEPOL_OK, rc); 1551 } 1552 1553 void test_cil_copy_node_helper_common_dup_neg(CuTest *tc) { 1554 char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL}; 1555 1556 struct cil_tree *test_tree; 1557 gen_test_tree(&test_tree, line); 1558 1559 struct cil_db *test_db; 1560 cil_db_init(&test_db); 1561 1562 uint32_t finished = 0; 1563 1564 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1565 1566 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1567 1568 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1569 CuAssertIntEquals(tc, finished, 0); 1570 CuAssertIntEquals(tc, SEPOL_ERR, rc); 1571 } 1572 1573 void test_cil_copy_node_helper_classcommon(CuTest *tc) { 1574 char *line[] = {"(", "classcommon", "file", "file", NULL}; 1575 1576 struct cil_tree *test_tree; 1577 gen_test_tree(&test_tree, line); 1578 1579 struct cil_db *test_db; 1580 cil_db_init(&test_db); 1581 1582 struct cil_db *test_db2; 1583 cil_db_init(&test_db2); 1584 1585 uint32_t finished = 0; 1586 1587 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1588 1589 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1590 1591 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1592 CuAssertIntEquals(tc, finished, 0); 1593 CuAssertIntEquals(tc, SEPOL_OK, rc); 1594 } 1595 1596 void test_cil_copy_node_helper_sid(CuTest *tc) { 1597 char *line[] = {"(", "sid", "test", ")", NULL}; 1598 1599 struct cil_tree *test_tree; 1600 gen_test_tree(&test_tree, line); 1601 1602 struct cil_db *test_db; 1603 cil_db_init(&test_db); 1604 1605 struct cil_db *test_db2; 1606 cil_db_init(&test_db2); 1607 1608 uint32_t finished = 0; 1609 1610 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1611 1612 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1613 1614 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1615 CuAssertIntEquals(tc, finished, 0); 1616 CuAssertIntEquals(tc, SEPOL_OK, rc); 1617 } 1618 1619 void test_cil_copy_node_helper_sid_merge(CuTest *tc) { 1620 char *line[] = {"(", "sid", "test", ")", NULL}; 1621 1622 struct cil_tree *test_tree; 1623 gen_test_tree(&test_tree, line); 1624 1625 struct cil_db *test_db; 1626 cil_db_init(&test_db); 1627 1628 uint32_t finished = 0; 1629 1630 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1631 1632 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1633 1634 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1635 CuAssertIntEquals(tc, finished, 0); 1636 CuAssertIntEquals(tc, SEPOL_OK, rc); 1637 } 1638 1639 void test_cil_copy_node_helper_sidcontext(CuTest *tc) { 1640 char *line[] = {"(", "sidcontext", "test", "(", "blah_u", "blah_r", "blah_t", "(", "low", "high", ")", ")", ")", NULL}; 1641 1642 struct cil_tree *test_tree; 1643 gen_test_tree(&test_tree, line); 1644 1645 struct cil_db *test_db; 1646 cil_db_init(&test_db); 1647 1648 struct cil_db *test_db2; 1649 cil_db_init(&test_db2); 1650 1651 uint32_t finished = 0; 1652 1653 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1654 1655 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1656 1657 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1658 CuAssertIntEquals(tc, finished, 0); 1659 CuAssertIntEquals(tc, SEPOL_OK, rc); 1660 } 1661 1662 void test_cil_copy_node_helper_user(CuTest *tc) { 1663 char *line[] = {"(", "user", "sysadm", ")", NULL}; 1664 1665 struct cil_tree *test_tree; 1666 gen_test_tree(&test_tree, line); 1667 1668 struct cil_db *test_db; 1669 cil_db_init(&test_db); 1670 1671 struct cil_db *test_db2; 1672 cil_db_init(&test_db2); 1673 1674 uint32_t finished = 0; 1675 1676 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1677 1678 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1679 1680 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1681 CuAssertIntEquals(tc, finished, 0); 1682 CuAssertIntEquals(tc, SEPOL_OK, rc); 1683 } 1684 1685 void test_cil_copy_node_helper_user_merge(CuTest *tc) { 1686 char *line[] = {"(", "user", "sysadm", ")", NULL}; 1687 1688 struct cil_tree *test_tree; 1689 gen_test_tree(&test_tree, line); 1690 1691 struct cil_db *test_db; 1692 cil_db_init(&test_db); 1693 1694 uint32_t finished = 0; 1695 1696 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1697 1698 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1699 1700 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1701 CuAssertIntEquals(tc, finished, 0); 1702 CuAssertIntEquals(tc, SEPOL_OK, rc); 1703 } 1704 1705 void test_cil_copy_node_helper_role(CuTest *tc) { 1706 char *line[] = {"(", "role", "role_r", ")", NULL}; 1707 1708 struct cil_tree *test_tree; 1709 gen_test_tree(&test_tree, line); 1710 1711 struct cil_db *test_db; 1712 cil_db_init(&test_db); 1713 1714 struct cil_db *test_db2; 1715 cil_db_init(&test_db2); 1716 1717 uint32_t finished = 0; 1718 1719 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1720 1721 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1722 1723 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1724 CuAssertIntEquals(tc, finished, 0); 1725 CuAssertIntEquals(tc, SEPOL_OK, rc); 1726 } 1727 1728 void test_cil_copy_node_helper_role_merge(CuTest *tc) { 1729 char *line[] = {"(", "role", "role_r", ")", NULL}; 1730 1731 struct cil_tree *test_tree; 1732 gen_test_tree(&test_tree, line); 1733 1734 struct cil_db *test_db; 1735 cil_db_init(&test_db); 1736 1737 uint32_t finished = 0; 1738 1739 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1740 1741 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1742 1743 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1744 CuAssertIntEquals(tc, finished, 0); 1745 CuAssertIntEquals(tc, SEPOL_OK, rc); 1746 } 1747 1748 void test_cil_copy_node_helper_userrole(CuTest *tc) { 1749 char *line[] = {"(", "userrole", "staff_u", "staff_r", ")", NULL}; 1750 1751 struct cil_tree *test_tree; 1752 gen_test_tree(&test_tree, line); 1753 1754 struct cil_db *test_db; 1755 cil_db_init(&test_db); 1756 1757 struct cil_db *test_db2; 1758 cil_db_init(&test_db2); 1759 1760 uint32_t finished = 0; 1761 1762 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1763 1764 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1765 1766 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1767 CuAssertIntEquals(tc, finished, 0); 1768 CuAssertIntEquals(tc, SEPOL_OK, rc); 1769 } 1770 1771 void test_cil_copy_node_helper_type(CuTest *tc) { 1772 char *line[] = {"(", "type", "type_t", ")", NULL}; 1773 1774 struct cil_tree *test_tree; 1775 gen_test_tree(&test_tree, line); 1776 1777 struct cil_db *test_db; 1778 cil_db_init(&test_db); 1779 1780 struct cil_db *test_db2; 1781 cil_db_init(&test_db2); 1782 1783 uint32_t finished = 0; 1784 1785 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1786 1787 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1788 1789 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1790 CuAssertIntEquals(tc, finished, 0); 1791 CuAssertIntEquals(tc, SEPOL_OK, rc); 1792 } 1793 1794 void test_cil_copy_node_helper_type_merge(CuTest *tc) { 1795 char *line[] = {"(", "type", "type_t", ")", NULL}; 1796 1797 struct cil_tree *test_tree; 1798 gen_test_tree(&test_tree, line); 1799 1800 struct cil_db *test_db; 1801 cil_db_init(&test_db); 1802 1803 uint32_t finished = 0; 1804 1805 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1806 1807 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1808 1809 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1810 CuAssertIntEquals(tc, finished, 0); 1811 CuAssertIntEquals(tc, SEPOL_OK, rc); 1812 } 1813 1814 void test_cil_copy_node_helper_typeattribute(CuTest *tc) { 1815 char *line[] = {"(", "typeattribute", "bar", ")", NULL}; 1816 1817 struct cil_tree *test_tree; 1818 gen_test_tree(&test_tree, line); 1819 1820 struct cil_db *test_db; 1821 cil_db_init(&test_db); 1822 1823 struct cil_db *test_db2; 1824 cil_db_init(&test_db2); 1825 1826 uint32_t finished = 0; 1827 1828 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1829 1830 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1831 1832 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1833 CuAssertIntEquals(tc, finished, 0); 1834 CuAssertIntEquals(tc, SEPOL_OK, rc); 1835 } 1836 1837 void test_cil_copy_node_helper_typeattribute_merge(CuTest *tc) { 1838 char *line[] = {"(", "typeattribute", "bar", ")", NULL}; 1839 1840 struct cil_tree *test_tree; 1841 gen_test_tree(&test_tree, line); 1842 1843 struct cil_db *test_db; 1844 cil_db_init(&test_db); 1845 1846 uint32_t finished = 0; 1847 1848 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1849 1850 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1851 1852 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1853 CuAssertIntEquals(tc, finished, 0); 1854 CuAssertIntEquals(tc, SEPOL_OK, rc); 1855 } 1856 1857 void test_cil_copy_node_helper_typealias(CuTest *tc) { 1858 char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL}; 1859 1860 struct cil_tree *test_tree; 1861 gen_test_tree(&test_tree, line); 1862 1863 struct cil_db *test_db; 1864 cil_db_init(&test_db); 1865 1866 struct cil_db *test_db2; 1867 cil_db_init(&test_db2); 1868 1869 uint32_t finished = 0; 1870 1871 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1872 1873 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1874 1875 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1876 CuAssertIntEquals(tc, finished, 0); 1877 CuAssertIntEquals(tc, SEPOL_OK, rc); 1878 } 1879 1880 void test_cil_copy_node_helper_typealias_dup_neg(CuTest *tc) { 1881 char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL}; 1882 1883 struct cil_tree *test_tree; 1884 gen_test_tree(&test_tree, line); 1885 1886 struct cil_db *test_db; 1887 cil_db_init(&test_db); 1888 1889 uint32_t finished = 0; 1890 1891 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1892 1893 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1894 1895 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1896 CuAssertIntEquals(tc, finished, 0); 1897 CuAssertIntEquals(tc, SEPOL_ERR, rc); 1898 } 1899 1900 void test_cil_copy_node_helper_bool(CuTest *tc) { 1901 char *line[] = {"(", "boolean", "foo", "true", ")", NULL}; 1902 1903 struct cil_tree *test_tree; 1904 gen_test_tree(&test_tree, line); 1905 1906 struct cil_db *test_db; 1907 cil_db_init(&test_db); 1908 1909 struct cil_db *test_db2; 1910 cil_db_init(&test_db2); 1911 1912 uint32_t finished = 0; 1913 1914 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1915 1916 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1917 1918 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1919 CuAssertIntEquals(tc, finished, 0); 1920 CuAssertIntEquals(tc, SEPOL_OK, rc); 1921 } 1922 1923 void test_cil_copy_node_helper_bool_dup_neg(CuTest *tc) { 1924 char *line[] = {"(", "boolean", "foo", "true", ")", NULL}; 1925 1926 struct cil_tree *test_tree; 1927 gen_test_tree(&test_tree, line); 1928 1929 struct cil_db *test_db; 1930 cil_db_init(&test_db); 1931 1932 uint32_t finished = 0; 1933 1934 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 1935 1936 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1937 1938 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1939 CuAssertIntEquals(tc, finished, 0); 1940 CuAssertIntEquals(tc, SEPOL_ERR, rc); 1941 } 1942 1943 void test_cil_copy_node_helper_avrule(CuTest *tc) { 1944 char *line[] = {"(", "allow", "test", "foo", "(", "file", "(", "read", "write", ")", ")", ")", NULL}; 1945 1946 struct cil_tree *test_tree; 1947 gen_test_tree(&test_tree, line); 1948 1949 struct cil_db *test_db; 1950 cil_db_init(&test_db); 1951 1952 struct cil_db *test_db2; 1953 cil_db_init(&test_db2); 1954 1955 uint32_t finished = 0; 1956 1957 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1958 1959 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1960 1961 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1962 CuAssertIntEquals(tc, finished, 0); 1963 CuAssertIntEquals(tc, SEPOL_OK, rc); 1964 } 1965 1966 void test_cil_copy_node_helper_type_rule(CuTest *tc) { 1967 char *line[] = {"(", "typetransition", "foo", "bar", "file", "foobar", ")", NULL}; 1968 1969 struct cil_tree *test_tree; 1970 gen_test_tree(&test_tree, line); 1971 1972 struct cil_db *test_db; 1973 cil_db_init(&test_db); 1974 1975 struct cil_db *test_db2; 1976 cil_db_init(&test_db2); 1977 1978 uint32_t finished = 0; 1979 1980 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 1981 1982 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 1983 1984 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 1985 CuAssertIntEquals(tc, finished, 0); 1986 CuAssertIntEquals(tc, SEPOL_OK, rc); 1987 } 1988 1989 void test_cil_copy_node_helper_sens(CuTest *tc) { 1990 char *line[] = {"(", "sensitivity", "s0", ")", NULL}; 1991 1992 struct cil_tree *test_tree; 1993 gen_test_tree(&test_tree, line); 1994 1995 struct cil_db *test_db; 1996 cil_db_init(&test_db); 1997 1998 struct cil_db *test_db2; 1999 cil_db_init(&test_db2); 2000 2001 uint32_t finished = 0; 2002 2003 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2004 2005 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2006 2007 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2008 CuAssertIntEquals(tc, finished, 0); 2009 CuAssertIntEquals(tc, SEPOL_OK, rc); 2010 } 2011 2012 void test_cil_copy_node_helper_sens_merge(CuTest *tc) { 2013 char *line[] = {"(", "sensitivity", "s0", ")", NULL}; 2014 2015 struct cil_tree *test_tree; 2016 gen_test_tree(&test_tree, line); 2017 2018 struct cil_db *test_db; 2019 cil_db_init(&test_db); 2020 2021 uint32_t finished = 0; 2022 2023 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2024 2025 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2026 2027 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2028 CuAssertIntEquals(tc, finished, 0); 2029 CuAssertIntEquals(tc, SEPOL_OK, rc); 2030 } 2031 2032 void test_cil_copy_node_helper_sensalias(CuTest *tc) { 2033 char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL}; 2034 2035 struct cil_tree *test_tree; 2036 gen_test_tree(&test_tree, line); 2037 2038 struct cil_db *test_db; 2039 cil_db_init(&test_db); 2040 2041 struct cil_db *test_db2; 2042 cil_db_init(&test_db2); 2043 2044 uint32_t finished = 0; 2045 2046 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2047 2048 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2049 2050 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2051 CuAssertIntEquals(tc, finished, 0); 2052 CuAssertIntEquals(tc, SEPOL_OK, rc); 2053 } 2054 2055 void test_cil_copy_node_helper_sensalias_dup_neg(CuTest *tc) { 2056 char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL}; 2057 2058 struct cil_tree *test_tree; 2059 gen_test_tree(&test_tree, line); 2060 2061 struct cil_db *test_db; 2062 cil_db_init(&test_db); 2063 2064 uint32_t finished = 0; 2065 2066 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2067 2068 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2069 2070 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2071 CuAssertIntEquals(tc, finished, 0); 2072 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2073 } 2074 2075 void test_cil_copy_node_helper_cat(CuTest *tc) { 2076 char *line[] = {"(", "category", "c0", ")", NULL}; 2077 2078 struct cil_tree *test_tree; 2079 gen_test_tree(&test_tree, line); 2080 2081 struct cil_db *test_db; 2082 cil_db_init(&test_db); 2083 2084 struct cil_db *test_db2; 2085 cil_db_init(&test_db2); 2086 2087 uint32_t finished = 0; 2088 2089 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2090 2091 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2092 2093 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2094 CuAssertIntEquals(tc, finished, 0); 2095 CuAssertIntEquals(tc, SEPOL_OK, rc); 2096 } 2097 2098 void test_cil_copy_node_helper_cat_merge(CuTest *tc) { 2099 char *line[] = {"(", "category", "c0", ")", NULL}; 2100 2101 struct cil_tree *test_tree; 2102 gen_test_tree(&test_tree, line); 2103 2104 struct cil_db *test_db; 2105 cil_db_init(&test_db); 2106 2107 uint32_t finished = 0; 2108 2109 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2110 2111 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2112 2113 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2114 CuAssertIntEquals(tc, finished, 0); 2115 CuAssertIntEquals(tc, SEPOL_OK, rc); 2116 } 2117 2118 void test_cil_copy_node_helper_catalias(CuTest *tc) { 2119 char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL}; 2120 2121 struct cil_tree *test_tree; 2122 gen_test_tree(&test_tree, line); 2123 2124 struct cil_db *test_db; 2125 cil_db_init(&test_db); 2126 2127 struct cil_db *test_db2; 2128 cil_db_init(&test_db2); 2129 2130 uint32_t finished = 0; 2131 2132 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2133 2134 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2135 2136 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2137 CuAssertIntEquals(tc, finished, 0); 2138 CuAssertIntEquals(tc, SEPOL_OK, rc); 2139 } 2140 2141 void test_cil_copy_node_helper_catalias_dup_neg(CuTest *tc) { 2142 char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL}; 2143 2144 struct cil_tree *test_tree; 2145 gen_test_tree(&test_tree, line); 2146 2147 struct cil_db *test_db; 2148 cil_db_init(&test_db); 2149 2150 uint32_t finished = 0; 2151 2152 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2153 2154 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2155 2156 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2157 CuAssertIntEquals(tc, finished, 0); 2158 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2159 } 2160 2161 void test_cil_copy_node_helper_senscat(CuTest *tc) { 2162 char *line[] = {"(", "sensitivity", "s0", ")", 2163 "(", "sensitivity", "s1", ")", 2164 "(", "dominance", "(", "s0", "s1", ")", ")", 2165 "(", "category", "c0", ")", 2166 "(", "category", "c255", ")", 2167 "(", "categoryorder", "(", "c0", "c255", ")", ")", 2168 "(", "sensitivitycategory", "s1", "(", "c0", "c255", ")", ")", NULL}; 2169 2170 struct cil_tree *test_tree; 2171 gen_test_tree(&test_tree, line); 2172 2173 struct cil_db *test_db; 2174 cil_db_init(&test_db); 2175 2176 struct cil_db *test_db2; 2177 cil_db_init(&test_db2); 2178 2179 uint32_t finished = 0; 2180 2181 struct cil_senscat *test_senscat; 2182 cil_senscat_init(&test_senscat); 2183 2184 struct cil_tree_node *parent_node; 2185 cil_tree_node_init(&parent_node); 2186 parent_node->flavor = CIL_SENSCAT; 2187 parent_node->data = test_senscat; 2188 2189 struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2); 2190 2191 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2192 2193 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next->next->next->next->next, &finished, extra_args); 2194 CuAssertIntEquals(tc, finished, 0); 2195 CuAssertIntEquals(tc, SEPOL_OK, rc); 2196 } 2197 2198 void test_cil_copy_node_helper_catorder(CuTest *tc) { 2199 char *line[] = {"(", "category", "c0", ")", 2200 "(", "category", "c255", ")", 2201 "(", "categoryorder", "(", "c0", "c255", ")", ")", NULL}; 2202 2203 struct cil_tree *test_tree; 2204 gen_test_tree(&test_tree, line); 2205 2206 struct cil_db *test_db; 2207 cil_db_init(&test_db); 2208 2209 struct cil_db *test_db2; 2210 cil_db_init(&test_db2); 2211 2212 uint32_t finished = 0; 2213 2214 struct cil_catorder *test_catorder; 2215 cil_catorder_init(&test_catorder); 2216 2217 struct cil_tree_node *parent_node; 2218 cil_tree_node_init(&parent_node); 2219 parent_node->flavor = CIL_CATORDER; 2220 parent_node->data = test_catorder; 2221 2222 struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2); 2223 2224 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2225 2226 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next, &finished, extra_args); 2227 CuAssertIntEquals(tc, finished, 0); 2228 CuAssertIntEquals(tc, SEPOL_OK, rc); 2229 } 2230 2231 void test_cil_copy_node_helper_dominance(CuTest *tc) { 2232 char *line[] = {"(", "sensitivity", "s0", ")", 2233 "(", "sensitivity", "s1", ")", 2234 "(", "sensitivity", "s2", ")", 2235 "(", "dominance", "(", "s0", "s1", ")", ")", NULL}; 2236 2237 struct cil_tree *test_tree; 2238 gen_test_tree(&test_tree, line); 2239 2240 struct cil_db *test_db; 2241 cil_db_init(&test_db); 2242 2243 struct cil_db *test_db2; 2244 cil_db_init(&test_db2); 2245 2246 uint32_t finished = 0; 2247 2248 struct cil_sens *test_sens; 2249 cil_sens_init(&test_sens); 2250 2251 struct cil_tree_node *parent_node; 2252 cil_tree_node_init(&parent_node); 2253 parent_node->flavor = CIL_SENS; 2254 parent_node->data = test_sens; 2255 2256 struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2); 2257 2258 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2259 2260 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next->next, &finished, extra_args); 2261 CuAssertIntEquals(tc, finished, 0); 2262 CuAssertIntEquals(tc, SEPOL_OK, rc); 2263 } 2264 2265 void test_cil_copy_node_helper_level(CuTest *tc) { 2266 char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL}; 2267 2268 struct cil_tree *test_tree; 2269 gen_test_tree(&test_tree, line); 2270 2271 struct cil_db *test_db; 2272 cil_db_init(&test_db); 2273 2274 struct cil_db *test_db2; 2275 cil_db_init(&test_db2); 2276 2277 uint32_t finished = 0; 2278 2279 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2280 2281 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2282 2283 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2284 CuAssertIntEquals(tc, finished, 0); 2285 CuAssertIntEquals(tc, SEPOL_OK, rc); 2286 } 2287 2288 void test_cil_copy_node_helper_level_dup_neg(CuTest *tc) { 2289 char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL}; 2290 2291 struct cil_tree *test_tree; 2292 gen_test_tree(&test_tree, line); 2293 2294 struct cil_db *test_db; 2295 cil_db_init(&test_db); 2296 2297 uint32_t finished = 0; 2298 2299 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2300 2301 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2302 2303 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2304 CuAssertIntEquals(tc, finished, 0); 2305 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2306 } 2307 2308 void test_cil_copy_node_helper_context(CuTest *tc) { 2309 char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL}; 2310 2311 struct cil_tree *test_tree; 2312 gen_test_tree(&test_tree, line); 2313 2314 struct cil_db *test_db; 2315 cil_db_init(&test_db); 2316 2317 struct cil_db *test_db2; 2318 cil_db_init(&test_db2); 2319 2320 uint32_t finished = 0; 2321 2322 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2323 2324 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2325 2326 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2327 CuAssertIntEquals(tc, finished, 0); 2328 CuAssertIntEquals(tc, SEPOL_OK, rc); 2329 } 2330 2331 void test_cil_copy_node_helper_context_dup_neg(CuTest *tc) { 2332 char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL}; 2333 2334 struct cil_tree *test_tree; 2335 gen_test_tree(&test_tree, line); 2336 2337 struct cil_db *test_db; 2338 cil_db_init(&test_db); 2339 2340 uint32_t finished = 0; 2341 2342 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2343 2344 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2345 2346 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2347 CuAssertIntEquals(tc, finished, 0); 2348 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2349 } 2350 2351 void test_cil_copy_node_helper_netifcon(CuTest *tc) { 2352 char *line[] = {"(", "netifcon", "eth0", "if_default", "packet_default", ")", NULL}; 2353 2354 struct cil_tree *test_tree; 2355 gen_test_tree(&test_tree, line); 2356 2357 struct cil_db *test_db; 2358 cil_db_init(&test_db); 2359 2360 struct cil_db *test_db2; 2361 cil_db_init(&test_db2); 2362 2363 uint32_t finished = 0; 2364 2365 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2366 2367 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2368 2369 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2370 CuAssertIntEquals(tc, finished, 0); 2371 CuAssertIntEquals(tc, SEPOL_OK, rc); 2372 } 2373 2374 void test_cil_copy_node_helper_call(CuTest *tc) { 2375 char *line[] = {"(", "call", "mm", "(", "foo", ")", ")", NULL}; 2376 2377 struct cil_tree *test_tree; 2378 gen_test_tree(&test_tree, line); 2379 2380 struct cil_db *test_db; 2381 cil_db_init(&test_db); 2382 2383 struct cil_db *test_db2; 2384 cil_db_init(&test_db2); 2385 2386 uint32_t finished = 0; 2387 2388 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2389 2390 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2391 2392 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2393 CuAssertIntEquals(tc, finished, 0); 2394 CuAssertIntEquals(tc, SEPOL_OK, rc); 2395 } 2396 2397 void test_cil_copy_node_helper_optional(CuTest *tc) { 2398 char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL}; 2399 2400 struct cil_tree *test_tree; 2401 gen_test_tree(&test_tree, line); 2402 2403 struct cil_db *test_db; 2404 cil_db_init(&test_db); 2405 2406 struct cil_db *test_db2; 2407 cil_db_init(&test_db2); 2408 2409 uint32_t finished = 0; 2410 2411 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2412 2413 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2414 2415 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2416 CuAssertIntEquals(tc, finished, 0); 2417 CuAssertIntEquals(tc, SEPOL_OK, rc); 2418 } 2419 2420 void test_cil_copy_node_helper_optional_merge(CuTest *tc) { 2421 char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL}; 2422 2423 struct cil_tree *test_tree; 2424 gen_test_tree(&test_tree, line); 2425 2426 struct cil_db *test_db; 2427 cil_db_init(&test_db); 2428 2429 uint32_t finished = 0; 2430 2431 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2432 2433 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2434 2435 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2436 CuAssertIntEquals(tc, finished, 0); 2437 CuAssertIntEquals(tc, SEPOL_OK, rc); 2438 } 2439 2440 void test_cil_copy_node_helper_ipaddr(CuTest *tc) { 2441 char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL}; 2442 2443 struct cil_tree *test_tree; 2444 gen_test_tree(&test_tree, line); 2445 2446 struct cil_db *test_db; 2447 cil_db_init(&test_db); 2448 2449 struct cil_db *test_db2; 2450 cil_db_init(&test_db2); 2451 2452 uint32_t finished = 0; 2453 2454 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2455 2456 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2457 2458 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2459 CuAssertIntEquals(tc, finished, 0); 2460 CuAssertIntEquals(tc, SEPOL_OK, rc); 2461 } 2462 2463 void test_cil_copy_node_helper_ipaddr_dup_neg(CuTest *tc) { 2464 char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL}; 2465 2466 struct cil_tree *test_tree; 2467 gen_test_tree(&test_tree, line); 2468 2469 struct cil_db *test_db; 2470 cil_db_init(&test_db); 2471 2472 uint32_t finished = 0; 2473 2474 struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db); 2475 2476 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2477 2478 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2479 CuAssertIntEquals(tc, finished, 0); 2480 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2481 } 2482 2483 void test_cil_copy_node_helper_boolif(CuTest *tc) { 2484 char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")", 2485 "(", "true", 2486 "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL}; 2487 2488 struct cil_tree *test_tree; 2489 gen_test_tree(&test_tree, line); 2490 2491 struct cil_db *test_db; 2492 cil_db_init(&test_db); 2493 2494 struct cil_db *test_db2; 2495 cil_db_init(&test_db2); 2496 2497 uint32_t finished = 0; 2498 2499 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2500 2501 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2502 2503 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2504 CuAssertIntEquals(tc, finished, 0); 2505 CuAssertIntEquals(tc, SEPOL_OK, rc); 2506 } 2507 2508 void test_cil_copy_node_helper_mlsconstrain(CuTest *tc) { 2509 char *line[] = {"(", "mlsconstrain", "(", "file", "(", "create", "relabelto", ")", ")", "(", "eq", "l1", "l2", ")", ")", NULL}; 2510 2511 struct cil_tree *test_tree; 2512 gen_test_tree(&test_tree, line); 2513 2514 struct cil_db *test_db; 2515 cil_db_init(&test_db); 2516 2517 struct cil_db *test_db2; 2518 cil_db_init(&test_db2); 2519 2520 uint32_t finished = 0; 2521 2522 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2523 2524 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2525 2526 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2527 CuAssertIntEquals(tc, finished, 0); 2528 CuAssertIntEquals(tc, SEPOL_OK, rc); 2529 } 2530 2531 void test_cil_copy_node_helper_orignull_neg(CuTest *tc) { 2532 char *line[] = {"(", ")", NULL}; 2533 2534 struct cil_tree *test_tree; 2535 gen_test_tree(&test_tree, line); 2536 2537 struct cil_db *test_db; 2538 cil_db_init(&test_db); 2539 2540 struct cil_db *test_db2; 2541 cil_db_init(&test_db2); 2542 2543 uint32_t finished = 0; 2544 2545 struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2); 2546 2547 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2548 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2549 } 2550 2551 void test_cil_copy_node_helper_extraargsnull_neg(CuTest *tc) { 2552 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "l1", "l2", ")", ")", NULL}; 2553 2554 struct cil_tree *test_tree; 2555 gen_test_tree(&test_tree, line); 2556 2557 struct cil_db *test_db; 2558 cil_db_init(&test_db); 2559 2560 struct cil_db *test_db2; 2561 cil_db_init(&test_db2); 2562 2563 struct cil_args_copy *extra_args = NULL; 2564 2565 uint32_t finished = 0; 2566 2567 cil_build_ast(test_db, test_tree->root, test_db->ast->root); 2568 2569 int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args); 2570 CuAssertIntEquals(tc, SEPOL_ERR, rc); 2571 } 2572