summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/TemplateHelper.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/TemplateHelper.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
index e3f8ed749..ad3eb65bc 100644
--- a/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
+++ b/src/lib/Bcfg2/Server/Plugins/TemplateHelper.py
@@ -12,12 +12,25 @@ LOGGER = logging.getLogger(__name__)
MODULE_RE = re.compile(r'(?P<filename>(?P<module>[^\/]+)\.py)$')
+def safe_module_name(module):
+ """ Munge the name of a TemplateHelper module to avoid collisions
+ with other Python modules. E.g., if someone has a helper named
+ 'ldap.py', it should not be added to ``sys.modules`` as ``ldap``,
+ but rather as something more obscure. """
+ return '__TemplateHelper_%s' % module
+
+
class HelperModule(object):
""" Representation of a TemplateHelper module """
def __init__(self, name):
self.name = name
+
+ #: The name of the module as used by get_additional_data().
+ #: the name of the file with .py stripped off.
self._module_name = MODULE_RE.search(self.name).group('module')
+
+ #: The attributes exported by this module
self._attrs = []
def HandleEvent(self, event=None):
@@ -31,7 +44,8 @@ class HelperModule(object):
return
try:
- module = imp.load_source(self._module_name, self.name)
+ module = imp.load_source(safe_module_name(self._module_name),
+ self.name)
except: # pylint: disable=W0702
err = sys.exc_info()[1]
LOGGER.error("TemplateHelper: Failed to import %s: %s" %
@@ -97,7 +111,7 @@ class TemplateHelperLint(Bcfg2.Server.Lint.ServerPlugin):
module_name = MODULE_RE.search(helper).group(1)
try:
- module = imp.load_source(module_name, helper)
+ module = imp.load_source(safe_module_name(module_name), helper)
except: # pylint: disable=W0702
err = sys.exc_info()[1]
self.LintError("templatehelper-import-error",