ruby_smb 3.3.17 → 3.3.19

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_smb/client/authentication.rb +53 -0
  3. data/lib/ruby_smb/client/negotiation.rb +10 -2
  4. data/lib/ruby_smb/client/tree_connect.rb +8 -1
  5. data/lib/ruby_smb/client.rb +16 -5
  6. data/lib/ruby_smb/rap/net_share_enum.rb +166 -0
  7. data/lib/ruby_smb/rap.rb +10 -0
  8. data/lib/ruby_smb/smb1/commands.rb +1 -0
  9. data/lib/ruby_smb/smb1/packet/negotiate_response.rb +11 -0
  10. data/lib/ruby_smb/smb1/packet/nt_create_andx_response.rb +19 -6
  11. data/lib/ruby_smb/smb1/packet/open_andx_request.rb +39 -0
  12. data/lib/ruby_smb/smb1/packet/open_andx_response.rb +40 -0
  13. data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +2 -2
  14. data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +11 -0
  15. data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +53 -13
  16. data/lib/ruby_smb/smb1/packet/trans2/find_information_level/find_info_standard.rb +39 -0
  17. data/lib/ruby_smb/smb1/packet/trans2/find_information_level.rb +1 -0
  18. data/lib/ruby_smb/smb1/packet/trans2/win9x_framing.rb +68 -0
  19. data/lib/ruby_smb/smb1/packet/trans2.rb +1 -0
  20. data/lib/ruby_smb/smb1/packet/tree_connect_request.rb +1 -1
  21. data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +10 -1
  22. data/lib/ruby_smb/smb1/packet.rb +2 -0
  23. data/lib/ruby_smb/smb1/pipe.rb +2 -0
  24. data/lib/ruby_smb/smb1/tree.rb +113 -9
  25. data/lib/ruby_smb/version.rb +1 -1
  26. data/lib/ruby_smb.rb +1 -0
  27. data/spec/lib/ruby_smb/client_spec.rb +2 -1
  28. data/spec/lib/ruby_smb/rap/net_share_enum_spec.rb +185 -0
  29. data/spec/lib/ruby_smb/smb1/packet/trans2/win9x_framing_spec.rb +113 -0
  30. data/spec/lib/ruby_smb/smb1/tree_spec.rb +188 -2
  31. metadata +12 -2
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe RubySMB::SMB1::Packet::Trans2::Win9xFraming do
4
+ # FindFirst2Response is the first production consumer of the mixin; its
5
+ # fixture data already covers every code path in #win9x_trans2_overrides
6
+ # (zero-length buffer, on-wire match, server-reported mismatch, truncated
7
+ # raw response). Using it here keeps the spec grounded in real field
8
+ # layouts without standing up an anonymous host class.
9
+ let(:info_std) do
10
+ RubySMB::SMB1::Packet::Trans2::FindInformationLevel::FindInfoStandard
11
+ end
12
+
13
+ # Reusable fixtures: NT-style (with pad1=3) and Win9x-style (pad1=0) raw
14
+ # FindFirst2Response frames carrying the same single-entry payload so the
15
+ # overrides helper sees the same server-declared offsets differ from what
16
+ # BinData positionally reads.
17
+ let(:single_entry_bytes) do
18
+ "\x98\x5c\x38\x70\x98\x5c\x00\x00\x98\x5c\x39\x70".b +
19
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01".b + '.'
20
+ end
21
+ let(:data_count) { single_entry_bytes.bytesize }
22
+
23
+ def smb_header
24
+ "\xffSMB\x32".b + "\x00".b * 4 + "\x98".b + "\x03\x60".b + ("\x00".b * 20)
25
+ end
26
+
27
+ def build_response(parameter_offset:, data_offset:, word_count:, pad1: 0, pad2: 0)
28
+ # The concrete field layout of FindFirst2Response's parameter_block
29
+ # changes with word_count: 11 words include a 1-entry setup array;
30
+ # 10 words (Win9x style) omit it. trans2_parameters itself is a
31
+ # fixed 10-byte struct (sid, search_count, eos, ea_err_off, last_name_off).
32
+ trans2_params = [0x0300, 1, 1, 0, 0].pack('v*')
33
+ pb_values = [10, data_count, 0, 10, parameter_offset, 0,
34
+ data_count, data_offset, 0]
35
+ # word_count=11 → setup_count(1) + reserved2(0) + 1-word setup array
36
+ # word_count=10 → setup_count(0) + reserved2(0), no setup array
37
+ pb_tail = word_count == 11 ? "\x01\x00".b + [1].pack('v') : "\x00\x00".b
38
+ param_block = pb_values.pack('v*') + pb_tail
39
+ byte_count = pad1 + 10 + pad2 + data_count
40
+ smb_header + [word_count].pack('C') + param_block +
41
+ [byte_count].pack('v') + ("\x00".b * pad1) + trans2_params +
42
+ ("\x00".b * pad2) + single_entry_bytes
43
+ end
44
+
45
+ describe '#win9x_trans2_overrides' do
46
+ context 'when BinData has already read the full buffer (NT-style server)' do
47
+ it 'returns [nil, nil]' do
48
+ # NT-era response: word_count=11 with 1-word setup, pad1=3, pad2=2
49
+ # → trans2_parameters at offset 60, trans2_data at 72. BinData's
50
+ # Trans2::DataBlock positional read lands exactly on the wire data.
51
+ raw = build_response(
52
+ parameter_offset: 60, data_offset: 72,
53
+ word_count: 11, pad1: 3, pad2: 2
54
+ )
55
+ response = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.read(raw)
56
+ expect(response.win9x_trans2_overrides(raw)).to eq([nil, nil])
57
+ end
58
+ end
59
+
60
+ context 'when the server declared no trans2_data (data_count == 0)' do
61
+ it 'returns [nil, nil]' do
62
+ raw = build_response(
63
+ parameter_offset: 60, data_offset: 72,
64
+ word_count: 11, pad1: 3, pad2: 2
65
+ )
66
+ response = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.read(raw)
67
+ response.parameter_block.data_count = 0
68
+ expect(response.win9x_trans2_overrides(raw)).to eq([nil, nil])
69
+ end
70
+ end
71
+
72
+ context 'when the server used Win9x-era framing (no pad1)' do
73
+ it 'returns trans2_parameters re-read at the server-reported offset' do
74
+ raw = build_response(
75
+ parameter_offset: 55, data_offset: 66,
76
+ word_count: 10, pad1: 0, pad2: 1
77
+ )
78
+ response = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.read(raw)
79
+ params, = response.win9x_trans2_overrides(raw)
80
+ expect(params).to be_a(RubySMB::SMB1::Packet::Trans2::FindFirst2ResponseTrans2Parameters)
81
+ expect(params.sid).to eq 0x0300
82
+ expect(params.search_count).to eq 1
83
+ expect(params.eos).to eq 1
84
+ end
85
+
86
+ it 'returns the trans2_data bytes sliced from the server-reported offset' do
87
+ raw = build_response(
88
+ parameter_offset: 55, data_offset: 66,
89
+ word_count: 10, pad1: 0, pad2: 1
90
+ )
91
+ response = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.read(raw)
92
+ _, data_bytes = response.win9x_trans2_overrides(raw)
93
+ expect(data_bytes).to eq single_entry_bytes
94
+ # And #results can read entries from it through the buffer: kwarg.
95
+ entries = response.results(info_std, unicode: false, buffer: data_bytes)
96
+ expect(entries.length).to eq 1
97
+ expect(entries.first.file_name.to_s).to eq '.'
98
+ end
99
+ end
100
+
101
+ context 'when the raw response is truncated before the server-reported offsets' do
102
+ it 'returns [nil, nil] rather than raising' do
103
+ raw = build_response(
104
+ parameter_offset: 55, data_offset: 66,
105
+ word_count: 10, pad1: 0, pad2: 1
106
+ )
107
+ response = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.read(raw)
108
+ truncated = raw.byteslice(0, raw.bytesize - 20)
109
+ expect(response.win9x_trans2_overrides(truncated)).to eq([nil, nil])
110
+ end
111
+ end
112
+ end
113
+ end
@@ -457,6 +457,129 @@ RSpec.describe RubySMB::SMB1::Tree do
457
457
  end
