mongo 1.10.2 → 1.11.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +43 -9
- data/VERSION +1 -1
- data/lib/mongo.rb +1 -0
- data/lib/mongo/collection.rb +36 -21
- data/lib/mongo/connection/pool.rb +14 -22
- data/lib/mongo/cursor.rb +13 -0
- data/lib/mongo/db.rb +18 -13
- data/lib/mongo/functional.rb +0 -2
- data/lib/mongo/functional/authentication.rb +35 -25
- data/lib/mongo/legacy.rb +4 -4
- data/mongo.gemspec +0 -5
- data/test/functional/authentication_test.rb +3 -2
- data/test/functional/bulk_write_collection_view_test.rb +9 -14
- data/test/functional/client_test.rb +42 -43
- data/test/functional/collection_test.rb +1073 -995
- data/test/functional/collection_writer_test.rb +1 -1
- data/test/functional/cursor_fail_test.rb +3 -9
- data/test/functional/cursor_message_test.rb +14 -15
- data/test/functional/cursor_test.rb +224 -166
- data/test/functional/db_api_test.rb +262 -261
- data/test/functional/db_connection_test.rb +1 -3
- data/test/functional/db_test.rb +116 -115
- data/test/functional/grid_file_system_test.rb +108 -108
- data/test/functional/pool_test.rb +73 -0
- data/test/functional/timeout_test.rb +2 -0
- data/test/helpers/test_unit.rb +146 -11
- data/test/replica_set/authentication_test.rb +4 -2
- data/test/replica_set/basic_test.rb +5 -13
- data/test/replica_set/client_test.rb +8 -6
- data/test/replica_set/complex_connect_test.rb +3 -0
- data/test/replica_set/count_test.rb +2 -0
- data/test/replica_set/cursor_test.rb +5 -0
- data/test/replica_set/insert_test.rb +1 -1
- data/test/replica_set/max_values_test.rb +1 -1
- data/test/replica_set/pinning_test.rb +1 -1
- data/test/replica_set/query_test.rb +1 -1
- data/test/replica_set/read_preference_test.rb +7 -1
- data/test/replica_set/refresh_test.rb +11 -8
- data/test/replica_set/replication_ack_test.rb +2 -1
- data/test/sharded_cluster/basic_test.rb +17 -11
- data/test/shared/authentication/basic_auth_shared.rb +59 -98
- data/test/shared/authentication/bulk_api_auth_shared.rb +11 -21
- data/test/shared/authentication/gssapi_shared.rb +28 -21
- data/test/test_helper.rb +5 -0
- data/test/tools/mongo_config.rb +96 -11
- metadata +4 -5
- metadata.gz.sig +0 -0
- data/lib/mongo/functional/sasl_java.rb +0 -48
@@ -17,19 +17,12 @@ module BulkAPIAuthTests
|
|
17
17
|
include Mongo
|
18
18
|
|
19
19
|
def init_auth_bulk
|
20
|
-
# enable authentication
|
21
|
-
@admin = @client["admin"]
|
22
|
-
@admin.add_user('admin', 'password', nil, :roles => ['readWriteAnyDatabase',
|
23
|
-
'userAdminAnyDatabase',
|
24
|
-
'dbAdminAnyDatabase'])
|
25
|
-
@admin.authenticate('admin', 'password')
|
26
|
-
|
27
20
|
# Set up the test db
|
28
21
|
@collection = @db["bulk-api-auth-tests"]
|
29
22
|
|
30
23
|
# db user can insert but not remove
|
31
24
|
res = BSON::OrderedHash.new
|
32
|
-
res[:db] =
|
25
|
+
res[:db] = @db.name
|
33
26
|
res[:collection] = ""
|
34
27
|
|
35
28
|
cmd = BSON::OrderedHash.new
|
@@ -47,31 +40,28 @@ module BulkAPIAuthTests
|
|
47
40
|
@db.command(cmd)
|
48
41
|
@db.add_user('insertAndRemove', 'password', nil, :roles => ['insertAndRemove'])
|
49
42
|
|
50
|
-
# for 2.4 cleanup etc.
|
51
|
-
@db.add_user('admin', 'password', nil, :roles => ['readWrite',
|
52
|
-
'userAdmin',
|
53
|
-
'dbAdmin'])
|
54
43
|
@admin.logout
|
55
44
|
end
|
56
45
|
|
57
|
-
def teardown_bulk
|
58
|
-
remove_all_users_and_roles(@db, 'admin', 'password')
|
59
|
-
remove_all_users_and_roles(@admin, 'admin', 'password')
|
60
|
-
end
|
61
|
-
|
62
46
|
def clear_collection(collection)
|
63
|
-
@admin.authenticate(
|
47
|
+
@admin.authenticate(TEST_USER, TEST_USER_PWD)
|
64
48
|
collection.remove
|
65
49
|
@admin.logout
|
66
50
|
end
|
67
51
|
|
68
|
-
def
|
69
|
-
@
|
52
|
+
def teardown_bulk
|
53
|
+
remove_all_users_and_roles(@db)
|
54
|
+
remove_all_users_and_roles(@admin)
|
55
|
+
end
|
56
|
+
|
57
|
+
def remove_all_users_and_roles(database)
|
58
|
+
@admin.authenticate(TEST_USER, TEST_USER_PWD)
|
70
59
|
if @version < '2.5.3'
|
71
60
|
database['system.users'].remove
|
72
61
|
else
|
73
62
|
database.command({:dropAllRolesFromDatabase => 1})
|
74
|
-
|
63
|
+
# Don't delete the TEST_USER from the TEST_DB, it is needed for future tests
|
64
|
+
database.command({:dropAllUsersFromDatabase => 1}) unless database.name == TEST_DB
|
75
65
|
end
|
76
66
|
@admin.logout
|
77
67
|
end
|
@@ -28,7 +28,8 @@ module GSSAPITests
|
|
28
28
|
# export MONGODB_GSSAPI_REALM='applicationuser@example.com'
|
29
29
|
# export MONGODB_GSSAPI_KDC='SERVER.DOMAIN.COM'
|
30
30
|
#
|
31
|
-
# You must
|
31
|
+
# You must use kinit when on MRI.
|
32
|
+
# You have the option of providing a config file that references a keytab file on JRuby:
|
32
33
|
#
|
33
34
|
# export JAAS_LOGIN_CONFIG_FILE='file:///path/to/config/file'
|
34
35
|
#
|
@@ -37,10 +38,12 @@ module GSSAPITests
|
|
37
38
|
MONGODB_GSSAPI_REALM = ENV['MONGODB_GSSAPI_REALM']
|
38
39
|
MONGODB_GSSAPI_KDC = ENV['MONGODB_GSSAPI_KDC']
|
39
40
|
MONGODB_GSSAPI_PORT = ENV['MONGODB_GSSAPI_PORT'] || '27017'
|
40
|
-
|
41
|
+
MONGODB_GSSAPI_DB = ENV['MONGODB_GSSAPI_DB']
|
42
|
+
JAAS_LOGIN_CONFIG_FILE = ENV['JAAS_LOGIN_CONFIG_FILE'] # only JRuby
|
41
43
|
|
42
44
|
if ENV.key?('MONGODB_GSSAPI_HOST') && ENV.key?('MONGODB_GSSAPI_USER') &&
|
43
|
-
ENV.key?('MONGODB_GSSAPI_REALM') && ENV.key?('MONGODB_GSSAPI_KDC') &&
|
45
|
+
ENV.key?('MONGODB_GSSAPI_REALM') && ENV.key?('MONGODB_GSSAPI_KDC') &&
|
46
|
+
ENV.key?('MONGODB_GSSAPI_DB')
|
44
47
|
def test_gssapi_authenticate
|
45
48
|
client = Mongo::MongoClient.new(MONGODB_GSSAPI_HOST, MONGODB_GSSAPI_PORT)
|
46
49
|
if client['admin'].command(:isMaster => 1)['setName']
|
@@ -48,7 +51,7 @@ module GSSAPITests
|
|
48
51
|
end
|
49
52
|
|
50
53
|
set_system_properties
|
51
|
-
db = client[
|
54
|
+
db = client[MONGODB_GSSAPI_DB]
|
52
55
|
db.authenticate(MONGODB_GSSAPI_USER, nil, nil, nil, 'GSSAPI')
|
53
56
|
assert db.command(:dbstats => 1)
|
54
57
|
|
@@ -68,7 +71,7 @@ module GSSAPITests
|
|
68
71
|
uri = "mongodb://#{username}@#{ENV['MONGODB_GSSAPI_HOST']}:#{ENV['MONGODB_GSSAPI_PORT']}/?" +
|
69
72
|
"authMechanism=GSSAPI"
|
70
73
|
client = @client.class.from_uri(uri)
|
71
|
-
assert client[
|
74
|
+
assert client[MONGODB_GSSAPI_DB].command(:dbstats => 1)
|
72
75
|
end
|
73
76
|
|
74
77
|
def test_wrong_service_name_fails
|
@@ -79,8 +82,8 @@ module GSSAPITests
|
|
79
82
|
end
|
80
83
|
|
81
84
|
set_system_properties
|
82
|
-
assert_raise_error
|
83
|
-
client[
|
85
|
+
assert_raise_error Mongo::AuthenticationError do
|
86
|
+
client[MONGODB_GSSAPI_DB].authenticate(MONGODB_GSSAPI_USER, nil, nil, nil, 'GSSAPI', extra_opts)
|
84
87
|
end
|
85
88
|
end
|
86
89
|
|
@@ -92,8 +95,8 @@ module GSSAPITests
|
|
92
95
|
uri = "mongodb://#{username}@#{ENV['MONGODB_GSSAPI_HOST']}:#{ENV['MONGODB_GSSAPI_PORT']}/?" +
|
93
96
|
"authMechanism=GSSAPI&gssapiServiceName=example"
|
94
97
|
client = @client.class.from_uri(uri)
|
95
|
-
assert_raise_error
|
96
|
-
client[
|
98
|
+
assert_raise_error Mongo::AuthenticationError do
|
99
|
+
client[MONGODB_GSSAPI_DB].command(:dbstats => 1)
|
97
100
|
end
|
98
101
|
end
|
99
102
|
|
@@ -103,10 +106,11 @@ module GSSAPITests
|
|
103
106
|
set_system_properties
|
104
107
|
|
105
108
|
Mongo::Sasl::GSSAPI.expects(:authenticate).with do |username, client, socket, opts|
|
106
|
-
opts[:gssapi_service_name]
|
107
|
-
opts[:canonicalize_host_name]
|
109
|
+
assert_equal opts[:gssapi_service_name], extra_opts[:gssapi_service_name]
|
110
|
+
assert_equal opts[:canonicalize_host_name], extra_opts[:canonicalize_host_name]
|
111
|
+
[ username, client, socket, opts ]
|
108
112
|
end.returns('ok' => true )
|
109
|
-
client[
|
113
|
+
client[MONGODB_GSSAPI_DB].authenticate(MONGODB_GSSAPI_USER, nil, nil, nil, 'GSSAPI', extra_opts)
|
110
114
|
end
|
111
115
|
|
112
116
|
def test_extra_opts_uri
|
@@ -114,8 +118,9 @@ module GSSAPITests
|
|
114
118
|
set_system_properties
|
115
119
|
|
116
120
|
Mongo::Sasl::GSSAPI.expects(:authenticate).with do |username, client, socket, opts|
|
117
|
-
opts[:gssapi_service_name]
|
118
|
-
opts[:canonicalize_host_name]
|
121
|
+
assert_equal opts[:gssapi_service_name], extra_opts[:gssapi_service_name]
|
122
|
+
assert_equal opts[:canonicalize_host_name], extra_opts[:canonicalize_host_name]
|
123
|
+
[ username, client, socket, opts ]
|
119
124
|
end.returns('ok' => true)
|
120
125
|
|
121
126
|
require 'cgi'
|
@@ -124,7 +129,7 @@ module GSSAPITests
|
|
124
129
|
"authMechanism=GSSAPI&gssapiServiceName=example&canonicalizeHostName=true"
|
125
130
|
client = @client.class.from_uri(uri)
|
126
131
|
client.expects(:receive_message).returns([[{ 'ok' => 1 }], 1, 1])
|
127
|
-
client[
|
132
|
+
client[MONGODB_GSSAPI_DB].command(:dbstats => 1)
|
128
133
|
end
|
129
134
|
|
130
135
|
# In order to run this test, you must set the following environment variable:
|
@@ -137,7 +142,7 @@ module GSSAPITests
|
|
137
142
|
set_system_properties
|
138
143
|
client = Mongo::MongoClient.new(ENV['MONGODB_GSSAPI_HOST_IP'], MONGODB_GSSAPI_PORT)
|
139
144
|
|
140
|
-
db = client[
|
145
|
+
db = client[MONGODB_GSSAPI_DB]
|
141
146
|
db.authenticate(MONGODB_GSSAPI_USER, nil, nil, nil, 'GSSAPI', extra_opts)
|
142
147
|
assert db.command(:dbstats => 1)
|
143
148
|
end
|
@@ -148,16 +153,18 @@ module GSSAPITests
|
|
148
153
|
client = Mongo::MongoClient.new(MONGODB_GSSAPI_HOST)
|
149
154
|
|
150
155
|
assert_raise Mongo::MongoArgumentError do
|
151
|
-
client[
|
156
|
+
client[MONGODB_GSSAPI_DB].authenticate(MONGODB_GSSAPI_USER, nil, nil, nil, 'GSSAPI', extra_opts)
|
152
157
|
end
|
153
158
|
end
|
154
159
|
|
155
160
|
private
|
156
161
|
def set_system_properties
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
162
|
+
if RUBY_PLATFORM =~ /java/
|
163
|
+
java.lang.System.set_property 'javax.security.auth.useSubjectCredsOnly', 'false'
|
164
|
+
java.lang.System.set_property "java.security.krb5.realm", MONGODB_GSSAPI_REALM
|
165
|
+
java.lang.System.set_property "java.security.krb5.kdc", MONGODB_GSSAPI_KDC
|
166
|
+
java.lang.System.set_property "java.security.auth.login.config", JAAS_LOGIN_CONFIG_FILE if JAAS_LOGIN_CONFIG_FILE
|
167
|
+
end
|
161
168
|
end
|
162
169
|
end
|
163
170
|
|
data/test/test_helper.rb
CHANGED
data/test/tools/mongo_config.rb
CHANGED
@@ -83,9 +83,11 @@ module Mongo
|
|
83
83
|
make_config(opts)
|
84
84
|
when :routers
|
85
85
|
make_router(config, opts)
|
86
|
+
when :shards
|
87
|
+
make_standalone_shard(kind, opts)
|
86
88
|
else
|
87
89
|
make_mongod(kind, opts)
|
88
|
-
|
90
|
+
end
|
89
91
|
|
90
92
|
replica_count += 1 if [:replicas, :arbiters].member?(kind)
|
91
93
|
node
|
@@ -130,25 +132,37 @@ module Mongo
|
|
130
132
|
:ipv6 => ipv6)
|
131
133
|
end
|
132
134
|
|
135
|
+
def self.key_file(opts)
|
136
|
+
keyFile = opts[:key_file] || '/test/fixtures/auth/keyfile'
|
137
|
+
keyFile = Dir.pwd << keyFile
|
138
|
+
system "chmod 600 #{keyFile}"
|
139
|
+
keyFile
|
140
|
+
end
|
141
|
+
|
142
|
+
# A regular mongod minus --auth and plus --keyFile.
|
143
|
+
def self.make_standalone_shard(kind, opts)
|
144
|
+
params = make_mongod(kind, opts)
|
145
|
+
params.delete(:auth)
|
146
|
+
params.merge(:keyFile => key_file(opts))
|
147
|
+
end
|
148
|
+
|
133
149
|
def self.make_replica(opts, id)
|
134
150
|
params = make_mongod('replicas', opts)
|
135
151
|
|
136
152
|
replSet = opts[:replSet] || 'ruby-driver-test'
|
137
153
|
oplogSize = opts[:oplog_size] || 5
|
138
|
-
keyFile = opts[:key_file] || '/test/fixtures/auth/keyfile'
|
139
|
-
|
140
|
-
keyFile = Dir.pwd << keyFile
|
141
|
-
system "chmod 600 #{keyFile}"
|
142
154
|
|
143
155
|
params.merge(:_id => id,
|
144
156
|
:replSet => replSet,
|
145
157
|
:oplogSize => oplogSize,
|
146
|
-
:keyFile =>
|
158
|
+
:keyFile => key_file(opts))
|
147
159
|
end
|
148
160
|
|
149
161
|
def self.make_config(opts)
|
150
162
|
params = make_mongod('configs', opts)
|
151
|
-
params.
|
163
|
+
params.delete(:auth)
|
164
|
+
params.merge(:configsvr => true,
|
165
|
+
:keyFile => key_file(opts))
|
152
166
|
end
|
153
167
|
|
154
168
|
def self.make_router(config, opts)
|
@@ -156,8 +170,9 @@ module Mongo
|
|
156
170
|
mongos = ENV['MONGOS'] || 'mongos'
|
157
171
|
|
158
172
|
params.merge(
|
159
|
-
:command
|
160
|
-
:configdb => self.configdb(config)
|
173
|
+
:command => mongos,
|
174
|
+
:configdb => self.configdb(config),
|
175
|
+
:keyFile => key_file(opts)
|
161
176
|
)
|
162
177
|
end
|
163
178
|
|
@@ -339,6 +354,35 @@ module Mongo
|
|
339
354
|
@servers.collect{|k,v| (!key || key == k) ? v : nil}.flatten.compact
|
340
355
|
end
|
341
356
|
|
357
|
+
def ensure_authenticated(client)
|
358
|
+
begin
|
359
|
+
client[TEST_DB].authenticate(TEST_USER, TEST_USER_PWD)
|
360
|
+
rescue Mongo::MongoArgumentError => ex
|
361
|
+
# client is already authenticated
|
362
|
+
raise ex unless ex.message =~ /already authenticated/
|
363
|
+
rescue Mongo::AuthenticationError => ex
|
364
|
+
# 1) The creds are wrong
|
365
|
+
# 2) Or the user doesn't exist
|
366
|
+
roles = [ 'dbAdminAnyDatabase',
|
367
|
+
'userAdminAnyDatabase',
|
368
|
+
'readWriteAnyDatabase',
|
369
|
+
'clusterAdmin' ]
|
370
|
+
begin
|
371
|
+
# Try to add the user for case (2)
|
372
|
+
client[TEST_DB].add_user(TEST_USER, TEST_USER_PWD, nil, :roles => roles)
|
373
|
+
client[TEST_DB].authenticate(TEST_USER, TEST_USER_PWD)
|
374
|
+
rescue Mongo::ConnectionFailure, Mongo::OperationFailure => ex
|
375
|
+
# Maybe not master, so try to authenticate
|
376
|
+
# 2.2 throws an OperationFailure if add_user fails
|
377
|
+
begin
|
378
|
+
client[TEST_DB].authenticate(TEST_USER, TEST_USER_PWD)
|
379
|
+
rescue => ex
|
380
|
+
# Maybe creds are wrong, nothing we can do
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
342
386
|
def command( cmd_servers, db_name, cmd, opts = {} )
|
343
387
|
ret = []
|
344
388
|
cmd = cmd.class == Array ? cmd : [ cmd ]
|
@@ -348,6 +392,7 @@ module Mongo
|
|
348
392
|
debug 3, cmd_server.inspect
|
349
393
|
cmd_server = cmd_server.config if cmd_server.is_a?(DbServer)
|
350
394
|
client = Mongo::MongoClient.new(cmd_server[:host], cmd_server[:port])
|
395
|
+
ensure_authenticated(client)
|
351
396
|
cmd.each do |c|
|
352
397
|
debug 3, "ClusterManager.command c:#{c.inspect}"
|
353
398
|
response = client[db_name].command( c, opts )
|
@@ -361,6 +406,10 @@ module Mongo
|
|
361
406
|
ret.size == 1 ? ret.first : ret
|
362
407
|
end
|
363
408
|
|
409
|
+
def replica_set?
|
410
|
+
!!config[:replicas]
|
411
|
+
end
|
412
|
+
|
364
413
|
def repl_set_get_status
|
365
414
|
command( @config[:replicas], 'admin', { :replSetGetStatus => 1 }, {:check_response => false } )
|
366
415
|
end
|
@@ -368,6 +417,7 @@ module Mongo
|
|
368
417
|
def repl_set_get_config
|
369
418
|
host, port = primary_name.split(":")
|
370
419
|
client = Mongo::MongoClient.new(host, port)
|
420
|
+
ensure_authenticated(client)
|
371
421
|
client['local']['system.replset'].find_one
|
372
422
|
end
|
373
423
|
|
@@ -389,7 +439,7 @@ module Mongo
|
|
389
439
|
states = nil
|
390
440
|
healthy = false
|
391
441
|
|
392
|
-
|
442
|
+
80.times do
|
393
443
|
# enter the thunderdome...
|
394
444
|
states = repl_set_get_status.zip(repl_set_is_master)
|
395
445
|
healthy = states.all? do |status, is_master|
|
@@ -442,6 +492,11 @@ module Mongo
|
|
442
492
|
repl_set_seeds.join(',')
|
443
493
|
end
|
444
494
|
|
495
|
+
def members_uri
|
496
|
+
members = @config[:replicas] || @config[:routers]
|
497
|
+
members.collect{|node| "#{node[:host]}:#{node[:port]}"}.join(',')
|
498
|
+
end
|
499
|
+
|
445
500
|
def repl_set_name
|
446
501
|
@config[:replicas].first[:replSet]
|
447
502
|
end
|
@@ -553,7 +608,15 @@ module Mongo
|
|
553
608
|
end
|
554
609
|
|
555
610
|
def addshards(shards = @config[:shards])
|
556
|
-
|
611
|
+
begin
|
612
|
+
command( @config[:routers].first, 'admin', Array(shards).collect{|s| { :addshard => "#{s[:host]}:#{s[:port]}" } } )
|
613
|
+
rescue Mongo::OperationFailure => ex
|
614
|
+
# Because we cannot run the listshards command under the localhost
|
615
|
+
# exception in > 2.7.1, we run the risk of attempting to add the same shard twice.
|
616
|
+
# Our tests may add a local db to a shard, if the cluster is still up,
|
617
|
+
# then we can ignore this.
|
618
|
+
raise ex unless ex.message =~ /host already used/
|
619
|
+
end
|
557
620
|
end
|
558
621
|
|
559
622
|
def listshards
|
@@ -593,7 +656,29 @@ module Mongo
|
|
593
656
|
end
|
594
657
|
alias :restart :start
|
595
658
|
|
659
|
+
def delete_users
|
660
|
+
cmd_servers = replica_set? ? [ primary ] : routers
|
661
|
+
|
662
|
+
cmd_servers.each do |cmd_server|
|
663
|
+
begin
|
664
|
+
client = Mongo::MongoClient.new(cmd_server.config[:host],
|
665
|
+
cmd_server.config[:port])
|
666
|
+
ensure_authenticated(client)
|
667
|
+
db = client[TEST_DB]
|
668
|
+
|
669
|
+
if client.server_version < '2.5'
|
670
|
+
db['system.users'].remove
|
671
|
+
else
|
672
|
+
db.command(:dropAllUsersFromDatabase => 1)
|
673
|
+
end
|
674
|
+
break
|
675
|
+
rescue Mongo::ConnectionFailure
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
596
680
|
def stop
|
681
|
+
delete_users
|
597
682
|
servers.each{|server| server.stop}
|
598
683
|
self
|
599
684
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emily Stolfo
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
JrZM8w8wGbIOeLtoQqa7HB/jOYbTahH7KMNh2LHAbOR93hNIJxVRa4iwxiMQ75tN
|
35
35
|
9WUIAJ4AEtjwRg1Bz0OwDo3aucPCBpx77+/FWhv7JYY=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2014-
|
37
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: bson
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - '='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
45
|
+
version: 1.11.1
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
49
49
|
requirements:
|
50
50
|
- - '='
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.
|
52
|
+
version: 1.11.1
|
53
53
|
description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
|
54
54
|
email: mongodb-dev@googlegroups.com
|
55
55
|
executables:
|
@@ -83,7 +83,6 @@ files:
|
|
83
83
|
- lib/mongo/functional/authentication.rb
|
84
84
|
- lib/mongo/functional/logging.rb
|
85
85
|
- lib/mongo/functional/read_preference.rb
|
86
|
-
- lib/mongo/functional/sasl_java.rb
|
87
86
|
- lib/mongo/functional/uri_parser.rb
|
88
87
|
- lib/mongo/functional/write_concern.rb
|
89
88
|
- lib/mongo/gridfs.rb
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'jruby'
|
16
|
-
|
17
|
-
include Java
|
18
|
-
|
19
|
-
jar_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../../ext/jsasl'))
|
20
|
-
require File.join(jar_dir, 'target/jsasl.jar')
|
21
|
-
|
22
|
-
module Mongo
|
23
|
-
module Sasl
|
24
|
-
|
25
|
-
module GSSAPI
|
26
|
-
|
27
|
-
def self.authenticate(username, client, socket, opts={})
|
28
|
-
db = client.db('$external')
|
29
|
-
hostname = socket.pool.host
|
30
|
-
servicename = opts[:gssapi_service_name] || 'mongodb'
|
31
|
-
canonicalize = opts[:canonicalize_host_name] ? opts[:canonicalize_host_name] : false
|
32
|
-
|
33
|
-
authenticator = org.mongodb.sasl.GSSAPIAuthenticator.new(JRuby.runtime, username, hostname, servicename, canonicalize)
|
34
|
-
token = BSON::Binary.new(authenticator.initialize_challenge)
|
35
|
-
cmd = BSON::OrderedHash['saslStart', 1, 'mechanism', 'GSSAPI', 'payload', token, 'autoAuthorize', 1]
|
36
|
-
response = db.command(cmd, :check_response => false, :socket => socket)
|
37
|
-
|
38
|
-
until response['done'] do
|
39
|
-
token = BSON::Binary.new(authenticator.evaluate_challenge(response['payload'].to_s))
|
40
|
-
cmd = BSON::OrderedHash['saslContinue', 1, 'conversationId', response['conversationId'], 'payload', token]
|
41
|
-
response = db.command(cmd, :check_response => false, :socket => socket)
|
42
|
-
end
|
43
|
-
response
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|