ruby_smb 1.1.0 → 2.0.4

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 (163) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.travis.yml +3 -5
  5. data/Gemfile +6 -2
  6. data/examples/anonymous_auth.rb +3 -3
  7. data/examples/append_file.rb +10 -8
  8. data/examples/authenticate.rb +9 -5
  9. data/examples/delete_file.rb +8 -6
  10. data/examples/enum_registry_key.rb +5 -4
  11. data/examples/enum_registry_values.rb +5 -4
  12. data/examples/list_directory.rb +8 -6
  13. data/examples/negotiate.rb +51 -8
  14. data/examples/negotiate_with_netbios_service.rb +9 -5
  15. data/examples/net_share_enum_all.rb +6 -4
  16. data/examples/pipes.rb +11 -12
  17. data/examples/query_service_status.rb +64 -0
  18. data/examples/read_file.rb +8 -6
  19. data/examples/read_file_encryption.rb +56 -0
  20. data/examples/read_registry_key_value.rb +6 -5
  21. data/examples/rename_file.rb +9 -7
  22. data/examples/tree_connect.rb +7 -5
  23. data/examples/write_file.rb +9 -7
  24. data/lib/ruby_smb.rb +4 -0
  25. data/lib/ruby_smb/client.rb +246 -26
  26. data/lib/ruby_smb/client/authentication.rb +32 -18
  27. data/lib/ruby_smb/client/echo.rb +2 -4
  28. data/lib/ruby_smb/client/encryption.rb +62 -0
  29. data/lib/ruby_smb/client/negotiation.rb +156 -16
  30. data/lib/ruby_smb/client/signing.rb +19 -0
  31. data/lib/ruby_smb/client/tree_connect.rb +6 -8
  32. data/lib/ruby_smb/client/utils.rb +24 -17
  33. data/lib/ruby_smb/client/winreg.rb +1 -1
  34. data/lib/ruby_smb/crypto.rb +30 -0
  35. data/lib/ruby_smb/dcerpc.rb +2 -0
  36. data/lib/ruby_smb/dcerpc/error.rb +3 -0
  37. data/lib/ruby_smb/dcerpc/ndr.rb +209 -44
  38. data/lib/ruby_smb/dcerpc/request.rb +13 -0
  39. data/lib/ruby_smb/dcerpc/rpc_security_attributes.rb +34 -0
  40. data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +9 -6
  41. data/lib/ruby_smb/dcerpc/svcctl.rb +479 -0
  42. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb +48 -0
  43. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb +26 -0
  44. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb +25 -0
  45. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb +26 -0
  46. data/lib/ruby_smb/dcerpc/svcctl/control_service_request.rb +26 -0
  47. data/lib/ruby_smb/dcerpc/svcctl/control_service_response.rb +26 -0
  48. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb +35 -0
  49. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb +23 -0
  50. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb +31 -0
  51. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb +23 -0
  52. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb +25 -0
  53. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb +44 -0
  54. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb +23 -0
  55. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb +27 -0
  56. data/lib/ruby_smb/dcerpc/svcctl/service_status.rb +25 -0
  57. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb +27 -0
  58. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb +25 -0
  59. data/lib/ruby_smb/dcerpc/winreg.rb +98 -17
  60. data/lib/ruby_smb/dcerpc/winreg/create_key_request.rb +73 -0
  61. data/lib/ruby_smb/dcerpc/winreg/create_key_response.rb +36 -0
  62. data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +1 -1
  63. data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +1 -1
  64. data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +1 -1
  65. data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +4 -4
  66. data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +1 -1
  67. data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +7 -6
  68. data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +10 -10
  69. data/lib/ruby_smb/dcerpc/winreg/save_key_request.rb +37 -0
  70. data/lib/ruby_smb/dcerpc/winreg/save_key_response.rb +23 -0
  71. data/lib/ruby_smb/dispatcher/base.rb +1 -1
  72. data/lib/ruby_smb/dispatcher/socket.rb +5 -4
  73. data/lib/ruby_smb/error.rb +49 -6
  74. data/lib/ruby_smb/field/stringz16.rb +17 -1
  75. data/lib/ruby_smb/generic_packet.rb +11 -1
  76. data/lib/ruby_smb/nbss/session_header.rb +4 -4
  77. data/lib/ruby_smb/smb1/commands.rb +1 -1
  78. data/lib/ruby_smb/smb1/file.rb +13 -28
  79. data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +1 -1
  80. data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +2 -2
  81. data/lib/ruby_smb/smb1/packet/session_setup_request.rb +1 -1
  82. data/lib/ruby_smb/smb1/packet/session_setup_response.rb +2 -2
  83. data/lib/ruby_smb/smb1/packet/write_andx_request.rb +1 -1
  84. data/lib/ruby_smb/smb1/pipe.rb +8 -8
  85. data/lib/ruby_smb/smb1/tree.rb +25 -12
  86. data/lib/ruby_smb/smb2/bit_field/session_flags.rb +2 -1
  87. data/lib/ruby_smb/smb2/bit_field/share_flags.rb +6 -4
  88. data/lib/ruby_smb/smb2/file.rb +59 -77
  89. data/lib/ruby_smb/smb2/negotiate_context.rb +108 -0
  90. data/lib/ruby_smb/smb2/packet.rb +2 -0
  91. data/lib/ruby_smb/smb2/packet/compression_transform_header.rb +41 -0
  92. data/lib/ruby_smb/smb2/packet/negotiate_request.rb +51 -14
  93. data/lib/ruby_smb/smb2/packet/negotiate_response.rb +50 -4
  94. data/lib/ruby_smb/smb2/packet/transform_header.rb +84 -0
  95. data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +92 -6
  96. data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +8 -26
  97. data/lib/ruby_smb/smb2/pipe.rb +8 -20
  98. data/lib/ruby_smb/smb2/smb2_header.rb +1 -1
  99. data/lib/ruby_smb/smb2/tree.rb +44 -28
  100. data/lib/ruby_smb/version.rb +1 -1
  101. data/ruby_smb.gemspec +3 -1
  102. data/spec/lib/ruby_smb/client_spec.rb +1408 -70
  103. data/spec/lib/ruby_smb/crypto_spec.rb +25 -0
  104. data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +1396 -77
  105. data/spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb +161 -0
  106. data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +49 -12
  107. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb +191 -0
  108. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb +38 -0
  109. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb +30 -0
  110. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb +38 -0
  111. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb +39 -0
  112. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb +38 -0
  113. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb +78 -0
  114. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb +38 -0
  115. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb +59 -0
  116. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb +38 -0
  117. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb +38 -0
  118. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb +152 -0
  119. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb +30 -0
  120. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb +38 -0
  121. data/spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb +72 -0
  122. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb +46 -0
  123. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb +30 -0
  124. data/spec/lib/ruby_smb/dcerpc/svcctl_spec.rb +512 -0
  125. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb +110 -0
  126. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb +44 -0
  127. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +0 -4
  128. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +2 -2
  129. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +2 -2
  130. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +9 -4
  131. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +0 -4
  132. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +17 -17
  133. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +11 -23
  134. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb +57 -0
  135. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb +22 -0
  136. data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +227 -41
  137. data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +12 -12
  138. data/spec/lib/ruby_smb/error_spec.rb +88 -0
  139. data/spec/lib/ruby_smb/field/stringz16_spec.rb +12 -0
  140. data/spec/lib/ruby_smb/generic_packet_spec.rb +7 -0
  141. data/spec/lib/ruby_smb/nbss/session_header_spec.rb +4 -11
  142. data/spec/lib/ruby_smb/smb1/file_spec.rb +1 -3
  143. data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_request_spec.rb +2 -2
  144. data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_response_spec.rb +2 -2
  145. data/spec/lib/ruby_smb/smb1/packet/session_setup_request_spec.rb +2 -2
  146. data/spec/lib/ruby_smb/smb1/packet/session_setup_response_spec.rb +1 -1
  147. data/spec/lib/ruby_smb/smb1/pipe_spec.rb +30 -5
  148. data/spec/lib/ruby_smb/smb1/tree_spec.rb +22 -0
  149. data/spec/lib/ruby_smb/smb2/bit_field/session_flags_spec.rb +9 -0
  150. data/spec/lib/ruby_smb/smb2/bit_field/share_flags_spec.rb +27 -0
  151. data/spec/lib/ruby_smb/smb2/file_spec.rb +147 -71
  152. data/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb +332 -0
  153. data/spec/lib/ruby_smb/smb2/packet/compression_transform_header_spec.rb +108 -0
  154. data/spec/lib/ruby_smb/smb2/packet/negotiate_request_spec.rb +138 -3
  155. data/spec/lib/ruby_smb/smb2/packet/negotiate_response_spec.rb +120 -2
  156. data/spec/lib/ruby_smb/smb2/packet/transform_header_spec.rb +220 -0
  157. data/spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb +339 -9
  158. data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +3 -30
  159. data/spec/lib/ruby_smb/smb2/pipe_spec.rb +9 -45
  160. data/spec/lib/ruby_smb/smb2/smb2_header_spec.rb +2 -2
  161. data/spec/lib/ruby_smb/smb2/tree_spec.rb +111 -9
  162. metadata +194 -75
  163. metadata.gz.sig +2 -1
