ruby_smb 0.0.22 → 0.0.23

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4cb624aedd613aa9611d226c2b8c65016407191
4
- data.tar.gz: 8e5ccd06364177fb5250ecb18d54b3e10c8f860b
3
+ metadata.gz: 59b2f5a2d37d1e42e0bd674e58841e7209e9877f
4
+ data.tar.gz: 6cad39d8512753e877e9abf458ceaa21cfb201b9
5
5
  SHA512:
6
- metadata.gz: 54aa6c64d27071a61c523a9e78e4cf041b9d562b6337f04e7249e6cd13c756dbc2469dfc6dc0fc637d9f71dad83c4c36bcbb422c9c3065790b67ace8e8233384
7
- data.tar.gz: 253fc4162a39697d3ffd237d6e4a33b222573df2195973c5c2f5fa3f602a3ee3f98ee20e32dbaa28424ddd923336b3ad37c196888f3b97eaecd36af6ce650e10
6
+ metadata.gz: cbff69d36da828c531c8cf8d62ce6ad98cd0966cf9cae2b20c65cc649ca37f3ec08fac85a346b65caeaaa0f65cf0d24c9dc2218992fabe70965082df456ec58c
7
+ data.tar.gz: b0ea5ea13caeb32f0b787c280062f87f6d87c20179cd4e446f28f94290350f2710eef62b089f75c6bcdb215db07e75ae1f4d84ec3c905f20abacf3ac9f2f95af
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -381,16 +381,7 @@ module RubySMB
381
381
  # @return [TrueClass] if session request is granted
382
382
  # @raise [RubySMB::Error::NetBiosSessionService] if session request is refused
383
383
  def session_request(name = '*SMBSERVER')
384
- encoded_called_name = nb_name_encode("#{name.upcase.ljust(15)}\x20")
385
- encoded_calling_name = nb_name_encode("#{''.ljust(15)}\x00")
386
-
387
- session_request = RubySMB::Nbss::SessionRequest.new
388
- session_request.session_header.session_packet_type = RubySMB::Nbss::SESSION_REQUEST
389
- session_request.called_name = "\x20#{encoded_called_name}\x00"
390
- session_request.calling_name = "\x20#{encoded_calling_name}\x00"
391
- session_request.session_header.packet_length =
392
- session_request.num_bytes - session_request.session_header.num_bytes
393
-
384
+ session_request = session_request_packet(name)
394
385
  dispatcher.send_packet(session_request, nbss_header: false)
395
386
  raw_response = dispatcher.recv_packet(full_response: true)
396
387
  session_header = RubySMB::Nbss::SessionHeader.read(raw_response)
@@ -402,15 +393,22 @@ module RubySMB
402
393
  return true
403
394
  end
404
395
 
405
- def nb_name_encode(name)
406
- encoded_name = ''
407
- name.each_byte do |char|
408
- first_half = (char >> 4) + 'A'.ord
409
- second_half = (char & 0xF) + 'A'.ord
410
- encoded_name << first_half.chr
411
- encoded_name << second_half.chr
412
- end
413
- encoded_name
396
+ # Crafts the NetBIOS SessionRequest packet to be sent for session request operations.
397
+ #
398
+ # @param name [String] the NetBIOS name to request
399
+ # @return [RubySMB::Nbss::SessionRequest] the SessionRequest packet
400
+ def session_request_packet(name = '*SMBSERVER')
401
+ called_name = "#{name.upcase.ljust(15)}\x20"
402
+ calling_name = "#{''.ljust(15)}\x00"
403
+
404
+ session_request = RubySMB::Nbss::SessionRequest.new
405
+ session_request.session_header.session_packet_type = RubySMB::Nbss::SESSION_REQUEST
406
+ session_request.called_name = called_name
407
+ session_request.calling_name = calling_name
408
+ session_request.session_header.packet_length =
409
+ session_request.num_bytes - session_request.session_header.num_bytes
410
+ session_request
414
411
  end
412
+
415
413
  end
416
414
  end
@@ -83,7 +83,7 @@ module RubySMB
83
83
  @session_key = @ntlm_client.session_key
84
84
  challenge_message = @ntlm_client.session.challenge_message
85
85
  store_target_info(challenge_message.target_info) if challenge_message.has_flag?(:TARGET_INFO)
