[ruby-dev:49630] [Ruby trunk Bug#4388] open-uriで環境変数http_proxyを使うときに認証付きのProxyが使えません

From: kosaki.motohiro@...
Date: 2016-05-20 06:06:50 UTC
List: ruby-dev #49630
Issue #4388 has been updated by Motohiro KOSAKI.


実験してみたのですが、まずrubyの./configureの段階で、tool/downloader.rbがhttps接続を使うので、
open_httpのところのhttpsをはじく処理をコメントアウトしないと動きませんでした。

  def OpenURI.open_http(buf, target, proxy, options) # :nodoc:
    if proxy
      proxy_uri, proxy_user, proxy_pass = proxy
#      raise "Non-HTTP proxy URI: #{proxy_uri}" if proxy_uri.class != URI::HTTP
    end

httpsのときは、https_proxy環境変数読むので、URI::HTTPにならない気がするのですが、どういう意図なのでしょうか。

2つ目。環境変数から読むときは入力がURLなのに、URLエンコードを意識していないので、以下のようにしないと動きませんでした。
(たとえば、うちの会社だとproxy_userがメアドなので@をエンコードしてやらないといけない)

diff --git a/lib/open-uri.rb b/lib/open-uri.rb
index 489b83a..f588455 100644
--- a/lib/open-uri.rb
+++ b/lib/open-uri.rb
@@ -272,6 +272,8 @@ def OpenURI.open_http(buf, target, proxy, options) # :nodoc:
       if proxy
         unless proxy_user && proxy_pass
           proxy_user, proxy_pass = proxy_uri.userinfo.split(':') if proxy_uri.use
+          proxy_user = URI.decode_www_form_component(proxy_user)
+          proxy_pass = URI.decode_www_form_component(proxy_pass)
         end
         if proxy_user && proxy_pass
           klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port, proxy_user


ただ、URI.decode漏れってここ以外にもいっぱいありそうな空気を感じるコードなので、修正がここだけでいいのか不安を感じています。




----------------------------------------
Bug #4388: open-uriで環境変数http_proxyを使うときに認証付きのProxyが使えません
https://bugs.ruby-lang.org/issues/4388#change-58764

* Author: あつし よしだ
* Status: Rejected
* Priority: Normal
* Assignee: 
* ruby -v: -
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
=begin
 内容はタイトルのままです。
 パッチを添付しますのでよろしくお願いします。
=end


---Files--------------------------------
open-uri_with_http_proxy.patch (2.99 KB)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next