@@ -30,35 +30,8 @@ RSpec.describe RubySMB::SMB2::Packet::TreeConnectResponse do
30
30
  end
31
31
  end
32
32
 
33
- describe '#is_directory?' do
34
- it 'returns true if #share_type is 0x01' do
35
- packet.share_type = 0x01
36
- expect(packet.is_directory?).to be true
37
- end
38
-
39
- it 'returns false if #share_type is not 0x01' do
40
- packet.share_type = 0x02
41
- expect(packet.is_directory?).to be false
42
- end
43
- end
44
-
45
- describe '#access_rights' do
46
- it 'is a DirectoryAccessMask if the Tree is a directory' do
47
- allow(packet).to receive(:is_directory?).and_return(true)
48
- expect(packet.access_rights).to be_a RubySMB::SMB2::BitField::DirectoryAccessMask
49
- end
50
-
51
- it 'is a FileAccessMask if the Tree is not a directory' do
52
- allow(packet).to receive(:is_directory?).and_return(false)
53
- expect(packet.access_rights).to be_a RubySMB::SMB2::BitField::FileAccessMask
54
- end
55
-
56
- context 'when it is not a valid FileAccessMask' do
57
- it 'raises an InvalidBitField exception' do
58
- allow(packet).to receive(:is_directory?).and_return(false)
59
- allow(RubySMB::SMB2::BitField::FileAccessMask).to receive(:read).and_raise(IOError)
60
- expect { packet.access_rights }.to raise_error(RubySMB::Error::InvalidBitField)
61
- end
62
- end
33
+ it 'reads binary data as expected' do
34
+ data = described_class.new
35
+ expect(described_class.read(data.to_binary_s)).to eq(data)
63
36
  end
64
37
  end
@@ -86,9 +86,7 @@ RSpec.describe RubySMB::SMB2::Pipe do
86
86
 
87
87
  it 'raises an InvalidPacket exception if the response is not valid' do
88
88
  allow(response).to receive(:valid?).and_return(false)
89
- smb2_header = double('SMB2 Header')
90
- allow(response).to receive(:smb2_header).and_return(smb2_header)
91
- allow(smb2_header).to receive_messages(:protocol => nil, :command => nil)
89
+ allow(response).to receive(:packet_smb_version)
92
90
  expect { pipe.peek }.to raise_error(RubySMB::Error::InvalidPacket)
93
91
  end
94
92
 
@@ -161,6 +159,13 @@ RSpec.describe RubySMB::SMB2::Pipe do
161
159
  expect(pipe.respond_to?(:has_registry_key?)).to be true
162
160
  end
163
161
  end
