metasploit-credential 0.14.5 → 0.14.6

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metasploit/credential/exporter/core.rb +2 -2
  3. data/lib/metasploit/credential/exporter/pwdump.rb +2 -2
  4. data/lib/metasploit/credential/migrator.rb +1 -1
  5. data/lib/metasploit/credential/version.rb +1 -3
  6. data/spec/dummy/config/database.yml +13 -11
  7. data/spec/dummy/db/structure.sql +1 -0
  8. data/spec/lib/metasploit/credential/creation_spec.rb +6 -8
  9. data/spec/lib/metasploit/credential/exporter/core_spec.rb +100 -85
  10. data/spec/lib/metasploit/credential/exporter/pwdump_spec.rb +14 -16
  11. data/spec/lib/metasploit/credential/importer/core_spec.rb +10 -12
  12. data/spec/lib/metasploit/credential/importer/multi_spec.rb +4 -6
  13. data/spec/lib/metasploit/credential/importer/pwdump_spec.rb +11 -13
  14. data/spec/lib/metasploit/credential/importer/zip_spec.rb +5 -7
  15. data/spec/lib/metasploit/credential/migrator_spec.rb +13 -13
  16. data/spec/lib/metasploit/credential/version_spec.rb +3 -5
  17. data/spec/lib/metasploit/credential_spec.rb +1 -3
  18. data/spec/models/mdm/service_spec.rb +3 -5
  19. data/spec/models/mdm/session_spec.rb +2 -4
  20. data/spec/models/mdm/task_spec.rb +4 -6
  21. data/spec/models/mdm/user_spec.rb +2 -4
  22. data/spec/models/mdm/workspace_spec.rb +2 -4
  23. data/spec/models/metasploit/credential/blank_username_spec.rb +5 -7
  24. data/spec/models/metasploit/credential/core_spec.rb +43 -45
  25. data/spec/models/metasploit/credential/login/status_spec.rb +19 -21
  26. data/spec/models/metasploit/credential/login_spec.rb +36 -38
  27. data/spec/models/metasploit/credential/nonreplayable_hash_spec.rb +3 -5
  28. data/spec/models/metasploit/credential/ntlm_hash_spec.rb +13 -15
  29. data/spec/models/metasploit/credential/origin/cracked_password_spec.rb +5 -7
  30. data/spec/models/metasploit/credential/origin/import_spec.rb +8 -10
  31. data/spec/models/metasploit/credential/origin/manual_spec.rb +7 -9
  32. data/spec/models/metasploit/credential/origin/service_spec.rb +10 -12
  33. data/spec/models/metasploit/credential/origin/session_spec.rb +11 -13
  34. data/spec/models/metasploit/credential/password_hash_spec.rb +4 -6
  35. data/spec/models/metasploit/credential/password_spec.rb +3 -5
  36. data/spec/models/metasploit/credential/postgres_md5_spec.rb +4 -6
  37. data/spec/models/metasploit/credential/private_spec.rb +8 -10
  38. data/spec/models/metasploit/credential/public_spec.rb +5 -7
  39. data/spec/models/metasploit/credential/realm_spec.rb +14 -16
  40. data/spec/models/metasploit/credential/replayable_hash_spec.rb +3 -5
  41. data/spec/models/metasploit/credential/ssh_key_spec.rb +15 -17
  42. data/spec/models/metasploit/credential/username_spec.rb +6 -8
  43. data/spec/models/metasploit_data_models/search/visitor/relation_spec.rb +1 -3
  44. data/spec/spec_helper.rb +83 -18
  45. data/spec/support/shared/contexts/mdm/workspace.rb +1 -1
  46. data/spec/support/shared/examples/core_validations.rb +117 -42
  47. data/spec/support/shared/examples/single_table_inheritance_database_columns.rb +2 -2
  48. data/spec/support/shared/examples/timestamp_database_column.rb +2 -2
  49. metadata +9 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c11d9b0ad22bf9a85298e0db15c73960c61143c1
