Apply logging best practices.

* Use __name__ for the logger name
* Add top-level library NullHandlers
This commit is contained in:
Chris PeBenito 2016-03-04 13:49:03 -05:00
parent d7e8cf0701
commit c017bd7cfa
40 changed files with 110 additions and 17 deletions

View File

@ -24,6 +24,8 @@ try:
except ImportError: # pragma: no cover except ImportError: # pragma: no cover
__version__ = "unknown" __version__ = "unknown"
import logging
# Python classes for policy representation # Python classes for policy representation
from . import policyrep from . import policyrep
from .policyrep import SELinuxPolicy from .policyrep import SELinuxPolicy
@ -72,3 +74,5 @@ from .dta import DomainTransitionAnalysis
# Policy difference # Policy difference
from .diff import PolicyDifference from .diff import PolicyDifference
logging.getLogger(__name__).addHandler(logging.NullHandler())

View File

@ -50,6 +50,10 @@ class BoolQuery(compquery.ComponentQuery):
else: else:
self._default = bool(value) self._default = bool(value)
def __init__(self, policy, **kwargs):
super(BoolQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all Booleans matching the criteria.""" """Generator which yields all Booleans matching the criteria."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -41,6 +41,10 @@ class BoundsQuery(PolicyQuery):
child = CriteriaDescriptor("child_regex") child = CriteriaDescriptor("child_regex")
child_regex = False child_regex = False
def __init__(self, policy, **kwargs):
super(BoundsQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching *bounds statements.""" """Generator which yields all matching *bounds statements."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -39,6 +39,10 @@ class CategoryQuery(mixins.MatchAlias, compquery.ComponentQuery):
will be used on the alias names. will be used on the alias names.
""" """
def __init__(self, policy, **kwargs):
super(CategoryQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching categories.""" """Generator which yields all matching categories."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -43,6 +43,10 @@ class CommonQuery(mixins.MatchPermission, compquery.ComponentQuery):
on the permission names instead of set logic. on the permission names instead of set logic.
""" """
def __init__(self, policy, **kwargs):
super(CommonQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching commons.""" """Generator which yields all matching commons."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -72,6 +72,10 @@ class ConstraintQuery(mixins.MatchObjClass, mixins.MatchPermission, query.Policy
type_regex = False type_regex = False
type_indirect = True type_indirect = True
def __init__(self, policy, **kwargs):
super(ConstraintQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def _match_expr(self, expr, criteria, indirect, regex): def _match_expr(self, expr, criteria, indirect, regex):
""" """
Match roles/types/users in a constraint expression, Match roles/types/users in a constraint expression,

View File

@ -46,6 +46,10 @@ class DefaultQuery(MatchObjClass, PolicyQuery):
default = CriteriaDescriptor(lookup_function="validate_default_value") default = CriteriaDescriptor(lookup_function="validate_default_value")
default_range = CriteriaDescriptor(lookup_function="validate_default_range") default_range = CriteriaDescriptor(lookup_function="validate_default_range")
def __init__(self, policy, **kwargs):
super(DefaultQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching default_* statements.""" """Generator which yields all matching default_* statements."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -27,7 +27,7 @@ class Difference(object):
"""Base class for all policy differences.""" """Base class for all policy differences."""
def __init__(self, left_policy, right_policy): def __init__(self, left_policy, right_policy):
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.left_policy = left_policy self.left_policy = left_policy
self.right_policy = right_policy self.right_policy = right_policy

View File

@ -54,7 +54,7 @@ class DomainTransitionAnalysis(object):
Parameter: Parameter:
policy The policy to analyze. policy The policy to analyze.
""" """
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.exclude = exclude self.exclude = exclude

View File

@ -60,6 +60,10 @@ class FSUseQuery(contextquery.ContextQuery):
fs = CriteriaDescriptor("fs_regex") fs = CriteriaDescriptor("fs_regex")
fs_regex = False fs_regex = False
def __init__(self, policy, **kwargs):
super(FSUseQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching fs_use_* statements.""" """Generator which yields all matching fs_use_* statements."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -64,6 +64,10 @@ class GenfsconQuery(contextquery.ContextQuery):
path = CriteriaDescriptor("path_regex") path = CriteriaDescriptor("path_regex")
path_regex = False path_regex = False
def __init__(self, policy, **kwargs):
super(GenfsconQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching genfscons.""" """Generator which yields all matching genfscons."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -41,7 +41,7 @@ class InfoFlowAnalysis(object):
exclude The types excluded from the information flow analysis. exclude The types excluded from the information flow analysis.
(default is none) (default is none)
""" """
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy

View File

@ -54,6 +54,10 @@ class InitialSIDQuery(compquery.ComponentQuery, contextquery.ContextQuery):
No effect if not using set operations. No effect if not using set operations.
""" """
def __init__(self, policy, **kwargs):
super(InitialSIDQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching initial SIDs.""" """Generator which yields all matching initial SIDs."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -56,6 +56,10 @@ class MLSRuleQuery(mixins.MatchObjClass, query.PolicyQuery):
default_superset = False default_superset = False
default_proper = False default_proper = False
def __init__(self, policy, **kwargs):
super(MLSRuleQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching MLS rules.""" """Generator which yields all matching MLS rules."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -54,6 +54,10 @@ class NetifconQuery(compquery.ComponentQuery, contextquery.ContextQuery):
No effect if not using set operations. No effect if not using set operations.
""" """
def __init__(self, policy, **kwargs):
super(NetifconQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching netifcons.""" """Generator which yields all matching netifcons."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -97,6 +97,10 @@ class NodeconQuery(contextquery.ContextQuery):
else: else:
self._network = None self._network = None
def __init__(self, policy, **kwargs):
super(NodeconQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching nodecons.""" """Generator which yields all matching nodecons."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -60,6 +60,10 @@ class ObjClassQuery(compquery.ComponentQuery):
perms_indirect = True perms_indirect = True
perms_regex = False perms_regex = False
def __init__(self, policy, **kwargs):
super(ObjClassQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching object classes.""" """Generator which yields all matching object classes."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -37,7 +37,7 @@ class PermissionMap(object):
Parameter: Parameter:
permmapfile The path to the permission map to load. permmapfile The path to the permission map to load.
""" """
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
if permmapfile: if permmapfile:
self.load(permmapfile) self.load(permmapfile)

View File

@ -35,6 +35,10 @@ class PolCapQuery(compquery.ComponentQuery):
be used for matching the name. be used for matching the name.
""" """
def __init__(self, policy, **kwargs):
super(PolCapQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching policy capabilities.""" """Generator which yields all matching policy capabilities."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -79,7 +79,7 @@ class SELinuxPolicy(object):
policyfile Path to a policy to open. policyfile Path to a policy to open.
""" """
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = None self.policy = None
self.filename = None self.filename = None

View File

@ -141,7 +141,7 @@ def QpolGenerator(cast):
def qpol_logger(level, msg): def qpol_logger(level, msg):
"""Log qpol messages via Python logging.""" """Log qpol messages via Python logging."""
logging.getLogger("libqpol").debug(msg) logging.getLogger(__name__).debug(msg)
def qpol_policy_factory(path): def qpol_policy_factory(path):
"""Factory function for qpol policy objects.""" """Factory function for qpol policy objects."""

View File

@ -114,6 +114,10 @@ class PortconQuery(contextquery.ContextQuery):
else: else:
self._protocol = None self._protocol = None
def __init__(self, policy, **kwargs):
super(PortconQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching portcons.""" """Generator which yields all matching portcons."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -24,8 +24,6 @@ class PolicyQuery(object):
"""Base class for SELinux policy queries.""" """Base class for SELinux policy queries."""
def __init__(self, policy, **kwargs): def __init__(self, policy, **kwargs):
self.log = logging.getLogger(self.__class__.__name__)
self.policy = policy self.policy = policy
# keys are sorted in reverse order so regex settings # keys are sorted in reverse order so regex settings

View File

@ -82,6 +82,10 @@ class RBACRuleQuery(mixins.MatchObjClass, query.PolicyQuery):
except InvalidType: except InvalidType:
self._target = self.policy.lookup_role(value) self._target = self.policy.lookup_role(value)
def __init__(self, policy, **kwargs):
super(RBACRuleQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching RBAC rules.""" """Generator which yields all matching RBAC rules."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -49,6 +49,10 @@ class RoleQuery(compquery.ComponentQuery):
types_equal = False types_equal = False
types_regex = False types_regex = False
def __init__(self, policy, **kwargs):
super(RoleQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching roles.""" """Generator which yields all matching roles."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -49,6 +49,10 @@ class SensitivityQuery(mixins.MatchAlias, compquery.ComponentQuery):
sens_dom = False sens_dom = False
sens_domby = False sens_domby = False
def __init__(self, policy, **kwargs):
super(SensitivityQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching sensitivities.""" """Generator which yields all matching sensitivities."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -93,6 +93,10 @@ class TERuleQuery(mixins.MatchObjClass, mixins.MatchPermission, query.PolicyQuer
boolean_regex = False boolean_regex = False
boolean_equal = False boolean_equal = False
def __init__(self, policy, **kwargs):
super(TERuleQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching TE rules.""" """Generator which yields all matching TE rules."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -49,6 +49,10 @@ class TypeAttributeQuery(compquery.ComponentQuery):
types_equal = False types_equal = False
types_regex = False types_regex = False
def __init__(self, policy, **kwargs):
super(TypeAttributeQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching types.""" """Generator which yields all matching types."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -67,6 +67,10 @@ class TypeQuery(mixins.MatchAlias, compquery.ComponentQuery):
else: else:
self._permissive = bool(value) self._permissive = bool(value)
def __init__(self, policy, **kwargs):
super(TypeQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching types.""" """Generator which yields all matching types."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -74,6 +74,10 @@ class UserQuery(compquery.ComponentQuery):
roles_equal = False roles_equal = False
roles_regex = False roles_regex = False
def __init__(self, policy, **kwargs):
super(UserQuery, self).__init__(policy, **kwargs)
self.log = logging.getLogger(__name__)
def results(self): def results(self):
"""Generator which yields all matching users.""" """Generator which yields all matching users."""
self.log.info("Generating results from {0.policy}".format(self)) self.log.info("Generating results from {0.policy}".format(self))

View File

@ -19,3 +19,6 @@
from .apol import ApolMainWindow from .apol import ApolMainWindow
from . import widget from . import widget
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())

View File

@ -32,7 +32,7 @@ class DetailsPopup(SEToolsWidget, QDialog):
def __init__(self, parent, title=None): def __init__(self, parent, title=None):
super(DetailsPopup, self).__init__(parent) super(DetailsPopup, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.setupUi(title) self.setupUi(title)
def setupUi(self, title): def setupUi(self, title):

View File

@ -34,7 +34,7 @@ class DomainTransitionAnalysisTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(DomainTransitionAnalysisTab, self).__init__(parent) super(DomainTransitionAnalysisTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = DomainTransitionAnalysis(policy) self.query = DomainTransitionAnalysis(policy)
self.setupUi() self.setupUi()

View File

@ -30,7 +30,7 @@ class ExcludeTypes(SEToolsWidget, QDialog):
def __init__(self, parent, policy): def __init__(self, parent, policy):
super(ExcludeTypes, self).__init__(parent) super(ExcludeTypes, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.parent = parent self.parent = parent
self.policy = policy self.policy = policy
self.excluded_list = [str(e) for e in self.parent.query.exclude] self.excluded_list = [str(e) for e in self.parent.query.exclude]

View File

@ -34,7 +34,7 @@ class InfoFlowAnalysisTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(InfoFlowAnalysisTab, self).__init__(parent) super(InfoFlowAnalysisTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = InfoFlowAnalysis(policy, perm_map) self.query = InfoFlowAnalysis(policy, perm_map)
self.setupUi() self.setupUi()

View File

@ -38,7 +38,7 @@ class ApolMainWindow(SEToolsWidget, QMainWindow):
def __init__(self, filename): def __init__(self, filename):
super(ApolMainWindow, self).__init__() super(ApolMainWindow, self).__init__()
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
if filename: if filename:
self._policy = SELinuxPolicy(filename) self._policy = SELinuxPolicy(filename)

View File

@ -35,7 +35,7 @@ class MLSRuleQueryTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(MLSRuleQueryTab, self).__init__(parent) super(MLSRuleQueryTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = MLSRuleQuery(policy) self.query = MLSRuleQuery(policy)
self.setupUi() self.setupUi()

View File

@ -35,7 +35,7 @@ class RBACRuleQueryTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(RBACRuleQueryTab, self).__init__(parent) super(RBACRuleQueryTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = RBACRuleQuery(policy) self.query = RBACRuleQuery(policy)
self.setupUi() self.setupUi()

View File

@ -35,7 +35,7 @@ class TERuleQueryTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(TERuleQueryTab, self).__init__(parent) super(TERuleQueryTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = TERuleQuery(policy) self.query = TERuleQuery(policy)
self.setupUi() self.setupUi()

View File

@ -35,7 +35,7 @@ class UserQueryTab(SEToolsWidget, QScrollArea):
def __init__(self, parent, policy, perm_map): def __init__(self, parent, policy, perm_map):
super(UserQueryTab, self).__init__(parent) super(UserQueryTab, self).__init__(parent)
self.log = logging.getLogger(self.__class__.__name__) self.log = logging.getLogger(__name__)
self.policy = policy self.policy = policy
self.query = UserQuery(policy) self.query = UserQuery(policy)
self.setupUi() self.setupUi()