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_build_ast.h" 35 36 void test_cil_list_init(CuTest *tc) { 37 struct cil_avrule *test_avrule = malloc(sizeof(*test_avrule)); 38 39 cil_classpermset_init(&test_avrule->classpermset); 40 cil_permset_init(&test_avrule->classpermset->permset); 41 42 cil_list_init(&test_avrule->classpermset->permset->perms_list_str); 43 CuAssertPtrNotNull(tc, test_avrule->classpermset->permset->perms_list_str); 44 45 cil_destroy_avrule(test_avrule); 46 } 47 48 void test_cil_list_append_item(CuTest *tc) { 49 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 50 51 struct cil_tree *test_tree; 52 gen_test_tree(&test_tree, line); 53 54 struct cil_tree_node *test_ast_node; 55 cil_tree_node_init(&test_ast_node); 56 57 struct cil_db *test_db; 58 cil_db_init(&test_db); 59 60 test_ast_node->parent = test_db->ast->root; 61 test_ast_node->line = 1; 62 63 struct cil_list *test_class_list; 64 cil_list_init(&test_class_list); 65 66 struct cil_list_item *test_new_item; 67 cil_list_item_init(&test_new_item); 68 69 test_new_item->flavor = CIL_CLASS; 70 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 71 72 int rc = cil_list_append_item(test_class_list, test_new_item); 73 CuAssertIntEquals(tc, SEPOL_OK, rc); 74 } 75 76 void test_cil_list_append_item_append(CuTest *tc) { 77 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 78 79 struct cil_tree *test_tree; 80 gen_test_tree(&test_tree, line); 81 82 struct cil_tree_node *test_ast_node; 83 cil_tree_node_init(&test_ast_node); 84 85 struct cil_db *test_db; 86 cil_db_init(&test_db); 87 88 test_ast_node->parent = test_db->ast->root; 89 test_ast_node->line = 1; 90 91 struct cil_list *test_class_list; 92 cil_list_init(&test_class_list); 93 94 struct cil_list_item *test_new_item; 95 cil_list_item_init(&test_new_item); 96 97 test_new_item->flavor = CIL_CLASS; 98 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 99 100 int rc = cil_list_append_item(test_class_list, test_new_item); 101 102 cil_list_item_init(&test_new_item); 103 104 test_new_item->flavor = CIL_CLASS; 105 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head->next; 106 107 int rc2 = cil_list_append_item(test_class_list, test_new_item); 108 CuAssertIntEquals(tc, SEPOL_OK, rc); 109 CuAssertIntEquals(tc, SEPOL_OK, rc2); 110 } 111 112 void test_cil_list_append_item_append_extra(CuTest *tc) { 113 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", "process", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 114 115 struct cil_tree *test_tree; 116 gen_test_tree(&test_tree, line); 117 118 struct cil_tree_node *test_ast_node; 119 cil_tree_node_init(&test_ast_node); 120 121 struct cil_db *test_db; 122 cil_db_init(&test_db); 123 124 test_ast_node->parent = test_db->ast->root; 125 test_ast_node->line = 1; 126 127 struct cil_list *test_class_list; 128 cil_list_init(&test_class_list); 129 130 struct cil_list_item *test_new_item; 131 cil_list_item_init(&test_new_item); 132 133 test_new_item->flavor = CIL_CLASS; 134 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 135 136 int rc = cil_list_append_item(test_class_list, test_new_item); 137 138 cil_list_item_init(&test_new_item); 139 test_new_item->flavor = CIL_CLASS; 140 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head->next; 141 142 int rc2 = cil_list_append_item(test_class_list, test_new_item); 143 144 cil_list_item_init(&test_new_item); 145 test_new_item->flavor = CIL_CLASS; 146 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head->next->next; 147 148 int rc3 = cil_list_append_item(test_class_list, test_new_item); 149 CuAssertIntEquals(tc, SEPOL_OK, rc); 150 CuAssertIntEquals(tc, SEPOL_OK, rc2); 151 CuAssertIntEquals(tc, SEPOL_OK, rc3); 152 } 153 154 void test_cil_list_append_item_listnull_neg(CuTest *tc) { 155 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 156 157 struct cil_tree *test_tree; 158 gen_test_tree(&test_tree, line); 159 160 struct cil_tree_node *test_ast_node; 161 cil_tree_node_init(&test_ast_node); 162 163 struct cil_db *test_db; 164 cil_db_init(&test_db); 165 166 test_ast_node->parent = test_db->ast->root; 167 test_ast_node->line = 1; 168 169 struct cil_list *test_class_list = NULL; 170 171 struct cil_list_item *test_new_item; 172 cil_list_item_init(&test_new_item); 173 174 test_new_item->flavor = CIL_CLASS; 175 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 176 177 int rc = cil_list_append_item(test_class_list, test_new_item); 178 CuAssertIntEquals(tc, SEPOL_ERR, rc); 179 } 180 181 void test_cil_list_append_item_itemnull_neg(CuTest *tc) { 182 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 183 184 struct cil_tree *test_tree; 185 gen_test_tree(&test_tree, line); 186 187 struct cil_tree_node *test_ast_node; 188 cil_tree_node_init(&test_ast_node); 189 190 struct cil_db *test_db; 191 cil_db_init(&test_db); 192 193 test_ast_node->parent = test_db->ast->root; 194 test_ast_node->line = 1; 195 196 struct cil_list *test_class_list; 197 cil_list_init(&test_class_list); 198 199 struct cil_list_item *test_new_item = NULL; 200 201 int rc = cil_list_append_item(test_class_list, test_new_item); 202 CuAssertIntEquals(tc, SEPOL_ERR, rc); 203 } 204 205 void test_cil_list_prepend_item(CuTest *tc) { 206 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 207 208 struct cil_tree *test_tree; 209 gen_test_tree(&test_tree, line); 210 211 struct cil_tree_node *test_ast_node; 212 cil_tree_node_init(&test_ast_node); 213 214 struct cil_db *test_db; 215 cil_db_init(&test_db); 216 217 test_ast_node->parent = test_db->ast->root; 218 test_ast_node->line = 1; 219 220 struct cil_list *test_class_list; 221 cil_list_init(&test_class_list); 222 223 struct cil_list_item *test_new_item; 224 cil_list_item_init(&test_new_item); 225 226 test_new_item->flavor = CIL_CLASS; 227 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 228 229 int rc = cil_list_prepend_item(test_class_list, test_new_item); 230 CuAssertIntEquals(tc, SEPOL_OK, rc); 231 } 232 233 void test_cil_list_prepend_item_prepend(CuTest *tc) { 234 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 235 236 struct cil_tree *test_tree; 237 gen_test_tree(&test_tree, line); 238 239 struct cil_tree_node *test_ast_node; 240 cil_tree_node_init(&test_ast_node); 241 242 struct cil_db *test_db; 243 cil_db_init(&test_db); 244 245 test_ast_node->parent = test_db->ast->root; 246 test_ast_node->line = 1; 247 248 struct cil_list *test_class_list; 249 cil_list_init(&test_class_list); 250 251 struct cil_list_item *test_new_item; 252 cil_list_item_init(&test_new_item); 253 254 test_new_item->flavor = CIL_CLASS; 255 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 256 257 int rc = cil_list_prepend_item(test_class_list, test_new_item); 258 259 CuAssertIntEquals(tc, SEPOL_OK, rc); 260 } 261 262 void test_cil_list_prepend_item_prepend_neg(CuTest *tc) { 263 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", "process", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 264 265 struct cil_tree *test_tree; 266 gen_test_tree(&test_tree, line); 267 268 struct cil_tree_node *test_ast_node; 269 cil_tree_node_init(&test_ast_node); 270 271 struct cil_db *test_db; 272 cil_db_init(&test_db); 273 274 test_ast_node->parent = test_db->ast->root; 275 test_ast_node->line = 1; 276 277 struct cil_list *test_class_list; 278 cil_list_init(&test_class_list); 279 280 struct cil_list_item *test_new_item; 281 cil_list_item_init(&test_new_item); 282 283 test_new_item->flavor = CIL_CLASS; 284 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 285 286 struct cil_list_item *test_new_item_next; 287 cil_list_item_init(&test_new_item_next); 288 test_new_item->flavor = CIL_CLASS; 289 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head->next; 290 test_new_item->next = test_new_item_next; 291 292 int rc = cil_list_prepend_item(test_class_list, test_new_item); 293 CuAssertIntEquals(tc, SEPOL_ERR, rc); 294 } 295 296 void test_cil_list_prepend_item_listnull_neg(CuTest *tc) { 297 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 298 299 struct cil_tree *test_tree; 300 gen_test_tree(&test_tree, line); 301 302 struct cil_tree_node *test_ast_node; 303 cil_tree_node_init(&test_ast_node); 304 305 struct cil_db *test_db; 306 cil_db_init(&test_db); 307 308 test_ast_node->parent = test_db->ast->root; 309 test_ast_node->line = 1; 310 311 struct cil_list *test_class_list = NULL; 312 313 struct cil_list_item *test_new_item; 314 cil_list_item_init(&test_new_item); 315 316 test_new_item->flavor = CIL_CLASS; 317 test_new_item->data = test_tree->root->cl_head->cl_head->next->cl_head; 318 319 int rc = cil_list_prepend_item(test_class_list, test_new_item); 320 CuAssertIntEquals(tc, SEPOL_ERR, rc); 321 } 322 323 void test_cil_list_prepend_item_itemnull_neg(CuTest *tc) { 324 char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "12", "h2", ")", ")", NULL}; 325 326 struct cil_tree *test_tree; 327 gen_test_tree(&test_tree, line); 328 329 struct cil_tree_node *test_ast_node; 330 cil_tree_node_init(&test_ast_node); 331 332 struct cil_db *test_db; 333 cil_db_init(&test_db); 334 335 test_ast_node->parent = test_db->ast->root; 336 test_ast_node->line = 1; 337 338 struct cil_list *test_class_list; 339 cil_list_init(&test_class_list); 340 341 struct cil_list_item *test_new_item = NULL; 342 343 int rc = cil_list_prepend_item(test_class_list, test_new_item); 344 CuAssertIntEquals(tc, SEPOL_ERR, rc); 345 } 346