ruby_smb 0.0.23 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
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�����