Skip to content

Commit c409382

Browse files
vmojzisstephensmalley
authored andcommitted
semanage: Reset active value when deleting boolean customizations
Currently, removal of boolean local customizations leaves their current (active) value untouched. After the removal is complete, semanage_bool_query will return the default value. But it needs to be called in a separate transaction. This makes the fix a bit awkward, but I have not found a way to query the default value before the first transation is committed. Fixes: # getsebool smbd_anon_write smbd_anon_write --> off # semanage boolean -m1 smbd_anon_write # semanage boolean -D # getsebool smbd_anon_write smbd_anon_write --> on # manage boolean -l isemanage boolean --list | grep smbd_anon_write smbd_anon_write (on , off) Allow smbd to anon write Signed-off-by: Vit Mojzis <[email protected]> Acked-by: Stephen Smalley <[email protected]>
1 parent 2621f91 commit c409382

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

python/semanage/seobject.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2885,7 +2885,15 @@ def delete(self, name):
28852885
self.__delete(name)
28862886
self.commit()
28872887

2888+
# New transaction to reset the boolean to its default value.
2889+
# Calling __reset_value in the same transaction as the removal of
2890+
# local customizations does nothing
2891+
self.begin()
2892+
self.__reset_value(name)
2893+
self.commit()
2894+
28882895
def deleteall(self):
2896+
deleted = []
28892897
(rc, self.blist) = semanage_bool_list_local(self.sh)
28902898
if rc < 0:
28912899
raise ValueError(_("Could not list booleans"))
@@ -2894,10 +2902,45 @@ def deleteall(self):
28942902

28952903
for boolean in self.blist:
28962904
name = semanage_bool_get_name(boolean)
2905+
deleted.append(name)
28972906
self.__delete(name)
28982907

28992908
self.commit()
29002909

2910+
# New transaction to reset all affected booleans to their default values.
2911+
# Calling __reset_value in the same transaction as the removal of
2912+
# local customizations does nothing
2913+
self.begin()
2914+
2915+
for boolean in deleted:
2916+
self.__reset_value(boolean)
2917+
2918+
self.commit()
2919+
2920+
# Set active value to default
2921+
# Note: this needs to be called in a new transaction after removing local customizations
2922+
# in order for semanage_bool_query to fetch the default value
2923+
# (as opposed to the current one -- set by the local customizations)
2924+
def __reset_value(self, name):
2925+
name = selinux.selinux_boolean_sub(name)
2926+
2927+
(rc, k) = semanage_bool_key_create(self.sh, name)
2928+
if rc < 0:
2929+
raise ValueError(_("Could not create a key for %s") % name)
2930+
2931+
(rc, b) = semanage_bool_query(self.sh, k)
2932+
if rc < 0:
2933+
raise ValueError(_("Could not query boolean %s") % name)
2934+
2935+
semanage_bool_set_value(b, semanage_bool_get_value(b))
2936+
2937+
rc = semanage_bool_set_active(self.sh, k, b)
2938+
if rc < 0:
2939+
raise ValueError(_("Could not set active value of boolean %s") % name)
2940+
2941+
semanage_bool_key_free(k)
2942+
semanage_bool_free(b)
2943+
29012944
def get_all(self, locallist=0):
29022945
ddict = {}
29032946
if locallist:

0 commit comments

Comments
 (0)