86
- @os_version = extract_os_version(challenge_message.os_version.to_s)
86
+ @os_version = extract_os_version(challenge_message.os_version.to_s) unless challenge_message.os_version.empty?
87
87
 
88
88
  raw = smb1_ntlmssp_authenticate(type3_message, user_id)
89
89
  response = smb1_ntlmssp_final_packet(raw)
@@ -201,7 +201,7 @@ module RubySMB
201
201
  @session_key = @ntlm_client.session_key
202
202
  challenge_message = ntlm_client.session.challenge_message
203
203
  store_target_info(challenge_message.target_info) if challenge_message.has_flag?(:TARGET_INFO)
204
- @os_version = extract_os_version(challenge_message.os_version.to_s)
204
+ @os_version = extract_os_version(challenge_message.os_version.to_s) unless challenge_message.os_version.empty?
205
205
 
206
206
  raw = smb2_ntlmssp_authenticate(type3_message, @session_id)
207
207
  response = smb2_ntlmssp_final_packet(raw)
@@ -9,6 +9,7 @@ module RubySMB
9
9
  RETARGET_SESSION_RESPONSE = 0x84
10
10
  SESSION_KEEP_ALIVE = 0x85
11
11
 
12
+ require 'ruby_smb/nbss/netbios_name'
12
13
  require 'ruby_smb/nbss/session_header'
13
14
  require 'ruby_smb/nbss/session_request'
14
15
  require 'ruby_smb/nbss/negative_session_response'
@@ -0,0 +1,48 @@
1
+ module RubySMB
2
+ module Nbss
3
+ # Representation of the NetBIOS Name as defined in
4
+ # [4.1. NAME FORMAT](https://tools.ietf.org/html/rfc1002#section-4.1) and
5
+ # [14. REPRESENTATION OF NETBIOS NAMES](https://tools.ietf.org/html/rfc1001#section-14) and
6
+ # [Domain name representation and compression](https://tools.ietf.org/html/rfc883#page-31)
7
+ class NetbiosName < BinData::Primitive
8
+ endian :big
9
+
10
+ bit1 :flag1, initial_value: 0
11
+ bit1 :flag2, initial_value: 0
12
+ bit6 :label_length
13
+ string :label, read_length: -> { label_length }
14
+ string :null_label, read_length: 1, value: "\x00"
15
+
16
+ def nb_name_encode(name)
17
+ encoded_name = ''
18
+ name.each_byte do |char|
19
+ first_half = (char >> 4) + 'A'.ord
20
+ second_half = (char & 0xF) + 'A'.ord
21
+ encoded_name << first_half.chr
22
+ encoded_name << second_half.chr
23
+ end
24
+ encoded_name
25
+ end
26
+
27
+ def nb_name_decode(encoded_name)
28
+ name = encoded_name.scan(/../).map do |char_pair|
29
+ first_half = char_pair[0];
30
+ second_half = char_pair[1]
31
+ char = ((first_half.ord - 'A'.ord) << 4) + (second_half.ord - 'A'.ord)
32
+ char.chr
33
+ end
34
+ name.join
35
+ end
36
+
37
+ def get
38
+ nb_name_decode(label)
39
+ end
40
+
41
+ def set(label)
42
+ self.label = nb_name_encode(label)
43
+ self.label_length = self.label.length
44
+ end
45
+ end
46
+
47
+ end
48
+ end
@@ -6,8 +6,8 @@ module RubySMB
6
6
  endian :big
7
7
 
8
8
  session_header :session_header
9
- string :called_name, label: 'Called Name'
10
- string :calling_name, label: 'Calling Name'
9
+ netbios_name :called_name, label: 'Called Name'
10
+ netbios_name :calling_name, label: 'Calling Name'
11
11
  end
12
12
  end
13
13
  end
@@ -13,9 +13,11 @@ module RubySMB
13
13
 
14
14
  def bind(options={})
15
15
  bind_req = RubySMB::Dcerpc::Bind.new(options)
16
- ioctl_response = ioctl_send_recv(bind_req, options)
16
+ write(data: bind_req.to_binary_s)
17
+ @size = 1024
18
+ dcerpc_raw_response = read()
17
19
  begin
