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
         
     |