1# Copyright 2014-2015, Tresys Technology, LLC
2#
3# This file is part of SETools.
4#
5# SETools is free software: you can redistribute it and/or modify
6# it under the terms of the GNU Lesser General Public License as
7# published by the Free Software Foundation, either version 2.1 of
8# the License, or (at your option) any later version.
9#
10# SETools is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU Lesser General Public License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public
16# License along with SETools.  If not, see
17# <http://www.gnu.org/licenses/>.
18#
19import logging
20
21from . import compquery
22
23
24class PolCapQuery(compquery.ComponentQuery):
25
26    """
27    Query SELinux policy capabilities
28
29    Parameter:
30    policy      The policy to query.
31
32    Keyword Parameters/Class attributes:
33    name        The name of the policy capability to match.
34    name_regex  If true, regular expression matching will
35                be used for matching the name.
36    """
37
38    def results(self):
39        """Generator which yields all matching policy capabilities."""
40        self.log.info("Generating results from {0.policy}".format(self))
41        self.log.debug("Name: {0.name!r}, regex: {0.name_regex}".format(self))
42
43        for cap in self.policy.polcaps():
44            if not self._match_name(cap):
45                continue
46
47            yield cap
48