mirror of
https://github.com/SELinuxProject/setools
synced 2025-03-25 04:26:28 +00:00
Refactor MLS-related objects.
Drop the "MLS" prepended to category, sensitivity, level, and range objects.
This commit is contained in:
parent
0b295755de
commit
e55764700c
14
seinfo
14
seinfo
@ -82,6 +82,13 @@ try:
|
||||
q = setools.boolquery.BoolQuery(p)
|
||||
components.append(("Booleans", q))
|
||||
|
||||
if args.mlscatsquery or args.all:
|
||||
if isinstance(args.mlscatsquery, str):
|
||||
q = setools.categoryquery.CategoryQuery(p, name=args.mlscatsquery)
|
||||
else:
|
||||
q = setools.categoryquery.CategoryQuery(p)
|
||||
components.append(("Categories", q))
|
||||
|
||||
if args.classquery or args.all:
|
||||
if isinstance(args.classquery, str):
|
||||
q = setools.objclassquery.ObjClassQuery(p, name=args.classquery)
|
||||
@ -110,13 +117,6 @@ try:
|
||||
q = setools.initsidquery.InitialSIDQuery(p)
|
||||
components.append(("Initial SIDs", q))
|
||||
|
||||
if args.mlscatsquery or args.all:
|
||||
if isinstance(args.mlscatsquery, str):
|
||||
q = setools.mlscategoryquery.MLSCategoryQuery(p, name=args.mlscatsquery)
|
||||
else:
|
||||
q = setools.mlscategoryquery.MLSCategoryQuery(p)
|
||||
components.append(("Categories", q))
|
||||
|
||||
if args.netifconquery or args.all:
|
||||
if isinstance(args.netifconquery, str):
|
||||
q = setools.netifconquery.NetifconQuery(p, name=args.netifconquery)
|
||||
|
@ -28,8 +28,8 @@ from . import policyrep
|
||||
from .policyrep import SELinuxPolicy, InvalidPolicy
|
||||
|
||||
# Component Queries
|
||||
from . import categoryquery
|
||||
from . import commonquery
|
||||
from . import mlscategoryquery
|
||||
from . import objclassquery
|
||||
from . import typequery
|
||||
from . import rolequery
|
||||
|
@ -21,7 +21,7 @@ import re
|
||||
from . import compquery
|
||||
|
||||
|
||||
class MLSCategoryQuery(compquery.ComponentQuery):
|
||||
class CategoryQuery(compquery.ComponentQuery):
|
||||
|
||||
"""Query MLS Categories"""
|
||||
|
||||
@ -45,7 +45,7 @@ class MLSCategoryQuery(compquery.ComponentQuery):
|
||||
def results(self):
|
||||
"""Generator which yields all matching categories."""
|
||||
|
||||
for cat in self.policy.mlscategories():
|
||||
for cat in self.policy.categories():
|
||||
if self.name and not self._match_regex(
|
||||
cat,
|
||||
self.name_cmp,
|
@ -323,6 +323,16 @@ class SELinuxPolicy(object):
|
||||
# libqpol unfortunately iterates over attributes and aliases
|
||||
pass
|
||||
|
||||
def categories(self):
|
||||
"""Generator which yields all MLS categories."""
|
||||
|
||||
for cat in self.policy.cat_iter():
|
||||
try:
|
||||
yield mls.category_factory(self.policy, cat)
|
||||
except TypeError:
|
||||
# libqpol unfortunately iterates over aliases too
|
||||
pass
|
||||
|
||||
def classes(self):
|
||||
"""Generator which yields all object classes."""
|
||||
|
||||
@ -347,17 +357,7 @@ class SELinuxPolicy(object):
|
||||
# where a class has no default_* settings.
|
||||
pass
|
||||
|
||||
def mlscategories(self):
|
||||
"""Generator which yields all MLS categories."""
|
||||
|
||||
for cat in self.policy.cat_iter():
|
||||
try:
|
||||
yield mls.category_factory(self.policy, cat)
|
||||
except TypeError:
|
||||
# libqpol unfortunately iterates over aliases too
|
||||
pass
|
||||
|
||||
def mlslevels(self):
|
||||
def levels(self):
|
||||
"""Generator which yields all level declarations."""
|
||||
|
||||
for level in self.policy.level_iter():
|
||||
|
@ -80,16 +80,16 @@ def category_factory(policy, symbol):
|
||||
if symbol.isalias(policy):
|
||||
raise TypeError("{0} is an alias".format(symbol.name(policy)))
|
||||
|
||||
return MLSCategory(policy, symbol)
|
||||
return Category(policy, symbol)
|
||||
|
||||
|
||||
def sensitivity_factory(policy, symbol):
|
||||
"""Factory function for creating MLS sensitivity objects."""
|
||||
if isinstance(symbol, qpol.qpol_level_t):
|
||||
return MLSSensitivity(policy, symbol)
|
||||
return Sensitivity(policy, symbol)
|
||||
|
||||
try:
|
||||
return MLSSensitivity(policy, qpol.qpol_level_t(policy, symbol))
|
||||
return Sensitivity(policy, qpol.qpol_level_t(policy, symbol))
|
||||
except ValueError:
|
||||
raise InvalidSensitivity("{0} is not a valid sensitivity".format(symbol))
|
||||
|
||||
@ -100,7 +100,7 @@ def level_factory(policy, symbol):
|
||||
in contexts of labeling statements)
|
||||
"""
|
||||
if isinstance(symbol, qpol.qpol_mls_level_t):
|
||||
return MLSLevel(policy, symbol)
|
||||
return Level(policy, symbol)
|
||||
|
||||
sens_split = symbol.split(":")
|
||||
|
||||
@ -141,7 +141,7 @@ def level_factory(policy, symbol):
|
||||
"{0} is invalid (one or more categories are not associated with the sensitivity)".
|
||||
format(symbol))
|
||||
|
||||
return MLSLevel(policy, policy_level)
|
||||
return Level(policy, policy_level)
|
||||
|
||||
|
||||
def level_decl_factory(policy, symbol):
|
||||
@ -151,10 +151,10 @@ def level_decl_factory(policy, symbol):
|
||||
"""
|
||||
|
||||
if isinstance(symbol, qpol.qpol_level_t):
|
||||
return MLSLevelDecl(policy, symbol)
|
||||
return LevelDecl(policy, symbol)
|
||||
|
||||
try:
|
||||
return MLSLevelDecl(policy, qpol.qpol_level_t(policy, symbol))
|
||||
return LevelDecl(policy, qpol.qpol_level_t(policy, symbol))
|
||||
except ValueError:
|
||||
raise InvalidLevel("{0} is not a valid sensitivity".format(symbol))
|
||||
|
||||
@ -162,7 +162,7 @@ def level_decl_factory(policy, symbol):
|
||||
def range_factory(policy, symbol):
|
||||
"""Factory function for creating MLS range objects."""
|
||||
if isinstance(symbol, qpol.qpol_mls_range_t):
|
||||
return MLSRange(policy, symbol)
|
||||
return Range(policy, symbol)
|
||||
|
||||
# build range:
|
||||
levels = symbol.split("-")
|
||||
@ -188,10 +188,10 @@ def range_factory(policy, symbol):
|
||||
raise InvalidRange("{0} is not a valid range ({1} is not dominated by {2})".
|
||||
format(symbol, low, high))
|
||||
|
||||
return MLSRange(policy, policy_range)
|
||||
return Range(policy, policy_range)
|
||||
|
||||
|
||||
class MLSCategory(symbol.PolicySymbol):
|
||||
class Category(symbol.PolicySymbol):
|
||||
|
||||
"""An MLS category."""
|
||||
|
||||
@ -226,7 +226,7 @@ class MLSCategory(symbol.PolicySymbol):
|
||||
return stmt
|
||||
|
||||
|
||||
class MLSSensitivity(symbol.PolicySymbol):
|
||||
class Sensitivity(symbol.PolicySymbol):
|
||||
|
||||
"""An MLS sensitivity"""
|
||||
|
||||
@ -339,7 +339,7 @@ class BaseMLSLevel(symbol.PolicySymbol):
|
||||
yield category_factory(self.policy, cat)
|
||||
|
||||
|
||||
class MLSLevelDecl(BaseMLSLevel):
|
||||
class LevelDecl(BaseMLSLevel):
|
||||
|
||||
"""
|
||||
The declaration statement for MLS levels, e.g:
|
||||
@ -358,7 +358,7 @@ class MLSLevelDecl(BaseMLSLevel):
|
||||
return "level {0};".format(self)
|
||||
|
||||
|
||||
class MLSLevel(BaseMLSLevel):
|
||||
class Level(BaseMLSLevel):
|
||||
|
||||
"""An MLS level used in contexts."""
|
||||
|
||||
@ -371,7 +371,7 @@ class MLSLevel(BaseMLSLevel):
|
||||
return sensitivity_factory(self.policy, self.qpol_symbol.sens_name(self.policy))
|
||||
|
||||
|
||||
class MLSRange(symbol.PolicySymbol):
|
||||
class Range(symbol.PolicySymbol):
|
||||
|
||||
"""An MLS range"""
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
# along with SETools. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
from . import boolquery
|
||||
from . import categoryquery
|
||||
from . import commonquery
|
||||
from . import dta
|
||||
from . import fsusequery
|
||||
|
@ -18,48 +18,48 @@
|
||||
import unittest
|
||||
|
||||
from setools import SELinuxPolicy
|
||||
from setools.mlscategoryquery import MLSCategoryQuery
|
||||
from setools.categoryquery import CategoryQuery
|
||||
|
||||
|
||||
class MLSCategoryQueryTest(unittest.TestCase):
|
||||
class CategoryQueryTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.p = SELinuxPolicy("tests/mlscategoryquery.conf")
|
||||
self.p = SELinuxPolicy("tests/categoryquery.conf")
|
||||
|
||||
def test_000_unset(self):
|
||||
"""MLS category query with no criteria."""
|
||||
# query with no parameters gets all categories.
|
||||
allcats = sorted(str(c) for c in self.p.mlscategories())
|
||||
allcats = sorted(str(c) for c in self.p.categories())
|
||||
|
||||
q = MLSCategoryQuery(self.p)
|
||||
q = CategoryQuery(self.p)
|
||||
qcats = sorted(str(c) for c in q.results())
|
||||
|
||||
self.assertListEqual(allcats, qcats)
|
||||
|
||||
def test_001_name_exact(self):
|
||||
"""MLS category query with exact name match."""
|
||||
q = MLSCategoryQuery(self.p, name="test1")
|
||||
q = CategoryQuery(self.p, name="test1")
|
||||
|
||||
cats = sorted(str(c) for c in q.results())
|
||||
self.assertListEqual(["test1"], cats)
|
||||
|
||||
def test_002_name_regex(self):
|
||||
"""MLS category query with regex name match."""
|
||||
q = MLSCategoryQuery(self.p, name="test2(a|b)", name_regex=True)
|
||||
q = CategoryQuery(self.p, name="test2(a|b)", name_regex=True)
|
||||
|
||||
cats = sorted(str(c) for c in q.results())
|
||||
self.assertListEqual(["test2a", "test2b"], cats)
|
||||
|
||||
def test_010_alias_exact(self):
|
||||
"""MLS category query with exact alias match."""
|
||||
q = MLSCategoryQuery(self.p, alias="test10a")
|
||||
q = CategoryQuery(self.p, alias="test10a")
|
||||
|
||||
cats = sorted(str(t) for t in q.results())
|
||||
self.assertListEqual(["test10c1"], cats)
|
||||
|
||||
def test_011_alias_regex(self):
|
||||
"""MLS category query with regex alias match."""
|
||||
q = MLSCategoryQuery(self.p, alias="test11(a|b)", alias_regex=True)
|
||||
q = CategoryQuery(self.p, alias="test11(a|b)", alias_regex=True)
|
||||
|
||||
cats = sorted(str(t) for t in q.results())
|
||||
self.assertListEqual(["test11c1", "test11c2"], cats)
|
Loading…
Reference in New Issue
Block a user