113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* Authors: Mark Goldman <mgoldman@tresys.com> 213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Copyright (C) 2007 Tresys Technology, LLC 413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * This library is free software; you can redistribute it and/or 613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * modify it under the terms of the GNU Lesser General Public 713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * License as published by the Free Software Foundation; either 813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * version 2.1 of the License, or (at your option) any later version. 913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * This library is distributed in the hope that it will be useful, 1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * but WITHOUT ANY WARRANTY; without even the implied warranty of 1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Lesser General Public License for more details. 1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * You should have received a copy of the GNU Lesser General Public 1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * License along with this library; if not, write to the Free Software 1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */ 1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle/* The purpose of this file is to provide unit tests of the functions in: 2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * libsemanage/src/utilities.c 2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle * 2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle */ 2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <CUnit/Basic.h> 2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <CUnit/Console.h> 2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <CUnit/TestDB.h> 2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <utilities.h> 3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdio.h> 3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <getopt.h> 3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <stdlib.h> 3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <string.h> 3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <unistd.h> 3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_is_prefix(void); 3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_split_on_space(void); 3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_split(void); 4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_list(void); 4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_str_count(void); 4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_rtrim(void); 4357a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Ioossvoid test_semanage_str_replace(void); 4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_findval(void); 4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_slurp_file_filter(void); 4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlechar fname[] = { 4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 'T', 'E', 'S', 'T', '_', 'T', 'E', 'M', 'P', '_', 'X', 'X', 'X', 'X', 49b6d5805c7ad4bfa6d0544a21084e8ec1a47d7391Petr Lautrbach 'X', 'X', '\0' 5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle}; 5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint fd; 5213cd4c8960688af11ad23b4c946149015c80d54Joshua BrindleFILE *fptr; 5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint semanage_utilities_test_init(void) 5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle fd = mkstemp(fname); 5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (fd < 0) { 5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle perror("test_semanage_findval: "); 6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL_FATAL 6113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("Error opening temporary file, test cannot start."); 6213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 6313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle fptr = fdopen(fd, "w+"); 6513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (!fptr) { 6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle perror("test_semanage_findval file: "); 6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL_FATAL("Error opening file stream, test cannot start."); 6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle fprintf(fptr, "one\ntwo\nthree\nsigma=foo\n#boo\n#bar\n"); 7113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rewind(fptr); 7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return 0; 7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint semanage_utilities_test_cleanup(void) 7713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle unlink(fname); 7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return 0; 8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint semanage_utilities_add_tests(CU_pSuite suite) 8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_is_prefix", 8513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_semanage_is_prefix)) { 8613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_split_on_space", 8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_semanage_split_on_space)) { 9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_split", test_semanage_split)) { 9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 9413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_list", test_semanage_list)) { 9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_str_count", 9913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_semanage_str_count)) { 10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 10213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_rtrim", test_semanage_rtrim)) { 10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 10557a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss if (NULL == CU_add_test(suite, "semanage_str_replace", 10657a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss test_semanage_str_replace)) { 10757a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss goto err; 10857a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss } 10913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "semanage_findval", 11013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_semanage_findval)) { 11113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 11213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 11313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (NULL == CU_add_test(suite, "slurp_file_filter", 11413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_slurp_file_filter)) { 11513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto err; 11613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 11713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return 0; 11813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle err: 11913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_cleanup_registry(); 12013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return CU_get_error(); 12113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 12213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 12313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_is_prefix(void) 12413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 12568a4203f8742b1d06fe7401d6ede14b14e14f3beNicolas Iooss const char *str = "some string"; 12668a4203f8742b1d06fe7401d6ede14b14e14f3beNicolas Iooss const char *pre = "some"; 12768a4203f8742b1d06fe7401d6ede14b14e14f3beNicolas Iooss const char *not_pre = "not this"; 12813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 12913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_TRUE(semanage_is_prefix(str, pre)); 13013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_TRUE(semanage_is_prefix(str, "")); 13113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_TRUE(semanage_is_prefix(str, NULL)); 13213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_is_prefix(str, not_pre)); 13313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 13413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 13513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_split_on_space(void) 13613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 137fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss char *str = strdup(" foo bar baz"); 13813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle char *temp; 13913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 14013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (!str) { 14113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL 14213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("semanage_split_on_space: unable to perform test, no memory"); 14313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 14413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle temp = semanage_split_on_space(str); 145fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, "bar baz"); 146fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 147fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss str = temp; 148fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss 149fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss temp = semanage_split_on_space(str); 150fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, "baz"); 151fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 152fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss str = temp; 15313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 154fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss temp = semanage_split_on_space(str); 155fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, ""); 15613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle free(str); 157fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(temp); 15813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 15913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 16013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_split(void) 16113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 162fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss char *str = strdup("foo1 foo2 foo:bar:"); 16313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle char *temp; 16413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 16513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (!str) { 16613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL 16713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("semanage_split_on_space: unable to perform test, no memory"); 16813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return; 16913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 17013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle temp = semanage_split(str, NULL); 171fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, "foo2 foo:bar:"); 172fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 173fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss str = temp; 17413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 175fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss temp = semanage_split(str, ""); 176fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, "foo:bar:"); 17713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle free(str); 178fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss str = temp; 179fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss 180fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss temp = semanage_split(str, ":"); 181fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, "bar:"); 182fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 183fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss str = temp; 184fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss 185fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss temp = semanage_split(str, ":"); 186fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss CU_ASSERT_STRING_EQUAL(temp, ""); 187fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 188fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(temp); 18913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 19013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 19113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_list(void) 19213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 19313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_list_t *list = NULL; 19413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_list_t *ptr = NULL; 19513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle char *temp = NULL; 19613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle int retval = 0; 19713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 19813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_list_push(&list, "foo")); 19913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NOT_NULL(list); 20013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_list_push(&list, "bar")); 20113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_list_push(&list, "gonk")); 20213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_list_push(&list, "zebra")); 20313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 20413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for (ptr = list; ptr; ptr = ptr->next) 20513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle retval++; 20613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(retval, 4); 20713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 20813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle temp = semanage_list_pop(&list); 20913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(temp, "zebra"); 21013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_FALSE(semanage_list_push(&list, temp)); 21113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle free(temp); 21213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle temp = NULL; 21313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 21413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle retval = 0; 21513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for (ptr = list; ptr; ptr = ptr->next) 21613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle retval++; 21713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(retval, 4); 21813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 21913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle retval = semanage_list_sort(&list); 22013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (retval) { 22113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL 22213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("semanage_list_sort: error unrelated to sort (memory?)"); 22313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle goto past_sort; 22413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 22513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(list->data, "bar"); 22613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(list->next->data, "foo"); 22713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(list->next->next->data, "gonk"); 22813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(list->next->next->next->data, "zebra"); 22913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 23013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle past_sort: 23113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ptr = semanage_list_find(list, "zebra"); 23213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NOT_NULL(ptr); 23313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ptr = semanage_list_find(list, "bogus"); 23413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NULL(ptr); 23513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 23613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_list_destroy(&list); 23713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NULL(list); 23813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 23913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 24013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_str_count(void) 24113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 24268a4203f8742b1d06fe7401d6ede14b14e14f3beNicolas Iooss const char *test_string = "abaababbaaaba"; 24313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 24413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(semanage_str_count(test_string, 'z'), 0); 24513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(semanage_str_count(test_string, 'a'), 8); 24613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(semanage_str_count(test_string, 'b'), 5); 24713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 24813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 24913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_rtrim(void) 25013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 25113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle char *str = strdup("/blah/foo/bar/baz/"); 25213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 25313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NOT_NULL_FATAL(str); 25413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 25513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_rtrim(str, 'Q'); 25613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar/baz/"); 25713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_rtrim(str, 'a'); 25813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar/b"); 25913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_rtrim(str, '/'); 26013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar"); 261fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss 262fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(str); 26313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 26413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 26557a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Ioossvoid test_semanage_str_replace(void) 26657a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss{ 26757a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss const char *test_str = "Hello, I am %{USERNAME} and my id is %{USERID}"; 26857a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss char *str1, *str2; 26957a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 27057a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str1 = semanage_str_replace("%{USERNAME}", "root", test_str, 0); 27157a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_STRING_EQUAL(str1, "Hello, I am root and my id is %{USERID}"); 27257a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 27357a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str2 = semanage_str_replace("%{USERID}", "0", str1, 1); 27457a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_STRING_EQUAL(str2, "Hello, I am root and my id is 0"); 27557a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss free(str1); 27657a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss free(str2); 27757a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 27857a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str1 = semanage_str_replace(":(", ";)", "Test :( :) ! :(:(:))(:(", 0); 27957a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_STRING_EQUAL(str1, "Test ;) :) ! ;);):))(;)"); 28057a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss free(str1); 28157a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 28257a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str1 = semanage_str_replace(":(", ";)", "Test :( :) ! :(:(:))(:(", 3); 28357a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_STRING_EQUAL(str1, "Test ;) :) ! ;);):))(:("); 28457a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss free(str1); 28557a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 28657a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str1 = semanage_str_replace("", "empty search string", "test", 0); 28757a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_EQUAL(str1, NULL); 28857a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 28957a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss str1 = semanage_str_replace("a", "", "abracadabra", 0); 29057a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss CU_ASSERT_STRING_EQUAL(str1, "brcdbr"); 29157a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss free(str1); 29257a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss} 29357a3b1b4b0a50a1d14f825d2933339063ced4fecNicolas Iooss 29413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_semanage_findval(void) 29513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 29613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle char *tok; 29713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (!fptr) { 29813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL_FATAL("Temporary file was not created, aborting test."); 29913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 30013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle tok = semanage_findval(fname, "one", NULL); 30113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(tok, ""); 302fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(tok); 30313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rewind(fptr); 30413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle tok = semanage_findval(fname, "one", ""); 30513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(tok, ""); 30613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle free(tok); 30713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rewind(fptr); 30813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle tok = semanage_findval(fname, "sigma", "="); 30913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_STRING_EQUAL(tok, "foo"); 310fd6bc593b809a055071edb620e9b17169c7a5c26Nicolas Iooss free(tok); 31113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 31213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 31313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleint PREDICATE(const char *str) 31413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 31513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle return semanage_is_prefix(str, "#"); 31613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 31713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 31813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlevoid test_slurp_file_filter(void) 31913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle{ 32013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_list_t *data, *tmp; 32113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle int cnt = 0; 32213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 32313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if (!fptr) { 32413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_FAIL_FATAL("Temporary file was not created, aborting test."); 32513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle } 32613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rewind(fptr); 32713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle data = semanage_slurp_file_filter(fptr, PREDICATE); 32813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_PTR_NOT_NULL_FATAL(data); 32913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for (tmp = data; tmp; tmp = tmp->next) 33013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle cnt++; 33113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle CU_ASSERT_EQUAL(cnt, 2); 33213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 33313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle semanage_list_destroy(&data); 33413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle} 335