ruby_smb 0.0.23 → 0.0.24

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: 59b2f5a2d37d1e42e0bd674e58841e7209e9877f
4
- data.tar.gz: 6cad39d8512753e877e9abf458ceaa21cfb201b9
3
+ metadata.gz: d60db7afb256116a28efdf92fcf911b6b418efda
4
+ data.tar.gz: ba1b78916ec040e37d15ec02d9c6a3d1f09af9a4
5
5
  SHA512:
6
- metadata.gz: cbff69d36da828c531c8cf8d62ce6ad98cd0966cf9cae2b20c65cc649ca37f3ec08fac85a346b65caeaaa0f65cf0d24c9dc2218992fabe70965082df456ec58c
7
- data.tar.gz: b0ea5ea13caeb32f0b787c280062f87f6d87c20179cd4e446f28f94290350f2710eef62b089f75c6bcdb215db07e75ae1f4d84ec3c905f20abacf3ac9f2f95af
6
+ metadata.gz: dc4b60306e19613bdf20deb63d473b796aed95d5abed3e509e14ee5b622c1e012680d803bd9fa57554e5fc44279d810f064248dd127d5ebf2cfcfb3d15a0abdb
7
+ data.tar.gz: b1dfd5273575d64e242199655305cf22bfc76c5e1cfdadaf7bd074c9b4dcc53d0a2045b5d90414838fdc91b86bd5cd95889aa7d6e5c3161188d32fa9768545a6
checksums.yaml.gz.sig CHANGED
Binary file
@@ -24,7 +24,7 @@ module RubySMB
24
24
  last_tree.id
25
25
  end
26
26
 
27
- def open(path, disposition=RubySMB::Dispositions::FILE_OPEN, access, write: false, read: true)
27
+ def open(path, disposition=RubySMB::Dispositions::FILE_OPEN, write: false, read: true)
28
28
  file = last_tree.open_file(filename: path, write: write, read: read, disposition: disposition)
29
29
  @last_file_id = if file.respond_to?(:guid)
30
30
  file.guid.to_binary_s
@@ -32,10 +32,11 @@ module RubySMB
32
32
  file.fid.to_binary_s
33
33
  end
34
34
  @open_files[@last_file_id] = file
35
+ @last_file_id
35
36
  end
36
37
 
37
38
  def create_pipe(path, disposition=RubySMB::Dispositions::FILE_OPEN_IF, impersonation)
38
- open(path.gsub(/\\/, ''), disposition, nil, write: true, read: true)
39
+ open(path.gsub(/\\/, ''), disposition, write: true, read: true)
39
40
  end
40
41
 
41
42
  #Writes data to an open file handle
@@ -43,15 +44,13 @@ module RubySMB
43
44
  @open_files[file_id].send_recv_write(data: data, offset: offset)
44
45
  end
45
46
 
46
- def read(file_id, offset = 0, length = last_file.size_on_disk)
47
- offset = 0
48
- length = last_file.size_on_disk
47
+ def read(file_id, offset = 0, length = last_file.size)
49
48
  data = @open_files[file_id].send_recv_read(read_length: length, offset: offset)
50
49
  data.bytes
51
50
  end
52
51
 
53
52
  def close(file_id, tree_id)
54
- @open_files[file_id.to_binary_s].close
53
+ @open_files[file_id].close
55
54
  end
56
55
 
57
56
  def tree_disconnect(share)
@@ -42,7 +42,7 @@ module RubySMB
42
42
  def self.read(val)
43
43
  begin
44
44
  super(val)
45
- rescue EOFError => e
45
+ rescue IOError => e
46
46
  case self.to_s
47
47
  when /EmptyPacket|ErrorPacket/
48
48
  raise e
@@ -233,6 +233,7 @@ module RubySMB
233
233
 
234
234
  def send_recv_write(data:'', offset: 0)
235
235
  pkt = write_packet(data: data, offset: offset)
236
+ pkt.set_64_bit_offset(true)
236
237
  raw_response = @tree.client.send_recv(pkt)
237
238
  response = RubySMB::SMB1::Packet::WriteAndxResponse.read(raw_response)
238
239
  response.parameter_block.count_low
@@ -8,8 +8,8 @@ module RubySMB
8
8
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
9
9
  and_x_block :andx_block
10
10
  optional_support :optional_support
11
- directory_access_mask :access_rights, label: 'Maximal Share Access Rights'
12
- directory_access_mask :guest_access_rights, label: 'Guest Share Access Rights'
11
+ directory_access_mask :access_rights, label: 'Maximal Share Access Rights', onlyif: -> { word_count >= 5 }
12
+ directory_access_mask :guest_access_rights, label: 'Guest Share Access Rights', onlyif: -> { word_count == 7 }
13
13
  end
