ruby_smb 1.0.2 → 2.0.0
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +3 -2
- data/Gemfile +6 -2
- data/README.md +35 -47
- data/examples/enum_registry_key.rb +28 -0
- data/examples/enum_registry_values.rb +30 -0
- data/examples/negotiate.rb +51 -8
- data/examples/pipes.rb +2 -1
- data/examples/read_file_encryption.rb +56 -0
- data/examples/read_registry_key_value.rb +32 -0
- data/lib/ruby_smb.rb +4 -1
- data/lib/ruby_smb/client.rb +200 -20
- data/lib/ruby_smb/client/authentication.rb +70 -33
- data/lib/ruby_smb/client/echo.rb +20 -2
- data/lib/ruby_smb/client/encryption.rb +62 -0
- data/lib/ruby_smb/client/negotiation.rb +160 -24
- data/lib/ruby_smb/client/signing.rb +19 -0
- data/lib/ruby_smb/client/tree_connect.rb +24 -18
- data/lib/ruby_smb/client/utils.rb +8 -7
- data/lib/ruby_smb/client/winreg.rb +46 -0
- data/lib/ruby_smb/crypto.rb +30 -0
- data/lib/ruby_smb/dcerpc.rb +38 -0
- data/lib/ruby_smb/dcerpc/bind.rb +2 -2
- data/lib/ruby_smb/dcerpc/bind_ack.rb +2 -2
- data/lib/ruby_smb/dcerpc/error.rb +3 -0
- data/lib/ruby_smb/dcerpc/ndr.rb +95 -16
- data/lib/ruby_smb/dcerpc/pdu_header.rb +1 -1
- data/lib/ruby_smb/dcerpc/request.rb +28 -9
- data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +35 -0
- data/lib/ruby_smb/dcerpc/srvsvc.rb +10 -0
- data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +9 -0
- data/lib/ruby_smb/dcerpc/winreg.rb +340 -0
- data/lib/ruby_smb/dcerpc/winreg/close_key_request.rb +24 -0
- data/lib/ruby_smb/dcerpc/winreg/close_key_response.rb +27 -0
- data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +45 -0
- data/lib/ruby_smb/dcerpc/winreg/enum_key_response.rb +42 -0
- data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +39 -0
- data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +36 -0
- data/lib/ruby_smb/dcerpc/winreg/open_key_request.rb +34 -0
- data/lib/ruby_smb/dcerpc/winreg/open_key_response.rb +25 -0
- data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +43 -0
- data/lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb +35 -0
- data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +27 -0
- data/lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb +40 -0
- data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +39 -0
- data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +57 -0
- data/lib/ruby_smb/dcerpc/winreg/regsam.rb +40 -0
- data/lib/ruby_smb/dispatcher/socket.rb +5 -3
- data/lib/ruby_smb/error.rb +68 -2
- data/lib/ruby_smb/generic_packet.rb +33 -4
- data/lib/ruby_smb/smb1/commands.rb +1 -1
- data/lib/ruby_smb/smb1/file.rb +66 -15
- 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 +10 -1
- 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 +3 -2
- data/lib/ruby_smb/smb1/packet/session_setup_request.rb +2 -5
- data/lib/ruby_smb/smb1/packet/session_setup_response.rb +3 -2
- 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 +3 -6
- data/lib/ruby_smb/smb1/packet/write_andx_response.rb +2 -1
- data/lib/ruby_smb/smb1/pipe.rb +87 -6
- data/lib/ruby_smb/smb1/tree.rb +41 -3
- data/lib/ruby_smb/smb2/bit_field/session_flags.rb +2 -1
- data/lib/ruby_smb/smb2/bit_field/share_flags.rb +6 -4
- data/lib/ruby_smb/smb2/file.rb +103 -25
- data/lib/ruby_smb/smb2/negotiate_context.rb +108 -0
- data/lib/ruby_smb/smb2/packet.rb +2 -0
- 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/compression_transform_header.rb +41 -0
- 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 +15 -3
- 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 +51 -17
- data/lib/ruby_smb/smb2/packet/negotiate_response.rb +51 -4
- 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/transform_header.rb +84 -0
- data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +93 -10
- data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +10 -22
- 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 +86 -12
- data/lib/ruby_smb/smb2/smb2_header.rb +1 -1
- data/lib/ruby_smb/smb2/tree.rb +65 -21
- data/lib/ruby_smb/version.rb +1 -1
- data/ruby_smb.gemspec +5 -3
- data/spec/lib/ruby_smb/client_spec.rb +1563 -104
- data/spec/lib/ruby_smb/crypto_spec.rb +25 -0
- data/spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb +2 -2
- data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +2 -2
- data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +410 -0
- data/spec/lib/ruby_smb/dcerpc/request_spec.rb +50 -7
- data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +98 -0
- data/spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb +13 -0
- data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +60 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb +28 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb +36 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +108 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb +97 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +94 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +82 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb +74 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb +35 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +90 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +39 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb +113 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +88 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +150 -0
- data/spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb +32 -0
- data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +710 -0
- data/spec/lib/ruby_smb/dcerpc_spec.rb +81 -0
- data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +3 -1
- data/spec/lib/ruby_smb/error_spec.rb +59 -0
- data/spec/lib/ruby_smb/generic_packet_spec.rb +52 -4
- data/spec/lib/ruby_smb/smb1/file_spec.rb +191 -2
- data/spec/lib/ruby_smb/smb1/packet/empty_packet_spec.rb +68 -0
- data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_request_spec.rb +2 -2
- data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_response_spec.rb +2 -2
- data/spec/lib/ruby_smb/smb1/packet/session_setup_request_spec.rb +2 -2
- data/spec/lib/ruby_smb/smb1/packet/session_setup_response_spec.rb +1 -1
- 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 +272 -149
- data/spec/lib/ruby_smb/smb1/tree_spec.rb +44 -7
- data/spec/lib/ruby_smb/smb2/bit_field/session_flags_spec.rb +9 -0
- data/spec/lib/ruby_smb/smb2/bit_field/share_flags_spec.rb +27 -0
- data/spec/lib/ruby_smb/smb2/file_spec.rb +323 -6
- data/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb +332 -0
- data/spec/lib/ruby_smb/smb2/packet/compression_transform_header_spec.rb +108 -0
- data/spec/lib/ruby_smb/smb2/packet/error_packet_spec.rb +78 -0
- data/spec/lib/ruby_smb/smb2/packet/negotiate_request_spec.rb +138 -3
- data/spec/lib/ruby_smb/smb2/packet/negotiate_response_spec.rb +120 -2
- data/spec/lib/ruby_smb/smb2/packet/query_directory_response_spec.rb +8 -0
- data/spec/lib/ruby_smb/smb2/packet/transform_header_spec.rb +220 -0
- data/spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb +339 -9
- data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +3 -22
- data/spec/lib/ruby_smb/smb2/pipe_spec.rb +286 -149
- data/spec/lib/ruby_smb/smb2/smb2_header_spec.rb +2 -2
- data/spec/lib/ruby_smb/smb2/tree_spec.rb +261 -2
- metadata +191 -83
- metadata.gz.sig +0 -0
- data/lib/ruby_smb/smb1/dcerpc.rb +0 -67
- data/lib/ruby_smb/smb2/dcerpc.rb +0 -70
- data/spec/lib/ruby_smb/smb1/packet/error_packet_spec.rb +0 -37
@@ -6,6 +6,8 @@ module RubySMB
|
|
6
6
|
# This class represents a generic SMB1 Trans Request Packet as defined in
|
7
7
|
# [2.2.4.33.1 Request](https://msdn.microsoft.com/en-us/library/ee441730.aspx)
|
8
8
|
class Request < RubySMB::GenericPacket
|
9
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
10
|
+
|
9
11
|
# A SMB1 Parameter Block
|
10
12
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
13
|
uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)', initial_value: -> { parameter_count }
|
@@ -48,11 +50,6 @@ module RubySMB
|
|
48
50
|
parameter_block :parameter_block
|
49
51
|
data_block :data_block
|
50
52
|
|
51
|
-
def initialize_instance
|
52
|
-
super
|
53
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
54
|
-
end
|
55
|
-
|
56
53
|
end
|
57
54
|
end
|
58
55
|
end
|
@@ -6,6 +6,8 @@ module RubySMB
|
|
6
6
|
# This class represents a generic SMB1 Trans Response Packet as defined in
|
7
7
|
# [2.2.4.33.2 Response](https://msdn.microsoft.com/en-us/library/ee442061.aspx)
|
8
8
|
class Response < RubySMB::GenericPacket
|
9
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
10
|
+
|
9
11
|
# A SMB1 Parameter Block
|
10
12
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
13
|
uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)', initial_value: -> { parameter_count }
|
@@ -35,7 +37,6 @@ module RubySMB
|
|
35
37
|
|
36
38
|
def initialize_instance
|
37
39
|
super
|
38
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
39
40
|
smb_header.flags.reply = 1
|
40
41
|
end
|
41
42
|
|
@@ -6,6 +6,7 @@ module RubySMB
|
|
6
6
|
# A Trans TRANSACT_NMPIPE Request Packet as defined in
|
7
7
|
# [2.2.5.6.1 Request](https://msdn.microsoft.com/en-us/library/ee441832.aspx)
|
8
8
|
class TransactNmpipeRequest < RubySMB::GenericPacket
|
9
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
9
10
|
|
10
11
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans::Request::ParameterBlock
|
11
12
|
end
|
@@ -42,7 +43,6 @@ module RubySMB
|
|
42
43
|
|
43
44
|
def initialize_instance
|
44
45
|
super
|
45
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
46
46
|
parameter_block.max_parameter_count = 0x0000
|
47
47
|
parameter_block.max_setup_count = 0x00
|
48
48
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans::Subcommands::TRANSACT_NMPIPE
|
@@ -6,6 +6,7 @@ module RubySMB
|
|
6
6
|
# A Trans TRANSACT_NMPIPE Response Packet as defined in
|
7
7
|
# [2.2.5.6.2 Response](https://msdn.microsoft.com/en-us/library/ee442003.aspx)
|
8
8
|
class TransactNmpipeResponse < RubySMB::GenericPacket
|
9
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
9
10
|
|
10
11
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans::Response::ParameterBlock
|
11
12
|
end
|
@@ -33,7 +34,6 @@ module RubySMB
|
|
33
34
|
|
34
35
|
def initialize_instance
|
35
36
|
super
|
36
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
|
37
37
|
smb_header.flags.reply = 1
|
38
38
|
end
|
39
39
|
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# A Trans2 FIND_FIRST2 Request Packet as defined in
|
6
6
|
# [2.2.6.2.1](https://msdn.microsoft.com/en-us/library/ee441987.aspx)
|
7
7
|
class FindFirst2Request < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Request::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -67,7 +69,6 @@ module RubySMB
|
|
67
69
|
|
68
70
|
def initialize_instance
|
69
71
|
super
|
70
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
71
72
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::FIND_FIRST2
|
72
73
|
end
|
73
74
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents an SMB1 Trans2 FIND_FIRST2 Response Packet as defined in
|
6
6
|
# [2.2.6.2.2 Response](https://msdn.microsoft.com/en-us/library/ee441704.aspx)
|
7
7
|
class FindFirst2Response < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -51,7 +53,6 @@ module RubySMB
|
|
51
53
|
|
52
54
|
def initialize_instance
|
53
55
|
super
|
54
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
55
56
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::FIND_FIRST2
|
56
57
|
smb_header.flags.reply = 1
|
57
58
|
end
|
@@ -62,6 +63,7 @@ module RubySMB
|
|
62
63
|
#
|
63
64
|
# @param klass [Class] the FileInformationClass class to read the data as
|
64
65
|
# @return [array<BinData::Record>] An array of structs holding the requested information
|
66
|
+
# @raise [RubySMB::Error::InvalidPacket] if the string buffer is not a valid File Information packet
|
65
67
|
def results(klass, unicode:)
|
66
68
|
information_classes = []
|
67
69
|
blob = data_block.trans2_data.buffer.to_binary_s.dup
|
@@ -76,7 +78,11 @@ module RubySMB
|
|
76
78
|
|
77
79
|
file_info = klass.new
|
78
80
|
file_info.unicode = unicode
|
79
|
-
|
81
|
+
begin
|
82
|
+
information_classes << file_info.read(data)
|
83
|
+
rescue IOError
|
84
|
+
raise RubySMB::Error::InvalidPacket, "Invalid #{klass} File Information packet in the string buffer"
|
85
|
+
end
|
80
86
|
end
|
81
87
|
information_classes
|
82
88
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# A Trans2 FIND_NEXT2 Request Packet as defined in
|
6
6
|
# [2.2.6.3.1 Request](https://msdn.microsoft.com/en-us/library/ee441844.aspx)
|
7
7
|
class FindNext2Request < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Request::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -67,7 +69,6 @@ module RubySMB
|
|
67
69
|
|
68
70
|
def initialize_instance
|
69
71
|
super
|
70
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
71
72
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::FIND_NEXT2
|
72
73
|
end
|
73
74
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents an SMB1 Trans2 FIND_NEXT2 Response Packet as defined in
|
6
6
|
# [2.2.6.3.2 Response](https://msdn.microsoft.com/en-us/library/ee441871.aspx)
|
7
7
|
class FindNext2Response < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -50,7 +52,6 @@ module RubySMB
|
|
50
52
|
|
51
53
|
def initialize_instance
|
52
54
|
super
|
53
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
54
55
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::FIND_NEXT2
|
55
56
|
smb_header.flags.reply = 1
|
56
57
|
end
|
@@ -61,6 +62,7 @@ module RubySMB
|
|
61
62
|
#
|
62
63
|
# @param klass [Class] the FileInformationClass class to read the data as
|
63
64
|
# @return [array<BinData::Record>] An array of structs holding the requested information
|
65
|
+
# @raise [RubySMB::Error::InvalidPacket] if the string buffer is not a valid File Information packet
|
64
66
|
def results(klass, unicode:)
|
65
67
|
information_classes = []
|
66
68
|
blob = data_block.trans2_data.buffer.to_binary_s.dup
|
@@ -75,7 +77,11 @@ module RubySMB
|
|
75
77
|
|
76
78
|
file_info = klass.new
|
77
79
|
file_info.unicode = unicode
|
78
|
-
|
80
|
+
begin
|
81
|
+
information_classes << file_info.read(data)
|
82
|
+
rescue IOError
|
83
|
+
raise RubySMB::Error::InvalidPacket, "Invalid #{klass} File Information packet in the string buffer"
|
84
|
+
end
|
79
85
|
end
|
80
86
|
information_classes
|
81
87
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# A Trans2 OPEN2 Request Packet as defined in
|
6
6
|
# [2.2.6.1.1 Request](https://msdn.microsoft.com/en-us/library/ee441733.aspx)
|
7
7
|
class Open2Request < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Request::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -50,7 +52,6 @@ module RubySMB
|
|
50
52
|
|
51
53
|
def initialize_instance
|
52
54
|
super
|
53
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
54
55
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::OPEN2
|
55
56
|
end
|
56
57
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents an SMB1 Trans2 Open2 Response Packet as defined in
|
6
6
|
# [2.2.6.1.2 Response](https://msdn.microsoft.com/en-us/library/ee441545.aspx)
|
7
7
|
class Open2Response < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -52,7 +54,6 @@ module RubySMB
|
|
52
54
|
|
53
55
|
def initialize_instance
|
54
56
|
super
|
55
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
56
57
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::OPEN2
|
57
58
|
smb_header.flags.reply = 1
|
58
59
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents a generic SMB1 Trans2 Request Packet as defined in
|
6
6
|
# [2.2.4.46.1 Request](https://msdn.microsoft.com/en-us/library/ee442192.aspx)
|
7
7
|
class Request < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
|
@@ -39,10 +41,6 @@ module RubySMB
|
|
39
41
|
parameter_block :parameter_block
|
40
42
|
data_block :data_block
|
41
43
|
|
42
|
-
def initialize_instance
|
43
|
-
super
|
44
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
45
|
-
end
|
46
44
|
end
|
47
45
|
end
|
48
46
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents a generic SMB1 Trans2 Secondary Request Packet as defined in
|
6
6
|
# [2.2.4.47.1 Request](https://msdn.microsoft.com/en-us/library/ee442105.aspx)
|
7
7
|
class RequestSecondary < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2_SECONDARY
|
9
|
+
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
|
@@ -26,10 +28,6 @@ module RubySMB
|
|
26
28
|
parameter_block :parameter_block
|
27
29
|
data_block :data_block
|
28
30
|
|
29
|
-
def initialize_instance
|
30
|
-
super
|
31
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2_SECONDARY
|
32
|
-
end
|
33
31
|
end
|
34
32
|
end
|
35
33
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# This class represents a generic SMB1 Trans2 Response Packet as defined in
|
6
6
|
# [2.2.4.46.2 Response](https://msdn.microsoft.com/en-us/library/ee441550.aspx)
|
7
7
|
class Response < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
|
@@ -36,7 +38,6 @@ module RubySMB
|
|
36
38
|
|
37
39
|
def initialize_instance
|
38
40
|
super
|
39
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
40
41
|
smb_header.flags.reply = 1
|
41
42
|
end
|
42
43
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# A Trans2 SET_FILE_INFORMATION Request Packet as defined in
|
6
6
|
# [2.2.6.9.1 Request](https://msdn.microsoft.com/en-us/library/ee441527.aspx)
|
7
7
|
class SetFileInformationRequest < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Request::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -56,7 +58,6 @@ module RubySMB
|
|
56
58
|
|
57
59
|
def initialize_instance
|
58
60
|
super
|
59
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
60
61
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::SET_FILE_INFORMATION
|
61
62
|
end
|
62
63
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# A Trans2 SET_FILE_INFORMATION Response Packet as defined in
|
6
6
|
# [2.2.6.9.2 Response](https://msdn.microsoft.com/en-us/library/ff469853.aspx)
|
7
7
|
class SetFileInformationResponse < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
9
|
+
|
8
10
|
class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
|
9
11
|
end
|
10
12
|
|
@@ -46,7 +48,6 @@ module RubySMB
|
|
46
48
|
|
47
49
|
def initialize_instance
|
48
50
|
super
|
49
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
|
50
51
|
parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::SET_FILE_INFORMATION
|
51
52
|
smb_header.flags.reply = 1
|
52
53
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 TreeConnect Request Packet as defined in
|
5
5
|
# [2.2.4.7.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/cc246330.aspx)
|
6
6
|
class TreeConnectRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TREE_CONNECT
|
8
|
+
|
7
9
|
# A SMB1 Parameter Block as defined by the {TreeConnectRequest}
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
and_x_block :andx_block
|
@@ -22,10 +24,6 @@ module RubySMB
|
|
22
24
|
parameter_block :parameter_block
|
23
25
|
data_block :data_block
|
24
26
|
|
25
|
-
def initialize_instance
|
26
|
-
super
|
27
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TREE_CONNECT
|
28
|
-
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# A SMB1 TreeConnect Response Packet as defined in
|
5
5
|
# [2.2.4.7.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/cc246331.aspx)
|
6
6
|
class TreeConnectResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TREE_CONNECT
|
8
|
+
|
7
9
|
# A SMB1 Parameter Block as defined by the {SessionSetupResponse}
|
8
10
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
11
|
and_x_block :andx_block
|
@@ -24,7 +26,6 @@ module RubySMB
|
|
24
26
|
|
25
27
|
def initialize_instance
|
26
28
|
super
|
27
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TREE_CONNECT
|
28
29
|
smb_header.flags.reply = 1
|
29
30
|
end
|
30
31
|
|
@@ -34,12 +35,17 @@ module RubySMB
|
|
34
35
|
#
|
35
36
|
# @return [RubySMB::SMB1::BitField::DirectoryAccessMask] if a directory was connected to
|
36
37
|
# @return [RubySMB::SMB1::BitField::FileAccessMask] if anything else was connected to
|
38
|
+
# @raise [RubySMB::Error::InvalidBitField] if ACCESS_MASK bit field is not valid
|
37
39
|
def access_rights
|
38
40
|
if is_directory?
|
39
41
|
parameter_block.access_rights
|
40
42
|
else
|
41
43
|
mask = parameter_block.access_rights.to_binary_s
|
42
|
-
|
44
|
+
begin
|
45
|
+
RubySMB::SMB1::BitField::FileAccessMask.read(mask)
|
46
|
+
rescue IOError
|
47
|
+
raise RubySMB::Error::InvalidBitField, 'Invalid ACCESS_MASK for the Maximal Share Access Rights'
|
48
|
+
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -54,7 +60,11 @@ module RubySMB
|
|
54
60
|
parameter_block.guest_access_rights
|
55
61
|
else
|
56
62
|
mask = parameter_block.guest_access_rights.to_binary_s
|
57
|
-
|
63
|
+
begin
|
64
|
+
RubySMB::SMB1::BitField::FileAccessMask.read(mask)
|
65
|
+
rescue IOError
|
66
|
+
raise RubySMB::Error::InvalidBitField, 'Invalid ACCESS_MASK for the Guest Share Access Rights'
|
67
|
+
end
|
58
68
|
end
|
59
69
|
end
|
60
70
|
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 TreeDisonnect Request Packet as defined in
|
5
5
|
# [2.2.4.51.1 Request](https://msdn.microsoft.com/en-us/library/ee441622.aspx)
|
6
6
|
class TreeDisconnectRequest < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TREE_DISCONNECT
|
8
|
+
|
7
9
|
# The Parameter Block for this packet is empty save the Word Count
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
@@ -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_TREE_DISCONNECT
|
23
|
-
end
|
24
22
|
end
|
25
23
|
end
|
26
24
|
end
|
@@ -4,6 +4,8 @@ module RubySMB
|
|
4
4
|
# This class represents an SMB1 TreeDisonnect Response Packet as defined in
|
5
5
|
# [2.2.4.51.2 Response](https://msdn.microsoft.com/en-us/library/ee441823.aspx)
|
6
6
|
class TreeDisconnectResponse < RubySMB::GenericPacket
|
7
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_TREE_DISCONNECT
|
8
|
+
|
7
9
|
# The Parameter Block for this packet is empty save the Word Count
|
8
10
|
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
@@ -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_TREE_DISCONNECT
|
23
24
|
smb_header.flags.reply = 1
|
24
25
|
end
|
25
26
|
end
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# [2.2.4.43.1 Request](https://msdn.microsoft.com/en-us/library/ee441954.aspx)
|
6
6
|
# [2.2.4.3.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/ff469893.aspx)
|
7
7
|
class WriteAndxRequest < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_WRITE_ANDX
|
9
|
+
|
8
10
|
# A SMB1 Parameter Block as defined by the {WriteAndxRequest}
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -41,7 +43,7 @@ module RubySMB
|
|
41
43
|
|
42
44
|
# Represents the specific layout of the DataBlock for a {WriteAndxRequest} Packet.
|
43
45
|
class DataBlock < RubySMB::SMB1::DataBlock
|
44
|
-
|
46
|
+
string :pad, label: 'Pad', length: 1
|
45
47
|
string :data, label: 'Data'
|
46
48
|
end
|
47
49
|
|
@@ -49,11 +51,6 @@ module RubySMB
|
|
49
51
|
parameter_block :parameter_block
|
50
52
|
data_block :data_block
|
51
53
|
|
52
|
-
def initialize_instance
|
53
|
-
super
|
54
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_WRITE_ANDX
|
55
|
-
end
|
56
|
-
|
57
54
|
# Specifies whether the offset is a 32-bit (default) or 64-bit value. When `is_64_bit`
|
58
55
|
# is true, a 64-bit offset will be used and the OffsetHigh field will be added to the structure.
|
59
56
|
#
|
@@ -5,6 +5,8 @@ module RubySMB
|
|
5
5
|
# [2.2.4.43.2 Response](https://msdn.microsoft.com/en-us/library/ee441673.aspx)
|
6
6
|
# [2.2.4.3.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/ff469858.aspx)
|
7
7
|
class WriteAndxResponse < RubySMB::GenericPacket
|
8
|
+
COMMAND = RubySMB::SMB1::Commands::SMB_COM_WRITE_ANDX
|
9
|
+
|
8
10
|
# A SMB1 Parameter Block as defined by the {WriteAndxResponse}
|
9
11
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
12
|
endian :little
|
@@ -26,7 +28,6 @@ module RubySMB
|
|
26
28
|
|
27
29
|
def initialize_instance
|
28
30
|
super
|
29
|
-
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_WRITE_ANDX
|
30
31
|
smb_header.flags.reply = 1
|
31
32
|
end
|
32
33
|
end
|