18
- dcerpc_response = RubySMB::Dcerpc::BindAck.read(ioctl_response.output_data)
20
+ dcerpc_response = RubySMB::Dcerpc::BindAck.read(dcerpc_raw_response)
19
21
  rescue IOError
20
22
  raise RubySMB::Dcerpc::Error::InvalidPacket, "Error reading the DCERPC response"
21
23
  end
@@ -16,7 +16,7 @@ module RubySMB
16
16
  uint32 :max_input_response, label: 'Max Input Response'
17
17
  uint32 :output_offset, label: 'Output Offset', initial_value: -> { input_offset + output_count }
18
18
  uint32 :output_count, label: 'Output Count'
19
- uint32 :max_output_response, label: 'Max Output response', initial_value: 65536
19
+ uint32 :max_output_response, label: 'Max Output response', initial_value: 1024
20
20
 
21
21
  struct :flags do
22
22
  bit7 :reserved1, label: 'Reserved Space'
@@ -1,3 +1,3 @@
1
1
  module RubySMB
2
- VERSION = '0.0.22'.freeze
2
+ VERSION = '0.0.23'.freeze
3
3
  end
@@ -6,8 +6,8 @@ require 'ruby_smb/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'ruby_smb'
8
8
  spec.version = RubySMB::VERSION
9
- spec.authors = ['David Maloney', 'James Lee']
10
- spec.email = ['DMaloney@rapid7.com', 'egypt@metasploit.com']
9
+ spec.authors = ['David Maloney', 'James Lee', 'Dev Mohanty', 'Christophe De La Fuente']
10
+ spec.email = ['DMaloney@rapid7.com', 'egypt@metasploit.com', 'dev_mohanty@rapid7.com', 'paristvinternet-github@yahoo.com']
11
11
  spec.summary = 'A pure Ruby implementation of the SMB Protocol Family'
12
12
  spec.description = ''
13
13
  spec.homepage = 'https://github.com/rapid7/ruby_smb'
@@ -155,8 +155,6 @@ RSpec.describe RubySMB::Client do
155
155
 
156
156
  context 'NetBIOS Session Service' do
157
157
  describe '#session_request' do
158
- let(:called_name) { '*SMBSERVER ' }
159
- let(:calling_name) { " \x00" }
160
158
  let(:session_header) { RubySMB::Nbss::SessionHeader.new }
161
159
  let(:session_request) { RubySMB::Nbss::SessionRequest.new }
162
160
 
@@ -166,46 +164,10 @@ RSpec.describe RubySMB::Client do
166
164
  allow(dispatcher).to receive(:recv_packet).and_return(session_header.to_binary_s)
167
165
  end
168
166
 
169
- it 'requests a session for *SMBSERVER by default' do
170
- expect(client).to receive(:nb_name_encode).with(called_name).once
171
- expect(client).to receive(:nb_name_encode).with(calling_name).once
172
- client.session_request
173
- end
174
-
175
- it 'requests a session for the provided name and the expected calling name' do
176
- name = 'NBNAME'
177
- called_name = "#{name} "
178
-
179
- expect(client).to receive(:nb_name_encode).with(called_name).once
180
- expect(client).to receive(:nb_name_encode).with(calling_name).once
181
- client.session_request(name)
182
- end
183
-
184
- it 'makes NetBIOS name uppercase' do
185
- name = 'nbNamE'
186
- called_name = "#{name.upcase} "
187
-
188
- expect(client).to receive(:nb_name_encode).with(called_name).once
189
- expect(client).to receive(:nb_name_encode).with(calling_name).once
190
- client.session_request(name)
191
- end
192
-
193
- it 'creates a SessionRequest packet' do
194
- expect(RubySMB::Nbss::SessionRequest).to receive(:new).and_return(session_request)
195
- client.session_request
196
- end
197
-
198
- it 'sets the expected fields of the SessionRequest packet' do
199
- encoded_called_name = "\x20#{client.nb_name_encode(called_name)}\x00"
200
- encoded_calling_name = "\x20#{client.nb_name_encode(calling_name)}\x00"
201
- allow(dispatcher).to receive(:send_packet) do |packet, _opts|
202
- expect(packet).to be_a(RubySMB::Nbss::SessionRequest)
203
- expect(packet.session_header.session_packet_type).to eq RubySMB::Nbss::SESSION_REQUEST
204
- expect(packet.called_name).to eq encoded_called_name
205
- expect(packet.calling_name).to eq encoded_calling_name
206
- expect(packet.session_header.packet_length).to eq (encoded_called_name.size + encoded_calling_name.size)
207
- end
208
- client.session_request
167
+ it 'calls #session_request_packet' do
168
+ called_name = 'SPECNAME'
169
+ expect(client).to receive(:session_request_packet).with(called_name)
170
+ client.session_request(called_name)
209
171
  end