14
14
 
15
15
  # Represents the specific layout of the DataBlock for a {SessionSetupResponse} Packet.
@@ -140,7 +140,8 @@ module RubySMB
140
140
  response = RubySMB::SMB2::Packet::ReadResponse.read(raw_response)
141
141
  if response.status_code == WindowsError::NTStatus::STATUS_PENDING
142
142
  sleep 1
143
- return send_recv_read(read_length: read_length, offset: offset)
143
+ raw_response = tree.client.dispatcher.recv_packet
144
+ response = RubySMB::SMB2::Packet::ReadResponse.read(raw_response)
144
145
  elsif response.status_code != WindowsError::NTStatus::STATUS_SUCCESS
145
146
  raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
146
147
  end
@@ -219,7 +220,11 @@ module RubySMB
219
220
  pkt = write_packet(data: data, offset: offset)
220
221
  raw_response = tree.client.send_recv(pkt)
221
222
  response = RubySMB::SMB2::Packet::WriteResponse.read(raw_response)
222
- if response.status_code != WindowsError::NTStatus::STATUS_SUCCESS
223
+ if response.status_code == WindowsError::NTStatus::STATUS_PENDING
224
+ sleep 1
225
+ raw_response = tree.client.dispatcher.recv_packet
226
+ response = RubySMB::SMB2::Packet::WriteResponse.read(raw_response)
227
+ elsif response.status_code != WindowsError::NTStatus::STATUS_SUCCESS
223
228
  raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
224
229
  end
225
230
  response.write_count
@@ -90,6 +90,10 @@ module RubySMB
90
90
  raw_response = client.send_recv(create_request)
91
91
  response = RubySMB::SMB2::Packet::CreateResponse.read(raw_response)
92
92
 
93
+ if response.is_a?(RubySMB::SMB2::Packet::ErrorPacket)
94
+ raise RubySMB::Error::RubySMBError
95
+ end
96
+
93
97
  case @share_type
94
98
  when 0x01
95
99
  RubySMB::SMB2::File.new(name: filename, tree: self, response: response)
@@ -1,3 +1,3 @@
1
1
  module RubySMB
2
- VERSION = '0.0.23'.freeze
2
+ VERSION = '0.0.24'.freeze
3
3
  end
@@ -34,6 +34,32 @@ RSpec.describe RubySMB::SMB1::Packet::TreeConnectResponse do
34
34
  it 'has an AndXBlock' do
35
35
  expect(parameter_block.andx_block).to be_a RubySMB::SMB1::AndXBlock
36
36
  end
37
+
38
+ context 'when #word_count is less than 5' do
39
+ before :example do
40
+ parameter_block.word_count = 3
41
+ end
42
+
43
+ it 'has #access_rights and #guest_access_rights fields disabled' do
44
+ expect(parameter_block.andx_block?). to be true
45
+ expect(parameter_block.optional_support?). to be true
46
+ expect(parameter_block.access_rights?). to be false
47
+ expect(parameter_block.guest_access_rights?). to be false
48
+ end
49
+ end
50
+
51
+ context 'when #word_count is 5' do
52
+ before :example do
53
+ parameter_block.word_count = 5
54
+ end
55
+
56
+ it 'has the #guest_access_rights field disabled' do
57
+ expect(parameter_block.andx_block?). to be true
58
+ expect(parameter_block.optional_support?). to be true
59
+ expect(parameter_block.access_rights?). to be true
60
+ expect(parameter_block.guest_access_rights?). to be false
61
+ end
62
+ end
37
63
  end
38
64
 
39
65
  describe '#data_block' do
data.tar.gz.sig CHANGED
Binary file
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: 0.0.23
4
+ version: 0.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Maloney
@@ -91,7 +91,7 @@ cert_chain:
91
91
  G+Hmcg1v810agasPdoydE0RTVZgEOOMoQ07qu7JFXVWZ9ZQpHT7qJATWL/b2csFG
92
92
  8mVuTXnyJOKRJA==
93
93
  -----END CERTIFICATE-----
94
- date: 2018-03-13 00:00:00.000000000 Z
94
+ date: 2018-04-30 00:00:00.000000000 Z
95
95
  dependencies:
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: redcarpet
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- Rz����P�}8�_�QѰ����;ah��l��v�a�������DB�G_5 a �*��
1
+ M2[
2
+ ��g��
3
+ %��8C+����0�*b�L���`�*� ��p�G>��G��J]���w�&�U߮�Ri�ҿ�ĠF�M/���ۘ�W�/v9Z�(������򆫠�hp�����