diff options
Diffstat (limited to 'src/lib/Server/Plugins')
-rw-r--r-- | src/lib/Server/Plugins/FileProbes.py | 2 | ||||
-rw-r--r-- | src/lib/Server/Plugins/GroupPatterns.py | 25 | ||||
-rw-r--r-- | src/lib/Server/Plugins/Packages/__init__.py | 3 | ||||
-rw-r--r-- | src/lib/Server/Plugins/Properties.py | 2 | ||||
-rw-r--r-- | src/lib/Server/Plugins/Rules.py | 8 |
5 files changed, 27 insertions, 13 deletions
diff --git a/src/lib/Server/Plugins/FileProbes.py b/src/lib/Server/Plugins/FileProbes.py index 0c1a0d897..269664ef4 100644 --- a/src/lib/Server/Plugins/FileProbes.py +++ b/src/lib/Server/Plugins/FileProbes.py @@ -133,7 +133,7 @@ class FileProbes(Bcfg2.Server.Plugin.Plugin, create = True # get current entry data - if entry.get("encoding") == "base64": + if entry.text and entry.get("encoding") == "base64": entrydata = binascii.a2b_base64(entry.text) else: entrydata = entry.text diff --git a/src/lib/Server/Plugins/GroupPatterns.py b/src/lib/Server/Plugins/GroupPatterns.py index 76a628931..58b4d4afb 100644 --- a/src/lib/Server/Plugins/GroupPatterns.py +++ b/src/lib/Server/Plugins/GroupPatterns.py @@ -1,9 +1,8 @@ -import lxml.etree import re - +import logging +import lxml.etree import Bcfg2.Server.Plugin - class PackedDigitRange(object): def __init__(self, digit_range): self.sparse = list() @@ -25,7 +24,7 @@ class PackedDigitRange(object): class PatternMap(object): - range_finder = '\\[\\[[\d\-,]+\\]\\]' + range_finder = r'\[\[[\d\-,]+\]\]' def __init__(self, pattern, rangestr, groups): self.pattern = pattern @@ -35,15 +34,18 @@ class PatternMap(object): self.re = re.compile(pattern) self.process = self.process_re elif rangestr != None: + if '\\' in rangestr: + raise Exception("Backslashes are not allowed in NameRanges") self.process = self.process_range - self.re = re.compile('^' + re.subn(self.range_finder, '(\d+)', - rangestr)[0]) - dmatcher = re.compile(re.subn(self.range_finder, - '\\[\\[([\d\-,]+)\\]\\]', - rangestr)[0]) - self.dranges = [PackedDigitRange(x) for x in dmatcher.match(rangestr).groups()] + self.re = re.compile('^' + re.sub(self.range_finder, '(\d+)', + rangestr)) + dmatcher = re.compile(re.sub(self.range_finder, + r'\[\[([\d\-,]+)\]\]', + rangestr)) + self.dranges = [PackedDigitRange(x) + for x in dmatcher.match(rangestr).groups()] else: - raise Exception + raise Exception("No pattern or range given") def process_range(self, name): match = self.re.match(name) @@ -75,6 +77,7 @@ class PatternFile(Bcfg2.Server.Plugin.SingleXMLFileBacked): def __init__(self, filename, fam): Bcfg2.Server.Plugin.SingleXMLFileBacked.__init__(self, filename, fam) self.patterns = [] + self.logger = logging.getLogger(self.__class__.__name__) def Index(self): Bcfg2.Server.Plugin.SingleXMLFileBacked.Index(self) diff --git a/src/lib/Server/Plugins/Packages/__init__.py b/src/lib/Server/Plugins/Packages/__init__.py index b8babfac2..b12d633f3 100644 --- a/src/lib/Server/Plugins/Packages/__init__.py +++ b/src/lib/Server/Plugins/Packages/__init__.py @@ -214,7 +214,8 @@ class Packages(Bcfg2.Server.Plugin.Plugin, keys = [] for source in self.sources: for key in source.gpgkeys: - localfile = os.path.join(self.keypath, os.path.basename(key)) + localfile = os.path.join(self.keypath, + os.path.basename(key.rstrip("/"))) if localfile not in keyfiles: keyfiles.append(localfile) if ((force_update and key not in keys) or diff --git a/src/lib/Server/Plugins/Properties.py b/src/lib/Server/Plugins/Properties.py index 58f7215c9..9b44942cd 100644 --- a/src/lib/Server/Plugins/Properties.py +++ b/src/lib/Server/Plugins/Properties.py @@ -1,4 +1,5 @@ import os +import re import sys import copy import logging @@ -49,6 +50,7 @@ class PropertyFile(Bcfg2.Server.Plugin.StructFile): class PropDirectoryBacked(Bcfg2.Server.Plugin.DirectoryBacked): __child__ = PropertyFile + patterns = re.compile(r'.*\.xml$') class Properties(Bcfg2.Server.Plugin.Plugin, diff --git a/src/lib/Server/Plugins/Rules.py b/src/lib/Server/Plugins/Rules.py index fde0f3d59..c66276179 100644 --- a/src/lib/Server/Plugins/Rules.py +++ b/src/lib/Server/Plugins/Rules.py @@ -36,6 +36,14 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): def _matches(self, entry, metadata, rules): if Bcfg2.Server.Plugin.PrioDir._matches(self, entry, metadata, rules): return True + elif (entry.tag == "Path" and + ((entry.get('name').endswith("/") and + entry.get('name').rstrip("/") in rules) or + (not entry.get('name').endswith("/") and + entry.get('name') + '/' in rules))): + # special case for Path tags: + # http://trac.mcs.anl.gov/projects/bcfg2/ticket/967 + return True elif self._regex_enabled: # attempt regular expression matching for rule in rules: |