458
458
  end
459
459
  end
460
+
461
+ context 'with SMB_INFO_STANDARD (LANMAN 2.0 / Win9x)' do
462
+ let(:info_standard) { RubySMB::SMB1::Packet::Trans2::FindInformationLevel::FindInfoStandard }
463
+
464
+ def build_info_standard_entry(name:, size: 0, attrs: 0x20, pad_after: false)
465
+ entry = info_standard.new
466
+ entry.data_size = size
467
+ entry.allocation_size = size
468
+ entry.file_attributes = attrs
469
+ entry.file_name = name
470
+ entry.file_name_length = name.bytesize
471
+ pad_after ? entry.to_binary_s + "\x00" : entry.to_binary_s
472
+ end
473
+
474
+ def build_find_first2_raw(blob, status: 0)
475
+ packet = RubySMB::SMB1::Packet::Trans2::FindFirst2Response.new
476
+ packet.smb_header.nt_status = status
477
+ packet.data_block.trans2_parameters.eos = 1
478
+ packet.data_block.trans2_data.buffer = blob
479
+ packet.to_binary_s
480
+ end
481
+
482
+ before :each do
483
+ # Undo the default FindFirst2Response stubs from the outer #list block
484
+ allow(RubySMB::SMB1::Packet::Trans2::FindFirst2Request).to receive(:new).and_call_original
485
+ allow(RubySMB::SMB1::Packet::Trans2::FindFirst2Response).to receive(:read).and_call_original
486
+ end
487
+
488
+ it 'parses sequential SMB_INFO_STANDARD entries separated by a null pad' do
489
+ # Win9x servers insert a trailing null byte between entries.
490
+ blob = build_info_standard_entry(name: 'foo.txt', size: 100, pad_after: true) +
491
+ build_info_standard_entry(name: 'barbaz', size: 200)
492
+ allow(client).to receive(:send_recv).and_return(build_find_first2_raw(blob))
493
+
494
+ results = tree.list(type: info_standard)
495
+
496
+ expect(results.length).to eq 2
497
+ expect(results[0].file_name).to eq 'foo.txt'
498
+ expect(results[0].data_size).to eq 100
499
+ expect(results[1].file_name).to eq 'barbaz'
500
+ expect(results[1].data_size).to eq 200
501
+ end
502
+
503
+ it 'parses a single SMB_INFO_STANDARD entry without trailing padding' do
504
+ blob = build_info_standard_entry(name: 'only.txt', size: 42)
505
+ allow(client).to receive(:send_recv).and_return(build_find_first2_raw(blob))
506
+
507
+ results = tree.list(type: info_standard)
508
+
509
+ expect(results.length).to eq 1
510
+ expect(results[0].file_name).to eq 'only.txt'
511
+ expect(results[0].data_size).to eq 42
512
+ end
513
+
514
+ it 'stops when an entry has a zero file_name_length' do
515
+ entry = build_info_standard_entry(name: 'first.txt', pad_after: true)
516
+ zero = "\x00" * 23
517
+ blob = entry + zero
518
+ allow(client).to receive(:send_recv).and_return(build_find_first2_raw(blob))
519
+
520
+ results = tree.list(type: info_standard)
521
+
522
+ expect(results.map(&:file_name)).to eq(['first.txt'])
523
+ end
524
+
525
+ it 'raises UnexpectedStatusCode when the SMB status is not success' do
526
+ allow(client).to receive(:send_recv).and_return(
527
+ build_find_first2_raw('', status: WindowsError::NTStatus::STATUS_ACCESS_DENIED.value)
528
+ )
529
+ expect { tree.list(type: info_standard) }.to raise_error(RubySMB::Error::UnexpectedStatusCode)
530
+ end
531
+
532
+ it 'turns unicode off and raises search_count to 255 for SMB_INFO_STANDARD' do
533
+ allow(client).to receive(:send_recv) do |packet|
534
+ expect(packet.smb_header.flags2.unicode).to eq 0
535
+ expect(packet.data_block.trans2_parameters.search_count).to eq 255
536
+ build_find_first2_raw('')
537
+ end
538
+ tree.list(type: info_standard)
539
+ end
540
+
541
+ it 'returns an empty array when the data blob is empty' do
542
+ allow(client).to receive(:send_recv).and_return(build_find_first2_raw(''))
543
+ expect(tree.list(type: info_standard)).to eq([])
544
+ end
545
+
546
+ context 'against a Win9x-era server that omits the trans2 4-byte alignment pad' do
547
+ # Wire layout: word_count=10 (no setup section), parameter_offset=55
548
+ # points right after byte_count (no pad1), data_offset=66 points after
549
+ # trans2_parameters + 1-byte pad2. BinData's Trans2::DataBlock inserts
550
+ # its usual pad1 on read, so trans2_data.buffer arrives (data_count -
551
+ # pad1_length) bytes short and #results would otherwise see 0 entries.
552
+ # The Tree#list workaround detects the mismatch and re-slices the
553
+ # buffer from the server-reported data_offset.
554
+ def build_win9x_find_first2_raw
555
+ data_count = 87
556
+ parameter_offset = 55
557
+ data_offset = 66
558
+ smb_header = "\xffSMB\x32".b + "\x00".b * 4 + "\x98".b + "\x03\x60".b + ("\x00".b * 20)
559
+ param_block = [10, data_count, 0, 10, parameter_offset, 0,
560
+ data_count, data_offset, 0, 0].pack('v*')
561
+ trans2_params = [0x0300, 3, 1, 0, 74].pack('v*')
562
+ entry1 = "\x98\x5c\x38\x70\x98\x5c\x00\x00\x98\x5c\x39\x70" \
563
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01".b + '.'
564
+ entry2 = "\x98\x5c\x38\x70\x98\x5c\x00\x00\x98\x5c\x39\x70" \
565
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x02".b + '..'
566
+ entry3 = "\x98\x5c\x40\x70\x98\x5c\x00\x00\x98\x5c\x4c\x70" \
567
+ "\x16\x00\x00\x00\x16\x00\x00\x00\x20\x00\x0c".b + 'FLAG.TXT.txt'
568
+ trans2_data = entry1 + "\x00".b + entry2 + "\x00".b + entry3 + "\x00".b
569
+ raise "data_count mismatch" unless trans2_data.bytesize == data_count
570
+ byte_count_value = 10 + 1 + data_count # 0 pad1 + params + 1 pad2 + data
571
+ smb_header + [10].pack('C') + param_block +
572
+ [byte_count_value].pack('v') + trans2_params + "\x00".b + trans2_data
573
+ end
574
+
575
+ it 'parses the entries that BinData would otherwise drop due to missing pad1' do
576
+ allow(client).to receive(:send_recv).and_return(build_win9x_find_first2_raw)
577
+ results = tree.list(type: info_standard)
578
+ expect(results.map { |r| r.file_name.to_s }).to eq(['.', '..', 'FLAG.TXT.txt'])
579
+ expect(results.last.data_size).to eq 22
580
+ end
581
+ end
582
+ end
460
583
  end
461
584
 
462
585
  describe '#set_header_fields' do
@@ -492,8 +615,71 @@ RSpec.describe RubySMB::SMB1::Tree do
492
615
  expect(modified_request.parameter_block.max_parameter_count).to eq 10
493
616
  end
494
617
 
495
- it 'sets #max_data_count to 16,384' do
496
- expect(modified_request.parameter_block.max_data_count).to eq 16_384
618
+ it 'sets #max_data_count to the minimum of 16,384 and server_max_buffer_size' do
619
+ expect(modified_request.parameter_block.max_data_count).to eq(
620
+ [16_384, client.server_max_buffer_size].min
621
+ )
622
+ end
623
+ end
624
+
625
+ describe '#open_file (SMB_COM_OPEN_ANDX fallback)' do
626
+ # Win9x and other LAN-Manager-era servers don't advertise the NT SMBs
627
+ # capability, so #_open dispatches to #_open_andx instead of NT_CREATE_ANDX.
628
+ let(:open_andx_response) do
629
+ packet = RubySMB::SMB1::Packet::OpenAndxResponse.new
630
+ packet.smb_header.nt_status = 0
631
+ packet.parameter_block.fid = 0x4242
632
+ packet.parameter_block.file_data_size = 1234
633
+ packet.parameter_block.resource_type = RubySMB::SMB1::ResourceType::DISK
634
+ packet
635
+ end
636
+
637
+ before :example do
638
+ client.server_supports_nt_smbs = false
639
+ end
640
+
641
+ it 'builds the OPEN_ANDX request without raising NoMethodError on bit-field assignment' do
642
+ allow(client).to receive(:send_recv).and_return(open_andx_response.to_binary_s)
643
+ expect { tree.open_file(filename: 'HELLO.TXT') }.not_to raise_error
644
+ end
645
+
646
+ it 'serializes search_attributes / file_attributes as SMB_FILE_ATTRIBUTES bit-fields' do
647
+ sent = nil
648
+ allow(client).to receive(:send_recv) do |req|
649
+ sent = req
650
+ open_andx_response.to_binary_s
651
+ end
652
+ tree.open_file(filename: 'HELLO.TXT')
653
+
654
+ # 0x0016 = directory | system | hidden in the SMB_FILE_ATTRIBUTES search half.
655
+ expect(sent.parameter_block.search_attributes.directory).to eq 1
656
+ expect(sent.parameter_block.search_attributes.system).to eq 1
657
+ expect(sent.parameter_block.search_attributes.hidden).to eq 1
658
+ expect(sent.parameter_block.search_attributes.to_binary_s).to eq([0x0016].pack('v'))
659
+
660
+ # Read-only open: file_attributes mask is zeroed.
661
+ expect(sent.parameter_block.file_attributes.to_binary_s).to eq([0x0000].pack('v'))
662
+ end
663
+
664
+ it 'sets the SMB_FILE_ATTRIBUTE_ARCHIVE bit when opened for write' do
665
+ allow(client).to receive(:send_recv).and_return(open_andx_response.to_binary_s)
666
+ sent = nil
667
+ allow(client).to receive(:send_recv) do |req|
668
+ sent = req
669
+ open_andx_response.to_binary_s
670
+ end
671
+ tree.open_file(filename: 'HELLO.TXT', write: true)
672
+
673
+ expect(sent.parameter_block.file_attributes.to_binary_s).to eq([0x0020].pack('v'))
674
+ expect(sent.parameter_block.file_attributes.archive).to eq 1
675
+ end
676
+
677
+ it 'returns a File handle whose FID and size come from the OPEN_ANDX response' do
678
+ allow(client).to receive(:send_recv).and_return(open_andx_response.to_binary_s)
679
+ file = tree.open_file(filename: 'HELLO.TXT')
680
+ expect(file).to be_a(RubySMB::SMB1::File)
681
+ expect(file.fid).to eq 0x4242
682
+ expect(file.size).to eq 1234
497
683
  end