210
172
 
211
173
  it 'sends the SessionRequest packet without adding additional NetBIOS Session Header' do
@@ -237,11 +199,36 @@ RSpec.describe RubySMB::Client do
237
199
  end
238
200
  end
239
201
 
240
- describe '#nb_name_encode' do
241
- it 'encodes as expected' do
242
- input = 'TESTNB '
243
- output = 'FEEFFDFEEOECCACACACACACACACACACA'
244
- expect(client.nb_name_encode(input)).to eq output
202
+ describe '#session_request_packet' do
203
+ it 'creates a SessionRequest packet' do
204
+ session_request = RubySMB::Nbss::SessionRequest.new
205
+ expect(RubySMB::Nbss::SessionRequest).to receive(:new).and_return(session_request)
206
+ client.session_request_packet
207
+ end
208
+
209
+ it 'sets the expected fields of the SessionRequest packet' do
210
+ name = 'NBNAMESPEC'
211
+ called_name = 'NBNAMESPEC '
212
+ calling_name = " \x00"
213
+
214
+ session_packet = client.session_request_packet(name)
215
+ expect(session_packet).to be_a(RubySMB::Nbss::SessionRequest)
216
+ expect(session_packet.session_header.session_packet_type).to eq RubySMB::Nbss::SESSION_REQUEST
217
+ expect(session_packet.called_name).to eq called_name
218
+ expect(session_packet.calling_name).to eq calling_name
219
+ expect(session_packet.session_header.packet_length).to eq(
220
+ session_packet.called_name.to_binary_s.size + session_packet.calling_name.to_binary_s.size
221
+ )
222
+ end
223
+
224
+ it 'converts the called name to upperase' do
225
+ name = 'myname'
226
+ session_packet = client.session_request_packet(name)
227
+ expect(session_packet.called_name).to eq("#{name.upcase.ljust(15)}\x20")
228
+ end
229
+
230
+ it 'returns a session packet with *SMBSERVER by default' do
231
+ expect(client.session_request_packet.called_name).to eq('*SMBSERVER ')
245
232
  end
246
233
  end
247
234
  end
