gssapi 1.2.0 → 1.3.1
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.
- checksums.yaml +5 -5
- data/.gitignore +11 -0
- data/Changelog.md +9 -0
- data/VERSION +1 -1
- data/examples/gss_iov_helpers.rb +1 -1
- data/gssapi.gemspec +2 -0
- data/lib/gssapi/lib_gssapi.rb +7 -2
- data/lib/gssapi/lib_gssapi_loader.rb +2 -0
- data/lib/gssapi/simple.rb +12 -1
- data/test/spec/gssapi_simple_spec.rb +54 -8
- data/test/spec/test_buffer_spec.rb +1 -1
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3783cdc3cf7cac849ba482b3b03e5f73593f91beab95e31b8dfdd296a8cd0e4a
|
4
|
+
data.tar.gz: 11d7a7b367ad6f7e8f3420c094976dceee1bdedb7907bef5614e6a5846164cb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 462afcc325ae6e9c0c3b63ba711569bda177c6443792031a857a01808ba63e9e5a90c0cc455518c431e39275dc68421b6b426a89bd6cb5bd61a5aebd53a04a3b
|
7
|
+
data.tar.gz: d76e23ca9d859dc7a11589c8490d92c455e6874336efc00a070442f695713aa5adcc008767fc3943176aaec8a4dfe0f86b5f70cfc003650ab33f0d4bfea9d916
|
data/.gitignore
ADDED
data/Changelog.md
CHANGED
@@ -12,3 +12,12 @@
|
|
12
12
|
|
13
13
|
## Version 1.2.0
|
14
14
|
* Move IOV and AEAD to gssapi/extensions.rb so it can be loaded separately when needed
|
15
|
+
|
16
|
+
## Version 1.3.0
|
17
|
+
|
18
|
+
Sorry everyone that this has taken so long to go out. I don't really work much
|
19
|
+
with GSSAPI so it hasn't been a priority for me.
|
20
|
+
|
21
|
+
* Implemented delegation and added verify_mic. Thanks @mfazekas
|
22
|
+
* Add loading of MIT GSS libs for solaris/smartos. Thanks @fac
|
23
|
+
* Fix corruption in iov_decrypt example. Thanks @Iristyle
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.1
|
data/examples/gss_iov_helpers.rb
CHANGED
data/gssapi.gemspec
CHANGED
data/lib/gssapi/lib_gssapi.rb
CHANGED
@@ -179,11 +179,13 @@ module GSSAPI
|
|
179
179
|
class GssCtxIdT < GssPointer
|
180
180
|
def self.release_ptr(context_ptr)
|
181
181
|
min_stat = FFI::MemoryPointer.new :OM_uint32
|
182
|
-
|
182
|
+
ptr_p = FFI::MemoryPointer.new :pointer
|
183
|
+
ctx_ptr = ptr_p.write_pointer(context_ptr)
|
184
|
+
maj_stat = LibGSSAPI.gss_delete_sec_context(min_stat, ctx_ptr, LibGSSAPI::GSS_C_NO_BUFFER)
|
183
185
|
end
|
184
186
|
|
185
187
|
def self.gss_c_no_context
|
186
|
-
|
188
|
+
GssPointer.new(GSSAPI::LibGSSAPI::GSS_C_NO_CONTEXT)
|
187
189
|
end
|
188
190
|
end
|
189
191
|
|
@@ -281,6 +283,9 @@ module GSSAPI
|
|
281
283
|
# OM_uint32 gss_get_mic(OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer)
|
282
284
|
attach_function :gss_get_mic, [:pointer, :pointer, :OM_uint32, :pointer, :pointer], :OM_uint32
|
283
285
|
|
286
|
+
# OM_uint32 gss_verify_mic (OM_uint32 *minor_status,const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer,const gss_buffer_t token_buffer, gss_qop_t qop_state)
|
287
|
+
attach_function :gss_verify_mic, [:pointer, :pointer, :pointer, :pointer, :OM_uint32], :OM_uint32
|
288
|
+
|
284
289
|
# OM_uint32 gss_delete_sec_context(OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token);
|
285
290
|
attach_function :gss_delete_sec_context, [:pointer, :pointer, :pointer], :OM_uint32
|
286
291
|
|
@@ -30,6 +30,8 @@ module GSSAPI
|
|
30
30
|
gssapi32_path = ENV['gssapi32'] ? ENV['gssapi32'] : 'C:\Program Files (x86)\MIT\Kerberos\bin\gssapi32.dll'
|
31
31
|
ffi_lib gssapi32_path, FFI::Library::LIBC # Required the MIT Kerberos libraries to be installed
|
32
32
|
ffi_convention :stdcall
|
33
|
+
when /solaris/
|
34
|
+
ffi_lib 'libgss.so', 'mech_krb5.so', FFI::Library::LIBC
|
33
35
|
else
|
34
36
|
raise LoadError, "This host OS (#{host_os}) is not supported by ruby gssapi and the MIT libraries."
|
35
37
|
end
|
data/lib/gssapi/simple.rb
CHANGED
@@ -59,6 +59,7 @@ module GSSAPI
|
|
59
59
|
# @option opts [Fixnum] :flags override all other flags. If you set the :delegate option this option will override it.
|
60
60
|
# @see http://tools.ietf.org/html/rfc4121#section-4.1.1.1
|
61
61
|
# @option opts [Boolean] :delegate if true set the credential delegate flag
|
62
|
+
# [Credentials] :credentials set to open the context in behalf of someone (delegated_credentials)
|
62
63
|
# @return [String, true] if a continuation flag is set it will return the output token that is needed to send
|
63
64
|
# to the remote host. Otherwise it returns true and the GSS security context has been established.
|
64
65
|
def init_context(in_token = nil, opts = {})
|
@@ -79,7 +80,7 @@ module GSSAPI
|
|
79
80
|
|
80
81
|
|
81
82
|
maj_stat = LibGSSAPI.gss_init_sec_context(min_stat,
|
82
|
-
|
83
|
+
opts[:credentials],
|
83
84
|
pctx,
|
84
85
|
@int_svc_name,
|
85
86
|
mech,
|
@@ -162,6 +163,16 @@ module GSSAPI
|
|
162
163
|
out_buff.value
|
163
164
|
end
|
164
165
|
|
166
|
+
def verify_mic(token,mic)
|
167
|
+
min_stat = FFI::MemoryPointer.new :OM_uint32
|
168
|
+
in_buff = GSSAPI::LibGSSAPI::UnManagedGssBufferDesc.new
|
169
|
+
in_buff.value = token
|
170
|
+
mic_buff = GSSAPI::LibGSSAPI::UnManagedGssBufferDesc.new
|
171
|
+
mic_buff.value = mic
|
172
|
+
maj_stat = GSSAPI::LibGSSAPI.gss_verify_mic(min_stat, @context, in_buff.pointer, mic_buff.pointer, 0)
|
173
|
+
raise GssApiError.new(maj_stat, min_stat), "Failed to gss_verify_mic" if maj_stat != 0
|
174
|
+
return (maj_stat == 0)
|
175
|
+
end
|
165
176
|
|
166
177
|
# Get textual representation of internal GSS name
|
167
178
|
# @return [String] textual representation of internal GSS name
|
@@ -6,19 +6,65 @@ require 'yaml'
|
|
6
6
|
|
7
7
|
describe GSSAPI::Simple, 'Test the Simple GSSAPI interface' do
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
let(:conf) { YAML.load_file "#{File.dirname(__FILE__)}/conf_file.yaml" }
|
10
|
+
let(:cli) { GSSAPI::Simple.new(conf['s_host'], conf['s_service']) }
|
11
|
+
let(:srv ) { GSSAPI::Simple.new(conf['s_host'], conf['s_service'], conf['keytab']) }
|
12
12
|
|
13
13
|
it 'should get the initial context for a client' do
|
14
|
-
|
15
|
-
token
|
16
|
-
token.should_not be_empty
|
14
|
+
token = cli.init_context
|
15
|
+
expect(token).not_to be_empty
|
17
16
|
end
|
18
17
|
|
19
18
|
it 'should acquire credentials for a server service' do
|
20
|
-
|
21
|
-
gsscli.acquire_credentials.should be_true
|
19
|
+
expect(srv.acquire_credentials).to eq(true)
|
22
20
|
end
|
23
21
|
|
22
|
+
def play_handshake(cli,srv,clioptions={})
|
23
|
+
clitoken = cli.init_context(nil, clioptions)
|
24
|
+
expect(clitoken).not_to be_empty
|
25
|
+
|
26
|
+
expect(srv.acquire_credentials).to eq(true)
|
27
|
+
|
28
|
+
srvoktok = srv.accept_context(clitoken)
|
29
|
+
expect(srvoktok).not_to be_empty
|
30
|
+
|
31
|
+
ret = cli.init_context(srvoktok)
|
32
|
+
expect(ret).to eq(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'client server should handshake' do
|
36
|
+
play_handshake(cli,srv)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'mic' do
|
40
|
+
play_handshake(cli,srv)
|
41
|
+
|
42
|
+
secret = "this is secreta"
|
43
|
+
|
44
|
+
mic = cli.get_mic(secret)
|
45
|
+
|
46
|
+
expect(srv.verify_mic(secret,mic)).to eq(true)
|
47
|
+
end
|
48
|
+
|
49
|
+
context "no delegation" do
|
50
|
+
it "sets delegated_credentials to nil" do
|
51
|
+
play_handshake(cli,srv,:delegate => false)
|
52
|
+
expect(srv.delegated_credentials).to be_nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "delegation" do
|
57
|
+
it "sets delegated_credentials to valid" do
|
58
|
+
play_handshake(cli,srv,:delegate => true)
|
59
|
+
expect(srv.delegated_credentials).not_to be_nil
|
60
|
+
delegated_display_name = srv.display_name
|
61
|
+
|
62
|
+
host2 = conf['s_host2'] || conf['s_host']
|
63
|
+
service2 = conf['s_service2'] || conf['s_service']
|
64
|
+
cli_del = GSSAPI::Simple.new(host2, service2)
|
65
|
+
srv_del = GSSAPI::Simple.new(host2, service2, conf['keytab2'])
|
66
|
+
play_handshake(cli_del,srv_del,:credentials => srv.delegated_credentials)
|
67
|
+
expect(srv_del.display_name).to eq(delegated_display_name)
|
68
|
+
end
|
69
|
+
end
|
24
70
|
end
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gssapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Wanek
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry-byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: |2
|
28
42
|
A FFI wrapper around the system GSSAPI library. Please make sure and read the
|
29
43
|
Yard docs or standard GSSAPI documentation if you have any questions.
|
@@ -38,6 +52,7 @@ extra_rdoc_files:
|
|
38
52
|
- COPYING
|
39
53
|
- Changelog.md
|
40
54
|
files:
|
55
|
+
- ".gitignore"
|
41
56
|
- COPYING
|
42
57
|
- Changelog.md
|
43
58
|
- Gemfile
|
@@ -64,28 +79,27 @@ homepage: http://github.com/zenchild/gssapi
|
|
64
79
|
licenses:
|
65
80
|
- MIT
|
66
81
|
metadata: {}
|
67
|
-
post_install_message:
|
82
|
+
post_install_message:
|
68
83
|
rdoc_options:
|
69
|
-
- -x
|
84
|
+
- "-x"
|
70
85
|
- test/
|
71
|
-
- -x
|
86
|
+
- "-x"
|
72
87
|
- examples/
|
73
88
|
require_paths:
|
74
89
|
- lib
|
75
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
91
|
requirements:
|
77
|
-
- -
|
92
|
+
- - ">="
|
78
93
|
- !ruby/object:Gem::Version
|
79
94
|
version: 1.8.7
|
80
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
96
|
requirements:
|
82
|
-
- -
|
97
|
+
- - ">="
|
83
98
|
- !ruby/object:Gem::Version
|
84
99
|
version: '0'
|
85
100
|
requirements: []
|
86
|
-
|
87
|
-
|
88
|
-
signing_key:
|
101
|
+
rubygems_version: 3.0.8
|
102
|
+
signing_key:
|
89
103
|
specification_version: 4
|
90
104
|
summary: A FFI wrapper around the system GSSAPI library.
|
91
105
|
test_files: []
|