ruby_smb 1.0.3 → 1.0.4
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 +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
|