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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/ruby_smb/client/utils.rb +5 -6
- data/lib/ruby_smb/generic_packet.rb +1 -1
- data/lib/ruby_smb/smb1/file.rb +1 -0
- data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +2 -2
- data/lib/ruby_smb/smb2/file.rb +7 -2
- data/lib/ruby_smb/smb2/tree.rb +4 -0
- data/lib/ruby_smb/version.rb +1 -1
- data/spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb +26 -0
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d60db7afb256116a28efdf92fcf911b6b418efda
|
4
|
+
data.tar.gz: ba1b78916ec040e37d15ec02d9c6a3d1f09af9a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,
|
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,
|
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.
|
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
|
53
|
+
@open_files[file_id].close
|
55
54
|
end
|
56
55
|
|
57
56
|
def tree_disconnect(share)
|
data/lib/ruby_smb/smb1/file.rb
CHANGED
@@ -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.
|
data/lib/ruby_smb/smb2/file.rb
CHANGED
@@ -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
|
-
|
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
|
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
|
data/lib/ruby_smb/smb2/tree.rb
CHANGED
@@ -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)
|
data/lib/ruby_smb/version.rb
CHANGED
@@ -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.
|
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-
|
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