mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403]
* test/xmlrpc/test_cookie.rb: add a test for the above fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
65e137a74c
commit
dd0eebd62a
3 changed files with 109 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Wed Apr 16 02:09:14 2008 Kouhei Sutou <kou@cozmixng.org>
|
||||||
|
|
||||||
|
* 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@iDaemons.org>
|
Tue Apr 15 23:40:39 2008 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* ext/syck/rubyext.c (rb_syck_mktime): Avoid buffer overflow.
|
* ext/syck/rubyext.c (rb_syck_mktime): Avoid buffer overflow.
|
||||||
|
|
|
@ -565,8 +565,13 @@ module XMLRPC
|
||||||
raise "Wrong size. Was #{data.size}, should be #{expected}"
|
raise "Wrong size. Was #{data.size}, should be #{expected}"
|
||||||
end
|
end
|
||||||
|
|
||||||
c = resp["Set-Cookie"]
|
set_cookies = resp.get_fields("Set-Cookie")
|
||||||
@cookie = c if c
|
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
|
return data
|
||||||
end
|
end
|
||||||
|
|
96
test/xmlrpc/test_cookie.rb
Normal file
96
test/xmlrpc/test_cookie.rb
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue