ruby_smb 1.0.3 → 1.0.4
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.tar.gz.sig +0 -0
- data/lib/ruby_smb/client.rb +26 -4
- data/lib/ruby_smb/client/authentication.rb +43 -25
- data/lib/ruby_smb/client/echo.rb +20 -2
- data/lib/ruby_smb/client/negotiation.rb +27 -12
- data/lib/ruby_smb/client/tree_connect.rb +20 -14
- data/lib/ruby_smb/error.rb +40 -1
- data/lib/ruby_smb/generic_packet.rb +33 -4
- data/lib/ruby_smb/smb1/dcerpc.rb +7 -2
- data/lib/ruby_smb/smb1/file.rb +60 -11
- data/lib/ruby_smb/smb1/packet/close_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/close_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/echo_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/echo_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/empty_packet.rb +7 -0
- data/lib/ruby_smb/smb1/packet/logoff_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/logoff_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/negotiate_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/negotiate_response.rb +3 -7
- data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +4 -4
- data/lib/ruby_smb/smb1/packet/nt_create_andx_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/nt_create_andx_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/nt_trans/create_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/nt_trans/create_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/nt_trans/request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/nt_trans/response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/read_andx_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/read_andx_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/session_setup_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/session_setup_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans/peek_nmpipe_request.rb +0 -1
- data/lib/ruby_smb/smb1/packet/trans/peek_nmpipe_response.rb +3 -2
- data/lib/ruby_smb/smb1/packet/trans/request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/trans/response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans/transact_nmpipe_request.rb +1 -1
- data/lib/ruby_smb/smb1/packet/trans/transact_nmpipe_response.rb +1 -1
- data/lib/ruby_smb/smb1/packet/trans2/find_first2_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +8 -2
- data/lib/ruby_smb/smb1/packet/trans2/find_next2_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +8 -2
- data/lib/ruby_smb/smb1/packet/trans2/open2_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/trans2/request_secondary.rb +2 -4
- data/lib/ruby_smb/smb1/packet/trans2/response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/set_file_information_request.rb +2 -1
- data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/tree_connect_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +13 -3
- data/lib/ruby_smb/smb1/packet/tree_disconnect_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/tree_disconnect_response.rb +2 -1
- data/lib/ruby_smb/smb1/packet/write_andx_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/write_andx_response.rb +2 -1
- data/lib/ruby_smb/smb1/pipe.rb +8 -3
- data/lib/ruby_smb/smb1/tree.rb +40 -2
- data/lib/ruby_smb/smb2/dcerpc.rb +7 -2
- data/lib/ruby_smb/smb2/file.rb +97 -1
- data/lib/ruby_smb/smb2/packet/close_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/close_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/create_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/create_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/echo_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/echo_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/error_packet.rb +7 -0
- data/lib/ruby_smb/smb2/packet/ioctl_request.rb +2 -5
- data/lib/ruby_smb/smb2/packet/ioctl_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/logoff_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/logoff_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/negotiate_request.rb +2 -5
- data/lib/ruby_smb/smb2/packet/negotiate_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/query_directory_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/query_directory_response.rb +8 -2
- data/lib/ruby_smb/smb2/packet/read_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/read_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/session_setup_request.rb +2 -5
- data/lib/ruby_smb/smb2/packet/session_setup_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/set_info_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/set_info_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +2 -5
- data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +8 -2
- data/lib/ruby_smb/smb2/packet/tree_disconnect_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/tree_disconnect_response.rb +2 -1
- data/lib/ruby_smb/smb2/packet/write_request.rb +2 -4
- data/lib/ruby_smb/smb2/packet/write_response.rb +2 -1
- data/lib/ruby_smb/smb2/pipe.rb +9 -9
- data/lib/ruby_smb/smb2/tree.rb +44 -6
- data/lib/ruby_smb/version.rb +1 -1
- data/spec/lib/ruby_smb/client_spec.rb +123 -11
- data/spec/lib/ruby_smb/generic_packet_spec.rb +52 -4
- data/spec/lib/ruby_smb/smb1/file_spec.rb +182 -1
- data/spec/lib/ruby_smb/smb1/packet/{error_packet_spec.rb → empty_packet_spec.rb} +21 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +11 -2
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +11 -2
- data/spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb +40 -0
- data/spec/lib/ruby_smb/smb1/pipe_spec.rb +63 -2
- data/spec/lib/ruby_smb/smb1/tree_spec.rb +44 -7
- data/spec/lib/ruby_smb/smb2/file_spec.rb +295 -2
- data/spec/lib/ruby_smb/smb2/packet/error_packet_spec.rb +51 -0
- data/spec/lib/ruby_smb/smb2/packet/query_directory_response_spec.rb +8 -0
- data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +8 -0
- data/spec/lib/ruby_smb/smb2/pipe_spec.rb +69 -3
- data/spec/lib/ruby_smb/smb2/tree_spec.rb +214 -0
- metadata +6 -4
- metadata.gz.sig +0 -0
data/lib/ruby_smb/smb1/file.rb
CHANGED
@@ -76,14 +76,19 @@ module RubySMB
|
|
76
76
|
# Closes the handle to the remote file.
|
77
77
|
#
|
78
78
|
# @return [WindowsError::ErrorCode] the NTStatus code returned by the operation
|
79
|
-
# @raise [RubySMB::Error::InvalidPacket] if the response
|
79
|
+
# @raise [RubySMB::Error::InvalidPacket] if the response packet is not valid
|
80
80
|
# @raise [RubySMB::Error::UnexpectedStatusCode] if the response NTStatus is not STATUS_SUCCESS
|
81
81
|
def close
|
82
82
|
close_request = set_header_fields(RubySMB::SMB1::Packet::CloseRequest.new)
|
83
83
|
raw_response = @tree.client.send_recv(close_request)
|
84
84
|
response = RubySMB::SMB1::Packet::CloseResponse.read(raw_response)
|
85
|
-
unless response.
|
86
|
-
raise RubySMB::Error::InvalidPacket
|
85
|
+
unless response.valid?
|
86
|
+
raise RubySMB::Error::InvalidPacket.new(
|
87
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
88
|
+
expected_cmd: RubySMB::SMB1::Packet::CloseResponse::COMMAND,
|
89
|
+
received_proto: response.smb_header.protocol,
|
90
|
+
received_cmd: response.smb_header.command
|
91
|
+
)
|
87
92
|
end
|
88
93
|
unless response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
|
89
94
|
raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
|
@@ -98,7 +103,7 @@ module RubySMB
|
|
98
103
|
# @param bytes [Integer] the number of bytes to read
|
99
104
|
# @param offset [Integer] the byte offset in the file to start reading from
|
100
105
|
# @return [String] the data read from the file
|
101
|
-
# @raise [RubySMB::Error::InvalidPacket] if the response
|
106
|
+
# @raise [RubySMB::Error::InvalidPacket] if the response packet is not valid
|
102
107
|
# @raise [RubySMB::Error::UnexpectedStatusCode] if the response NTStatus is not STATUS_SUCCESS
|
103
108
|
def read(bytes: @size, offset: 0)
|
104
109
|
atomic_read_size = if bytes > @tree.client.max_buffer_size
|
@@ -113,8 +118,13 @@ module RubySMB
|
|
113
118
|
read_request = read_packet(read_length: atomic_read_size, offset: offset)
|
114
119
|
raw_response = @tree.client.send_recv(read_request)
|
115
120
|
response = RubySMB::SMB1::Packet::ReadAndxResponse.read(raw_response)
|
116
|
-
unless response.
|
117
|
-
raise RubySMB::Error::InvalidPacket
|
121
|
+
unless response.valid?
|
122
|
+
raise RubySMB::Error::InvalidPacket.new(
|
123
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
124
|
+
expected_cmd: RubySMB::SMB1::Packet::ReadAndxResponse::COMMAND,
|
125
|
+
received_proto: response.smb_header.protocol,
|
126
|
+
received_cmd: response.smb_header.command
|
127
|
+
)
|
118
128
|
end
|
119
129
|
unless response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
|
120
130
|
raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
|
@@ -149,12 +159,20 @@ module RubySMB
|
|
149
159
|
read_request.parameter_block.offset = offset
|
150
160
|
read_request
|
151
161
|
end
|
152
|
-
|
162
|
+
|
153
163
|
def send_recv_read(read_length: 0, offset: 0)
|
154
164
|
read_request = read_packet(read_length: read_length, offset: offset)
|
155
165
|
raw_response = tree.client.send_recv(read_request)
|
156
166
|
|
157
167
|
response = RubySMB::SMB1::Packet::ReadAndxResponse.read(raw_response)
|
168
|
+
unless response.valid?
|
169
|
+
raise RubySMB::Error::InvalidPacket.new(
|
170
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
171
|
+
expected_cmd: RubySMB::SMB1::Packet::ReadAndxResponse::COMMAND,
|
172
|
+
received_proto: response.smb_header.protocol,
|
173
|
+
received_cmd: response.smb_header.command
|
174
|
+
)
|
175
|
+
end
|
158
176
|
unless response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
|
159
177
|
raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
|
160
178
|
end
|
@@ -165,9 +183,18 @@ module RubySMB
|
|
165
183
|
# Delete a file on close
|
166
184
|
#
|
167
185
|
# @return [WindowsError::ErrorCode] the NTStatus Response code
|
186
|
+
# @raise [RubySMB::Error::InvalidPacket] if the response packet is not valid
|
168
187
|
def delete
|
169
188
|
raw_response = @tree.client.send_recv(delete_packet)
|
170
189
|
response = RubySMB::SMB1::Packet::Trans2::SetFileInformationResponse.read(raw_response)
|
190
|
+
unless response.valid?
|
191
|
+
raise RubySMB::Error::InvalidPacket.new(
|
192
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
193
|
+
expected_cmd: RubySMB::SMB1::Packet::Trans2::SetFileInformationResponse::COMMAND,
|
194
|
+
received_proto: response.smb_header.protocol,
|
195
|
+
received_cmd: response.smb_header.command
|
196
|
+
)
|
197
|
+
end
|
171
198
|
response.status_code
|
172
199
|
end
|
173
200
|
|
@@ -190,7 +217,7 @@ module RubySMB
|
|
190
217
|
# @param data [String] the data to write to the file
|
191
218
|
# @param offset [Integer] the offset in the file to start writing from
|
192
219
|
# @return [Integer] the count of bytes written
|
193
|
-
# @raise [RubySMB::Error::InvalidPacket] if the response
|
220
|
+
# @raise [RubySMB::Error::InvalidPacket] if the response packet is not valid
|
194
221
|
# @raise [RubySMB::Error::UnexpectedStatusCode] if the response NTStatus is not STATUS_SUCCESS
|
195
222
|
def write(data:, offset: 0)
|
196
223
|
buffer = data.dup
|
@@ -206,8 +233,13 @@ module RubySMB
|
|
206
233
|
write_request = write_packet(data: buffer.slice!(0, atomic_write_size), offset: offset)
|
207
234
|
raw_response = @tree.client.send_recv(write_request)
|
208
235
|
response = RubySMB::SMB1::Packet::WriteAndxResponse.read(raw_response)
|
209
|
-
unless response.
|
210
|
-
raise RubySMB::Error::InvalidPacket
|
236
|
+
unless response.valid?
|
237
|
+
raise RubySMB::Error::InvalidPacket.new(
|
238
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
239
|
+
expected_cmd: RubySMB::SMB1::Packet::WriteAndxResponse::COMMAND,
|
240
|
+
received_proto: response.smb_header.protocol,
|
241
|
+
received_cmd: response.smb_header.command
|
242
|
+
)
|
211
243
|
end
|
212
244
|
unless response.status_code == WindowsError::NTStatus::STATUS_SUCCESS
|
213
245
|
raise RubySMB::Error::UnexpectedStatusCode, response.status_code.name
|
@@ -235,12 +267,20 @@ module RubySMB
|
|
235
267
|
write_request.parameter_block.remaining = write_request.parameter_block.data_length
|
236
268
|
write_request
|
237
269
|
end
|
238
|
-
|
270
|
+
|
239
271
|
def send_recv_write(data:'', offset: 0)
|
240
272
|
pkt = write_packet(data: data, offset: offset)
|
241
273
|
pkt.set_64_bit_offset(true)
|
242
274
|
raw_response = @tree.client.send_recv(pkt)
|
243
275
|
response = RubySMB::SMB1::Packet::WriteAndxResponse.read(raw_response)
|
276
|
+
unless response.valid?
|
277
|
+
raise RubySMB::Error::InvalidPacket.new(
|
278
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
279
|
+
expected_cmd: RubySMB::SMB1::Packet::WriteAndxResponse::COMMAND,
|
280
|
+
received_proto: response.smb_header.protocol,
|
281
|
+
received_cmd: response.smb_header.command
|
282
|
+
)
|
283
|
+
end
|
244
284
|
response.parameter_block.count_low
|
245
285
|
end
|
246
286
|
|
@@ -248,9 +288,18 @@ module RubySMB
|
|
248
288
|
#
|
249
289
|
# @param new_file_name [String] the new name
|
250
290
|
# @return [WindowsError::ErrorCode] the NTStatus Response code
|
291
|
+
# @raise [RubySMB::Error::InvalidPacket] if the response packet is not valid
|
251
292
|
def rename(new_file_name)
|
252
293
|
raw_response = tree.client.send_recv(rename_packet(new_file_name))
|
253
294
|
response = RubySMB::SMB1::Packet::Trans2::SetFileInformationResponse.read(raw_response)
|
295
|
+
unless response.valid?
|
296
|
+
raise RubySMB::Error::InvalidPacket.new(
|
297
|
+
expected_proto: RubySMB::SMB1::SMB_PROTOCOL_ID,
|
298
|
+
expected_cmd: RubySMB::SMB1::Packet::Trans2::SetFileInformationResponse::COMMAND,
|
299
|
+
received_proto: response.smb_header.protocol,
|
300
|
+
received_cmd: response.smb_header.command
|
301
|
+
)
|
302
|
+
end
|
254
303
|
response.status_code
|
255
304
|
end
|
256
305
|
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 SMB_COM_CLOSE Request Packet as defined in
|
5
5
|
# [2.2.4.5.1 Request](https://msdn.microsoft.com/en-us/library/ee442151.aspx)
|
6
6
|
class CloseRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
8
|
+
|
7
9
|
# A SMB1 Parameter Block as defined by the {CloseRequest}
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
endian :little
|
@@ -20,11 +22,6 @@ module RubySMB
|
|
20
22
|
parameter_block :parameter_block
|
21
23
|
data_block :data_block
|
22
24
|
|
23
|
-
def initialize_instance
|
24
|
-
super
|
25
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
26
|
-
end
|
27
|
-
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 SMB_COM_CLOSE Response Packet as defined in
|
5
5
|
# [2.2.4.5.2 Response](https://msdn.microsoft.com/en-us/library/ee441667.aspx)
|
6
6
|
class CloseResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
8
|
+
|
7
9
|
# A SMB1 Parameter Block as defined by the {CloseResponse}
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
end
|
@@ -18,7 +20,6 @@ module RubySMB
|
|
18
20
|
|
19
21
|
def initialize_instance
|
20
22
|
super
|
21
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
22
23
|
smb_header.flags.reply = 1
|
23
24
|
end
|
24
25
|
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 Echo Request Packet as defined in
|
5
5
|
# [2.2.4.39.1 Request](https://msdn.microsoft.com/en-us/library/ee441746.aspx)
|
6
6
|
class EchoRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
8
|
+
|
7
9
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
uint16 :echo_count, label: 'Echo Count', initial_value: 1
|
@@ -18,10 +20,6 @@ module RubySMB
|
|
18
20
|
parameter_block :parameter_block
|
19
21
|
data_block :data_block
|
20
22
|
|
21
|
-
def initialize_instance
|
22
|
-
super
|
23
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
24
|
-
end
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 Echo Request Packet as defined in
|
5
5
|
# [2.2.4.39.2 Response](https://msdn.microsoft.com/en-us/library/ee441626.aspx)
|
6
6
|
class EchoResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
8
|
+
|
7
9
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
uint16 :sequence_number, label: 'Sequence Number'
|
@@ -20,7 +22,6 @@ module RubySMB
|
|
20
22
|
|
21
23
|
def initialize_instance
|
22
24
|
super
|
23
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
24
25
|
smb_header.flags.reply = 1
|
25
26
|
end
|
26
27
|
end
|
@@ -4,9 +4,16 @@ module RubySMB
|
|
4
4
|
# This packet represent an SMB1 Response Packet when the parameter and
|
5
5
|
# data blocks will be empty.
|
6
6
|
class EmptyPacket < RubySMB::GenericPacket
|
7
|
+
attr_accessor :original_command
|
8
|
+
|
7
9
|
smb_header :smb_header
|
8
10
|
parameter_block :parameter_block
|
9
11
|
data_block :data_block
|
12
|
+
|
13
|
+
def valid?
|
14
|
+
return smb_header.protocol == RubySMB::SMB1::SMB_PROTOCOL_ID &&
|
15
|
+
smb_header.command == @original_command
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 LOGOFF Request Packet as defined in
|
5
5
|
# [2.2.4.54.1 Request](https://msdn.microsoft.com/en-us/library/ee442167.aspx)
|
6
6
|
class LogoffRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
8
|
+
|
7
9
|
# The Parameter Block for this packet is empty save the Word Count and ANDX Block
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
and_x_block :andx_block
|
@@ -17,10 +19,6 @@ module RubySMB
|
|
17
19
|
parameter_block :parameter_block
|
18
20
|
data_block :data_block
|
19
21
|
|
20
|
-
def initialize_instance
|
21
|
-
super
|
22
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
23
|
-
end
|
24
22
|
end
|
25
23
|
end
|
26
24
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 LOGOFF Response Packet as defined in
|
5
5
|
# [2.2.4.54.2 Response](https://msdn.microsoft.com/en-us/library/ee441488.aspx)
|
6
6
|
class LogoffResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
8
|
+
|
7
9
|
# The Parameter Block for this packet is empty save the Word Count and ANDX Block
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
and_x_block :andx_block
|
@@ -19,7 +21,6 @@ module RubySMB
|
|
19
21
|
|
20
22
|
def initialize_instance
|
21
23
|
super
|
22
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
23
24
|
smb_header.flags.reply = 1
|
24
25
|
end
|
25
26
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 SMB_COM_NEGOTIATE Request Packet as defined in
|
5
5
|
# [2.2.4.52.1](https://msdn.microsoft.com/en-us/library/ee441572.aspx)
|
6
6
|
class NegotiateRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
8
|
+
|
7
9
|
# Represents the specific layout of the DataBlock for a NegotiateRequest Packet.
|
8
10
|
class DataBlock < RubySMB::SMB1::DataBlock
|
9
11
|
array :dialects, label: 'Dialects', type: :dialect, read_until: :eof
|
@@ -13,11 +15,6 @@ module RubySMB
|
|
13
15
|
parameter_block :parameter_block
|
14
16
|
data_block :data_block
|
15
17
|
|
16
|
-
def initialize_instance
|
17
|
-
super
|
18
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
19
|
-
end
|
20
|
-
|
21
18
|
# Add an individual Dialect string to the list of
|
22
19
|
# Dialects in the packet.
|
23
20
|
#
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 SMB_COM_NEGOTIATE Non-Extended Security Response Packet as defined in
|
5
5
|
# [2.2.4.5.2.2 Non-Extended Security Response](https://msdn.microsoft.com/en-us/library/cc246327.aspx)
|
6
6
|
class NegotiateResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
8
|
+
|
7
9
|
# An SMB_Parameters Block as defined by the {NegotiateResponse}.
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
uint16 :dialect_index, label: 'Dialect Index'
|
@@ -32,13 +34,7 @@ module RubySMB
|
|
32
34
|
|
33
35
|
def initialize_instance
|
34
36
|
super
|
35
|
-
|
36
|
-
header.command = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
37
|
-
header.flags.reply = 1
|
38
|
-
end
|
39
|
-
|
40
|
-
def valid?
|
41
|
-
smb_header.command == RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
37
|
+
smb_header.flags.reply = 1
|
42
38
|
end
|
43
39
|
|
44
40
|
# Stores the list of {RubySMB::SMB1::Dialect} that were sent to the
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 SMB_COM_NEGOTIATE Extended Security Response Packet as defined in
|
5
5
|
# [2.2.4.5.2.1 Extended Security Response](https://msdn.microsoft.com/en-us/library/cc246326.aspx)
|
6
6
|
class NegotiateResponseExtended < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
8
|
+
|
7
9
|
# An SMB_Parameters Block as defined by the {NegotiateResponseExtended}.
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
uint16 :dialect_index, label: 'Dialect Index'
|
@@ -31,13 +33,11 @@ module RubySMB
|
|
31
33
|
|
32
34
|
def initialize_instance
|
33
35
|
super
|
34
|
-
|
35
|
-
header.command = RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
36
|
-
header.flags.reply = 1
|
36
|
+
smb_header.flags.reply = 1
|
37
37
|
end
|
38
38
|
|
39
39
|
def valid?
|
40
|
-
return false unless
|
40
|
+
return false unless super
|
41
41
|
return false unless parameter_block.capabilities.extended_security == 1
|
42
42
|
true
|
43
43
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# [2.2.4.64.1 Request](https://msdn.microsoft.com/en-us/library/ee442175.aspx) and
|
6
6
|
# [2.2.4.9.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/cc246332.aspx)
|
7
7
|
class NtCreateAndxRequest < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
9
|
+
|
8
10
|
# A SMB1 Parameter Block as defined by the {NtCreateAndxRequest}
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -52,10 +54,6 @@ module RubySMB
|
|
52
54
|
parameter_block :parameter_block
|
53
55
|
data_block :data_block
|
54
56
|
|
55
|
-
def initialize_instance
|
56
|
-
super
|
57
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
58
|
-
end
|
59
57
|
end
|
60
58
|
end
|
61
59
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# [2.2.4.64.2 Response](https://msdn.microsoft.com/en-us/library/ee441612.aspx) and
|
6
6
|
# [2.2.4.9.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/cc246334.aspx)
|
7
7
|
class NtCreateAndxResponse < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
9
|
+
|
8
10
|
# A SMB1 Parameter Block as defined by the {NtCreateAndxResponse}
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -57,7 +59,6 @@ module RubySMB
|
|
57
59
|
|
58
60
|
def initialize_instance
|
59
61
|
super
|
60
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
61
62
|
smb_header.flags.reply = 1
|
62
63
|
end
|
63
64
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# Class representing a generic NT Transaction request packet as defined in
|
6
6
|
# [2.2.4.62.1 Request](https://msdn.microsoft.com/en-us/library/ee441534.aspx)
|
7
7
|
class CreateRequest < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::NtTrans::Request::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -81,7 +83,6 @@ module RubySMB
|
|
81
83
|
|
82
84
|
def initialize_instance
|
83
85
|
super
|
84
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
85
86
|
parameter_block.function = RubySMB::SMB1::Packet::NtTrans::Subcommands::CREATE
|
86
87
|
end
|
87
88
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# Class representing a NT Transaction Create response packet as defined in
|
6
6
|
# [2.2.7.1.2 Response](https://msdn.microsoft.com/en-us/library/ee441961.aspx)
|
7
7
|
class CreateResponse < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::NtTrans::Response::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -49,7 +51,6 @@ module RubySMB
|
|
49
51
|
|
50
52
|
def initialize_instance
|
51
53
|
super
|
52
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
53
54
|
smb_header.flags.reply = 1
|
54
55
|
end
|
55
56
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# Class representing a generic NT Transaction request packet as defined in
|
6
6
|
# [2.2.4.62.1 Request](https://msdn.microsoft.com/en-us/library/ee441534.aspx)
|
7
7
|
class Request < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
9
|
+
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -36,10 +38,6 @@ module RubySMB
|
|
36
38
|
parameter_block :parameter_block
|
37
39
|
data_block :data_block
|
38
40
|
|
39
|
-
def initialize_instance
|
40
|
-
super
|
41
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
42
|
-
end
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# Class representing a generic NT Transaction response packet as defined in
|
6
6
|
# [2.2.4.62.2 Response](https://msdn.microsoft.com/en-us/library/ee442112.aspx)
|
7
7
|
class Response < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
9
|
+
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -34,7 +36,6 @@ module RubySMB
|
|
34
36
|
|
35
37
|
def initialize_instance
|
36
38
|
super
|
37
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_TRANSACT
|
38
39
|
smb_header.flags.reply = 1
|
39
40
|
end
|
40
41
|
end
|