4
- data.tar.gz: 7f8714fe763e4523734097310438324e45e73455
3
+ metadata.gz: f871f34dcef9e0d0a2920b5a7963be5876acbb3f
4
+ data.tar.gz: 3d775fdd96872361a401f14f1da5b0d0f0c8aed9
5
5
  SHA512:
6
- metadata.gz: a137bcbaac7a9ce97e6aec96ccc41e7123343b381bc30ffb95904d22657d9d10b44d8a6a978cdb43e306febbf11d1be770465cd660ccae0d6e25c349ebe3d330
7
- data.tar.gz: 9b7096c74c9362f99c46913aa131694f4f9eda531a83259b47287a78eddaf8efaa2bb10e03d323b12bf4e3686ad24c359f33a8b18341bb67d00830e457a7f7bd
6
+ metadata.gz: 96b50334f63d7aef2637c5afb1a3c0ebd7db689488e2e5164ca2699cf520769792c7c5b1649a11f6afffb1cefcfbdf487e831c271a73df9206742fbd5fc13496
7
+ data.tar.gz: cb5183c5aaf3dc0b4459657bf3df69921d4f247b5a3b3c642df90411aa9a31347f551608033656a83077e6c7d8181243e1e6fb6153247ae493c9d5c858870ad3
@@ -49,10 +49,10 @@ class Metasploit::Credential::Exporter::Core
49
49
  # Attributes
50
50
  #
51
51
 
52
- # @!attribute export_data
52
+ # @!attribute [rw] export_data
53
53
  # Holds the raw information from the database before it is formatted into the {#data} attribute
54
54
  # @return [Array]
55
- attr_accessor :export_data
55
+ attr_writer :export_data
56
56
 
57
57
  # @!attribute finalized_zip_file
58
58
  # The final output artifacts, zipped
@@ -70,10 +70,10 @@ class Metasploit::Credential::Exporter::Pwdump
70
70
  # Attributes
71
71
  #
72
72
 
73
- # @!attribute logins
73
+ # @!attribute [rw] logins
74
74
  # Holds the raw information from the database before it is formatted into the {#data} attribute
75
75
  # @return [Array<Metasploit::Credential::Login>]
76
- attr_accessor :logins
76
+ attr_writer :logins
77
77
 
78
78
 
79
79
  #
@@ -104,7 +104,7 @@ class Metasploit::Credential::Migrator
104
104
  # @return [String]
105
105
  def key_data_from_file(path)
106
106
  # Sometimes we will set the :pass attribute to a file path containing the key
107
- if File.exists?(path)
107
+ if File.exist?(path)
108
108
  File.read(path)
109
109
  # In other cases we store the entire SSH key directly in the :pass attribute
110
110
  elsif Metasploit::Credential::SSHKey.new(data: path).private?
@@ -9,9 +9,7 @@ module Metasploit
9
9
  # The minor version number, scoped to the {MAJOR} version number.
10
10
  MINOR = 14
11
11
  # The patch number, scoped to the {MAJOR} and {MINOR} version number.
12
- PATCH = 5
13
- # The prerelease version, scoped to the {MAJOR}, {MINOR}, and {PATCH} version number.
14
- # PRERELEASE =
12
+ PATCH = 6
15
13
 
16
14
  # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the {PRERELEASE} in the
17
15
  # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
@@ -1,20 +1,22 @@
1
1
  # Please only use postgresql bound to a TCP port.
2
- development: &pgsql
2
+ defaults: &defaults
3
3
  adapter: postgresql
4
- database: metasploit_credential_development
5
4
  username: msf
6
- password: p4ssw0rd4lyfe
5
+ password: pass123
7
6
  host: localhost
8
7
  port: 5432
9
- pool: 5
8
+ pool: 50
10
9
  timeout: 5
11
10
 
12
- # Warning: The database defined as "test" will be erased and
13
- # re-generated from your development database when you run "rake".
14
- # Do not set this db to the same as development or production.
15
- #
16
- # Note also, sqlite3 is totally unsupported by Metasploit now.
11
+ development:
12
+ database: metasploit_cr_dev
13
+ <<: *defaults
14
+
17
15
  test:
18
- <<: *pgsql
19
- database: metasploit_credential_test
16
+ database: metasploit_cr_test
17
+ min_messages: WARNING
18
+ <<: *defaults
20
19
 
20
+ production:
21
+ database: metasploit_cr_prod
22
+ <<: *defaults
@@ -3,6 +3,7 @@
3
3
  --
4
4
 
5
5
  SET statement_timeout = 0;
6
+ SET lock_timeout = 0;
6
7
  SET client_encoding = 'UTF8';
7
8
  SET standard_conforming_strings = on;
8
9
  SET check_function_bodies = false;
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe Metasploit::Credential::Creation do
1
+ RSpec.describe Metasploit::Credential::Creation do
4
2
  include_context 'Mdm::Workspace'
5
3
  let(:dummy_class) {
6
4
  Class.new do
@@ -42,7 +40,7 @@ describe Metasploit::Credential::Creation do
42
40
 
43
41
  it 'replicates realm in new credential' do
44
42
  expect {
45
- core = test_object.create_cracked_credential(
43
+ test_object.create_cracked_credential(
46
44
  core_id: old_core.id,
47
45
  workspace_id: workspace.id,
48
46
  username: public.username,
@@ -160,7 +158,7 @@ describe Metasploit::Credential::Creation do
160
158
 
161
159
  it 'should create an Mdm::Service in state "open"' do
162
160
  service = test_object.create_credential_service opts
163
- service.state.should == "open"
161
+ expect(service.state).to eq("open")
164
162
  end
165
163
  end
166
164
 
@@ -483,7 +481,7 @@ describe Metasploit::Credential::Creation do
483
481
  task_id: task.id
484
482
  }
485
483
  core = test_object.create_credential(opts)
486
- core.tasks.should include(task)
484
+ expect(core.tasks).to include(task)
487
485
  end
488
486
 
489
487
  end
@@ -526,7 +524,7 @@ describe Metasploit::Credential::Creation do
526
524
  task_id: task.id
527
525
  }
528
526
  core = test_object.create_credential_core(opts)
529
- core.tasks.should include(task)
527
+ expect(core.tasks).to include(task)
530
528
  end
531
529
 
532
530
  end
@@ -563,7 +561,7 @@ describe Metasploit::Credential::Creation do
563
561
  status: Metasploit::Model::Login::Status::SUCCESSFUL,
564
562
  }
565
563
  login = test_object.create_credential_login(login_data)
566
- login.tasks.should include(task)
564
+ expect(login.tasks).to include(task)
567
565
 
568
566
  end
569
567
 
@@ -1,6 +1,4 @@
1
- require 'spec_helper'
2
-
3
- describe Metasploit::Credential::Exporter::Core do
1
+ RSpec.describe Metasploit::Credential::Exporter::Core do
4
2
  include_context 'Mdm::Workspace'
5
3
  include_context 'export objects'
6
4
 
@@ -24,19 +22,19 @@ describe Metasploit::Credential::Exporter::Core do
24
22
  end
25
23
 
26
24
  it 'should be in LOGIN_MODE by default' do
27
- core_exporter.mode.should == Metasploit::Credential::Exporter::Core::LOGIN_MODE
25
+ expect(core_exporter.mode).to eq(Metasploit::Credential::Exporter::Core::LOGIN_MODE)
28
26
  end
29
27
  end
30
28
 
31
29
  describe "#export!" do
32
30
  it 'should create the zipfile' do
33
31
  core_exporter.export!
34
- File.exists?(core_exporter.output_zipfile_path).should be_true
32
+ expect(File.exists?(core_exporter.output_zipfile_path)).to eq(true)
35
33
  end
36
34
 
37
35
  it 'should output to a directory whose name contains the standardized identifier' do
38
36
  core_exporter.export!
39
- core_exporter.output_final_directory_path.should include(Metasploit::Credential::Exporter::Core::CREDS_DUMP_FILE_IDENTIFIER)
37
+ expect(core_exporter.output_final_directory_path).to include(Metasploit::Credential::Exporter::Core::CREDS_DUMP_FILE_IDENTIFIER)
40
38
  end
41
39
  end
42
40
 
@@ -46,14 +44,14 @@ describe Metasploit::Credential::Exporter::Core do
46
44
  describe "when the argument is a Core" do
47
45
  it 'should be formed from the Public#username and the Private#id' do
48
46
  key_path = core_exporter.path_for_key(core)
49
- Pathname.new(key_path).basename.to_s.should == key_path_basename_string
47
+ expect(Pathname.new(key_path).basename.to_s).to eq(key_path_basename_string)
50
48
  end
51
49
  end
52
50
 
53
51
  describe "when the argument is a Login" do
54
52
  it 'should be formed from the Public#username and the Private#id' do
55
53
  key_path = core_exporter.path_for_key(login)
56
- Pathname.new(key_path).basename.to_s.should == key_path_basename_string
54
+ expect(Pathname.new(key_path).basename.to_s).to eq(key_path_basename_string)
57
55
  end
58
56
  end
59
57
  end
@@ -62,20 +60,27 @@ describe Metasploit::Credential::Exporter::Core do
62
60
  let(:result_hash) { core_exporter.line_for_core(core) }
63
61
 
64
62
  it 'should produce values in the proper order' do
65
- result_hash.values.should == [core.public.username, core.private.type,
66
- core.private.data, core.realm.key, core.realm.value]
63
+ expect(result_hash.values).to eq(
64
+ [
65
+ core.public.username,
66
+ core.private.type,
67
+ core.private.data,
68
+ core.realm.key,
69
+ core.realm.value
70
+ ]
71
+ )
67
72
  end
68
73
 
69
74
  it 'should produce a hash with the public username' do
70
- result_hash[:username].should == core.public.username
75
+ expect(result_hash[:username]).to eq(core.public.username)
71
76
  end
72
77
 
73
78
  it 'should produce a hash with the private data' do
74
- result_hash[:private_data].should == core.private.data
79
+ expect(result_hash[:private_data]).to eq(core.private.data)
75
80
  end
76
81
 
77
82
  it 'should produce a hash with the name of the private type' do
78
- result_hash[:private_type].should == core.private.type
83
+ expect(result_hash[:private_type]).to eq(core.private.type)
79
84
  end
80
85
  end
81
86
 
@@ -84,84 +89,94 @@ describe Metasploit::Credential::Exporter::Core do
84
89
  let(:result_hash) { core_exporter.line_for_login(login) }
85
90
 
86
91
  it 'should produce values in the proper order' do
87
- result_hash.values.should == [core.public.username, core.private.type,
88
- core.private.data, core.realm.key, core.realm.value,
89
- login.service.host.address, login.service.port,
90
- login.service.name, login.service.proto,
91
- login.status, login.access_level, login.last_attempted_at
92
- ]
92
+ expect(result_hash.values).to eq(
93
+ [
94
+ core.public.username,
95
+ core.private.type,
96
+ core.private.data,
97
+ core.realm.key,
98
+ core.realm.value,
99
+ login.service.host.address,
100
+ login.service.port,
101
+ login.service.name,
102
+ login.service.proto,
103
+ login.status,
104
+ login.access_level,
105
+ login.last_attempted_at
106
+ ]
107
+ )
93
108
  end
94
109
 
95
110
  it 'should produce a hash with the service host address' do
96
- result_hash[:host_address].should == login.service.host.address
111
+ expect(result_hash[:host_address]).to eq(login.service.host.address)
97
112
  end
98
113
 
99
114
  it 'should produce a hash with the service port' do
100
- result_hash[:service_port].should == login.service.port
115
+ expect(result_hash[:service_port]).to eq(login.service.port)
101
116
  end
102
117
 
103
118
  it 'should produce a hash with the service name' do
104
- result_hash[:service_name].should == login.service.name
119
+ expect(result_hash[:service_name]).to eq(login.service.name)
105
120
  end
106
121
 
107
122
  it 'should produce a hash with the service protocol' do
108
- result_hash[:service_protocol].should == login.service.proto
123
+ expect(result_hash[:service_protocol]).to eq(login.service.proto)
109
124
  end
110
125
 
111
126
  it 'should produce a hash with the login status' do
112
- result_hash[:status].should == login.status
127
+ expect(result_hash[:status]).to eq(login.status)
113
128
  end
114
129
 
115
130
  it 'should produce a hash with the login access_level' do
116
- result_hash[:access_level].should == login.access_level
131
+ expect(result_hash[:access_level]).to eq(login.access_level)
117
132
  end
118
133
 
119
134
  it 'should produce a hash with the login last_attempted_at' do
120
- result_hash[:last_attempted_at].should == login.last_attempted_at
135
+ expect(result_hash[:last_attempted_at]).to eq(login.last_attempted_at)
121
136
  end
122
137
 
123
138
  it 'should produce a hash with the public information' do
124
- result_hash[:username].should == login.core.public.username
139
+ expect(result_hash[:username]).to eq(login.core.public.username)
125
140
  end
126
141
 
127
142
  it 'should produce a hash with the private data' do
128
- result_hash[:private_data].should == login.core.private.data
143
+ expect(result_hash[:private_data]).to eq(login.core.private.data)
129
144
  end
130
145
 
131
146
  it 'should produce a hash with the demodulized name of the private type' do
132
- result_hash[:private_type].should == login.core.private.type
147
+ expect(result_hash[:private_type]).to eq(login.core.private.type)
133
148
  end
134
149
  end
135
150
 
136
151
  describe "#output" do
137
152
  it 'should be a writable File' do
138
153
  file_stat = core_exporter.output.stat
139
- file_stat.should be_writable
154
+ expect(file_stat).to be_writable
140
155
  end
141
156
 
142
157
  it 'should not be opened in binmode' do
143
- core_exporter.output.should_not be_binmode
158
+ expect(core_exporter.output).not_to be_binmode
144
159
  end
145
160
  end
146
161
 
147
162
  describe "#output_directory_path" do
148
163
  it 'should be in the platform-agnostic temp directory' do
149
- core_exporter.output_final_directory_path.should include(Dir.tmpdir)
164
+ expect(core_exporter.output_final_directory_path).to include(Dir.tmpdir)
150
165
  end
151
166
 
152
167
  it 'should have the set export prefix' do
153
- core_exporter.output_final_directory_path.should include(Metasploit::Credential::Exporter::Core::TEMP_ZIP_PATH_PREFIX)
168
+ expect(core_exporter.output_final_directory_path).to include(Metasploit::Credential::Exporter::Core::TEMP_ZIP_PATH_PREFIX)
154
169
  end
155
170
 
156
171
  describe "uniqueness for export" do
157
172
  let(:path_fragment){ "export-#{Time.now.to_s}" }
158
173
 
159
174
  before(:each) do
160
- core_exporter.stub(:output_final_subdirectory_name).and_return(path_fragment)
175
+ allow(core_exporter).to receive(:output_final_subdirectory_name).and_return(path_fragment)
161
176
  end
162
177
 
163
178
  it 'should include a special time-stamped directory to contain the export data being staged' do
164
- core_exporter.output_final_directory_path.should include(core_exporter.output_final_subdirectory_name)
179
+ expect(core_exporter.output_final_directory_path).to include(core_exporter.output_final_subdirectory_name)
165
180
  end
166
181
  end
167
182
  end
@@ -169,44 +184,44 @@ describe Metasploit::Credential::Exporter::Core do
169
184
  describe "#data" do
170
185
  describe "in LOGIN_MODE" do
171
186
  before(:each) do
172
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
187
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
173
188
  end
174
189
 
175
190
  describe "when whitelist_ids is present" do
176
191
  before(:each) do
177
- core_exporter.stub(:whitelist_ids).and_return([login1.id])
192
+ allow(core_exporter).to receive(:whitelist_ids).and_return([login1.id])
178
193
  end
179
194
 
180
195
  it 'should contain only those objects whose IDs are in the whitelist' do
181
- core_exporter.data.should_not include(login2)
196
+ expect(core_exporter.data).not_to include(login2)
182
197
  end
183
198
  end
184
199
 
185
200
  describe "when whitelist_ids is blank" do
186
201
  it 'should be the same as #export_data' do
187
- core_exporter.data.should == core_exporter.export_data
202
+ expect(core_exporter.data).to eq(core_exporter.export_data)
188
203
  end
189
204
  end
190
205
  end
191
206
 
192
207
  describe "in CORE_MODE" do
193
208
  before(:each) do
194
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
209
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
195
210
  end
196
211
 
197
212
  describe "when whitelist_ids is present" do
198
213
  before(:each) do
199
- core_exporter.stub(:whitelist_ids).and_return([core1.id])
214
+ allow(core_exporter).to receive(:whitelist_ids).and_return([core1.id])
200
215
  end
201
216
 
202
217
  it 'should contain only those objects whose IDs are in the whitelist' do
203
- core_exporter.data.should_not include(core2)
218
+ expect(core_exporter.data).not_to include(core2)
204
219
  end
205
220
  end
206
221
 
207
222
  describe "when whitelist_ids is blank" do
208
223
  it 'should be the same as #export_data' do
209
- core_exporter.data.should == core_exporter.export_data
224
+ expect(core_exporter.data).to eq(core_exporter.export_data)
210
225
  end
211
226
  end
212
227
  end
@@ -215,22 +230,22 @@ describe Metasploit::Credential::Exporter::Core do
215
230
  describe "#export_data" do
216
231
  describe "in CORE_MODE" do
217
232
  before(:each) do
218
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
233
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
219
234
  end
220
235
 
221
236
  it 'should grab data using the proper scope' do
222
- Metasploit::Credential::Core.should_receive(:workspace_id).with(core_exporter.workspace.id)
237
+ expect(Metasploit::Credential::Core).to receive(:workspace_id).with(core_exporter.workspace.id)
223
238
  core_exporter.export_data
224
239
  end
225
240
  end
226
241
 
227
242
  describe "in LOGIN_MODE" do
228
243
  before(:each) do
229
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
244
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
230
245
  end
231
246
 
232
247
  it 'should grab data using the proper scope' do
233
- Metasploit::Credential::Login.should_receive(:in_workspace_including_hosts_and_services).with(core_exporter.workspace)
248
+ expect(Metasploit::Credential::Login).to receive(:in_workspace_including_hosts_and_services).with(core_exporter.workspace)
234
249
  core_exporter.export_data
235
250
  end
236
251
  end
@@ -240,7 +255,7 @@ describe Metasploit::Credential::Exporter::Core do
240
255
  describe "#render_manifest_and_output_keys" do
241
256
  describe "in CORE_MODE" do
242
257
  before(:each) do
243
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
258
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
244
259
  core_exporter.render_manifest_output_and_keys
245
260
  path = core_exporter.output_final_directory_path + '/' + Metasploit::Credential::Importer::Zip::MANIFEST_FILE_NAME
246
261
 
@@ -260,34 +275,34 @@ describe Metasploit::Credential::Exporter::Core do
260
275
  end
261
276
 
262
277
  it 'should contain the Public#username for all Core objects' do
263
- @core_publics.should include(core1.public.username)
264
- @core_publics.should include(core2.public.username)
278
+ expect(@core_publics).to include(core1.public.username)
279
+ expect(@core_publics).to include(core2.public.username)
265
280
  end
266
281
 
267
282
  it 'should contain the Private#type for all Core objects' do
268
- @core_private_types.should include(core1.private.type)
269
- @core_private_types.should include(core2.private.type)
283
+ expect(@core_private_types).to include(core1.private.type)
284
+ expect(@core_private_types).to include(core2.private.type)
270
285
  end
271
286
 
272
287
  it 'should contain the Private#data for all Core objects' do
273
- @core_private_data.should include(core1.private.data)
274
- @core_private_data.should include(core2.private.data)
288
+ expect(@core_private_data).to include(core1.private.data)
289
+ expect(@core_private_data).to include(core2.private.data)
275
290
  end
276
291
 
277
292
  it 'should contain the Realm#key for all Core objects' do
278
- @core_realm_keys.should include(core1.realm.key)
279
- @core_realm_keys.should include(core2.realm.key)
293
+ expect(@core_realm_keys).to include(core1.realm.key)
294
+ expect(@core_realm_keys).to include(core2.realm.key)
280
295
  end
281
296
 
282
297
  it 'should contain the Realm#value for all Core objects' do
283
- @core_realm_values.should include(core1.realm.value)
284
- @core_realm_values.should include(core2.realm.value)
298
+ expect(@core_realm_values).to include(core1.realm.value)
299
+ expect(@core_realm_values).to include(core2.realm.value)
285
300
  end
286
301
  end
287
302
 
288
303
  describe "in LOGIN_MODE" do
289
304
  before(:each) do
290
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
305
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::LOGIN_MODE
291
306
  core_exporter.render_manifest_output_and_keys
292
307
  path = core_exporter.output_final_directory_path + '/' + Metasploit::Credential::Importer::Zip::MANIFEST_FILE_NAME
293
308
 
@@ -316,48 +331,48 @@ describe Metasploit::Credential::Exporter::Core do
316
331
 
317
332
 
318
333
  it 'should contain the Public#username for all Login objects' do
319
- @login_publics.should include(login1.core.public.username)
320
- @login_publics.should include(login2.core.public.username)
334
+ expect(@login_publics).to include(login1.core.public.username)
335
+ expect(@login_publics).to include(login2.core.public.username)
321
336
  end
322
337
 
323
338
  it 'should contain the Private#type for all Login objects' do
324
- @login_private_types.should include(login1.core.private.type)
325
- @login_private_types.should include(login2.core.private.type)
339
+ expect(@login_private_types).to include(login1.core.private.type)
340
+ expect(@login_private_types).to include(login2.core.private.type)
326
341
  end
327
342
 
328
343
  it 'should contain the Private#data for all Login objects' do
329
- @login_private_data.should include(login1.core.private.data)
330
- @login_private_data.should include(login2.core.private.data)
344
+ expect(@login_private_data).to include(login1.core.private.data)
345
+ expect(@login_private_data).to include(login2.core.private.data)
331
346
  end
332
347
 
333
348
  it 'should contain the Realm#key for all Login objects' do
334
- @login_realm_keys.should include(login1.core.realm.key)
335
- @login_realm_keys.should include(login2.core.realm.key)
349
+ expect(@login_realm_keys).to include(login1.core.realm.key)
350
+ expect(@login_realm_keys).to include(login2.core.realm.key)
336
351
  end
337
352
 
338
353
  it 'should contain the Realm#value for all Login objects' do
339
- @login_realm_values.should include(login1.core.realm.value)
340
- @login_realm_values.should include(login2.core.realm.value)
354
+ expect(@login_realm_values).to include(login1.core.realm.value)
355
+ expect(@login_realm_values).to include(login2.core.realm.value)
341
356
  end
342
357
 
343
358
  it 'should contain the associated Mdm::Host#address for all Login objects' do
344
- @login_host_addresses.should include(login1.service.host.address)
345
- @login_host_addresses.should include(login2.service.host.address)
359
+ expect(@login_host_addresses).to include(login1.service.host.address)
360
+ expect(@login_host_addresses).to include(login2.service.host.address)
346
361
  end
347
362
 
348
363
  it 'should contain the associated Mdm::Service#port (stringified) for all Login objects' do
349
- @login_service_ports.should include(login1.service.port.to_s)
350
- @login_service_ports.should include(login2.service.port.to_s)
364
+ expect(@login_service_ports).to include(login1.service.port.to_s)
365
+ expect(@login_service_ports).to include(login2.service.port.to_s)
351
366
  end
352
367
 
353
368
  it 'should contain the associated Mdm::Service#name for all Login objects' do
354
- @login_service_names.should include(login1.service.name)
355
- @login_service_names.should include(login2.service.name)
369
+ expect(@login_service_names).to include(login1.service.name)
370
+ expect(@login_service_names).to include(login2.service.name)
356
371
  end
357
372
 
358
373
  it 'should contain the associated Mdm::Service#proto for all Login objects' do
359
- @login_service_protocols.should include(login1.service.proto)
360
- @login_service_protocols.should include(login2.service.proto)
374
+ expect(@login_service_protocols).to include(login1.service.proto)
375
+ expect(@login_service_protocols).to include(login2.service.proto)
361
376
  end
362
377
  end
363
378
  end
@@ -365,7 +380,7 @@ describe Metasploit::Credential::Exporter::Core do
365
380
  describe "#render_zip" do
366
381
  describe "when there are no SSH keys in the dataset" do
367
382
  before(:each) do
368
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
383
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
369
384
  core_exporter.render_manifest_output_and_keys
370
385
  core_exporter.render_zip
371
386
  end
@@ -375,7 +390,7 @@ describe Metasploit::Credential::Exporter::Core do
375
390
  Zip::File.open(core_exporter.output_zipfile_path) do |zip_file|
376
391
  manifest_entry = zip_file.glob(Metasploit::Credential::Importer::Zip::MANIFEST_FILE_NAME).first
377
392
  end
378
- manifest_entry.should_not be_blank
393
+ expect(manifest_entry).not_to be_blank
379
394
  end
380
395
 
381
396
  it 'should not contain a keys directory' do
@@ -383,7 +398,7 @@ describe Metasploit::Credential::Exporter::Core do
383
398
  Zip::File.open(core_exporter.output_zipfile_path) do |zip_file|
384
399
  keys_entry = zip_file.glob(Metasploit::Credential::Importer::Zip::KEYS_SUBDIRECTORY_NAME).first
385
400
  end
386
- keys_entry.should be_blank
401
+ expect(keys_entry).to be_blank
387
402
  end
388
403
  end
389
404
 
@@ -396,7 +411,7 @@ describe Metasploit::Credential::Exporter::Core do
396
411
  workspace: workspace)}