498
684
  end
499
685
 
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: 3.3.17
4
+ version: 3.3.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2026-03-24 00:00:00.000000000 Z
16
+ date: 2026-04-27 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: redcarpet
@@ -465,6 +465,8 @@ files:
465
465
  - lib/ruby_smb/ntlm.rb
466
466
  - lib/ruby_smb/ntlm/client.rb
467
467
  - lib/ruby_smb/peer_info.rb
468
+ - lib/ruby_smb/rap.rb
469
+ - lib/ruby_smb/rap/net_share_enum.rb
468
470
  - lib/ruby_smb/server.rb
469
471
  - lib/ruby_smb/server/cli.rb
470
472
  - lib/ruby_smb/server/server_client.rb
@@ -536,6 +538,8 @@ files:
536
538
  - lib/ruby_smb/smb1/packet/nt_trans/request.rb
537
539
  - lib/ruby_smb/smb1/packet/nt_trans/response.rb
538
540
  - lib/ruby_smb/smb1/packet/nt_trans/subcommands.rb
541
+ - lib/ruby_smb/smb1/packet/open_andx_request.rb
542
+ - lib/ruby_smb/smb1/packet/open_andx_response.rb
539
543
  - lib/ruby_smb/smb1/packet/read_andx_request.rb
540
544
  - lib/ruby_smb/smb1/packet/read_andx_response.rb
541
545
  - lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb
@@ -558,6 +562,7 @@ files:
558
562
  - lib/ruby_smb/smb1/packet/trans2/find_information_level.rb
559
563
  - lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_both_directory_info.rb
560
564
  - lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_full_directory_info.rb
565
+ - lib/ruby_smb/smb1/packet/trans2/find_information_level/find_info_standard.rb
561
566
  - lib/ruby_smb/smb1/packet/trans2/find_next2_request.rb
562
567
  - lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb
563
568
  - lib/ruby_smb/smb1/packet/trans2/open2_request.rb
@@ -579,6 +584,7 @@ files:
579
584
  - lib/ruby_smb/smb1/packet/trans2/set_file_information_request.rb
580
585
  - lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb
581
586
  - lib/ruby_smb/smb1/packet/trans2/subcommands.rb
587
+ - lib/ruby_smb/smb1/packet/trans2/win9x_framing.rb
582
588
  - lib/ruby_smb/smb1/packet/tree_connect_request.rb
583
589
  - lib/ruby_smb/smb1/packet/tree_connect_response.rb
584
590
  - lib/ruby_smb/smb1/packet/tree_disconnect_request.rb
@@ -836,6 +842,7 @@ files:
836
842
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
837
843
  - spec/lib/ruby_smb/ntlm/client/session_spec.rb
