From 26344731a35eb04cb51c06b464693b23c736bb1d Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Mon, 23 Aug 2021 11:51:57 -0400 Subject: [PATCH] Fix a negotiation bug due to a bad context field --- lib/ruby_smb/smb2/negotiate_context.rb | 8 ++++++-- spec/lib/ruby_smb/smb2/negotiate_context_spec.rb | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/ruby_smb/smb2/negotiate_context.rb b/lib/ruby_smb/smb2/negotiate_context.rb index ccc652433..820e34772 100644 --- a/lib/ruby_smb/smb2/negotiate_context.rb +++ b/lib/ruby_smb/smb2/negotiate_context.rb @@ -69,7 +69,11 @@ class CompressionCapabilities < BinData::Record class NetnameNegotiateContextId < BinData::Record endian :little - stringz16 :net_name, label: 'Net Name' + count_bytes_remaining :bytes_remaining + default_parameter data_length: nil + hide :bytes_remaining + + string16 :net_name, label: 'Net Name', read_length: -> { data_length.nil? ? bytes_remaining : data_length } end # An SMB2 TRANSPORT_CAPABILITIES context struct as defined in @@ -106,7 +110,7 @@ class NegotiateContext < BinData::Record preauth_integrity_capabilities SMB2_PREAUTH_INTEGRITY_CAPABILITIES, label: 'Preauthentication Integrity Capabilities' encryption_capabilities SMB2_ENCRYPTION_CAPABILITIES, label: 'Encryption Capabilities' compression_capabilities SMB2_COMPRESSION_CAPABILITIES, label: 'Compression Capabilities' - netname_negotiate_context_id SMB2_NETNAME_NEGOTIATE_CONTEXT_ID, label: 'Netname Negotiate Context ID' + netname_negotiate_context_id SMB2_NETNAME_NEGOTIATE_CONTEXT_ID, label: 'Netname Negotiate Context ID', data_length: :data_length transport_capabilities SMB2_TRANSPORT_CAPABILITIES, label: 'Transport Capabilities' end diff --git a/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb b/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb index e2259e979..fbff4c874 100644 --- a/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb +++ b/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb @@ -162,7 +162,7 @@ end end -RSpec.describe RubySMB::SMB2::NetnameNegotiateContextId do +RSpec.describe RubySMB::SMB2::NetnameNegotiateContextId do subject(:capability) { described_class.new } it { is_expected.to respond_to :net_name } @@ -173,7 +173,7 @@ describe '#net_name' do it 'is a unicode string' do - expect(capability.net_name).to be_a RubySMB::Field::Stringz16 + expect(capability.net_name).to be_a RubySMB::Field::String16 end end