1
0
Fork 0
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:
naruse 2018-05-17 07:40:01 +00:00
parent 5a1dfb04bc
commit d50ecb63ec
2 changed files with 16 additions and 5 deletions

View file

@ -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

View file

@ -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],