ruby-changes:4553
From: ko1@a...
Date: Wed, 16 Apr 2008 02:13:30 +0900 (JST)
Subject: [ruby-changes:4553] knu - Ruby:r16047 (ruby_1_8): * lib/xmlrpc/client.rb: fix cookie handling.
knu 2008-04-16 02:10:38 +0900 (Wed, 16 Apr 2008) New Revision: 16047 Added files: branches/ruby_1_8/test/xmlrpc/test_cookie.rb Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/lib/xmlrpc/client.rb Log: * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403] * test/xmlrpc/test_cookie.rb: add a test for the above fix. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16047&r2=16046&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/xmlrpc/test_cookie.rb http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/xmlrpc/client.rb?r1=16047&r2=16046&diff_format=u Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 16046) +++ ruby_1_8/ChangeLog (revision 16047) @@ -1,3 +1,9 @@ +Wed Apr 16 02:09:14 2008 Kouhei Sutou <kou@c...> + + * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403] + + * test/xmlrpc/test_cookie.rb: add a test for the above fix. + Tue Apr 15 23:40:39 2008 Akinori MUSHA <knu@i...> * ext/syck/rubyext.c (rb_syck_mktime): Avoid buffer overflow. Index: ruby_1_8/lib/xmlrpc/client.rb =================================================================== --- ruby_1_8/lib/xmlrpc/client.rb (revision 16046) +++ ruby_1_8/lib/xmlrpc/client.rb (revision 16047) @@ -565,8 +565,13 @@ raise "Wrong size. Was #{data.size}, should be #{expected}" end - c = resp["Set-Cookie"] - @cookie = c if c + set_cookies = resp.get_fields("Set-Cookie") + if set_cookies and !set_cookies.empty? + @cookie = set_cookies.collect do |set_cookie| + cookie = WEBrick::Cookie.parse_set_cookie(set_cookie) + WEBrick::Cookie.new(cookie.name, cookie.value).to_s + end.join("; ") + end return data end Index: ruby_1_8/test/xmlrpc/test_cookie.rb =================================================================== --- ruby_1_8/test/xmlrpc/test_cookie.rb (revision 0) +++ ruby_1_8/test/xmlrpc/test_cookie.rb (revision 16047) @@ -0,0 +1,96 @@ +require 'test/unit' +require 'time' +require 'webrick' +require File.join(File.dirname(__FILE__), 'webrick_testing') +require "xmlrpc/server" +require 'xmlrpc/client' + +class TestCookie < Test::Unit::TestCase + include WEBrick_Testing + + def create_servlet + s = XMLRPC::WEBrickServlet.new + + def s.logged_in_users + @logged_in_users ||= {} + end + def s.request + @request + end + def s.response + @response + end + def s.service(request, response) + @request = request + @response = response + super + ensure + @request = nil + @response = nil + end + + key = Time.now.to_i.to_s + valid_user = "valid-user" + s.add_handler("test.login") do |user, password| + ok = (user == valid_user and password == "secret") + if ok + s.logged_in_users[key] = user + expires = (Time.now + 60 * 60).httpdate + cookies = s.response.cookies + cookies << "key=\"#{key}\"; path=\"/RPC2\"; expires=#{expires}" + cookies << "user=\"#{user}\"; path=\"/RPC2\"" + end + ok + end + + s.add_handler("test.require_authenticate_echo") do |string| + cookies = {} + s.request.cookies.each do |cookie| + cookies[cookie.name] = cookie.value + end + if cookies == {"key" => key, "user" => valid_user} + string + else + raise XMLRPC::FaultException.new(29, "Authentication required") + end + end + + s.set_default_handler do |name, *args| + raise XMLRPC::FaultException.new(-99, "Method #{name} missing" + + " or wrong number of parameters!") + end + + s.add_introspection + + s + end + + def setup_http_server(port) + option = {:Port => port} + + start_server(option) {|w| w.mount('/RPC2', create_servlet) } + + @s = XMLRPC::Client.new3(:port => port) + end + + PORT = 8070 + def test_cookie + begin + setup_http_server(PORT) + do_test + ensure + stop_server + end + end + + def do_test + assert(!@s.call("test.login", "invalid-user", "invalid-password")) + exception = assert_raise(XMLRPC::FaultException) do + @s.call("test.require_authenticate_echo", "Hello") + end + assert_equal(29, exception.faultCode) + + assert(@s.call("test.login", "valid-user", "secret")) + assert_equal("Hello", @s.call("test.require_authenticate_echo", "Hello")) + end +end Property changes on: ruby_1_8/test/xmlrpc/test_cookie.rb ___________________________________________________________________ Name: svn:eol-style + LF -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/