# Copyright 2014-2015, Tresys Technology, LLC # # This file is part of SETools. # # SETools is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 2.1 of # the License, or (at your option) any later version. # # SETools is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with SETools. If not, see # <http://www.gnu.org/licenses/>. # from . import exception from . import qpol from . import symbol from . import user from . import role from . import typeattr from . import mls def context_factory(policy, name): """Factory function for creating context objects.""" if not isinstance(name, qpol.qpol_context_t): raise TypeError("Contexts cannot be looked-up.") return Context(policy, name) class Context(symbol.PolicySymbol): """A SELinux security context/security attribute.""" def __str__(self): try: return "{0.user}:{0.role}:{0.type_}:{0.range_}".format(self) except exception.MLSDisabled: return "{0.user}:{0.role}:{0.type_}".format(self) @property def user(self): """The user portion of the context.""" return user.user_factory(self.policy, self.qpol_symbol.user(self.policy)) @property def role(self): """The role portion of the context.""" return role.role_factory(self.policy, self.qpol_symbol.role(self.policy)) @property def type_(self): """The type portion of the context.""" return typeattr.type_factory(self.policy, self.qpol_symbol.type_(self.policy)) @property def range_(self): """The MLS range of the context.""" return mls.range_factory(self.policy, self.qpol_symbol.range(self.policy)) def statement(self): raise exception.NoStatement