aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--lib/drb/acl.rb7
-rw-r--r--test/drb/test_acl.rb18
3 files changed, 22 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 6a78ac6a33..4cb0215587 100644
--- a/NEWS
+++ b/NEWS
@@ -134,6 +134,9 @@ with all sufficient information, see the ChangeLog file or Redmine
* Add Bundler to Standard Library. [Feature #12733]
+* DRb
+ * ACL::ACLEntry.new no longer suppresses IPAddr::InvalidPrefixError.
+
* ERB
* Add ERB#result_with_hash to render a template with local variables passed
with a Hash object. [Feature #8631]
diff --git a/lib/drb/acl.rb b/lib/drb/acl.rb
index 7b50644fe4..b004656f09 100644
--- a/lib/drb/acl.rb
+++ b/lib/drb/acl.rb
@@ -49,6 +49,9 @@ class ACL
# +str+ may be "*" or "all" to match any address, an IP address string
# to match a specific address, an IP address mask per IPAddr, or one
# containing "*" to match part of an IPv4 address.
+ #
+ # IPAddr::InvalidPrefixError may be raised when an IP network
+ # address with an invalid netmask/prefix is given.
def initialize(str)
if str == '*' or str == 'all'
@@ -58,6 +61,10 @@ class ACL
else
begin
@pat = [:ip, IPAddr.new(str)]
+ rescue IPAddr::InvalidPrefixError
+ # In this case, `str` shouldn't be a host name pattern
+ # because it contains a slash.
+ raise
rescue ArgumentError
@pat = [:name, dot_pat(str)]
end
diff --git a/test/drb/test_acl.rb b/test/drb/test_acl.rb
index 6ac89b156b..436ee92207 100644
--- a/test/drb/test_acl.rb
+++ b/test/drb/test_acl.rb
@@ -66,9 +66,9 @@ class ACLEntryTest < Test::Unit::TestCase
assert_not_operator(a, :match, @hosts['localhost'])
assert_operator(a, :match, @hosts['yum'])
- a = ACL::ACLEntry.new('192.168.0.1/255.255.0.255')
+ a = ACL::ACLEntry.new('192.168.1.0/255.255.255.0')
assert_not_operator(a, :match, @hosts['localhost'])
- assert_not_operator(a, :match, @hosts['yum'])
+ assert_operator(a, :match, @hosts['yum'])
assert_operator(a, :match, @hosts['x68k'])
a = ACL::ACLEntry.new('192.168.1.0/24')
@@ -81,10 +81,14 @@ class ACLEntryTest < Test::Unit::TestCase
assert_not_operator(a, :match, @hosts['yum'])
assert_not_operator(a, :match, @hosts['x68k'])
- a = ACL::ACLEntry.new('127.0.0.1/255.0.0.255')
+ a = ACL::ACLEntry.new('127.0.0.0/255.0.0.0')
assert_operator(a, :match, @hosts['localhost'])
assert_not_operator(a, :match, @hosts['yum'])
assert_not_operator(a, :match, @hosts['x68k'])
+
+ assert_raise(IPAddr::InvalidPrefixError) {
+ ACL::ACLEntry.new('192.168.0.0/33')
+ }
end
def test_name
@@ -136,10 +140,12 @@ class ACLListTest < Test::Unit::TestCase
end
def test_1
- a = build(%w(192.0.0.1/255.0.0.255 yum.*.jp))
- assert_operator(a, :match, @hosts['yum'])
+ a = build(%w(192.168.1.0/255.255.255.252 yum.*.jp))
assert_operator(a, :match, @hosts['x68k'])
- assert_not_operator(a, :match, @hosts['lc630'])
+ assert_operator(a, :match, @hosts['lc630'])
+ assert_operator(a, :match, @hosts['lib30'])
+ assert_not_operator(a, :match, @hosts['ns00'])
+ assert_operator(a, :match, @hosts['yum'])
end
def test_2