162
+
163
+ context 'with \'svcctl\' filename' do
164
+ it 'extends svcctl class' do
165
+ pipe = described_class.new(tree: tree, response: create_response, name: 'svcctl')
166
+ expect(pipe.respond_to?(:query_service_config)).to be true
167
+ end
168
+ end
164
169
  end
165
170
 
166
171
  describe '#dcerpc_request' do
@@ -254,53 +259,12 @@ RSpec.describe RubySMB::SMB2::Pipe do
254
259
 
255
260
  context 'when the response is not an IoctlResponse packet' do
256
261
  it 'raises an InvalidPacket exception' do
257
- allow(ioctl_response).to receive_message_chain(:smb2_header, :protocol)
258
- allow(ioctl_response).to receive_message_chain(:smb2_header, :command)
262
+ allow(ioctl_response).to receive(:packet_smb_version)
259
263
  allow(ioctl_response).to receive(:valid?).and_return(false)
260
264
  expect { pipe.ioctl_send_recv(dcerpc_request, options) }.to raise_error(RubySMB::Error::InvalidPacket)
261
265
  end
262
266
  end
263
267
 
264
- context 'when the response status code is STATUS_PENDING' do
265
- let(:ioctl_raw_response2) { double('IOCTL raw response #2') }
266
- let(:ioctl_response2) { double('IOCTL response #2') }
267
- before :example do
268
- allow(ioctl_response).to receive(:status_code).and_return(WindowsError::NTStatus::STATUS_PENDING)
269
- allow(pipe).to receive(:sleep)
270
- allow(dispatcher).to receive(:recv_packet).and_return(ioctl_raw_response2)
271
- allow(RubySMB::SMB2::Packet::IoctlResponse).to receive(:read).with(ioctl_raw_response2).and_return(ioctl_response2)
272
- allow(ioctl_response2).to receive_messages(
273
- :valid? => true,
274
- :output_data => raw_data,
275
- :status_code => WindowsError::NTStatus::STATUS_SUCCESS
276
- )
277
- end
278
-
279
- it 'waits 1 second' do
280
- pipe.ioctl_send_recv(dcerpc_request, options)
281
- expect(pipe).to have_received(:sleep).with(1)
282
- end
283
-
284
- it 'calls dispatcher #recv_packet' do
285
- pipe.ioctl_send_recv(dcerpc_request, options)
286
- expect(dispatcher).to have_received(:recv_packet)
287
- end
288
-
289
- it 'creates an IoctlResponse packet from the response' do
290
- pipe.ioctl_send_recv(dcerpc_request, options)
291
- expect(RubySMB::SMB2::Packet::IoctlResponse).to have_received(:read).with(ioctl_raw_response2)
292
- end
293
-
294
- context 'when the response is not an IoctlResponse packet' do
295
- it 'raises an InvalidPacket exception' do
296
- allow(ioctl_response2).to receive_message_chain(:smb2_header, :protocol)
297
- allow(ioctl_response2).to receive_message_chain(:smb2_header, :command)
298
- allow(ioctl_response2).to receive(:valid?).and_return(false)
299
- expect { pipe.ioctl_send_recv(dcerpc_request, options) }.to raise_error(RubySMB::Error::InvalidPacket)
300
- end
301
- end
302
- end
303
-
304
268
  context 'when the response status code is not STATUS_SUCCESS or STATUS_BUFFER_OVERFLOW' do
305
269
  it 'raises an UnexpectedStatusCode exception' do
306
270
  allow(ioctl_response).to receive(:status_code).and_return(WindowsError::NTStatus::STATUS_INVALID_HANDLE)
@@ -44,8 +44,8 @@ RSpec.describe RubySMB::SMB2::SMB2Header do
44
44
  expect(header.credit_charge).to be_a BinData::Uint16le
45
45
  end
46
46
 
47
- it 'has a default value of 0' do
48
- expect(header.credit_charge).to eq 0
47
+ it 'has a default value of 1' do
48
+ expect(header.credit_charge).to eq 1
49
49
  end
50
50
  end
51
51
 
@@ -26,6 +26,7 @@ RSpec.describe RubySMB::SMB2::Tree do
26
26
  it { is_expected.to respond_to :permissions }
27
27
  it { is_expected.to respond_to :share }
28
28
  it { is_expected.to respond_to :id }
29
+ it { is_expected.to respond_to :tree_connect_encrypt_data }
29
30
 
30
31
  it 'inherits the client that spawned it' do
31
32
  expect(tree.client).to eq client
@@ -44,7 +45,14 @@ RSpec.describe RubySMB::SMB2::Tree do
44
45
  allow(RubySMB::SMB2::Packet::TreeDisconnectRequest).to receive(:new).and_return(disco_req)
45
46
  modified_req = disco_req
46
47
  modified_req.smb2_header.tree_id = tree.id
47
- expect(client).to receive(:send_recv).with(modified_req).and_return(disco_resp.to_binary_s)
48
+ expect(client).to receive(:send_recv).with(modified_req, encrypt: false).and_return(disco_resp.to_binary_s)
49
+ tree.disconnect!
50
+ end
51
+
52
+ it 'calls Client #send_recv with encryption set if required' do
53
+ allow(tree).to receive(:set_header_fields).and_return(disco_req)
54
+ tree.tree_connect_encrypt_data = true
55
+ expect(client).to receive(:send_recv).with(disco_req, encrypt: true).and_return(disco_resp.to_binary_s)
48
56
  tree.disconnect!
49
57
  end
50
58
 
@@ -133,7 +141,14 @@ RSpec.describe RubySMB::SMB2::Tree do
133
141
 
134
142
  it 'sends the create request packet and gets a response back' do
135
143
  allow(tree).to receive(:open_directory_packet).and_return(create_req)
136
- expect(client).to receive(:send_recv).with(create_req).and_return(create_response.to_binary_s)
144
+ expect(client).to receive(:send_recv).with(create_req, encrypt: false).and_return(create_response.to_binary_s)
145
+ tree.open_directory
146
+ end
147
+
148
+ it 'calls Client #send_recv with encryption set if required' do
149
+ allow(tree).to receive(:open_directory_packet).and_return(create_req)
150
+ tree.tree_connect_encrypt_data = true
151
+ expect(client).to receive(:send_recv).with(create_req, encrypt: true).and_return(create_response.to_binary_s)
137
152
  tree.open_directory