397
412
 
398
413
  before(:each) do
399
- core_exporter.stub(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
414
+ allow(core_exporter).to receive(:mode).and_return Metasploit::Credential::Exporter::Core::CORE_MODE
400
415
  core_exporter.render_manifest_output_and_keys
401
416
  core_exporter.render_zip
402
417
  end
@@ -406,7 +421,7 @@ describe Metasploit::Credential::Exporter::Core do
406
421
  Zip::File.open(core_exporter.output_zipfile_path) do |zip_file|
407
422
  manifest_entry = zip_file.glob(Metasploit::Credential::Importer::Zip::MANIFEST_FILE_NAME).first
408
423
  end
409
- manifest_entry.should_not be_blank
424
+ expect(manifest_entry).not_to be_blank
410
425
  end
411
426
 
412
427
  it 'should contain a keys directory' do
@@ -414,7 +429,7 @@ describe Metasploit::Credential::Exporter::Core do
414
429
  Zip::File.open(core_exporter.output_zipfile_path) do |zip_file|
415
430
  keys_entry = zip_file.glob(Metasploit::Credential::Importer::Zip::KEYS_SUBDIRECTORY_NAME).first
416
431
  end
417
- keys_entry.should_not be_blank
432
+ expect(keys_entry).not_to be_blank
418
433
  end
419
434
 
420
435
  describe "the keys directory" do
@@ -426,12 +441,12 @@ describe Metasploit::Credential::Exporter::Core do
426
441
  end
427
442
 
428
443
  it 'should contain a key for each SSH private in the export' do
429
- @key_entries.size.should == core_exporter.data[:core].select{ |d| d.private.type == Metasploit::Credential::SSHKey.name }.size
444
+ expect(@key_entries.size).to eq(core_exporter.data[:core].select{ |d| d.private.type == Metasploit::Credential::SSHKey.name }.size)
430
445
  end
431
446
 
432
447
  it 'should contain key files named with Public#username and Private#id for each Core that uses an SSHKey' do
433
448
  key_names = @key_entries.map{ |e| e.to_s.gsub("#{Metasploit::Credential::Importer::Zip::KEYS_SUBDIRECTORY_NAME}/", '') }
434
- key_names.should include("#{core_with_key.public.username}-#{core_with_key.private.id}")
449
+ expect(key_names).to include("#{core_with_key.public.username}-#{core_with_key.private.id}")
435
450
  end
436
451
 
437
452
  end