summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Bcfg2/Client/Tools/SELinux.py12
-rw-r--r--src/lib/Bcfg2/Server/Plugins/SEModules.py21
-rw-r--r--testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py50
3 files changed, 49 insertions, 34 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/SELinux.py b/src/lib/Bcfg2/Client/Tools/SELinux.py
index f060a1374..babdaf6bf 100644
--- a/src/lib/Bcfg2/Client/Tools/SELinux.py
+++ b/src/lib/Bcfg2/Client/Tools/SELinux.py
@@ -703,14 +703,8 @@ class SELinuxModuleHandler(SELinuxEntryHandler):
return rv
def _filepath(self, entry):
- path = os.path.join("/usr/share/selinux", self.setype,
- entry.get("name").lstrip("/"))
- if not path.endswith(".pp"):
- # the entry name we get from the SEModules plugin should
- # always have .pp on the end, but we double check just to
- # make absolutely certain
- path = path + ".pp"
- return path
+ return os.path.join("/usr/share/selinux", self.setype,
+ entry.get("name") + '.pp')
def _pathentry(self, entry):
pathentry = copy.deepcopy(entry)
@@ -737,7 +731,7 @@ class SELinuxModuleHandler(SELinuxEntryHandler):
try:
# if seobject has the moduleRecords attribute, install the
# module using the seobject library
- self.records
+ self.records # pylint: disable=W0104
return self._install_seobject(entry)
except AttributeError:
# seobject doesn't have the moduleRecords attribute, so
diff --git a/src/lib/Bcfg2/Server/Plugins/SEModules.py b/src/lib/Bcfg2/Server/Plugins/SEModules.py
index 324c2309f..ce75be044 100644
--- a/src/lib/Bcfg2/Server/Plugins/SEModules.py
+++ b/src/lib/Bcfg2/Server/Plugins/SEModules.py
@@ -20,7 +20,7 @@ class SEModules(Bcfg2.Server.Plugin.GroupSpool):
entry_type = 'SELinux'
experimental = True
- def _get_module_name(self, entry):
+ def _get_module_filename(self, entry):
""" GroupSpool stores entries as /foo.pp, but we want people
to be able to specify module entries as name='foo' or
name='foo.pp', so we put this abstraction in between """
@@ -28,17 +28,32 @@ class SEModules(Bcfg2.Server.Plugin.GroupSpool):
name = entry.get("name")
else:
name = entry.get("name") + ".pp"
+ return "/" + name
+
+ def _get_module_name(self, entry):
+ """ On the client we do most of our logic on just the module
+ name, but we want people to be able to specify module entries
+ as name='foo' or name='foo.pp', so we put this abstraction in
+ between"""
+ if entry.get("name").endswith(".pp"):
+ name = entry.get("name")[:-3]
+ else:
+ name = entry.get("name")
return name.lstrip("/")
def HandlesEntry(self, entry, metadata):
+ print "entry.tag = %s, self.Entries = %s" % (entry.tag, self.Entries.keys())
+ print "entry type = %s" % entry.get('type')
if entry.tag in self.Entries and entry.get('type') == 'module':
- return "/" + self._get_module_name(entry) in self.Entries[entry.tag]
+ print " filename = %s, self.Entries[%s] = %s" % (self._get_module_filename(entry), entry.tag, self.Entries[entry.tag].keys())
+ return self._get_module_filename(entry) in self.Entries[entry.tag]
return Bcfg2.Server.Plugin.GroupSpool.HandlesEntry(self, entry,
metadata)
def HandleEntry(self, entry, metadata):
entry.set("name", self._get_module_name(entry))
- return self.Entries[entry.tag]["/" + entry.get("name")](entry, metadata)
+ bind = self.Entries[entry.tag][self._get_module_filename(entry)]
+ return bind(entry, metadata)
def add_entry(self, event):
self.filename_pattern = \
diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py
index bf9ef681a..b13a6b3fb 100644
--- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py
+++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py
@@ -1,7 +1,6 @@
import os
import sys
import lxml.etree
-import Bcfg2.Server.Plugin
from Bcfg2.Compat import b64encode
from mock import Mock, MagicMock, patch
from Bcfg2.Server.Plugins.SEModules import *
@@ -41,11 +40,17 @@ class TestSEModules(TestGroupSpool):
modules = self.get_obj()
for mname in ["foo", "foo.pp"]:
entry = lxml.etree.Element("SELinux", type="module", name=mname)
- self.assertEqual(modules._get_module_name(entry), "foo.pp")
+ self.assertEqual(modules._get_module_name(entry), "foo")
- @patch("Bcfg2.Server.Plugins.SEModules.SEModules._get_module_name")
- def test_HandlesEntry(self, mock_get_name):
+ def test__get_module_filename(self):
modules = self.get_obj()
+ for mname in ["foo", "foo.pp"]:
+ entry = lxml.etree.Element("SELinux", type="module", name=mname)
+ self.assertEqual(modules._get_module_filename(entry), "/foo.pp")
+
+ def test_HandlesEntry(self):
+ modules = self.get_obj()
+ modules._get_module_filename = Mock()
modules.Entries['SELinux']['/foo.pp'] = Mock()
modules.Entries['SELinux']['/bar.pp'] = Mock()
for el in [lxml.etree.Element("Path", name="foo.pp"),
@@ -53,58 +58,59 @@ class TestSEModules(TestGroupSpool):
name="foo.pp"),
lxml.etree.Element("SELinux", type="module",
name="baz.pp")]:
- mock_get_name.return_value = el.get("name")
+ modules._get_module_filename.return_value = "/" + el.get("name")
self.assertFalse(modules.HandlesEntry(el, Mock()))
if el.get("type") == "module":
- mock_get_name.assert_called_with(el)
+ modules._get_module_filename.assert_called_with(el)
for el in [lxml.etree.Element("SELinux", type="module",
name="foo.pp"),
lxml.etree.Element("SELinux", type="module",
name="bar.pp")]:
- mock_get_name.return_value = el.get("name")
+ modules._get_module_filename.return_value = "/" + el.get("name")
self.assertTrue(modules.HandlesEntry(el, Mock()),
msg="SEModules fails to handle %s" % el.get("name"))
- mock_get_name.assert_called_with(el)
+ modules._get_module_filename.assert_called_with(el)
TestGroupSpool.test_HandlesEntry(self)
- @patch("Bcfg2.Server.Plugins.SEModules.SEModules._get_module_name")
- def test_HandleEntry(self, mock_get_name):
+ def test_HandleEntry(self):
modules = self.get_obj()
+ modules._get_module_name = Mock()
handler = Mock()
modules.Entries['SELinux']['/foo.pp'] = handler
- mock_get_name.return_value = "foo.pp"
-
+ modules._get_module_name.return_value = "foo"
+
entry = lxml.etree.Element("SELinux", type="module", name="foo")
metadata = Mock()
self.assertEqual(modules.HandleEntry(entry, metadata),
handler.return_value)
- mock_get_name.assert_called_with(entry)
- self.assertEqual(entry.get("name"), mock_get_name.return_value)
+ modules._get_module_name.assert_called_with(entry)
+ self.assertEqual(entry.get("name"),
+ modules._get_module_name.return_value)
handler.assert_called_with(entry, metadata)
TestGroupSpool.test_HandlesEntry(self)
def test_add_entry(self):
- @patch("%s.%s.event_path" %
- (self.test_obj.__module__, self.test_obj.__name__))
@patch("%s.%s.add_entry" % (self.test_obj.__base__.__module__,
self.test_obj.__base__.__name__))
- def inner(mock_add_entry, mock_event_path):
+ def inner(mock_add_entry):
modules = self.get_obj()
+ modules.event_path = Mock()
evt = Mock()
evt.filename = "test.pp.G10_foo"
- mock_event_path.return_value = os.path.join(datastore,
- self.test_obj.__name__,
- "test.pp",
- "test.pp.G10_foo")
+ modules.event_path.return_value = \
+ os.path.join(datastore,
+ self.test_obj.__name__,
+ "test.pp",
+ "test.pp.G10_foo")
modules.add_entry(evt)
self.assertEqual(modules.filename_pattern, "test.pp")
mock_add_entry.assert_called_with(modules, evt)
- mock_event_path.assert_called_with(evt)
+ modules.event_path.assert_called_with(evt)
inner()
TestGroupSpool.test_add_entry(self)