138
153
  end
139
154
 
@@ -180,7 +195,7 @@ RSpec.describe RubySMB::SMB2::Tree do
180
195
  allow(client).to receive(:send_recv) do |packet|
181
196
  expect(packet.file_information_class).to eq RubySMB::Fscc::FileInformation::FileIdFullDirectoryInformation::CLASS_LEVEL
182
197
  expect(packet.name).to eq '*'.encode('UTF-16LE')
183
- expect(packet.output_length).to eq 65_535
198
+ expect(packet.output_length).to eq 65_536
184
199
  end
185
200
  tree.list
186
201
  end
@@ -206,6 +221,19 @@ RSpec.describe RubySMB::SMB2::Tree do
206
221
  tree.list
207
222
  end
208
223
 
224
+ it 'sends the expected packet and reads the response' do
225
+ allow(tree).to receive(:set_header_fields).and_return(query_dir_req)
226
+ expect(client).to receive(:send_recv).with(query_dir_req, encrypt: false)
227
+ tree.list
228
+ end
229
+
230
+ it 'calls Client #send_recv with encryption set if required' do
231
+ allow(tree).to receive(:set_header_fields).and_return(query_dir_req)
232
+ tree.tree_connect_encrypt_data = true
233
+ expect(client).to receive(:send_recv).with(query_dir_req, encrypt: true)
234
+ tree.list
235
+ end
236
+
209
237
  let(:file1) { double('file information') }
210
238
  let(:file2) { double('file information') }
211
239
 
@@ -260,6 +288,40 @@ RSpec.describe RubySMB::SMB2::Tree do
260
288
  end
261
289
  end
262
290
 
291
+ context 'when the dialect is 0x0202' do
292
+ it 'sets the packet output_length to 65536 and credit_charge header to 0' do
293
+ client.dialect = '0x0202'
294
+ allow(client).to receive(:send_recv) do |packet|
295
+ expect(packet.output_length).to eq(65536)
296
+ expect(packet.smb2_header.credit_charge).to eq(0)
297
+ end
298
+ tree.list
299
+ end
300
+ end
301
+
302
+ context 'when the server does not support multi credits' do
303
+ it 'sets the packet output_length to 65536 and credit_charge header to 0' do
304
+ client.server_supports_multi_credit = false
305
+ allow(client).to receive(:send_recv) do |packet|
306
+ expect(packet.output_length).to eq(65536)
307
+ expect(packet.smb2_header.credit_charge).to eq(0)
308
+ end
309
+ tree.list
310
+ end
311
+ end
312
+
313
+ context 'when the dialect is not 0x0202 and the server supports multi credits' do
314
+ it 'sets the packet output_length to server_max_read_size and credit_charge header to the expected value' do
315
+ client.server_supports_multi_credit = true
316
+ credit_charge = (90000 - 1) / 65536 + 1
317
+ client.server_max_read_size = 90000
318
+ allow(client).to receive(:send_recv) do |packet|
319
+ expect(packet.output_length).to eq(90000)
320
+ expect(packet.smb2_header.credit_charge).to eq(credit_charge)
321
+ end
322
+ tree.list
323
+ end
324
+ end
263
325
  end
264
326
 
265
327
  describe '#open_file' do
@@ -404,20 +466,37 @@ RSpec.describe RubySMB::SMB2::Tree do
404
466
  end
405
467
 
406
468
  it 'sends the CreateRequest request packet and gets the expected CreateResponse response back' do
407
- expect(client).to receive(:send_recv).with(create_request).and_return(create_response.to_binary_s)
469
+ expect(client).to receive(:send_recv).with(create_request, encrypt: false).and_return(create_response.to_binary_s)
470
+ tree.open_file(filename: filename)
471
+ end
472
+
473
+ it 'calls Client #send_recv with encryption set if required' do
474
+ tree.tree_connect_encrypt_data = true
475
+ expect(client).to receive(:send_recv).with(create_request, encrypt: true).and_return(create_response.to_binary_s)
408
476
  tree.open_file(filename: filename)
409
477
  end
410
478
 
411
479
  context 'when sending the request packet and gets a response back' do
412
480
  before :example do
413
- allow(client).to receive(:send_recv).with(create_request).and_return(create_response.to_binary_s)
481
+ allow(client).to receive(:send_recv).and_return(create_response.to_binary_s)
414
482
  end
415
483
 
416
484
  context 'when it is a file' do
417
- it 'returns the expected RubySMB::SMB2::File object' do
418
- file_obj = RubySMB::SMB2::File.new(name: filename, tree: tree, response: create_response)
419
- expect(RubySMB::SMB2::File).to receive(:new).with(name: filename, tree: tree, response: create_response).and_return(file_obj)
420
- expect(tree.open_file(filename: filename)).to eq(file_obj)
485
+ context 'when encryption is not required' do
486
+ it 'returns the expected RubySMB::SMB2::File object' do
487
+ file_obj = RubySMB::SMB2::File.new(name: filename, tree: tree, response: create_response, encrypt: false)
488
+ expect(RubySMB::SMB2::File).to receive(:new).with(name: filename, tree: tree, response: create_response, encrypt: false).and_return(file_obj)
489
+ expect(tree.open_file(filename: filename)).to eq(file_obj)
490
+ end
491
+ end
492
+
493
+ context 'when encryption is required' do
494
+ it 'returns the expected RubySMB::SMB2::File object' do
495
+ file_obj = RubySMB::SMB2::File.new(name: filename, tree: tree, response: create_response, encrypt: true)
496
+ tree.tree_connect_encrypt_data = true
497
+ expect(RubySMB::SMB2::File).to receive(:new).with(name: filename, tree: tree, response: create_response, encrypt: true).and_return(file_obj)
498
+ expect(tree.open_file(filename: filename)).to eq(file_obj)
499
+ end
421
500
  end
422
501
  end