@@ -0,0 +1,95 @@
1
+ RSpec.describe RubySMB::Nbss::NetbiosName do
2
+ subject(:netbios_name) { described_class.new }
3
+
4
+ it { is_expected.to respond_to :flag1 }
5
+ it { is_expected.to respond_to :flag2 }
6
+ it { is_expected.to respond_to :label_length }
7
+ it { is_expected.to respond_to :label }
8
+ it { is_expected.to respond_to :null_label }
9
+
10
+ it 'is big endian' do
11
+ expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :big
12
+ end
13
+
14
+ describe '#flag1' do
15
+ it 'is a 1-bit field' do
16
+ expect(netbios_name.flag1).to be_a BinData::Bit1
17
+ end
18
+
19
+ it 'is set to 0 by default' do
20
+ expect(netbios_name.flag1).to eq 0
21
+ end
22
+ end
23
+
24
+ describe '#flag2' do
25
+ it 'is a 1-bit field' do
26
+ expect(netbios_name.flag2).to be_a BinData::Bit1
27
+ end
28
+
29
+ it 'is set to 0 by default' do
30
+ expect(netbios_name.flag2).to eq 0
31
+ end
32
+ end
33
+
34
+ describe '#label_length' do
35
+ it 'is a 6-bit field' do
36
+ expect(netbios_name.label_length).to be_a BinData::Bit6
37
+ end
38
+ end
39
+
40
+ describe '#label' do
41
+ it 'is a string' do
42
+ expect(netbios_name.label).to be_a BinData::String
43
+ end
44
+
45
+ it 'reads #label_length bytes' do
46
+ str = 'ABCDEFGHIJ'
47
+ netbios_name.label_length = 4
48
+ expect(netbios_name.label.read(str)).to eq(str[0,4])
49
+ end
50
+ end
51
+
52
+ describe '#null_label' do
53
+ it 'is a string' do
54
+ expect(netbios_name.null_label).to be_a BinData::String
55
+ end
56
+
57
+ it 'is always a NULL byte' do
58
+ str = 'ABCD'
59
+ expect(netbios_name.null_label.read(str)).to eq("\x00")
60
+ end
61
+ end
62
+
63
+ describe '#nb_name_encode' do
64
+ it 'encodes as expected' do
65
+ input = 'TESTNB '
66
+ output = 'FEEFFDFEEOECCACACACACACACACACACA'
67
+ expect(netbios_name.nb_name_encode(input)).to eq output
68
+ end
69
+ end
70
+
71
+ describe '#nb_name_encode' do
72
+ it 'decodes as expected' do
73
+ input = 'FEEFFDFEEOECCACACACACACACACACACA'
74
+ output = 'TESTNB '
75
+ expect(netbios_name.nb_name_decode(input)).to eq output
76
+ end
77
+ end
78
+
79
+ describe '#get' do
80
+ it 'returns the expected label' do
81
+ label = 'TESTNB '
82
+ expect(netbios_name.assign(label)).to eq(label)
83
+ end
84
+ end
85
+
86
+ describe '#set' do
87
+ it 'sets the expected label and the label_length fields' do
88
+ label = 'TESTNB '
89
+ netbios_name.assign(label)
90
+ expect(netbios_name.label).to eq(netbios_name.nb_name_encode(label))
91
+ expect(netbios_name.label_length).to eq(netbios_name.nb_name_encode(label).length)
92
+ end
93
+ end
94
+ end
95
+
@@ -17,13 +17,13 @@ RSpec.describe RubySMB::Nbss::SessionRequest do
17
17
 
18
18
  describe '#called_name' do
19
19
  it 'is a string' do
20
- expect(session_request.called_name).to be_a BinData::String
20
+ expect(session_request.called_name).to be_a RubySMB::Nbss::NetbiosName
21
21
  end
22
22
  end
23
23
 
24
24
  describe '#calling_name' do
25
25
  it 'is a string' do
26
- expect(session_request.calling_name).to be_a BinData::String
26
+ expect(session_request.calling_name).to be_a RubySMB::Nbss::NetbiosName
27
27
  end
28
28
  end
29
29
  end
@@ -43,7 +43,7 @@ RSpec.describe RubySMB::SMB2::Pipe do
43
43
  expect(pipe.peek_available).to eq(0x40302010)
44
44
  end
45
45
  end
46
-
46
+
47
47
  describe '#peek_state' do
48
48
  it 'reads the correct state of the pipe' do
49
49
  allow(pipe).to receive(:peek) { ioctl_response }
@@ -111,12 +111,12 @@ RSpec.describe RubySMB::SMB2::Pipe do
111
111
  describe '#bind' do
112
112
  let(:options) { { endpoint: RubySMB::Dcerpc::Srvsvc } }
113
113
  let(:bind_packet) { RubySMB::Dcerpc::Bind.new(options) }
114
- let(:ioctl_response) { RubySMB::SMB2::Packet::IoctlResponse.new }
115
114
  let(:bind_ack_packet) { RubySMB::Dcerpc::BindAck.new }
116
115
 
117
116
  before :example do
118
117
  allow(RubySMB::Dcerpc::Bind).to receive(:new).and_return(bind_packet)
119
- allow(pipe).to receive(:ioctl_send_recv).and_return(ioctl_response)
118
+ allow(pipe).to receive(:write)
119
+ allow(pipe).to receive(:read)
120
120
  bind_ack_packet.p_result_list.n_results = 1
121
121
  bind_ack_packet.p_result_list.p_results[0].result = RubySMB::Dcerpc::BindAck::ACCEPTANCE
122
122
  allow(RubySMB::Dcerpc::BindAck).to receive(:read).and_return(bind_ack_packet)
@@ -127,13 +127,20 @@ RSpec.describe RubySMB::SMB2::Pipe do
127
127
  pipe.bind(options)
128
128
  end
129
129
 
