summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2011-08-31 15:25:59 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2011-08-31 15:25:59 -0400
commit6e12111b00f892ecf194e843bcabc55d1dba78ac (patch)
treee40aa1b2eb02b04f1d497ea99383738d1159050c
parent4871b198baf18e4f7a1dcb87410bc6e9d5584ecf (diff)
downloadbcfg2-6e12111b00f892ecf194e843bcabc55d1dba78ac.tar.gz
bcfg2-6e12111b00f892ecf194e843bcabc55d1dba78ac.tar.bz2
bcfg2-6e12111b00f892ecf194e843bcabc55d1dba78ac.zip
anchor rules regexes at both ends to avoid bogus matches
-rw-r--r--doc/server/plugins/generators/rules.txt4
-rw-r--r--src/lib/Server/Plugins/Rules.py10
2 files changed, 7 insertions, 7 deletions
diff --git a/doc/server/plugins/generators/rules.txt b/doc/server/plugins/generators/rules.txt
index 70d894958..6bc407371 100644
--- a/doc/server/plugins/generators/rules.txt
+++ b/doc/server/plugins/generators/rules.txt
@@ -369,6 +369,10 @@ do::
</Group>
</Rules>
+Regular expressions are anchored at both ends, so ``<Service
+name="bcfg2".../>`` will *not* match a Service named ``bcfg2-server``;
+you'd have to explicitly specify ``<Service name="bcfg2.*".../>``.
+
Note that only one Rule can apply to any abstract entry, so you cannot
specify multiple regexs to match the same rule. In the use case
above, you would have to specify the services fully (except for type)
diff --git a/src/lib/Server/Plugins/Rules.py b/src/lib/Server/Plugins/Rules.py
index e8412c6f1..a146dca6a 100644
--- a/src/lib/Server/Plugins/Rules.py
+++ b/src/lib/Server/Plugins/Rules.py
@@ -12,12 +12,8 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
def HandlesEntry(self, entry, metadata):
if entry.tag in self.Entries:
- if entry.get("name") in self.Entries[entry.tag]:
- return True
- else:
- for rule in self.Entries[entry.tag].keys():
- if re.search(rule, entry.get('name')):
- return True
+ return self._matches(entry, metadata,
+ self.Entries[entry.tag].keys())
return False
def HandleEntry(self, entry, metadata):
@@ -35,7 +31,7 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
else:
# attempt regular expression matching
for rule in rules:
- if re.search(rule, entry.get('name')):
+ if re.match("%s$" % rule, entry.get('name')):
return True
return False