423
502
 
@@ -452,4 +531,27 @@ RSpec.describe RubySMB::SMB2::Tree do
452
531
  end
453
532
  end
454
533
  end
534
+
535
+ describe '#open_pipe' do
536
+ let(:opts) { { filename: '\\test', write: true } }
537
+ before :example do
538
+ allow(tree).to receive(:open_file)
539
+ end
540
+
541
+ it 'calls #open_file with the provided options' do
542
+ opts[:filename] ='test'
543
+ expect(tree).to receive(:open_file).with(opts)
544
+ tree.open_pipe(opts)
545
+ end
546
+
547
+ it 'remove the leading \\ from the filename if needed' do
548
+ expect(tree).to receive(:open_file).with( { filename: 'test', write: true } )
549
+ tree.open_pipe(opts)
550
+ end
551
+
552
+ it 'does not modify the original option hash' do
553
+ tree.open_pipe(opts)
554
+ expect(opts).to eq( { filename: '\\test', write: true } )
555
+ end
556
+ end
455
557
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_smb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -14,85 +14,90 @@ bindir: bin
14
14
  cert_chain:
15
15
  - |
16
16
  -----BEGIN CERTIFICATE-----
17
- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
18
- A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
19
- Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
20
- MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
21
- A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
22
- hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
23
- RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
24
- gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
25
- KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
26
- QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
27
- XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
28
- DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
29
- LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
30
- RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
31
- jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
32
- 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
33
- mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
34
- Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
35
- WD9f
17
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
18
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
19
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
20
+ b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
21
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
22
+ cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
23
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
24
+ JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
25
+ mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
26
+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
27
+ VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
28
+ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
29
+ AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
30
+ BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
31
+ pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
32
+ dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
33
+ fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
34
+ NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
35
+ H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
36
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
36
37
  -----END CERTIFICATE-----
37
38
  - |
38
39
  -----BEGIN CERTIFICATE-----
39
- MIIElDCCA3ygAwIBAgIOSBtqBybS6D8mAtSCWs0wDQYJKoZIhvcNAQELBQAwTDEg
40
- MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2Jh
41
- bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTYwNjE1MDAwMDAwWhcNMjQw
42
- NjE1MDAwMDAwWjBaMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
43
- di1zYTEwMC4GA1UEAxMnR2xvYmFsU2lnbiBDb2RlU2lnbmluZyBDQSAtIFNIQTI1
44
- NiAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjYVVI6kfU6/J
45
- 7TbCKbVu2PlC9SGLh/BDoS/AP5fjGEfUlk6Iq8Zj6bZJFYXx2Zt7G/3YSsxtToZA
46
- F817ukcotdYUQAyG7h5LM/MsVe4hjNq2wf6wTjquUZ+lFOMQ5pPK+vldsZCH7/g1
47
- LfyiXCbuexWLH9nDoZc1QbMw/XITrZGXOs5ynQYKdTwfmOPLGC+MnwhKkQrZ2TXZ
48
- g5J2Yl7fg67k1gFOzPM8cGFYNx8U42qgr2v02dJsLBkwXaBvUt/RnMngDdl1EWWW
49
- 2UO0p5A5rkccVMuxlW4l3o7xEhzw127nFE2zGmXWhEpX7gSvYjjFEJtDjlK4Prau
50
- niyX/4507wIDAQABo4IBZDCCAWAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQWMBQG
51
- CCsGAQUFBwMDBggrBgEFBQcDCTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW
52
- BBQPOueslJF0LZYCc4OtnC5JPxmqVDAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj
53
- move4t0bvDA+BggrBgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw
54
- Mi5nbG9iYWxzaWduLmNvbS9yb290cjMwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov
55
- L2NybC5nbG9iYWxzaWduLmNvbS9yb290LXIzLmNybDBjBgNVHSAEXDBaMAsGCSsG
56
- AQQBoDIBMjAIBgZngQwBBAEwQQYJKwYBBAGgMgFfMDQwMgYIKwYBBQUHAgEWJmh0
57
- dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEB
58
- CwUAA4IBAQAVhCgM7aHDGYLbYydB18xjfda8zzabz9JdTAKLWBoWCHqxmJl/2DOK
59
- XJ5iCprqkMLFYwQL6IdYBgAHglnDqJQy2eAUTaDVI+DH3brwaeJKRWUtTUmQeGYy
60
- DrBowLCIsI7tXAb4XBBIPyNzujtThFKAzfCzFcgRCosFeEZZCNS+t/9L9ZxqTJx2
61
- ohGFRYzUN+5Q3eEzNKmhHzoL8VZEim+zM9CxjtEMYAfuMsLwJG+/r/uBAXZnxKPo
62
- 4KvcM1Uo42dHPOtqpN+U6fSmwIHRUphRptYCtzzqSu/QumXSN4NTS35nfIxA9gcc
63
- sK8EBtz4bEaIcpzrTp3DsLlUo7lOl8oU
40
+ MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl
41
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
42
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
43
+ b3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQG
44
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
45
+ cnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBT
46
+ aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8O
47
+ Ea9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq
48
+ 8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRp
49
+ wsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/p
50
+ fMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3
51
+ jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczye
52
+ n6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
53
+ HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBr
54
+ MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
55
+ MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
56
+ RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
57
+ ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
58
+ Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
59
+ TwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
60
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsq
61
+ CqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP
62
+ MA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHX
63
+ fgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddf
64
+ RHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8Al
65
+ EeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+
66
+ L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8
67
+ B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHv
64
68
  -----END CERTIFICATE-----
65
69
  - |
66
70
  -----BEGIN CERTIFICATE-----
