summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2009-09-13 23:00:41 +0200
committerJames Turnbull <james@lovedthanlost.net>2009-09-16 07:17:24 +1000
commitd21b2664abcb13df2967af8caa881e41b19b3b81 (patch)
treec25231e0151c1fc78151ce0faaf5a06515f0d08b
parentcb90528c041b63c1c483ac8650d1d9c67a12d791 (diff)
Fix #2627 - regex node name could lead to invalid tag
We're converting the regex to a straight name to be used as the node class name which later on will be used as tag. It was possible to generate an invalid tag name (containing leading or successive dots). Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
-rw-r--r--lib/puppet/parser/ast/leaf.rb4
-rwxr-xr-xspec/unit/parser/ast/leaf.rb5
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb
index d10ea62f4..2f00ea78d 100644
--- a/lib/puppet/parser/ast/leaf.rb
+++ b/lib/puppet/parser/ast/leaf.rb
@@ -102,9 +102,7 @@ class Puppet::Parser::AST
end
def to_classname
- classname = @value.to_s.downcase
- classname.gsub!(/[^-a-zA-Z0-9:.]/,'') if regex?
- classname
+ to_s.downcase.gsub(/[^-a-zA-Z0-9:.]/,'').sub(/^\.+/,'')
end
# implementing eql? and hash so that when an HostName is stored
diff --git a/spec/unit/parser/ast/leaf.rb b/spec/unit/parser/ast/leaf.rb
index 6215f6345..69b704ad8 100755
--- a/spec/unit/parser/ast/leaf.rb
+++ b/spec/unit/parser/ast/leaf.rb
@@ -200,6 +200,11 @@ describe Puppet::Parser::AST::HostName do
host.to_classname.should == "this-isnotaclassname"
end
+ it "should return a string usable as a tag when calling to_classname" do
+ host = Puppet::Parser::AST::HostName.new( :value => Puppet::Parser::AST::Regex.new(:value => "/.+.reductivelabs\.com/") )
+ host.to_classname.should == "reductivelabs.com"
+ end
+
it "should delegate 'match' to the underlying value if it is an HostName" do
@value.expects(:match).with("value")
@host.match("value")