rubysspi 0.0.1-i386-mswin32 → 0.0.2-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/README.txt +16 -4
- data/Rakefile +2 -2
- data/lib/rubysspi.rb +10 -9
- data/spa.rb +19 -0
- data/test/test_gem_list.rb +21 -0
- metadata +4 -2
data/README.txt
CHANGED
@@ -8,6 +8,18 @@ This project can be found on rubyforge at:
|
|
8
8
|
|
9
9
|
http://rubyforge.org/projects/rubysspi
|
10
10
|
|
11
|
+
= Using with rubygems (and other libraries)
|
12
|
+
|
13
|
+
If RubyGems is not working because of proxy authorization errors, the rubysspi library can be used to solve the problem. The gem includes a file called <tt>spa.rb</tt> in the root directory. Copy this file to your site_ruby directory and then run the gem script directly:
|
14
|
+
|
15
|
+
ruby -rspa 'C:\Program Files\ruby\gem'
|
16
|
+
|
17
|
+
For example, to list remote gems that match "sspi" this command can be used
|
18
|
+
|
19
|
+
ruby -rspa 'C:\Program Files\ruby\gem' list --remote sspi
|
20
|
+
|
21
|
+
You must copy the <tt></tt> file yourself, however. Rubygems is not able to do it for you on install.
|
22
|
+
|
11
23
|
= Using with open-uri
|
12
24
|
|
13
25
|
To use the library with open-uri, make sure to set the environment variable +http_proxy+ to your proxy server. This must be a hostname and port in URL form. E.g.:
|
@@ -16,10 +28,10 @@ To use the library with open-uri, make sure to set the environment variable +htt
|
|
16
28
|
|
17
29
|
The library will grab your current username and domain from the environment variables +USERNAME+ and +USERDOMAIN+. This should be set for you by Windows already.
|
18
30
|
|
19
|
-
The library implements a patch on top of Net::HTTP, which means open-uri gets it too. At the top of your script, make sure to require the patch after
|
31
|
+
The library implements a patch on top of Net::HTTP, which means open-uri gets it too. At the top of your script, make sure to require the patch after <tt>open-uri</tt>:
|
20
32
|
|
21
|
-
require
|
22
|
-
require
|
33
|
+
require open-uri
|
34
|
+
require rubysspi/proxy_auth
|
23
35
|
|
24
36
|
open("http://www.google.com") { |f| puts(f.gets(nil)) }
|
25
37
|
|
@@ -30,7 +42,7 @@ Note that this patch does NOT work with the +http_proxy_user+ and +http_proxy_pa
|
|
30
42
|
Net::HTTP will not use the proxy server supplied in the environment variable automatically, so you have to supply the proxy address yourself. Otherwise, it's exactly the same:
|
31
43
|
|
32
44
|
require 'net/http'
|
33
|
-
require 'rubysspi/proxy_auth
|
45
|
+
require 'rubysspi/proxy_auth'
|
34
46
|
|
35
47
|
Net::HTTP::Proxy("proxy.corp.com", 8080).start("www.google.com") do |http|
|
36
48
|
resp = http.request_get "/"
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
|
|
5
5
|
spec = Gem::Specification.new do |s|
|
6
6
|
s.name = "rubysspi"
|
7
7
|
s.summary = "A library which adds implements Ruby bindings to the Win32 SSPI library. Also includes a module to add Negotate authentication support to Net::HTTP."
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
s.author = "Justin Bailey"
|
10
10
|
s.email = "jgbailey @nospan@ gmail.com"
|
11
11
|
s.homepage = "http://rubyforge.org/projects/rubysspi/"
|
@@ -22,7 +22,7 @@ is set.
|
|
22
22
|
EOS
|
23
23
|
|
24
24
|
s.platform = Gem::Platform::CURRENT
|
25
|
-
s.files = FileList["lib/**/*", "test/*", "*.txt", "Rakefile"].to_a
|
25
|
+
s.files = FileList["lib/**/*", "test/*", "*.txt", "Rakefile", "spa.rb"].to_a
|
26
26
|
|
27
27
|
s.require_path = "lib"
|
28
28
|
s.autorequire = "rubysspi"
|
data/lib/rubysspi.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'Win32API'
|
2
2
|
require 'base64'
|
3
3
|
|
4
4
|
# Implements bindings to Win32 SSPI functions, focused on authentication to a proxy server over HTTP.
|
@@ -24,13 +24,13 @@ module SSPI
|
|
24
24
|
# Win32 API Functions. Uses dl/win32 to bind methods to constants contained in class.
|
25
25
|
module API
|
26
26
|
# Can be called with AcquireCredentialsHandle.call()
|
27
|
-
AcquireCredentialsHandle = Win32API.new("secur32", "AcquireCredentialsHandle",
|
28
|
-
# Can be called with
|
29
|
-
InitializeSecurityContext = Win32API.new("secur32", "InitializeSecurityContext",
|
30
|
-
# Can be called with
|
31
|
-
DeleteSecurityContext = Win32API.new("secur32", "DeleteSecurityContext",
|
32
|
-
# Can be called with
|
33
|
-
FreeCredentialsHandle = Win32API.new("secur32", "FreeCredentialsHandle",
|
27
|
+
AcquireCredentialsHandle = Win32API.new("secur32", "AcquireCredentialsHandle", 'ppLpppppp', 'L')
|
28
|
+
# Can be called with InitializeSecurityContext.call()
|
29
|
+
InitializeSecurityContext = Win32API.new("secur32", "InitializeSecurityContext", 'pppLLLpLpppp', 'L')
|
30
|
+
# Can be called with DeleteSecurityContext.call()
|
31
|
+
DeleteSecurityContext = Win32API.new("secur32", "DeleteSecurityContext", 'P', 'L')
|
32
|
+
# Can be called with FreeCredentialsHandle.call()
|
33
|
+
FreeCredentialsHandle = Win32API.new("secur32", "FreeCredentialsHandle", 'P', 'L')
|
34
34
|
end
|
35
35
|
|
36
36
|
# SecHandle struct
|
@@ -291,7 +291,8 @@ module SSPI
|
|
291
291
|
@credentials = CredHandle.new
|
292
292
|
ts = TimeStamp.new
|
293
293
|
@identity = Identity.new @user, @domain
|
294
|
-
result = SSPIResult.new(API::AcquireCredentialsHandle.call(nil, "Negotiate", SECPKG_CRED_OUTBOUND, nil, @identity.to_p,
|
294
|
+
result = SSPIResult.new(API::AcquireCredentialsHandle.call(nil, "Negotiate", SECPKG_CRED_OUTBOUND, nil, @identity.to_p,
|
295
|
+
nil, nil, @credentials.to_p, ts.to_p))
|
295
296
|
raise "Error acquire credentials: #{result}" unless result.ok?
|
296
297
|
end
|
297
298
|
|
data/spa.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copy this file to site_ruby directory to enable inclusion of Negotiate authoritation on arbitrary scripts.
|
2
|
+
# For example, to run gems w/ the library use:
|
3
|
+
#
|
4
|
+
# ruby -rspa 'C:\Program Files\ruby\bin\gem'
|
5
|
+
#
|
6
|
+
# Notice the gem script is executed directly, instead of executing the gem.cmd file.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
if (Pathname.new(__FILE__).dirname + "/lib/rubysspi.rb").exist?
|
11
|
+
# If running directly from root of gem, load rubysspi directly
|
12
|
+
$: << (Pathname.new(__FILE__).dirname + "/lib").to_s
|
13
|
+
require 'rubysspi/proxy_auth'
|
14
|
+
else
|
15
|
+
# Production require - must be running from site_ruby. Use rubygems to get
|
16
|
+
# to rubysspi
|
17
|
+
require 'rubygems'
|
18
|
+
require 'rubysspi/proxy_auth'
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'net/http'
|
3
|
+
require 'rubygems'
|
4
|
+
$: << (File.dirname(__FILE__) << "/../lib")
|
5
|
+
require 'rubysspi/proxy_auth'
|
6
|
+
|
7
|
+
class NTLMTest < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
assert ENV["http_proxy"], "http_proxy must be set before running tests."
|
10
|
+
end
|
11
|
+
|
12
|
+
# Previous implementation of rubysspi used dl/win32 and a
|
13
|
+
# bug occurred when gem list was executed. This tests to ensure
|
14
|
+
# bug does not come back.
|
15
|
+
def test_gem_list
|
16
|
+
Gem.manage_gems
|
17
|
+
assert_nothing_raised "'gem list --remote rubysspi' failed to execute" do
|
18
|
+
Gem::GemRunner.new.run(["list", "--remote", "rubysspi"])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
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: 0.0.
|
7
|
-
date: 2006-07-
|
6
|
+
version: 0.0.2
|
7
|
+
date: 2006-07-17 00:00:00 -07:00
|
8
8
|
summary: A library which adds 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
|
@@ -33,9 +33,11 @@ files:
|
|
33
33
|
- lib/rubysspi.rb
|
34
34
|
- lib/rubysspi/proxy_auth.rb
|
35
35
|
- test/ruby_sspi_test.rb
|
36
|
+
- test/test_gem_list.rb
|
36
37
|
- test/test_net_http.rb
|
37
38
|
- README.txt
|
38
39
|
- Rakefile
|
40
|
+
- spa.rb
|
39
41
|
test_files: []
|
40
42
|
|
41
43
|
rdoc_options:
|