mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
http_proxy setting should respect both parent domain and subdomain
URI::Generic: Respect no_proxy for both parent domain and subdomains It is now possible to add just the subdomains for proxy bypass. In a setting where the main domain needs to go through proxy while the subdomains don't, it is now possible to just add the subdomains to the no_proxy list. The assumption that subdomains and the parent domain should behave the same wrt no_proxy has been removed. eg: Adding .example.com in no_proxy would allow example.com to go through the proxy. From: Harsimran Singh Maan <maan.harry@gmail.com> fix https://github.com/ruby/ruby/pull/1748 [Bug #14345] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63452 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5a1dfb04bc
commit
d50ecb63ec
2 changed files with 16 additions and 5 deletions
|
@ -1543,11 +1543,16 @@ module URI
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
|
def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
|
||||||
no_proxy.scan(/(?!\.)([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
|
hostname = hostname.downcase
|
||||||
|
dothostname = ".#{hostname}"
|
||||||
|
no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
|
||||||
if !p_port || port == p_port.to_i
|
if !p_port || port == p_port.to_i
|
||||||
if /(\A|\.)#{Regexp.quote p_host}\z/i =~ hostname
|
if p_host.start_with?('.')
|
||||||
return false
|
return false if hostname.end_with?(p_host.downcase)
|
||||||
elsif addr
|
else
|
||||||
|
return false if dothostname.end_with?(".#{p_host.downcase}")
|
||||||
|
end
|
||||||
|
if addr
|
||||||
begin
|
begin
|
||||||
return false if IPAddr.new(p_host).include?(addr)
|
return false if IPAddr.new(p_host).include?(addr)
|
||||||
rescue IPAddr::InvalidAddressError
|
rescue IPAddr::InvalidAddressError
|
||||||
|
|
|
@ -898,7 +898,7 @@ class URI::TestGeneric < Test::Unit::TestCase
|
||||||
assert_nil(URI("http://www.example.org/").find_proxy(env))
|
assert_nil(URI("http://www.example.org/").find_proxy(env))
|
||||||
}
|
}
|
||||||
with_proxy_env('http_proxy'=>'http://127.0.0.1:8080', 'no_proxy'=>'.example.org') {|env|
|
with_proxy_env('http_proxy'=>'http://127.0.0.1:8080', 'no_proxy'=>'.example.org') {|env|
|
||||||
assert_nil(URI("http://example.org/").find_proxy(env))
|
assert_equal(URI('http://127.0.0.1:8080'), URI("http://example.org/").find_proxy(env))
|
||||||
assert_nil(URI("http://www.example.org/").find_proxy(env))
|
assert_nil(URI("http://www.example.org/").find_proxy(env))
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -940,7 +940,13 @@ class URI::TestGeneric < Test::Unit::TestCase
|
||||||
['example.com', nil, 80, 'example.com:80', false],
|
['example.com', nil, 80, 'example.com:80', false],
|
||||||
['example.com', nil, 80, 'example.org,example.com:80,example.net', false],
|
['example.com', nil, 80, 'example.org,example.com:80,example.net', false],
|
||||||
['foo.example.com', nil, 80, 'example.com', false],
|
['foo.example.com', nil, 80, 'example.com', false],
|
||||||
|
['foo.example.com', nil, 80, '.example.com', false],
|
||||||
|
['example.com', nil, 80, '.example.com', true],
|
||||||
|
['xample.com', nil, 80, '.example.com', true],
|
||||||
|
['fooexample.com', nil, 80, '.example.com', true],
|
||||||
['foo.example.com', nil, 80, 'example.com:80', false],
|
['foo.example.com', nil, 80, 'example.com:80', false],
|
||||||
|
['foo.eXample.com', nil, 80, 'example.com:80', false],
|
||||||
|
['foo.example.com', nil, 80, 'eXample.com:80', false],
|
||||||
['foo.example.com', nil, 80, 'example.com:443', true],
|
['foo.example.com', nil, 80, 'example.com:443', true],
|
||||||
['127.0.0.1', '127.0.0.1', 80, '10.224.0.0/22', true],
|
['127.0.0.1', '127.0.0.1', 80, '10.224.0.0/22', true],
|
||||||
['10.224.1.1', '10.224.1.1', 80, '10.224.1.1', false],
|
['10.224.1.1', '10.224.1.1', 80, '10.224.1.1', false],
|
||||||
|
|
Loading…
Reference in a new issue