Re: [PATCH v2] python/sepolicy: Cache conditional rule queries

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



James Carter <jwcart2@xxxxxxxxx> writes:

> On Mon, Jan 30, 2023 at 1:01 PM Vit Mojzis <vmojzis@xxxxxxxxxx> wrote:
>>
>> Commit 7506771e4b630fe0ab853f96574e039055cb72eb
>> "add missing booleans to man pages" dramatically slowed down
>> "sepolicy manpage -a" by removing caching of setools rule query.
>> Re-add said caching and update the query to only return conditional
>> rules.
>>
>> Before commit 7506771e:
>>  #time sepolicy manpage -a
>>  real   1m43.153s
>>  # time sepolicy manpage -d httpd_t
>>  real   0m4.493s
>>
>> After commit 7506771e:
>>  #time sepolicy manpage -a
>>  real   1h56m43.153s
>>  # time sepolicy manpage -d httpd_t
>>  real   0m8.352s
>>
>> After this commit:
>>  #time sepolicy manpage -a
>>  real   1m41.074s
>>  # time sepolicy manpage -d httpd_t
>>  real   0m7.358s
>>
>> Signed-off-by: Vit Mojzis <vmojzis@xxxxxxxxxx>
>
> Acked-by: James Carter <jwcart2@xxxxxxxxx>

This is merged now. Thanks!


>> ---
>> * Remove "sepolicy." before TERuleQuery (left over from testing on older
>>   version of userspace).
>>
>>  python/sepolicy/sepolicy/__init__.py | 11 ++++++++++-
>>  1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
>> index e2d5c11a..c177cdfc 100644
>> --- a/python/sepolicy/sepolicy/__init__.py
>> +++ b/python/sepolicy/sepolicy/__init__.py
>> @@ -125,6 +125,7 @@ all_attributes = None
>>  booleans = None
>>  booleans_dict = None
>>  all_allow_rules = None
>> +all_bool_rules = None
>>  all_transitions = None
>>
>>
>> @@ -1136,6 +1137,14 @@ def get_all_allow_rules():
>>          all_allow_rules = search([ALLOW])
>>      return all_allow_rules
>>
>> +def get_all_bool_rules():
>> +    global all_bool_rules
>> +    if not all_bool_rules:
>> +        q = TERuleQuery(_pol, boolean=".*", boolean_regex=True,
>> +                                ruletype=[ALLOW, DONTAUDIT])
>> +        all_bool_rules = [_setools_rule_to_dict(x) for x in q.results()]
>> +    return all_bool_rules
>> +
>>  def get_all_transitions():
>>      global all_transitions
>>      if not all_transitions:
>> @@ -1146,7 +1155,7 @@ def get_bools(setype):
>>      bools = []
>>      domainbools = []
>>      domainname, short_name = gen_short_name(setype)
>> -    for i in map(lambda x: x['booleans'], filter(lambda x: 'booleans' in x and x['source'] == setype, search([ALLOW, DONTAUDIT]))):
>> +    for i in map(lambda x: x['booleans'], filter(lambda x: 'booleans' in x and x['source'] == setype, get_all_bool_rules())):
>>          for b in i:
>>              if not isinstance(b, tuple):
>>                  continue
>> --
>> 2.37.3
>>




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux