diff -Naurp --exclude-from excludes old/policycoreutils/setsebool/setsebool.c new/policycoreutils/setsebool/setsebool.c --- old/policycoreutils/setsebool/setsebool.c 2005-12-23 18:24:55.000000000 -0500 +++ new/policycoreutils/setsebool/setsebool.c 2005-12-23 18:41:12.000000000 -0500 @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -95,11 +96,13 @@ static int selinux_set_boolean_list( /* Apply (permanent) boolean changes to policy via libsemanage */ static int semanage_set_boolean_list( size_t boolcnt, - SELboolean *boollist) { + SELboolean *boollist, + int permanent) { size_t j; semanage_handle_t* handle = NULL; semanage_bool_t* boolean = NULL; + semanage_bool_t* boolean2 = NULL; semanage_bool_key_t* bool_key = NULL; int managed; @@ -139,7 +142,16 @@ static int semanage_set_boolean_list( if (semanage_bool_key_extract(handle, boolean, &bool_key) < 0) goto err; - if (semanage_bool_modify_local(handle, bool_key, boolean) < 0) + if (permanent) { + if (semanage_bool_clone(handle, boolean, &boolean2) < 0) + goto err; + + if (semanage_bool_modify_local(handle, bool_key, boolean2) < 0) + goto err; + boolean2 = NULL; + } + + if (semanage_bool_set_active(handle, bool_key, boolean) < 0) goto err; semanage_bool_key_free(bool_key); @@ -153,9 +165,6 @@ static int semanage_set_boolean_list( semanage_disconnect(handle); - if (selinux_set_boolean_list(boolcnt, boollist, 0)) - goto err; - out: semanage_handle_destroy(handle); return 0; @@ -163,6 +172,7 @@ static int semanage_set_boolean_list( err: semanage_bool_key_free(bool_key); semanage_bool_free(boolean); + semanage_bool_free(boolean2); semanage_handle_destroy(handle); fprintf(stderr, "Could not change policy booleans\n"); return -1; @@ -217,14 +227,8 @@ int setbool(char **list, size_t start, s *value_ptr = '='; } - if (permanent) { - if (semanage_set_boolean_list(boolcnt, vallist) < 0) - goto err; - - } else { - if (selinux_set_boolean_list(boolcnt, vallist, 0) < 0) - goto err; - } + if (semanage_set_boolean_list(boolcnt, vallist, permanent) < 0) + goto err; /* Now log what was done */ pwd = getpwuid(getuid());