From 6e12111b00f892ecf194e843bcabc55d1dba78ac Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 31 Aug 2011 15:25:59 -0400 Subject: anchor rules regexes at both ends to avoid bogus matches --- doc/server/plugins/generators/rules.txt | 4 ++++ src/lib/Server/Plugins/Rules.py | 10 +++------- 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:: +Regular expressions are anchored at both ends, so ```` will *not* match a Service named ``bcfg2-server``; +you'd have to explicitly specify ````. + 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 -- cgit v1.2.3-1-g7c22