rubysspi 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ == 1.2.4
2
+ * Compatibility updates for rubygems 1.2.0
3
+
1
4
  == 1.2.2
2
5
  * Fixed incompatibility with RubyGems >= 0.9.2 and RubySSPI Net::HTTP patch. Patch now directly requires the SSPI files, rather than relying on RubyGems to load it.
3
6
  * Updated gem tests for compatibility with RubyGems >= 0.9.2.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/testtask'
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "rubysspi"
8
8
  s.summary = "A library which implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotiate authentication support to Net::HTTP."
9
- s.version = "1.2.3"
9
+ s.version = "1.2.4"
10
10
  s.author = "Justin Bailey"
11
11
  s.email = "jgbailey @nospam@ gmail.com"
12
12
  s.homepage = "http://rubyforge.org/projects/rubysspi/"
@@ -62,7 +62,7 @@ unless spec
62
62
  exit
63
63
  end
64
64
 
65
- gem_path = Pathname.new(spec.full_gem_path) + spec.require_path
65
+ gem_path = Pathname.new(spec.full_gem_path) + "lib"
66
66
 
67
67
  # Write patch file.
68
68
  puts "Creating patch file to replace #{orig_file}"
@@ -30,6 +30,27 @@ module Net
30
30
  # Suppress warnings about redefining request
31
31
  @old_verbose = $VERBOSE
32
32
  $VERBOSE = nil
33
+
34
+ # Determines if authorization is required and returns
35
+ # the expected type ("NTLM" or "Negotiate"). Otherwise,
36
+ # returns nil.
37
+ def sspi_auth_required?(res)
38
+ header =
39
+ if proxy? && res.kind_of?(HTTPProxyAuthenticationRequired)
40
+ "Proxy-Authenticate"
41
+ elsif res.kind_of?(HTTPUnauthorized)
42
+ "WWW-Authenticate"
43
+ else
44
+ nil
45
+ end
46
+
47
+ if header
48
+ # Critical to start with Negotiate. NTLM is fallback.
49
+ ["Negotiate", "NTLM"].find { |tok| res[header].include? tok }
50
+ else
51
+ nil
52
+ end
53
+ end
33
54
 
34
55
  def request(req, body = nil, &block) # :yield: +response+
35
56
  unless started?
@@ -50,37 +71,46 @@ module Net
50
71
  begin
51
72
  res = HTTPResponse.read_new(@socket)
52
73
  end while res.kind_of?(HTTPContinue)
53
- # If proxy was specified, and the server is demanding authentication, negotiate with it
54
- if res.kind_of?(HTTPProxyAuthenticationRequired) && proxy? && res["Proxy-Authenticate"].include?("Negotiate")
74
+ if tok = sspi_auth_required?(res)
55
75
  begin
56
76
  n = Win32::SSPI::NegotiateAuth.new
57
77
  res.reading_body(@socket, req.response_body_permitted?) { }
58
78
  end_transport req, res
59
79
  begin_transport req
60
- req["Proxy-Authorization"] = "Negotiate #{n.get_initial_token}"
80
+ if proxy?
81
+ req["Proxy-Authorization"] = "#{tok} #{n.get_initial_token}"
82
+ req["Proxy-Connection"] = "Keep-Alive"
83
+ else
84
+ req["Authorization"] = "#{tok} #{n.get_initial_token}"
85
+ end
61
86
  # Some versions of ISA will close the connection if this isn't present.
62
87
  req["Connection"] = "Keep-Alive"
63
- req["Proxy-Connection"] = "Keep-Alive"
64
88
  req.exec @socket, @curr_http_version, edit_path(req.path)
65
89
  begin
66
90
  res = HTTPResponse.read_new(@socket)
67
91
  end while res.kind_of?(HTTPContinue)
68
- if res["Proxy-Authenticate"]
92
+ if (proxy? && res["Proxy-Authenticate"]) || (! proxy? && res["WWW-Authenticate"])
69
93
  res.reading_body(@socket, req.response_body_permitted?) { }
70
- req["Proxy-Authorization"] = "Negotiate #{n.complete_authentication res["Proxy-Authenticate"]}"
94
+ if proxy?
95
+ req["Proxy-Authorization"] = "#{tok} #{n.complete_authentication res["Proxy-Authenticate"]}"
96
+ req["Proxy-Connection"] = "Keep-Alive"
97
+ else
98
+ token = res["WWW-Authenticate"].split(" ").last
99
+ req["Authorization"] = "#{tok} #{n.complete_authentication token}"
100
+ end
71
101
  req["Connection"] = "Keep-Alive"
72
- req["Proxy-Connection"] = "Keep-Alive"
73
102
  req.exec @socket, @curr_http_version, edit_path(req.path)
74
103
  begin
75
104
  res = HTTPResponse.read_new(@socket)
76
105
  end while res.kind_of?(HTTPContinue)
77
106
  end
78
107
  rescue
79
- exc = $!.exception("Error occurred during proxy negotiation. socket.io: #{@socket.inspect}; socket.closed? #{@socket.closed?}; req: #{req.inspect}; res: #{res.inspect}; Original message: #{$!.message}")
108
+ exc = $!.exception("Error occurred during proxy negotiation. req: #{req["Proxy-Authorization"].inspect}; res: #{res.inspect}; Original message: #{$!.message}")
80
109
  exc.set_backtrace $!.backtrace
81
110
  raise exc
82
111
  end
83
112
  end
113
+
84
114
  res.reading_body(@socket, req.response_body_permitted?) {
85
115
  yield res if block_given?
86
116
  }
