1 /******************************************************************************/ 2 /* This program is free software; you can redistribute it and/or modify */ 3 /* it under the terms of the GNU General Public License as published by */ 4 /* the Free Software Foundation; either version 2 of the License, or */ 5 /* (at your option) any later version. */ 6 /* */ 7 /* This program is distributed in the hope that it will be useful, */ 8 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 9 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ 10 /* the GNU General Public License for more details. */ 11 /* */ 12 /* You should have received a copy of the GNU General Public License */ 13 /* along with this program; if not, write to the Free Software */ 14 /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ 15 /* */ 16 /******************************************************************************/ 17 /* 18 * tomoyo_new_test.c 19 * 20 * Testing program for security/tomoyo/ 21 * 22 * Copyright (C) 2005-2010 NTT DATA CORPORATION 23 */ 24 #include "include.h" 25 26 static int result; 27 static int error; 28 29 static void show_result(const char *test, int should_success) 30 { 31 error = errno; 32 printf("%s : ", test); 33 if (should_success) { 34 if (error == 0) 35 printf("OK (%d)\n", result); 36 else 37 printf("FAILED: %s\n", strerror(error)); 38 } else { 39 if (error == 0) 40 printf("BUG: Didn't fail (%d)\n", result); 41 else if (error == EPERM) 42 printf("OK: permission denied\n"); 43 else 44 printf("FAILED: %s\n", strerror(error)); 45 } 46 } 47 48 static void test_read_etc_fstab(void) 49 { 50 result = open("/etc/fstab", O_RDONLY); 51 } 52 53 static void test_write_dev_null(void) 54 { 55 result = open("/dev/null", O_WRONLY); 56 } 57 58 static void cleanup_file_open(void) 59 { 60 if (result != EOF) 61 close(result); 62 } 63 64 static void test_mkdir_testdir(void) 65 { 66 result = mkdir("/tmp/testdir", 0755); 67 } 68 69 static void cleanup_mkdir_testdir(void) 70 { 71 rmdir("/tmp/testdir"); 72 } 73 74 static void setup_mkdir_testdir(void) 75 { 76 mkdir("/tmp/testdir", 0755); 77 } 78 79 static void test_rmdir_testdir(void) 80 { 81 result = rmdir("/tmp/testdir"); 82 } 83 84 static void setup_execute_bin_true(void) 85 { 86 fprintf(domain_fp, "%s /bin/true\n", self_domain); 87 fprintf(domain_fp, "use_profile 0\n"); 88 fprintf(domain_fp, "select pid=%u\n", pid); 89 } 90 91 static void cleanup_execute_bin_true(void) 92 { 93 wait(NULL); 94 fprintf(domain_fp, "delete %s /bin/true\n", self_domain); 95 fprintf(domain_fp, "select pid=%u\n", pid); 96 } 97 98 static void test_execute_bin_true(void) 99 { 100 char *argv[] = { "/bin/true", NULL }; 101 char *envp[] = { "HOME=/", NULL }; 102 int pipe_fd[2] = { EOF, EOF }; 103 if (pipe(pipe_fd) == -1) 104 err(1, "pipe"); 105 switch (fork()) { 106 case 0: 107 execve("/bin/true", argv, envp); 108 error = errno; 109 if (write(pipe_fd[1], &error, sizeof(error)) == -1) 110 err(1, "write"); 111 _exit(0); 112 break; 113 case -1: 114 error = ENOMEM; 115 break; 116 } 117 close(pipe_fd[1]); 118 (void)read(pipe_fd[0], &error, sizeof(error)); 119 close(pipe_fd[0]); 120 result = error ? EOF : 0; 121 errno = error; 122 } 123 124 static void test_chmod_dev_null(void) 125 { 126 result = chmod("/dev/null", 0666); 127 } 128 129 static void test_chown_dev_null(void) 130 { 131 result = chown("/dev/null", 0, -1); 132 } 133 134 static void test_chgrp_dev_null(void) 135 { 136 result = chown("/dev/null", -1, 0); 137 } 138 139 static void test_ioctl_dev_null(void) 140 { 141 int fd = open("/dev/null", O_RDWR); 142 errno = 0; 143 result = ioctl(fd, 0x5451, NULL); 144 error = errno; 145 close(fd); 146 errno = error; 147 } 148 149 static void setup_chmod_group(void) 150 { 151 write_exception_policy("path_group CHMOD_TARGET /dev/null", 0); 152 write_exception_policy("number_group CHMOD_MODES 0666", 0); 153 } 154 155 static void cleanup_chmod_group(void) 156 { 157 write_exception_policy("path_group CHMOD_TARGET /dev/null", 1); 158 write_exception_policy("number_group CHMOD_MODES 0666", 1); 159 } 160 161 static void setup_chown_group(void) 162 { 163 write_exception_policy("path_group CHOWN_TARGET /dev/\\*", 0); 164 write_exception_policy("number_group CHOWN_IDS 0x0-0xFFFE", 0); 165 } 166 167 static void cleanup_chown_group(void) 168 { 169 write_exception_policy("path_group CHOWN_TARGET /dev/\\*", 1); 170 write_exception_policy("number_group CHOWN_IDS 0x0-0xFFFE", 1); 171 } 172 173 static void setup_ioctl_group(void) 174 { 175 write_exception_policy("path_group IOCTL_TARGET /dev/\\*", 0); 176 write_exception_policy("number_group IOCTL_NUMBERS 0x5450-0x5452", 0); 177 } 178 179 static void cleanup_ioctl_group(void) 180 { 181 write_exception_policy("path_group IOCTL_TARGET /dev/\\*", 1); 182 write_exception_policy("number_group IOCTL_NUMBERS 0x5450-0x5452", 1); 183 } 184 185 static void setup_open_group(void) 186 { 187 write_exception_policy("path_group READABLE /etc/\\*", 0); 188 write_exception_policy("number_group READABLE_IDS 0-0xFFF", 0); 189 } 190 191 static void cleanup_open_group(void) 192 { 193 cleanup_file_open(); 194 write_exception_policy("path_group READABLE /etc/\\*", 1); 195 write_exception_policy("number_group READABLE_IDS 0-0xFFF", 1); 196 } 197 198 static void test_file_open_0(void) 199 { 200 result = open("/tmp/testfile0", O_RDONLY, 0600); 201 } 202 203 static void test_file_open_1(void) 204 { 205 result = open("/tmp/testfile1", O_CREAT | O_RDONLY, 0600); 206 } 207 208 static void test_file_open_2(void) 209 { 210 result = open("/tmp/testfile2", O_TRUNC | O_RDONLY, 0600); 211 } 212 213 static void test_file_open_3(void) 214 { 215 result = open("/tmp/testfile3", O_TRUNC | O_CREAT | O_RDONLY, 0600); 216 } 217 218 static void test_file_open_4(void) 219 { 220 result = open("/tmp/testfile4", O_APPEND | O_RDONLY, 0600); 221 } 222 223 static void test_file_open_5(void) 224 { 225 result = open("/tmp/testfile5", O_APPEND | O_CREAT | O_RDONLY, 0600); 226 } 227 228 static void test_file_open_6(void) 229 { 230 result = open("/tmp/testfile6", O_APPEND | O_TRUNC | O_RDONLY, 0600); 231 } 232 233 static void test_file_open_7(void) 234 { 235 result = open("/tmp/testfile7", 236 O_APPEND | O_TRUNC | O_CREAT | O_RDONLY, 0600); 237 } 238 239 static void test_file_open_8(void) 240 { 241 result = open("/tmp/testfile8", O_WRONLY, 0600); 242 } 243 244 static void test_file_open_9(void) 245 { 246 result = open("/tmp/testfile9", O_CREAT | O_WRONLY, 0600); 247 } 248 249 static void test_file_open_10(void) 250 { 251 result = open("/tmp/testfile10", O_TRUNC | O_WRONLY, 0600); 252 } 253 254 static void test_file_open_11(void) 255 { 256 result = open("/tmp/testfile11", O_TRUNC | O_CREAT | O_WRONLY, 0600); 257 } 258 259 static void test_file_open_12(void) 260 { 261 result = open("/tmp/testfile12", O_APPEND | O_WRONLY, 0600); 262 } 263 264 static void test_file_open_13(void) 265 { 266 result = open("/tmp/testfile13", O_APPEND | O_CREAT | O_WRONLY, 0600); 267 } 268 269 static void test_file_open_14(void) 270 { 271 result = open("/tmp/testfile14", O_APPEND | O_TRUNC | O_WRONLY, 0600); 272 } 273 274 static void test_file_open_15(void) 275 { 276 result = open("/tmp/testfile15", 277 O_APPEND | O_TRUNC | O_CREAT | O_WRONLY, 0600); 278 } 279 280 static void test_file_open_16(void) 281 { 282 result = open("/tmp/testfile16", O_RDWR, 0600); 283 } 284 285 static void test_file_open_17(void) 286 { 287 result = open("/tmp/testfile17", O_CREAT | O_RDWR, 0600); 288 } 289 290 static void test_file_open_18(void) 291 { 292 result = open("/tmp/testfile18", O_TRUNC | O_RDWR, 0600); 293 } 294 295 static void test_file_open_19(void) 296 { 297 result = open("/tmp/testfile19", O_TRUNC | O_CREAT | O_RDWR, 0600); 298 } 299 300 static void test_file_open_20(void) 301 { 302 result = open("/tmp/testfile20", O_APPEND | O_RDWR, 0600); 303 } 304 305 static void test_file_open_21(void) 306 { 307 result = open("/tmp/testfile21", O_APPEND | O_CREAT | O_RDWR, 0600); 308 } 309 310 static void test_file_open_22(void) 311 { 312 result = open("/tmp/testfile22", O_APPEND | O_TRUNC | O_RDWR, 0600); 313 } 314 315 static void test_file_open_23(void) 316 { 317 result = open("/tmp/testfile23", O_APPEND | O_TRUNC | O_CREAT | O_RDWR, 318 0600); 319 } 320 321 static void setup_test_file(void) 322 { 323 int i; 324 char buffer[32]; 325 buffer[31] = '\0'; 326 for (i = 0; i < 24; i += 2) { 327 snprintf(buffer, sizeof(buffer) - 1, "/tmp/testfile%u", i); 328 close(open(buffer, O_WRONLY | O_CREAT, 0600)); 329 } 330 write_exception_policy("deny_rewrite /tmp/testfile\\$", 0); 331 } 332 333 static void setup_test_file_truncate(void) 334 { 335 setup_test_file(); 336 write_domain_policy("allow_truncate /tmp/testfile\\$", 0); 337 set_profile(3, "file::truncate"); 338 } 339 340 static void setup_all_test_file(void) 341 { 342 int i; 343 char buffer[32]; 344 buffer[31] = '\0'; 345 for (i = 0; i < 24; i++) { 346 snprintf(buffer, sizeof(buffer) - 1, "/tmp/testfile%u", i); 347 close(open(buffer, O_WRONLY | O_CREAT, 0600)); 348 } 349 write_exception_policy("deny_rewrite /tmp/testfile\\$", 0); 350 } 351 352 static void setup_all_test_file_truncate(void) 353 { 354 setup_all_test_file(); 355 write_domain_policy("allow_truncate /tmp/testfile\\$", 0); 356 set_profile(3, "file::truncate"); 357 } 358 359 static void cleanup_test_file(void) 360 { 361 int i; 362 char buffer[32]; 363 buffer[31] = '\0'; 364 for (i = 0; i < 24; i++) { 365 snprintf(buffer, sizeof(buffer) - 1, "/tmp/testfile%u", i); 366 unlink(buffer); 367 } 368 write_exception_policy("deny_rewrite /tmp/testfile\\$", 1); 369 cleanup_file_open(); 370 } 371 372 static void cleanup_test_file_truncate(void) 373 { 374 cleanup_test_file(); 375 write_domain_policy("allow_truncate /tmp/testfile\\$", 1); 376 set_profile(0, "file::truncate"); 377 } 378 379 static struct test_struct { 380 void (*do_setup) (void); 381 void (*do_test) (void); 382 void (*do_cleanup) (void); 383 const char *name; 384 const char *policy; 385 } tests[] = { 386 { 387 NULL, test_read_etc_fstab, cleanup_file_open, "file::open", 388 "allow_read /etc/fstab"}, { 389 NULL, test_read_etc_fstab, cleanup_file_open, "file::open", 390 "allow_read /etc/fstab"}, { 391 NULL, test_read_etc_fstab, cleanup_file_open, "file::open", 392 "allow_read /etc/fstab"}, { 393 setup_open_group, test_read_etc_fstab, cleanup_open_group, 394 "file::open", "allow_read @READABLE"}, { 395 NULL, test_write_dev_null, cleanup_file_open, "file::open", 396 "allow_write /dev/null"}, { 397 NULL, test_write_dev_null, cleanup_file_open, "file::open", 398 "allow_write /dev/null"}, { 399 NULL, test_write_dev_null, cleanup_file_open, "file::open", 400 "allow_write /dev/null"}, { 401 cleanup_mkdir_testdir, test_mkdir_testdir, 402 cleanup_mkdir_testdir, "file::mkdir", 403 "allow_mkdir /tmp/testdir/ 0755"}, { 404 cleanup_mkdir_testdir, test_mkdir_testdir, 405 cleanup_mkdir_testdir, "file::mkdir", 406 "allow_mkdir /tmp/testdir/ 0755"}, { 407 cleanup_mkdir_testdir, test_mkdir_testdir, 408 cleanup_mkdir_testdir, "file::mkdir", 409 "allow_mkdir /tmp/testdir/ 0755"}, { 410 setup_mkdir_testdir, test_rmdir_testdir, cleanup_mkdir_testdir, 411 "file::rmdir", "allow_rmdir /tmp/testdir/"}, { 412 setup_mkdir_testdir, test_rmdir_testdir, cleanup_mkdir_testdir, 413 "file::rmdir", "allow_rmdir /tmp/testdir/"}, { 414 setup_mkdir_testdir, test_rmdir_testdir, cleanup_mkdir_testdir, 415 "file::rmdir", "allow_rmdir /tmp/testdir/"}, { 416 setup_execute_bin_true, test_execute_bin_true, 417 cleanup_execute_bin_true, "file::execute", 418 "allow_execute /bin/true"}, { 419 setup_execute_bin_true, test_execute_bin_true, 420 cleanup_execute_bin_true, "file::execute", 421 "allow_execute /bin/true"}, { 422 setup_execute_bin_true, test_execute_bin_true, 423 cleanup_execute_bin_true, "file::execute", 424 "allow_execute /bin/true"}, { 425 NULL, test_chmod_dev_null, NULL, "file::chmod", 426 "allow_chmod /dev/null 0666"}, { 427 NULL, test_chown_dev_null, NULL, "file::chown", 428 "allow_chown /dev/null 0"}, { 429 NULL, test_chgrp_dev_null, NULL, "file::chgrp", 430 "allow_chgrp /dev/null 0"}, { 431 NULL, test_ioctl_dev_null, NULL, "file::ioctl", 432 "allow_ioctl /dev/null 0x5451"}, { 433 setup_chmod_group, test_chmod_dev_null, cleanup_chmod_group, 434 "file::chmod", "allow_chmod @CHMOD_TARGET @CHMOD_MODES"}, { 435 setup_chown_group, test_chown_dev_null, cleanup_chown_group, 436 "file::chown", "allow_chown @CHOWN_TARGET @CHOWN_IDS"}, { 437 setup_chown_group, test_chgrp_dev_null, cleanup_chown_group, 438 "file::chgrp", "allow_chgrp @CHOWN_TARGET @CHOWN_IDS"}, { 439 setup_ioctl_group, test_ioctl_dev_null, cleanup_ioctl_group, 440 "file::ioctl", "allow_ioctl @IOCTL_TARGET @IOCTL_NUMBERS"}, 441 { 442 setup_test_file, test_file_open_0, cleanup_test_file, 443 "file::open", "allow_read /tmp/testfile0"}, { 444 setup_test_file, test_file_open_1, cleanup_test_file, 445 "file::open", "allow_read /tmp/testfile1"}, { 446 setup_test_file, test_file_open_1, cleanup_test_file, 447 "file::create", "allow_create /tmp/testfile1 0600"}, { 448 setup_test_file, test_file_open_2, cleanup_test_file, 449 "file::open", "allow_read /tmp/testfile2"}, { 450 setup_test_file, test_file_open_2, cleanup_test_file, 451 "file::truncate", "allow_truncate /tmp/testfile2"}, { 452 setup_test_file_truncate, test_file_open_2, 453 cleanup_test_file_truncate, "file::rewrite", 454 "allow_rewrite /tmp/testfile2"}, { 455 setup_test_file, test_file_open_3, cleanup_test_file, 456 "file::open", "allow_read /tmp/testfile3"}, { 457 setup_test_file, test_file_open_3, cleanup_test_file, 458 "file::create", "allow_create /tmp/testfile3 0600"}, { 459 setup_test_file, test_file_open_4, cleanup_test_file, 460 "file::open", "allow_read /tmp/testfile4"}, { 461 setup_test_file, test_file_open_5, cleanup_test_file, 462 "file::open", "allow_read /tmp/testfile5"}, { 463 setup_test_file, test_file_open_5, cleanup_test_file, 464 "file::create", "allow_create /tmp/testfile5 0600"}, { 465 setup_test_file, test_file_open_6, cleanup_test_file, 466 "file::open", "allow_read /tmp/testfile6"}, { 467 setup_test_file, test_file_open_6, cleanup_test_file, 468 "file::truncate", "allow_truncate /tmp/testfile6"}, { 469 setup_test_file_truncate, test_file_open_6, 470 cleanup_test_file_truncate, "file::rewrite", 471 "allow_rewrite /tmp/testfile6"}, { 472 setup_test_file, test_file_open_7, cleanup_test_file, 473 "file::open", "allow_read /tmp/testfile7"}, { 474 setup_test_file, test_file_open_7, cleanup_test_file, 475 "file::create", "allow_create /tmp/testfile7 0600"}, { 476 setup_test_file, test_file_open_8, cleanup_test_file, 477 "file::open", "allow_write /tmp/testfile8"}, { 478 setup_test_file, test_file_open_8, cleanup_test_file, 479 "file::rewrite", "allow_rewrite /tmp/testfile8"}, { 480 setup_test_file, test_file_open_9, cleanup_test_file, 481 "file::open", "allow_write /tmp/testfile9"}, { 482 setup_test_file, test_file_open_9, cleanup_test_file, 483 "file::create", "allow_create /tmp/testfile9 0600"}, { 484 setup_test_file, test_file_open_9, cleanup_test_file, 485 "file::rewrite", "allow_rewrite /tmp/testfile9"}, { 486 setup_test_file, test_file_open_10, cleanup_test_file, 487 "file::open", "allow_write /tmp/testfile10"}, { 488 setup_test_file, test_file_open_10, cleanup_test_file, 489 "file::truncate", "allow_truncate /tmp/testfile10"}, { 490 setup_test_file, test_file_open_10, cleanup_test_file, 491 "file::rewrite", "allow_rewrite /tmp/testfile10"}, { 492 setup_test_file, test_file_open_11, cleanup_test_file, 493 "file::open", "allow_write /tmp/testfile11"}, { 494 setup_test_file, test_file_open_11, cleanup_test_file, 495 "file::create", "allow_create /tmp/testfile11 0600"}, { 496 setup_test_file, test_file_open_11, cleanup_test_file, 497 "file::rewrite", "allow_rewrite /tmp/testfile11"}, { 498 setup_test_file, test_file_open_12, cleanup_test_file, 499 "file::open", "allow_write /tmp/testfile12"}, { 500 setup_test_file, test_file_open_13, cleanup_test_file, 501 "file::open", "allow_write /tmp/testfile13"}, { 502 setup_test_file, test_file_open_13, cleanup_test_file, 503 "file::create", "allow_create /tmp/testfile13 0600"}, { 504 setup_test_file, test_file_open_14, cleanup_test_file, 505 "file::open", "allow_write /tmp/testfile14"}, { 506 setup_test_file, test_file_open_14, cleanup_test_file, 507 "file::truncate", "allow_truncate /tmp/testfile14"}, { 508 setup_test_file_truncate, test_file_open_14, 509 cleanup_test_file_truncate, "file::rewrite", 510 "allow_rewrite /tmp/testfile14"}, { 511 setup_test_file, test_file_open_15, cleanup_test_file, 512 "file::open", "allow_write /tmp/testfile15"}, { 513 setup_test_file, test_file_open_15, cleanup_test_file, 514 "file::create", "allow_create /tmp/testfile15 0600"}, { 515 setup_test_file, test_file_open_16, cleanup_test_file, 516 "file::open", "allow_read/write /tmp/testfile16"}, { 517 setup_test_file, test_file_open_16, cleanup_test_file, 518 "file::rewrite", "allow_rewrite /tmp/testfile16"}, { 519 setup_test_file, test_file_open_17, cleanup_test_file, 520 "file::open", "allow_read/write /tmp/testfile17"}, { 521 setup_test_file, test_file_open_17, cleanup_test_file, 522 "file::create", "allow_create /tmp/testfile17 0600"}, { 523 setup_test_file, test_file_open_17, cleanup_test_file, 524 "file::rewrite", "allow_rewrite /tmp/testfile17"}, { 525 setup_test_file, test_file_open_18, cleanup_test_file, 526 "file::open", "allow_read/write /tmp/testfile18"}, { 527 setup_test_file, test_file_open_18, cleanup_test_file, 528 "file::truncate", "allow_truncate /tmp/testfile18"}, { 529 setup_test_file, test_file_open_18, cleanup_test_file, 530 "file::rewrite", "allow_rewrite /tmp/testfile18"}, { 531 setup_test_file, test_file_open_19, cleanup_test_file, 532 "file::open", "allow_read/write /tmp/testfile19"}, { 533 setup_test_file, test_file_open_19, cleanup_test_file, 534 "file::create", "allow_create /tmp/testfile19 0600"}, { 535 setup_test_file, test_file_open_19, cleanup_test_file, 536 "file::rewrite", "allow_rewrite /tmp/testfile19"}, { 537 setup_test_file, test_file_open_20, cleanup_test_file, 538 "file::open", "allow_read/write /tmp/testfile20"}, { 539 setup_test_file, test_file_open_21, cleanup_test_file, 540 "file::open", "allow_read/write /tmp/testfile21"}, { 541 setup_test_file, test_file_open_21, cleanup_test_file, 542 "file::create", "allow_create /tmp/testfile21 0600"}, { 543 setup_test_file, test_file_open_22, cleanup_test_file, 544 "file::open", "allow_read/write /tmp/testfile22"}, { 545 setup_test_file, test_file_open_22, cleanup_test_file, 546 "file::truncate", "allow_truncate /tmp/testfile22"}, { 547 setup_test_file_truncate, test_file_open_22, 548 cleanup_test_file_truncate, "file::rewrite", 549 "allow_rewrite /tmp/testfile22"}, { 550 setup_test_file, test_file_open_23, cleanup_test_file, 551 "file::open", "allow_read/write /tmp/testfile23"}, { 552 setup_test_file, test_file_open_23, cleanup_test_file, 553 "file::create", "allow_create /tmp/testfile23 0600"}, { 554 setup_all_test_file, test_file_open_0, cleanup_test_file, 555 "file::open", "allow_read /tmp/testfile0"}, { 556 setup_all_test_file, test_file_open_2, cleanup_test_file, 557 "file::open", "allow_read /tmp/testfile2"}, { 558 setup_all_test_file, test_file_open_2, cleanup_test_file, 559 "file::truncate", "allow_truncate /tmp/testfile2"}, { 560 setup_all_test_file_truncate, test_file_open_2, 561 cleanup_test_file_truncate, "file::rewrite", 562 "allow_rewrite /tmp/testfile2"}, { 563 setup_all_test_file, test_file_open_4, cleanup_test_file, 564 "file::open", "allow_read /tmp/testfile4"}, { 565 setup_all_test_file, test_file_open_6, cleanup_test_file, 566 "file::open", "allow_read /tmp/testfile6"}, { 567 setup_all_test_file, test_file_open_6, cleanup_test_file, 568 "file::truncate", "allow_truncate /tmp/testfile6"}, { 569 setup_all_test_file_truncate, test_file_open_6, 570 cleanup_test_file_truncate, "file::rewrite", 571 "allow_rewrite /tmp/testfile6"}, { 572 setup_all_test_file, test_file_open_8, cleanup_test_file, 573 "file::open", "allow_write /tmp/testfile8"}, { 574 setup_all_test_file, test_file_open_8, cleanup_test_file, 575 "file::rewrite", "allow_rewrite /tmp/testfile8"}, { 576 setup_all_test_file, test_file_open_10, cleanup_test_file, 577 "file::open", "allow_write /tmp/testfile10"}, { 578 setup_all_test_file, test_file_open_10, cleanup_test_file, 579 "file::truncate", "allow_truncate /tmp/testfile10"}, { 580 setup_all_test_file, test_file_open_10, cleanup_test_file, 581 "file::rewrite", "allow_rewrite /tmp/testfile10"}, { 582 setup_all_test_file, test_file_open_12, cleanup_test_file, 583 "file::open", "allow_write /tmp/testfile12"}, { 584 setup_all_test_file, test_file_open_14, cleanup_test_file, 585 "file::open", "allow_write /tmp/testfile14"}, { 586 setup_all_test_file, test_file_open_14, cleanup_test_file, 587 "file::truncate", "allow_truncate /tmp/testfile14"}, { 588 setup_all_test_file_truncate, test_file_open_14, 589 cleanup_test_file_truncate, "file::rewrite", 590 "allow_rewrite /tmp/testfile14"}, { 591 setup_all_test_file, test_file_open_16, cleanup_test_file, 592 "file::open", "allow_read/write /tmp/testfile16"}, { 593 setup_all_test_file, test_file_open_16, cleanup_test_file, 594 "file::rewrite", "allow_rewrite /tmp/testfile16"}, { 595 setup_all_test_file, test_file_open_18, cleanup_test_file, 596 "file::open", "allow_read/write /tmp/testfile18"}, { 597 setup_all_test_file, test_file_open_18, cleanup_test_file, 598 "file::truncate", "allow_truncate /tmp/testfile18"}, { 599 setup_all_test_file, test_file_open_18, cleanup_test_file, 600 "file::rewrite", "allow_rewrite /tmp/testfile18"}, { 601 setup_all_test_file, test_file_open_20, cleanup_test_file, 602 "file::open", "allow_read/write /tmp/testfile20"}, { 603 setup_all_test_file, test_file_open_22, cleanup_test_file, 604 "file::open", "allow_read/write /tmp/testfile22"}, { 605 setup_all_test_file, test_file_open_22, cleanup_test_file, 606 "file::truncate", "allow_truncate /tmp/testfile22"}, { 607 setup_all_test_file_truncate, test_file_open_22, 608 cleanup_test_file_truncate, "file::rewrite", 609 "allow_rewrite /tmp/testfile22"}, { 610 NULL} 611 }; 612 613 int main(int argc, char *argv[]) 614 { 615 int i; 616 tomoyo_test_init(); 617 for (i = 0; tests[i].do_test; i++) { 618 int trial; 619 for (trial = 0; trial < 2; trial++) { 620 int should_fail; 621 for (should_fail = 0; should_fail < 2; should_fail++) { 622 if (tests[i].do_setup) 623 tests[i].do_setup(); 624 if (!should_fail) 625 write_domain_policy(tests[i].policy, 0); 626 set_profile(3, tests[i].name); 627 tests[i].do_test(); 628 show_result(tests[i].policy, !should_fail); 629 set_profile(0, tests[i].name); 630 if (tests[i].do_cleanup) 631 tests[i].do_cleanup(); 632 if (!should_fail) 633 write_domain_policy(tests[i].policy, 1); 634 } 635 } 636 } 637 for (i = 0; tests[i].do_test; i++) { 638 int mode; 639 for (mode = 0; mode < 4; mode++) { 640 if (tests[i].do_setup) 641 tests[i].do_setup(); 642 set_profile(mode, tests[i].name); 643 tests[i].do_test(); 644 show_result(tests[i].name, 1); 645 set_profile(0, tests[i].name); 646 if (tests[i].do_cleanup) 647 tests[i].do_cleanup(); 648 } 649 } 650 fprintf(domain_fp, "delete %s\n", self_domain); 651 return 0; 652 } 653