838
844
  - spec/lib/ruby_smb/ntlm/client_spec.rb
845
+ - spec/lib/ruby_smb/rap/net_share_enum_spec.rb
839
846
  - spec/lib/ruby_smb/server/server_client_spec.rb
840
847
  - spec/lib/ruby_smb/server/session_spec.rb
841
848
  - spec/lib/ruby_smb/server/share/provider/disk_spec.rb
@@ -915,6 +922,7 @@ files:
915
922
  - spec/lib/ruby_smb/smb1/packet/trans2/response_spec.rb
916
923
  - spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_request_spec.rb
917
924
  - spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb
925
+ - spec/lib/ruby_smb/smb1/packet/trans2/win9x_framing_spec.rb
918
926
  - spec/lib/ruby_smb/smb1/packet/tree_connect_request_spec.rb
919
927
  - spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb
920
928
  - spec/lib/ruby_smb/smb1/packet/tree_disconnect_request_spec.rb
@@ -1187,6 +1195,7 @@ test_files:
1187
1195
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
1188
1196
  - spec/lib/ruby_smb/ntlm/client/session_spec.rb
1189
1197
  - spec/lib/ruby_smb/ntlm/client_spec.rb
1198
+ - spec/lib/ruby_smb/rap/net_share_enum_spec.rb
1190
1199
  - spec/lib/ruby_smb/server/server_client_spec.rb
1191
1200
  - spec/lib/ruby_smb/server/session_spec.rb
1192
1201
  - spec/lib/ruby_smb/server/share/provider/disk_spec.rb
@@ -1266,6 +1275,7 @@ test_files:
1266
1275
  - spec/lib/ruby_smb/smb1/packet/trans2/response_spec.rb
1267
1276
  - spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_request_spec.rb
1268
1277
  - spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb
1278
+ - spec/lib/ruby_smb/smb1/packet/trans2/win9x_framing_spec.rb
1269
1279
  - spec/lib/ruby_smb/smb1/packet/tree_connect_request_spec.rb
1270
1280
  - spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb
1271
1281
  - spec/lib/ruby_smb/smb1/packet/tree_disconnect_request_spec.rb