130
- it 'calls #ioctl_send_recv' do
131
- expect(pipe).to receive(:ioctl_send_recv).with(bind_packet, options)
130
+ it 'writes to the named pipe' do
131
+ expect(pipe).to receive(:write).with(data: bind_packet.to_binary_s)
132
+ pipe.bind(options)
133
+ end
134
+
135
+ it 'reads the socket' do
136
+ expect(pipe).to receive(:read)
132
137
  pipe.bind(options)
133
138
  end
134
139
 
135
140
  it 'creates a BindAck packet from the response' do
136
- expect(RubySMB::Dcerpc::BindAck).to receive(:read).with(ioctl_response.output_data).and_return(bind_ack_packet)
141
+ raw_response = RubySMB::Dcerpc::BindAck.new.to_binary_s
142
+ allow(pipe).to receive(:read).and_return(raw_response)
143
+ expect(RubySMB::Dcerpc::BindAck).to receive(:read).with(raw_response).and_return(bind_ack_packet)
137
144
  pipe.bind(options)
138
145
  end
139
146
 
@@ -199,7 +206,7 @@ RSpec.describe RubySMB::SMB2::Pipe do
199
206
  it 'raises the expected exception when it is not a BindAck packet' do
200
207
  response = RubySMB::Dcerpc::Request.new
201
208
  allow(RubySMB::Dcerpc::Response).to receive(:read).and_return(response)
202
- expect { pipe.bind(options) }.to raise_error(RubySMB::Dcerpc::Error::InvalidPacket)
209
+ expect { pipe.request(opnum, options) }.to raise_error(RubySMB::Dcerpc::Error::InvalidPacket)
203
210
  end
204
211
 
205
212
  it 'returns the expected DCERPC Response' do
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_smb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Maloney
8
8
  - James Lee
9
+ - Dev Mohanty
10
+ - Christophe De La Fuente
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain:
@@ -89,7 +91,7 @@ cert_chain:
89
91
  G+Hmcg1v810agasPdoydE0RTVZgEOOMoQ07qu7JFXVWZ9ZQpHT7qJATWL/b2csFG
90
92
  8mVuTXnyJOKRJA==
91
93
  -----END CERTIFICATE-----
92
- date: 2018-03-06 00:00:00.000000000 Z
94
+ date: 2018-03-13 00:00:00.000000000 Z
93
95
  dependencies:
94
96
  - !ruby/object:Gem::Dependency
95
97
  name: redcarpet
@@ -207,6 +209,8 @@ description: ''
207
209
  email:
208
210
  - DMaloney@rapid7.com
209
211
  - egypt@metasploit.com
212
+ - dev_mohanty@rapid7.com
213
+ - paristvinternet-github@yahoo.com
210
214
  executables: []
211
215
  extensions: []
212
216
  extra_rdoc_files: []
@@ -292,6 +296,7 @@ files:
292
296
  - lib/ruby_smb/impersonation_levels.rb
293
297
  - lib/ruby_smb/nbss.rb
294
298
  - lib/ruby_smb/nbss/negative_session_response.rb
299
+ - lib/ruby_smb/nbss/netbios_name.rb
295
300
  - lib/ruby_smb/nbss/session_header.rb
296
301
  - lib/ruby_smb/nbss/session_request.rb
297
302
  - lib/ruby_smb/smb1.rb
@@ -468,6 +473,7 @@ files:
468
473
  - spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb
469
474
  - spec/lib/ruby_smb/generic_packet_spec.rb
470
475
  - spec/lib/ruby_smb/nbss/negative_session_response_spec.rb
476
+ - spec/lib/ruby_smb/nbss/netbios_name_spec.rb
471
477
  - spec/lib/ruby_smb/nbss/session_header_spec.rb
472
478
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
473
479
  - spec/lib/ruby_smb/smb1/andx_block_spec.rb
@@ -646,6 +652,7 @@ test_files:
646
652
  - spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb
647
653
  - spec/lib/ruby_smb/generic_packet_spec.rb
648
654
  - spec/lib/ruby_smb/nbss/negative_session_response_spec.rb
655
+ - spec/lib/ruby_smb/nbss/netbios_name_spec.rb
649
656
  - spec/lib/ruby_smb/nbss/session_header_spec.rb
650
657
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
651
658
  - spec/lib/ruby_smb/smb1/andx_block_spec.rb
metadata.gz.sig CHANGED
Binary file