diff options
| author | Markus Roberts <Markus@reality.com> | 2009-08-14 19:41:54 -0700 |
|---|---|---|
| committer | James Turnbull <james@lovedthanlost.net> | 2009-08-18 07:36:56 +1000 |
| commit | a35e9bf918db0f6fca45d8b0b002a372cff4f982 (patch) | |
| tree | 0bea447ae749c985c7e20d2c00a24fc7a7c0b000 | |
| parent | 299eadb7d903d250c8340049bd78611f0c705920 (diff) | |
| download | puppet-a35e9bf918db0f6fca45d8b0b002a372cff4f982.tar.gz puppet-a35e9bf918db0f6fca45d8b0b002a372cff4f982.tar.xz puppet-a35e9bf918db0f6fca45d8b0b002a372cff4f982.zip | |
Fix for #2531; adds tests to confirm problem and related cases,
notes fixes specific issue by eliminating the specal case for
opaque strings which caused them to be strings when everything else
was arrays; adds nots and pending tests where FQDN support could be
added but stops short of a full refactor.
| -rwxr-xr-x | lib/puppet/network/authstore.rb | 4 | ||||
| -rw-r--r-- | spec/unit/network/authstore.rb | 94 |
2 files changed, 97 insertions, 1 deletions
diff --git a/lib/puppet/network/authstore.rb b/lib/puppet/network/authstore.rb index 306e1ba8a..4707f36a5 100755 --- a/lib/puppet/network/authstore.rb +++ b/lib/puppet/network/authstore.rb @@ -249,7 +249,7 @@ module Puppet # Does the name match our pattern? def matchname?(name) - name = munge_name(name) unless @name == :opaque + name = munge_name(name) return true if self.pattern == name # If it's an exact match, then just return false, since the @@ -272,6 +272,7 @@ module Puppet # Convert the name to a common pattern. def munge_name(name) # LAK:NOTE http://snurl.com/21zf8 [groups_google_com] + # Change to x = name.downcase.split(".",-1).reverse for FQDN support x = name.downcase.split(".").reverse end @@ -306,6 +307,7 @@ module Puppet raise AuthStoreError, "Invalid IP address pattern %s" % value end when /^([a-zA-Z][-\w]*\.)+[-\w]+$/ # a full hostname + # Change to /^([a-zA-Z][-\w]*\.)+[-\w]+\.?$/ for FQDN support @name = :domain @pattern = munge_name(value) when /^\*(\.([a-zA-Z][-\w]*)){1,}$/ # *.domain.com diff --git a/spec/unit/network/authstore.rb b/spec/unit/network/authstore.rb new file mode 100644 index 000000000..224d67130 --- /dev/null +++ b/spec/unit/network/authstore.rb @@ -0,0 +1,94 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../spec_helper' + +require 'puppet/network/authconfig' + +describe Puppet::Network::AuthStore::Declaration do + + describe "when the pattern is simple numeric IP" do + before :each do + @ip = '100.101.99.98' + @declaration = Puppet::Network::AuthStore::Declaration.new(:allow,@ip) + end + it "should match the specified IP" do + @declaration.should be_match('www.testsite.org',@ip) + end + it "should not match other IPs" do + @declaration.should_not be_match('www.testsite.org','200.101.99.98') + end + end + + describe "when the pattern is a numeric IP with a back reference" do + before :each do + @ip = '100.101.$1' + @declaration = Puppet::Network::AuthStore::Declaration.new(:allow,@ip).interpolate('12.34'.match /(.*)/) + end + it "should match an IP with the apropriate interpolation" do + @declaration.should be_match('www.testsite.org',@ip.sub(/\$1/,'12.34')) + end + it "should not match other IPs" do + @declaration.should_not be_match('www.testsite.org',@ip.sub(/\$1/,'66.34')) + end + end + + describe "when the pattern is a PQDN" do + before :each do + @host = 'spirit.mars.nasa.gov' + @declaration = Puppet::Network::AuthStore::Declaration.new(:allow,@host) + end + it "should match the specified PQDN" do + pending "FQDN consensus" + @declaration.should be_match(@host,'200.101.99.98') + end + it "should not match a similar FQDN" do + pending "FQDN consensus" + @declaration.should_not be_match(@host+'.','200.101.99.98') + end + end + + describe "when the pattern is a FQDN" do + before :each do + @host = 'spirit.mars.nasa.gov.' + @declaration = Puppet::Network::AuthStore::Declaration.new(:allow,@host) + end + it "should match the specified FQDN" do + pending "FQDN consensus" + @declaration.should be_match(@host,'200.101.99.98') + end + it "should not match a similar PQDN" do + pending "FQDN consensus" + @declaration.should_not be_match(@host[0..-2],'200.101.99.98') + end + end + + + describe "when the pattern is an opaque string with a back reference" do + before :each do + @host = 'c216f41a-f902-4bfb-a222-850dd957bebb' + @item = "/catalog/#{@host}" + @pattern = %{^/catalog/([^/]+)$} + @declaration = Puppet::Network::AuthStore::Declaration.new(:allow,'$1') + end + it "should match an IP with the apropriate interpolation" do + @declaration.interpolate(@item.match(@pattern)).should be_match(@host,'10.0.0.5') + end + end + + describe "when comparing patterns" do + before :each do + @ip = Puppet::Network::AuthStore::Declaration.new(:allow,'127.0.0.1') + @host_name = Puppet::Network::AuthStore::Declaration.new(:allow,'www.hard_knocks.edu') + @opaque = Puppet::Network::AuthStore::Declaration.new(:allow,'hey_dude') + end + it "should consider ip addresses before host names" do + (@ip < @host_name).should be_true + end + it "should consider ip addresses before opaque strings" do + (@ip < @opaque).should be_true + end + it "should consider host_names before opaque strings" do + (@host_name < @opaque).should be_true + end + end +end |
