diff options
author | Brice Figureau <brice-puppet@daysofwonder.com> | 2010-03-03 20:35:46 +0100 |
---|---|---|
committer | test branch <puppet-dev@googlegroups.com> | 2010-02-17 06:50:53 -0800 |
commit | b581c2348e784ce5d857a4c1c0686399b87cc13f (patch) | |
tree | d85c3e9d79d99c3ad9a2a679fa4d8666e74a2158 /lib/puppet | |
parent | 490a03d55e57a5a54202207b44eb406dda4c8c65 (diff) | |
download | puppet-b581c2348e784ce5d857a4c1c0686399b87cc13f.tar.gz puppet-b581c2348e784ce5d857a4c1c0686399b87cc13f.tar.xz puppet-b581c2348e784ce5d857a4c1c0686399b87cc13f.zip |
Fix #3229 - use original value in case/selector regex matching
The issue is that case/selectors are downcasing the value before it
is compared to the options.
Unfortunately regex are matching in a case sensitive way, which would
make the following manifest fail:
$var = "CaseSensitive"
case $var {
/CaseSensitive/: {
notice("worked")
}
default: {
fail "miserably"
}
}
This patch fixes the issue by making sure the regexp match is done
one the original (not downcased) value, but still doing a case
sensitive match.
Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/parser/ast/casestatement.rb | 4 | ||||
-rw-r--r-- | lib/puppet/parser/ast/leaf.rb | 8 | ||||
-rw-r--r-- | lib/puppet/parser/ast/selector.rb | 2 |
3 files changed, 5 insertions, 9 deletions
diff --git a/lib/puppet/parser/ast/casestatement.rb b/lib/puppet/parser/ast/casestatement.rb index 25b0fc691..64298cac3 100644 --- a/lib/puppet/parser/ast/casestatement.rb +++ b/lib/puppet/parser/ast/casestatement.rb @@ -12,8 +12,6 @@ class Puppet::Parser::AST # the first option that matches. def evaluate(scope) value = @test.safeevaluate(scope) - sensitive = Puppet[:casesensitive] - value = value.downcase if ! sensitive and value.respond_to?(:downcase) retvalue = nil found = false @@ -22,7 +20,7 @@ class Puppet::Parser::AST default = nil @options.each do |option| option.eachopt do |opt| - return option.safeevaluate(scope) if opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => sensitive) + return option.safeevaluate(scope) if opt.evaluate_match(value, scope, :file => file, :line => line, :sensitive => Puppet[:casesensitive]) end default = option if option.default? diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb index 0f427ef37..4ad1f9ff3 100644 --- a/lib/puppet/parser/ast/leaf.rb +++ b/lib/puppet/parser/ast/leaf.rb @@ -13,12 +13,12 @@ class Puppet::Parser::AST # evaluate ourselves, and match def evaluate_match(value, scope, options = {}) obj = self.safeevaluate(scope) - if ! options[:sensitive] && obj.respond_to?(:downcase) - obj = obj.downcase + if options[:sensitive] + obj = obj.downcase if obj.respond_to?(:downcase) + value = value.downcase if value.respond_to?(:downcase) end # "" == undef for case/selector/if - return true if obj == "" and value == :undef - obj == value + obj == value or (obj == "" and value == :undef) end def match(value) diff --git a/lib/puppet/parser/ast/selector.rb b/lib/puppet/parser/ast/selector.rb index 84bc2a74a..ce834b63b 100644 --- a/lib/puppet/parser/ast/selector.rb +++ b/lib/puppet/parser/ast/selector.rb @@ -17,8 +17,6 @@ class Puppet::Parser::AST sensitive = Puppet[:casesensitive] - paramvalue = paramvalue.downcase if not sensitive and paramvalue.respond_to?(:downcase) - default = nil unless @values.instance_of? AST::ASTArray or @values.instance_of? Array |