67
- MIIE5jCCA86gAwIBAgIMKDuO03uv6RWXR1uAMA0GCSqGSIb3DQEBCwUAMFoxCzAJ
68
- BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTAwLgYDVQQDEydH
69
- bG9iYWxTaWduIENvZGVTaWduaW5nIENBIC0gU0hBMjU2IC0gRzMwHhcNMTYwOTEz
70
- MTgxMDIyWhcNMTkxMTExMTUxNTM4WjBgMQswCQYDVQQGEwJVUzEWMBQGA1UECBMN
71
- TWFzc2FjaHVzZXR0czEPMA0GA1UEBxMGQm9zdG9uMRMwEQYDVQQKEwpSYXBpZDcg
72
- TExDMRMwEQYDVQQDEwpSYXBpZDcgTExDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
73
- MIIBCgKCAQEAl0HeC0FzN1BJ4nQkxsBng3peS9Bdi9rpSGx+g0Ximd+M/7twmund
74
- bzn2JPbNK/Gp/rq/SytrNSLcUzcbH/0z5Ltyw1/jQsGtRBrns0NZSRXqupQDW5R6
75
- HFpaIAl3OdsesmIQc/fm0uhh8dkfHVo7UsZO/TeCPoy0uHXTI6aFBPzMMsdz+gf3
76
- cCCLsnNKQh/T2Q/jwBs3NTPoyza/pPZcvGogKcWCeNihTO5Rn1Fc71sMHSjQsDtn
77
- 1fWGKYGi0qjvZ4lpGM9IFZMTbySKHbPLhhHnBOoV7avGemdky3AEsUeiT+6DY0P1
78
- IydBy24uVNhGATglME1ttlT4Eme/to0M6wIDAQABo4IBpDCCAaAwDgYDVR0PAQH/
79
- BAQDAgeAMIGUBggrBgEFBQcBAQSBhzCBhDBIBggrBgEFBQcwAoY8aHR0cDovL3Nl
80
- Y3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvZ3Njb2Rlc2lnbnNoYTJnM29jc3Au
81
- Y3J0MDgGCCsGAQUFBzABhixodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nj
82
- b2Rlc2lnbnNoYTJnMzBWBgNVHSAETzBNMEEGCSsGAQQBoDIBMjA0MDIGCCsGAQUF
83
- BwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAIBgZn
84
- gQwBBAEwCQYDVR0TBAIwADA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmds
85
- b2JhbHNpZ24uY29tL2dzY29kZXNpZ25zaGEyZzMuY3JsMBMGA1UdJQQMMAoGCCsG
86
- AQUFBwMDMB0GA1UdDgQWBBSm8RBpBC/cK9VmxzO2+RWnacN8CTAfBgNVHSMEGDAW
87
- gBQPOueslJF0LZYCc4OtnC5JPxmqVDANBgkqhkiG9w0BAQsFAAOCAQEANVO3uYQl
88
- h8iicbaXE3odrL+kXXmeeNgt4BD3x7GKAVIVixtwBS6pvrshjc1LN0tm3ruiv8oy
89
- cq4FiEmVUXZejSRvVVtABeWdZWo+lJ8NxCBUEYYmnMrjgFIbGiEbBsg7PGtyeQsA
90
- 5Wbg7Lx889mS1tKfQBcPif8EjpTiXNfMiywmpaMYmvm+yQgzrRLDbjz6JV0Rc5Ga
91
- WChka+LTPnMtsWJuFM8ka8icMeS28/nAGERdewxWvz+DeAPMORdTJ7aqb6+Y9xuz
92
- G+Hmcg1v810agasPdoydE0RTVZgEOOMoQ07qu7JFXVWZ9ZQpHT7qJATWL/b2csFG
93
- 8mVuTXnyJOKRJA==
71
+ MIIFIzCCBAugAwIBAgIQDX9ZkVJ2eNVTlibR5ALyJTANBgkqhkiG9w0BAQsFADBy
72
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
73
+ d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
74
+ SUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MTAxNjAwMDAwMFoXDTIwMTAxOTEyMDAw
75
+ MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
76
+ BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
77
+ IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHnKegPAghKuZk4
78
+ Gy1jKaZEXbWc4fxioTemv/F1yIYzAjCWP65qjKtyeeFDe4/kJzG9nseF9oa93YBf
79
+ 1nyEqxNSZMw/sCAZ87lOl713dRi73uxOoszy2PT5xEB+Q5R6cbzExkWG2zrLdXDr
80
+ so0Bd6VHw+IsAoBBkAq5FrZOJQYGn5VY20xw/2DqtCeoW4QDWyqTnbJmwO9tZrfr
81
+ 3Le2crfk2eOgafaPNhLon5uuIKCZsk2YkUSNURSS3M7gosMwU9Gg4JTBi7X5+oww
82
+ rY43dJT28YklxmNVu8o5kJxW4dqLKJLOIgSXZ63nceT/EaCSg7DcofHNcUzejFwb
83
+ M7Zbb2kCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
84
+ dQ5YMB0GA1UdDgQWBBR18CAeMsIEU+0pXal/XXw9LCtMADAOBgNVHQ8BAf8EBAMC
85
+ B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
86
+ L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
87
+ L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
88
+ MEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
89
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYw
90
+ JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
91
+ AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
92
+ ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
93
+ BQADggEBAFpzR9s7lcYKDzSJucOHztEPj+iSIeCzxEw34NTE9M2AfkYIu82c4r2a
94
+ bzIGmzZWiCGufjOp0gF5xW6sSSJ9n0TqH0nhHhvjtZQkmkGtOBbN1zeYDFS2ozAp
95
+ sljF/g68Y1eYs3NaFf7kQUa6vb6RdjW3J8M9AQ8gthBt7gr/guVxd/gJUYbdDdBX
96
+ cWfJJi/X7GVBOBmmvA43qoKideuhOBrVGBHvIF/yO9p23dIiUrGmW9kxXCSxgute
97
+ JI/W23RbIRksG2pioMhd4dCXq3FLLlkOV1YfCwWixNB+iIhQPPZVaPNfgPhCn4Dt
98
+ DeGjje/qA4fkLtRmOtb9PUBq3ToRDE4=
94
99
  -----END CERTIFICATE-----
95
- date: 2019-06-27 00:00:00.000000000 Z
100
+ date: 2020-08-28 00:00:00.000000000 Z
96
101
  dependencies:
97
102
  - !ruby/object:Gem::Dependency
