0 #ˆl–ß=¿JÕ/”Še@·q§îµ1hß ƒ[wÁÀ¿m# Copyright 2014-2015, Tresys Technology, LLC # # SPDX-License-Identifier: LGPL-2.1-only # import logging import re from typing import Iterable from .descriptors import CriteriaSetDescriptor from .mixins import MatchName from .policyrep import TypeAttribute from .query import PolicyQuery from .util import match_regex_or_set class TypeAttributeQuery(MatchName, PolicyQuery): """ Query SELinux policy type attributes. Parameter: policy The policy to query. Keyword Parameters/Class attributes: name The type name to match. name_regex If true, regular expression matching will be used on the type names. types The type to match. types_equal If true, only attributes with type sets that are equal to the criteria will match. Otherwise, any intersection will match. types_regex If true, regular expression matching will be used on the type names instead of set logic. """ types = CriteriaSetDescriptor("types_regex", "lookup_type") types_equal: bool = False types_regex: bool = False def __init__(self, policy, **kwargs) -> None: super(TypeAttributeQuery, self).__init__(policy, **kwargs) self.log = logging.getLogger(__name__) def results(self) -> Iterable[TypeAttribute]: """Generator which yields all matching types.""" self.log.info("Generating type attribute results from {0.policy}".format(self)) self._match_name_debug(self.log) self.log.debug("Types: {0.types!r}, regex: {0.types_regex}, " "eq: {0.types_equal}".format(self)) for attr in self.policy.typeattributes(): if not self._match_name(attr): continue if self.types and not match_regex_or_set( set(attr.expand()), self.types, self.types_equal, self.types_regex): continue yield attr #ˆl–ß=¿JJj"Tâ€~ã/Üm•1hßà ƒh¹ÂÁÀonline #ˆl–Ðz¾”d*hŠm@·q—îå1hßÄ ƒy·ÃÂÁ!yimport sys from types import CodeType from . import TemplateSyntaxError from ._compat import PYPY from .utils import internal_code from .utils import missing def rewrite_traceback_stack(source=None): """Rewrite the current exception to replace any tracebacks from within compiled template code with tracebacks that look like they came from the template source. This must be called within an ``except`` block. :param exc_info: A :meth:`sys.exc_info` tuple. If not provided, the current ``exc_info`` is used. :param source: For ``TemplateSyntaxError``, the original source if known. :return: A :meth:`sys.exc_info` tuple that can be re-raised. """ exc_type, exc_value, tb = sys.exc_info() if isinstance(exc_value, TemplateSyntaxError) and not exc_value.translated: exc_value.translated = True exc_value.source = source try: # Remove the old traceback on Python 3, otherwise the frames # from the compiler still show up. exc_value.with_traceback(None) except AttributeError: pass # Outside of runtime, so the frame isn't executing template # code, but it still needs to point at the template. tb = fake_traceback( exc_value, None, exc_value.filename or "", exc_value.lineno ) else: # Skip the frame for the render function. tb = tb.tb_next stack = [] # Build the stack of traceback object, replacing any in template # code with the source file and line information. while tb is not None: # Skip frames decorated with @internalcode. These are internal # calls that aren't useful in template debugging output. if tb.t