@@ -10,6 +10,13 @@
10
10
  # Ruby Distribution License or GNU General Public License.
11
11
  #
12
12
 
13
+ # Ruby gems > 0.9 loads patch automatically so DISABLE_RUBY_SSPI_PATCH doesn't do any good.
14
+ # Therefore, need to ensure ruby gems isn't loaded automatically.
15
+ if ENV["RUBYOPT"]
16
+ puts "Unset RUBYOPT environment variable before running these tests."
17
+ exit!
18
+ end
19
+
13
20
  # Magic constant will ensure that, if the SSPI patch has been applied, it won't break these tests
14
21
  DISABLE_RUBY_SSPI_PATCH = true
15
22
 
@@ -28,16 +35,24 @@ class NTLMTest < Test::Unit::TestCase
28
35
  # bug occurred when gem list was executed. This tests to ensure
29
36
  # bug does not come back.
30
37
  def test_gem_list
31
- Gem.manage_gems
32
38
 
33
- if Gem::Version.new(Gem::RubyGemsVersion) < Gem::Version.new("0.9.2")
34
- assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
35
- Gem::GemRunner.new.run(%w(list rubysspi --remote --http-proxy ))
39
+ if Gem::Version.new(Gem::RubyGemsVersion) < Gem::Version.new("1.2")
40
+ Gem.manage_gems
41
+ if Gem::Version.new(Gem::RubyGemsVersion) < Gem::Version.new("0.9.2")
42
+ assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
43
+ Gem::GemRunner.new.run(%w(list rubysspi --remote --http-proxy ))
44
+ end
45
+ else
46
+ # --http-proxy option not needed after 0.9.2 (at least)
47
+ assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
48
+ Gem::GemRunner.new.run(%w(list rubysspi --remote))
49
+ end
36
50
  end
37
- elsif Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new("0.9.2")
38
- # --http-proxy option not needed after 0.9.2 (at least)
51
+ elsif Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new("1.2")
52
+ require 'rubygems/command_manager'
53
+ # Gem::GemRunner not used after 1.2
39
54
  assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
40
- Gem::GemRunner.new.run(%w(list rubysspi --remote))
55
+ Gem::CommandManager.instance.run(%w(list rubysspi --remote))
41
56
  end
42
57
  end
43
58
  end
@@ -10,6 +10,13 @@
10
10
  # Ruby Distribution License or GNU General Public License.
11
11
  #
12
12
 
13
+ # Ruby gems > 0.9 loads patch automatically so DISABLE_RUBY_SSPI_PATCH doesn't do any good.
14
+ # Therefore, need to ensure ruby gems isn't loaded automatically.
15
+ if ENV["RUBYOPT"]
16
+ puts "Unset RUBYOPT environment variable before running these tests."
17
+ exit!
18
+ end
19
+
13
20
  DISABLE_RUBY_SSPI_PATCH = true
14
21
 
15
22
  require 'test/unit'
metadata CHANGED
@@ -1,33 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: rubysspi
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.2.3
7
- date: 2007-07-10 00:00:00 -07:00
8
- summary: A library which implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotiate authentication support to Net::HTTP.
9
- require_paths:
10
- - lib
11
- email: jgbailey @nospam@ gmail.com
12
- homepage: http://rubyforge.org/projects/rubysspi/
13
- rubyforge_project: http://rubyforge.org/projects/rubysspi/
14
- description: This gem provides bindings to the Win32 SSPI libraries, primarily to support Negotiate (i.e. SPNEGO, NTLM) authentication with a proxy server. Enough support is implemented to provide the necessary support for the authentication. A module is also provided which overrides Net::HTTP and adds support for Negotiate authentication to it. This implies that open-uri automatically gets support for it, as long as the http_proxy environment variable is set.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 1.2.4
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Justin Bailey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-01 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: This gem provides bindings to the Win32 SSPI libraries, primarily to support Negotiate (i.e. SPNEGO, NTLM) authentication with a proxy server. Enough support is implemented to provide the necessary support for the authentication. A module is also provided which overrides Net::HTTP and adds support for Negotiate authentication to it. This implies that open-uri automatically gets support for it, as long as the http_proxy environment variable is set.
17
+ email: jgbailey @nospam@ gmail.com
18
+ executables:
19
+ - apply_sspi_patch
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.txt
24
+ - CHANGELOG.txt
25
+ - LICENSE.txt
31
26
  files:
32
27
  - lib/win32
33
28
  - lib/win32/sspi
@@ -43,23 +38,35 @@ files:
43
38
  - README.txt
44
39
  - Rakefile
45
40
  - spa.rb
46
- test_files: []
47
-
41
+ has_rdoc: true
42
+ homepage: http://rubyforge.org/projects/rubysspi/
43
+ post_install_message:
48
44
  rdoc_options:
49
45
  - --title
50
46
  - Ruby SSPI -- Win32 SSPI Bindings for Ruby
51
47
  - --main
52
48
  - README.txt
53
49
  - --line-numbers
54
- extra_rdoc_files:
55
- - README.txt
56
- - CHANGELOG.txt
57
- - LICENSE.txt
58
- executables:
59
- - apply_sspi_patch
60
- extensions: []
61
-
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
62
64
  requirements: []
63
65
 
64
- dependencies: []
66
+ rubyforge_project: http://rubyforge.org/projects/rubysspi/
67
+ rubygems_version: 1.2.0
68
+ signing_key:
69
+ specification_version: 2
70
+ summary: A library which implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotiate authentication support to Net::HTTP.
71
+ test_files: []
65
72