98
103
  name: redcarpet
@@ -206,6 +211,34 @@ dependencies:
206
211
  - - ">="
207
212
  - !ruby/object:Gem::Version
208
213
  version: '0'
214
+ - !ruby/object:Gem::Dependency
215
+ name: openssl-ccm
216
+ requirement: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ type: :runtime
222
+ prerelease: false
223
+ version_requirements: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ - !ruby/object:Gem::Dependency
229
+ name: openssl-cmac
230
+ requirement: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ type: :runtime
236
+ prerelease: false
237
+ version_requirements: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
209
242
  description: ''
210
243
  email:
211
244
  - msfdev@metasploit.com
@@ -234,7 +267,9 @@ files:
234
267
  - examples/negotiate_with_netbios_service.rb
235
268
  - examples/net_share_enum_all.rb
236
269
  - examples/pipes.rb
270
+ - examples/query_service_status.rb
237
271
  - examples/read_file.rb
272
+ - examples/read_file_encryption.rb
238
273
  - examples/read_registry_key_value.rb
239
274
  - examples/rename_file.rb
240
275
  - examples/tree_connect.rb
@@ -243,11 +278,13 @@ files:
243
278
  - lib/ruby_smb/client.rb
244
279
  - lib/ruby_smb/client/authentication.rb
245
280
  - lib/ruby_smb/client/echo.rb
281
+ - lib/ruby_smb/client/encryption.rb
246
282
  - lib/ruby_smb/client/negotiation.rb
247
283
  - lib/ruby_smb/client/signing.rb
248
284
  - lib/ruby_smb/client/tree_connect.rb
249
285
  - lib/ruby_smb/client/utils.rb
250
286
  - lib/ruby_smb/client/winreg.rb
287
+ - lib/ruby_smb/crypto.rb
251
288
  - lib/ruby_smb/dcerpc.rb
252
289
  - lib/ruby_smb/dcerpc/bind.rb
253
290
  - lib/ruby_smb/dcerpc/bind_ack.rb
@@ -258,13 +295,34 @@ files:
258
295
  - lib/ruby_smb/dcerpc/ptypes.rb
259
296
  - lib/ruby_smb/dcerpc/request.rb
260
297
  - lib/ruby_smb/dcerpc/response.rb
298
+ - lib/ruby_smb/dcerpc/rpc_security_attributes.rb
261
299
  - lib/ruby_smb/dcerpc/rrp_unicode_string.rb
262
300
  - lib/ruby_smb/dcerpc/srvsvc.rb
263
301
  - lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb
302
+ - lib/ruby_smb/dcerpc/svcctl.rb
303
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb
304
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb
305
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb
306
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb
307
+ - lib/ruby_smb/dcerpc/svcctl/control_service_request.rb
308
+ - lib/ruby_smb/dcerpc/svcctl/control_service_response.rb
309
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb
310
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb
311
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb
312
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb
313
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb
314
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb
315
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb
316
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb
317
+ - lib/ruby_smb/dcerpc/svcctl/service_status.rb
318
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb
319
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb
264
320
  - lib/ruby_smb/dcerpc/uuid.rb
265
321
  - lib/ruby_smb/dcerpc/winreg.rb
266
322
  - lib/ruby_smb/dcerpc/winreg/close_key_request.rb
267
323
  - lib/ruby_smb/dcerpc/winreg/close_key_response.rb
324
+ - lib/ruby_smb/dcerpc/winreg/create_key_request.rb
325
+ - lib/ruby_smb/dcerpc/winreg/create_key_response.rb
268
326
  - lib/ruby_smb/dcerpc/winreg/enum_key_request.rb
269
327
  - lib/ruby_smb/dcerpc/winreg/enum_key_response.rb
270
328
  - lib/ruby_smb/dcerpc/winreg/enum_value_request.rb
@@ -278,6 +336,8 @@ files:
278
336
  - lib/ruby_smb/dcerpc/winreg/query_value_request.rb
279
337
  - lib/ruby_smb/dcerpc/winreg/query_value_response.rb
280
338
  - lib/ruby_smb/dcerpc/winreg/regsam.rb
339
+ - lib/ruby_smb/dcerpc/winreg/save_key_request.rb
340
+ - lib/ruby_smb/dcerpc/winreg/save_key_response.rb
281
341
  - lib/ruby_smb/dispatcher.rb
282
342
  - lib/ruby_smb/dispatcher/base.rb
283
343
  - lib/ruby_smb/dispatcher/socket.rb
@@ -422,9 +482,11 @@ files:
422
482
  - lib/ruby_smb/smb2/create_context.rb
423
483
  - lib/ruby_smb/smb2/file.rb
424
484
  - lib/ruby_smb/smb2/info_type.rb
485
+ - lib/ruby_smb/smb2/negotiate_context.rb
425
486
  - lib/ruby_smb/smb2/packet.rb
426
487
  - lib/ruby_smb/smb2/packet/close_request.rb
427
488
  - lib/ruby_smb/smb2/packet/close_response.rb
489
+ - lib/ruby_smb/smb2/packet/compression_transform_header.rb
428
490
  - lib/ruby_smb/smb2/packet/create_request.rb
429
491
  - lib/ruby_smb/smb2/packet/create_response.rb
430
492
  - lib/ruby_smb/smb2/packet/echo_request.rb
@@ -444,6 +506,7 @@ files:
444
506
  - lib/ruby_smb/smb2/packet/session_setup_response.rb
445
507
  - lib/ruby_smb/smb2/packet/set_info_request.rb
446
508
  - lib/ruby_smb/smb2/packet/set_info_response.rb
509
+ - lib/ruby_smb/smb2/packet/transform_header.rb
447
510
  - lib/ruby_smb/smb2/packet/tree_connect_request.rb
448
511
  - lib/ruby_smb/smb2/packet/tree_connect_response.rb
449
512
  - lib/ruby_smb/smb2/packet/tree_disconnect_request.rb
@@ -456,6 +519,7 @@ files:
456
519
  - lib/ruby_smb/version.rb
