rubysspi 1.0.0-i386-mswin32 → 1.0.3-i386-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +2 -1
- data/lib/rubysspi/proxy_auth.rb +16 -9
- data/test/ruby_sspi_test.rb +13 -6
- data/test/test_gem_list.rb +1 -1
- data/test/test_net_http.rb +2 -0
- metadata +2 -2
data/Rakefile
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
Gem::manage_gems
|
3
3
|
require 'rake/gempackagetask'
|
4
|
+
require 'rake/testtask'
|
4
5
|
|
5
6
|
spec = Gem::Specification.new do |s|
|
6
7
|
s.name = "rubysspi"
|
7
8
|
s.summary = "A library which implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotate authentication support to Net::HTTP."
|
8
|
-
s.version = "1.0.
|
9
|
+
s.version = "1.0.3"
|
9
10
|
s.author = "Justin Bailey"
|
10
11
|
s.email = "jgbailey @nospam@ gmail.com"
|
11
12
|
s.homepage = "http://rubyforge.org/projects/rubysspi/"
|
data/lib/rubysspi/proxy_auth.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'rubysspi'
|
3
3
|
|
4
|
-
|
5
4
|
module Net
|
6
5
|
# Replaces Net::HTTP.request to understand Negotiate HTTP proxy authorization. Uses native Win32
|
7
6
|
# libraries to authentic as the current user (as defined by the ENV["USERNAME"] and ENV["USERDOMAIN"]
|
@@ -28,20 +27,28 @@ module Net
|
|
28
27
|
end while res.kind_of?(HTTPContinue)
|
29
28
|
# If proxy was specified, and the server is demanding authentication, negotiate with it
|
30
29
|
if res.kind_of?(HTTPProxyAuthenticationRequired) && proxy? && res["Proxy-Authenticate"].include?("Negotiate")
|
31
|
-
n = SSPI::NegotiateAuth.new
|
32
|
-
res.reading_body(@socket, req.response_body_permitted?) { }
|
33
|
-
req["Proxy-Authorization"] = "Negotiate #{n.get_initial_token}"
|
34
|
-
req.exec @socket, @curr_http_version, edit_path(req.path)
|
35
30
|
begin
|
36
|
-
|
37
|
-
end while res.kind_of?(HTTPContinue)
|
38
|
-
if res["Proxy-Authenticate"]
|
31
|
+
n = SSPI::NegotiateAuth.new
|
39
32
|
res.reading_body(@socket, req.response_body_permitted?) { }
|
40
|
-
req
|
33
|
+
end_transport req, res
|
34
|
+
begin_transport req
|
35
|
+
req["Proxy-Authorization"] = "Negotiate #{n.get_initial_token}"
|
41
36
|
req.exec @socket, @curr_http_version, edit_path(req.path)
|
42
37
|
begin
|
43
38
|
res = HTTPResponse.read_new(@socket)
|
44
39
|
end while res.kind_of?(HTTPContinue)
|
40
|
+
if res["Proxy-Authenticate"]
|
41
|
+
res.reading_body(@socket, req.response_body_permitted?) { }
|
42
|
+
req["Proxy-Authorization"] = "Negotiate #{n.complete_authentication res["Proxy-Authenticate"]}"
|
43
|
+
req.exec @socket, @curr_http_version, edit_path(req.path)
|
44
|
+
begin
|
45
|
+
res = HTTPResponse.read_new(@socket)
|
46
|
+
end while res.kind_of?(HTTPContinue)
|
47
|
+
end
|
48
|
+
rescue
|
49
|
+
exc = $!.exception("Error occurred during proxy negotiation. socket.io: #{@socket.inspect}; socket.closed? #{@socket.closed?}; req: #{req.inspect}; res: #{res.inspect}; Original message: #{$!.message}")
|
50
|
+
exc.set_backtrace $!.backtrace
|
51
|
+
raise exc
|
45
52
|
end
|
46
53
|
end
|
47
54
|
res.reading_body(@socket, req.response_body_permitted?) {
|
data/test/ruby_sspi_test.rb
CHANGED
@@ -15,9 +15,11 @@ class NTLMTest < Test::Unit::TestCase
|
|
15
15
|
nego_auth = SSPI::NegotiateAuth.new
|
16
16
|
sr = http.request_get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token }
|
17
17
|
resp = http.get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(sr["Proxy-Authenticate"].split(" ").last.strip) }
|
18
|
-
|
18
|
+
# Google redirects to country of origins domain if not US.
|
19
|
+
assert success_or_redirect(resp.code), "Response code not as expected: #{resp.inspect}"
|
19
20
|
resp = http.get "/foobar.html"
|
20
|
-
|
21
|
+
# Some proxy servers don't return 404 but 407.
|
22
|
+
assert(resp.code.to_i == 404 || resp.code.to_i == 407, "Response code not as expected: #{resp.inspect}")
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
@@ -26,7 +28,7 @@ class NTLMTest < Test::Unit::TestCase
|
|
26
28
|
|
27
29
|
Net::HTTP.Proxy(proxy.host, proxy.port).start("www.google.com") do |http|
|
28
30
|
resp = SSPI::NegotiateAuth.proxy_auth_get http, "/"
|
29
|
-
assert resp.code
|
31
|
+
assert success_or_redirect(resp.code), "Response code not as expected: #{resp.inspect}"
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -37,7 +39,7 @@ class NTLMTest < Test::Unit::TestCase
|
|
37
39
|
nego_auth = SSPI::NegotiateAuth.new
|
38
40
|
sr = http.request_get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token }
|
39
41
|
resp = http.get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(sr["Proxy-Authenticate"].split(" ").last.strip) }
|
40
|
-
assert resp.code
|
42
|
+
assert success_or_redirect(resp.code), "Response code not as expected: #{resp.inspect}"
|
41
43
|
assert_raises(RuntimeError, "Should not be able to call complete_authentication again") do
|
42
44
|
nego_auth.complete_authentication "foo"
|
43
45
|
end
|
@@ -54,7 +56,7 @@ class NTLMTest < Test::Unit::TestCase
|
|
54
56
|
token = Base64.decode64(sr["Proxy-Authenticate"].split(" ").last.strip)
|
55
57
|
completed_token = nego_auth.complete_authentication(token)
|
56
58
|
resp = http.get "/", { "Proxy-Authorization" => "Negotiate " + completed_token }
|
57
|
-
assert resp.code
|
59
|
+
assert success_or_redirect(resp.code), "Response code not as expected: #{resp.inspect}"
|
58
60
|
end
|
59
61
|
|
60
62
|
# Test that token w/ "Negotiate" header included works
|
@@ -62,7 +64,7 @@ class NTLMTest < Test::Unit::TestCase
|
|
62
64
|
nego_auth = SSPI::NegotiateAuth.new
|
63
65
|
sr = http.request_get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token }
|
64
66
|
resp = http.get "/", { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(sr["Proxy-Authenticate"]) }
|
65
|
-
assert resp.code
|
67
|
+
assert success_or_redirect(resp.code), "Response code not as expected: #{resp.inspect}"
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
@@ -77,4 +79,9 @@ private
|
|
77
79
|
return proxy
|
78
80
|
end
|
79
81
|
|
82
|
+
# Returns true if code given is 200 or 302. I.e. if HTTP request was successful or resulted in redirect.
|
83
|
+
def success_or_redirect(code)
|
84
|
+
code.to_i == 200 || code.to_i == 302
|
85
|
+
end
|
86
|
+
|
80
87
|
end
|
data/test/test_gem_list.rb
CHANGED
@@ -15,7 +15,7 @@ class NTLMTest < Test::Unit::TestCase
|
|
15
15
|
def test_gem_list
|
16
16
|
Gem.manage_gems
|
17
17
|
assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
|
18
|
-
Gem::GemRunner.new.run(
|
18
|
+
Gem::GemRunner.new.run(%w(list rubysspi --remote --http-proxy ))
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/test/test_net_http.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rubysspi
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0.
|
7
|
-
date: 2006-
|
6
|
+
version: 1.0.3
|
7
|
+
date: 2006-10-16 00:00:00 -07:00
|
8
8
|
summary: A library which implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotate authentication support to Net::HTTP.
|
9
9
|
require_paths:
|
10
10
|
- lib
|