Refactor MLS-related objects.

Drop the "MLS" prepended to category, sensitivity, level, and range
objects.
This commit is contained in:
Chris PeBenito 2015-03-07 09:39:01 -05:00
parent 0b295755de
commit e55764700c
8 changed files with 45 additions and 44 deletions

14
seinfo
View File

@ -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)

View File

@ -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

View File

@ -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,

View File

@ -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():

View File

@ -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"""

View File

@ -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

View File

@ -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)