457
520
  - ruby_smb.gemspec
458
521
  - spec/lib/ruby_smb/client_spec.rb
522
+ - spec/lib/ruby_smb/crypto_spec.rb
459
523
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
460
524
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
461
525
  - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
@@ -463,12 +527,33 @@ files:
463
527
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
464
528
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
465
529
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
530
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
466
531
  - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
467
532
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
468
533
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
534
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
535
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
536
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
537
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
538
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
539
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
540
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
541
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
542
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
543
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
544
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
545
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
546
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
547
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
548
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
549
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
550
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
551
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
469
552
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
470
553
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
471
554
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
555
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
556
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
472
557
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
473
558
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
474
559
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -482,10 +567,13 @@ files:
482
567
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
483
568
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
484
569
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
570
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
571
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
485
572
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
486
573
  - spec/lib/ruby_smb/dcerpc_spec.rb
487
574
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
488
575
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
576
+ - spec/lib/ruby_smb/error_spec.rb
489
577
  - spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb
490
578
  - spec/lib/ruby_smb/field/file_time_spec.rb
491
579
  - spec/lib/ruby_smb/field/nt_status_spec.rb
@@ -597,8 +685,10 @@ files:
597
685
  - spec/lib/ruby_smb/smb2/bit_field/smb_secruity_mode_spec.rb
598
686
  - spec/lib/ruby_smb/smb2/create_context_spec.rb
599
687
  - spec/lib/ruby_smb/smb2/file_spec.rb
688
+ - spec/lib/ruby_smb/smb2/negotiate_context_spec.rb
600
689
  - spec/lib/ruby_smb/smb2/packet/close_request_spec.rb
601
690
  - spec/lib/ruby_smb/smb2/packet/close_response_spec.rb
691
+ - spec/lib/ruby_smb/smb2/packet/compression_transform_header_spec.rb
602
692
  - spec/lib/ruby_smb/smb2/packet/create_request_spec.rb
603
693
  - spec/lib/ruby_smb/smb2/packet/create_response_spec.rb
604
694
  - spec/lib/ruby_smb/smb2/packet/echo_request_spec.rb
@@ -617,6 +707,7 @@ files:
617
707
  - spec/lib/ruby_smb/smb2/packet/session_setup_response_spec.rb
618
708
  - spec/lib/ruby_smb/smb2/packet/set_info_request_spec.rb
619
709
  - spec/lib/ruby_smb/smb2/packet/set_info_response_spec.rb
710
+ - spec/lib/ruby_smb/smb2/packet/transform_header_spec.rb
620
711
  - spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb
621
712
  - spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb
622
713
  - spec/lib/ruby_smb/smb2/packet/tree_disconnect_request_spec.rb
@@ -642,7 +733,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
642
733
  requirements:
643
734
  - - ">="
644
735
  - !ruby/object:Gem::Version
645
- version: 2.3.0
736
+ version: '2.5'
646
737
  required_rubygems_version: !ruby/object:Gem::Requirement
647
738
  requirements:
648
739
  - - ">="
@@ -650,12 +741,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
650
741
  version: '0'
651
742
  requirements: []
652
743
  rubyforge_project:
653
- rubygems_version: 2.6.13
744
+ rubygems_version: 2.7.10
654
745
  signing_key:
655
746
  specification_version: 4
656
747
  summary: A pure Ruby implementation of the SMB Protocol Family
657
748
  test_files:
658
749
  - spec/lib/ruby_smb/client_spec.rb
750
+ - spec/lib/ruby_smb/crypto_spec.rb
659
751
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
660
752
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
661
753
  - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
@@ -663,12 +755,33 @@ test_files:
663
755
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
664
756
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
665
757
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
758
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
666
759
  - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
667
760
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
668
761
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
762
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
763
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
764
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
765
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
766
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
767
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
768
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
769
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
770
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
771
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
772
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
773
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
774
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
775
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
776
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
777
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
778
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
779
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
669
780
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
670
781
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
671
782
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
783
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
784
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
672
785
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
673
786
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
674
787
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -682,10 +795,13 @@ test_files:
682
795
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
683
796
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
684
797
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
798
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
799
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
685
800
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
686
801
  - spec/lib/ruby_smb/dcerpc_spec.rb
687
802
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
688
803
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
804
+ - spec/lib/ruby_smb/error_spec.rb
689
805
  - spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb
690
806
  - spec/lib/ruby_smb/field/file_time_spec.rb
691
807
  - spec/lib/ruby_smb/field/nt_status_spec.rb
@@ -797,8 +913,10 @@ test_files:
797
913
  - spec/lib/ruby_smb/smb2/bit_field/smb_secruity_mode_spec.rb
798
914
  - spec/lib/ruby_smb/smb2/create_context_spec.rb
799
915
  - spec/lib/ruby_smb/smb2/file_spec.rb
916
+ - spec/lib/ruby_smb/smb2/negotiate_context_spec.rb
800
917
  - spec/lib/ruby_smb/smb2/packet/close_request_spec.rb
801
918
  - spec/lib/ruby_smb/smb2/packet/close_response_spec.rb
919
+ - spec/lib/ruby_smb/smb2/packet/compression_transform_header_spec.rb
802
920
  - spec/lib/ruby_smb/smb2/packet/create_request_spec.rb
803
921
  - spec/lib/ruby_smb/smb2/packet/create_response_spec.rb
804
922
  - spec/lib/ruby_smb/smb2/packet/echo_request_spec.rb
@@ -817,6 +935,7 @@ test_files:
817
935
  - spec/lib/ruby_smb/smb2/packet/session_setup_response_spec.rb
818
936
  - spec/lib/ruby_smb/smb2/packet/set_info_request_spec.rb
819
937
  - spec/lib/ruby_smb/smb2/packet/set_info_response_spec.rb
938
+ - spec/lib/ruby_smb/smb2/packet/transform_header_spec.rb
820
939
  - spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb
821
940
  - spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb
822
941
  - spec/lib/ruby_smb/smb2/packet/tree_disconnect_request_spec.rb