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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/ruby_smb/client.rb +26 -4
  5. data/lib/ruby_smb/client/authentication.rb +43 -25
  6. data/lib/ruby_smb/client/echo.rb +20 -2
  7. data/lib/ruby_smb/client/negotiation.rb +27 -12
  8. data/lib/ruby_smb/client/tree_connect.rb +20 -14
  9. data/lib/ruby_smb/error.rb +40 -1
  10. data/lib/ruby_smb/generic_packet.rb +33 -4
  11. data/lib/ruby_smb/smb1/dcerpc.rb +7 -2
  12. data/lib/ruby_smb/smb1/file.rb +60 -11
  13. data/lib/ruby_smb/smb1/packet/close_request.rb +2 -5
  14. data/lib/ruby_smb/smb1/packet/close_response.rb +2 -1
  15. data/lib/ruby_smb/smb1/packet/echo_request.rb +2 -4
  16. data/lib/ruby_smb/smb1/packet/echo_response.rb +2 -1
  17. data/lib/ruby_smb/smb1/packet/empty_packet.rb +7 -0
  18. data/lib/ruby_smb/smb1/packet/logoff_request.rb +2 -4
  19. data/lib/ruby_smb/smb1/packet/logoff_response.rb +2 -1
  20. data/lib/ruby_smb/smb1/packet/negotiate_request.rb +2 -5
  21. data/lib/ruby_smb/smb1/packet/negotiate_response.rb +3 -7
  22. data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +4 -4
  23. data/lib/ruby_smb/smb1/packet/nt_create_andx_request.rb +2 -4
  24. data/lib/ruby_smb/smb1/packet/nt_create_andx_response.rb +2 -1
  25. data/lib/ruby_smb/smb1/packet/nt_trans/create_request.rb +2 -1
  26. data/lib/ruby_smb/smb1/packet/nt_trans/create_response.rb +2 -1
  27. data/lib/ruby_smb/smb1/packet/nt_trans/request.rb +2 -4
  28. data/lib/ruby_smb/smb1/packet/nt_trans/response.rb +2 -1
  29. data/lib/ruby_smb/smb1/packet/read_andx_request.rb +2 -5
  30. data/lib/ruby_smb/smb1/packet/read_andx_response.rb +2 -1
  31. data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +2 -1
  32. data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +2 -1
  33. data/lib/ruby_smb/smb1/packet/session_setup_request.rb +2 -5
  34. data/lib/ruby_smb/smb1/packet/session_setup_response.rb +2 -1
  35. data/lib/ruby_smb/smb1/packet/trans/peek_nmpipe_request.rb +0 -1
  36. data/lib/ruby_smb/smb1/packet/trans/peek_nmpipe_response.rb +3 -2
  37. data/lib/ruby_smb/smb1/packet/trans/request.rb +2 -5
  38. data/lib/ruby_smb/smb1/packet/trans/response.rb +2 -1
  39. data/lib/ruby_smb/smb1/packet/trans/transact_nmpipe_request.rb +1 -1
  40. data/lib/ruby_smb/smb1/packet/trans/transact_nmpipe_response.rb +1 -1
  41. data/lib/ruby_smb/smb1/packet/trans2/find_first2_request.rb +2 -1
  42. data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +8 -2
  43. data/lib/ruby_smb/smb1/packet/trans2/find_next2_request.rb +2 -1
  44. data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +8 -2
  45. data/lib/ruby_smb/smb1/packet/trans2/open2_request.rb +2 -1
  46. data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +2 -1
  47. data/lib/ruby_smb/smb1/packet/trans2/request.rb +2 -4
  48. data/lib/ruby_smb/smb1/packet/trans2/request_secondary.rb +2 -4
  49. data/lib/ruby_smb/smb1/packet/trans2/response.rb +2 -1
  50. data/lib/ruby_smb/smb1/packet/trans2/set_file_information_request.rb +2 -1
  51. data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +2 -1
  52. data/lib/ruby_smb/smb1/packet/tree_connect_request.rb +2 -4
  53. data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +13 -3
  54. data/lib/ruby_smb/smb1/packet/tree_disconnect_request.rb +2 -4
  55. data/lib/ruby_smb/smb1/packet/tree_disconnect_response.rb +2 -1
  56. data/lib/ruby_smb/smb1/packet/write_andx_request.rb +2 -5
  57. data/lib/ruby_smb/smb1/packet/write_andx_response.rb +2 -1
  58. data/lib/ruby_smb/smb1/pipe.rb +8 -3
  59. data/lib/ruby_smb/smb1/tree.rb +40 -2
  60. data/lib/ruby_smb/smb2/dcerpc.rb +7 -2
  61. data/lib/ruby_smb/smb2/file.rb +97 -1
  62. data/lib/ruby_smb/smb2/packet/close_request.rb +2 -4
  63. data/lib/ruby_smb/smb2/packet/close_response.rb +2 -1
  64. data/lib/ruby_smb/smb2/packet/create_request.rb +2 -4
  65. data/lib/ruby_smb/smb2/packet/create_response.rb +2 -1
  66. data/lib/ruby_smb/smb2/packet/echo_request.rb +2 -4
  67. data/lib/ruby_smb/smb2/packet/echo_response.rb +2 -1
  68. data/lib/ruby_smb/smb2/packet/error_packet.rb +7 -0
  69. data/lib/ruby_smb/smb2/packet/ioctl_request.rb +2 -5
  70. data/lib/ruby_smb/smb2/packet/ioctl_response.rb +2 -1
  71. data/lib/ruby_smb/smb2/packet/logoff_request.rb +2 -4
  72. data/lib/ruby_smb/smb2/packet/logoff_response.rb +2 -1
  73. data/lib/ruby_smb/smb2/packet/negotiate_request.rb +2 -5
  74. data/lib/ruby_smb/smb2/packet/negotiate_response.rb +2 -1
  75. data/lib/ruby_smb/smb2/packet/query_directory_request.rb +2 -4
  76. data/lib/ruby_smb/smb2/packet/query_directory_response.rb +8 -2
  77. data/lib/ruby_smb/smb2/packet/read_request.rb +2 -4
  78. data/lib/ruby_smb/smb2/packet/read_response.rb +2 -1
  79. data/lib/ruby_smb/smb2/packet/session_setup_request.rb +2 -5
  80. data/lib/ruby_smb/smb2/packet/session_setup_response.rb +2 -1
  81. data/lib/ruby_smb/smb2/packet/set_info_request.rb +2 -4
  82. data/lib/ruby_smb/smb2/packet/set_info_response.rb +2 -1
  83. data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +2 -5
  84. data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +8 -2
  85. data/lib/ruby_smb/smb2/packet/tree_disconnect_request.rb +2 -4
  86. data/lib/ruby_smb/smb2/packet/tree_disconnect_response.rb +2 -1
  87. data/lib/ruby_smb/smb2/packet/write_request.rb +2 -4
  88. data/lib/ruby_smb/smb2/packet/write_response.rb +2 -1
  89. data/lib/ruby_smb/smb2/pipe.rb +9 -9
  90. data/lib/ruby_smb/smb2/tree.rb +44 -6
  91. data/lib/ruby_smb/version.rb +1 -1
  92. data/spec/lib/ruby_smb/client_spec.rb +123 -11
  93. data/spec/lib/ruby_smb/generic_packet_spec.rb +52 -4
  94. data/spec/lib/ruby_smb/smb1/file_spec.rb +182 -1
  95. data/spec/lib/ruby_smb/smb1/packet/{error_packet_spec.rb → empty_packet_spec.rb} +21 -0
  96. data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +11 -2
  97. data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +11 -2
  98. data/spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb +40 -0
  99. data/spec/lib/ruby_smb/smb1/pipe_spec.rb +63 -2
  100. data/spec/lib/ruby_smb/smb1/tree_spec.rb +44 -7
  101. data/spec/lib/ruby_smb/smb2/file_spec.rb +295 -2
  102. data/spec/lib/ruby_smb/smb2/packet/error_packet_spec.rb +51 -0
  103. data/spec/lib/ruby_smb/smb2/packet/query_directory_response_spec.rb +8 -0
  104. data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +8 -0
  105. data/spec/lib/ruby_smb/smb2/pipe_spec.rb +69 -3
  106. data/spec/lib/ruby_smb/smb2/tree_spec.rb +214 -0
  107. metadata +6 -4
  108. metadata.gz.sig +0 -0
@@ -5,6 +5,8 @@ module RubySMB
5
5
  # [2.2.4.42.1 Request](https://msdn.microsoft.com/en-us/library/ee441839.aspx)
6
6
  # [2.2.4.2.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/ff470250.aspx)
7
7
  class ReadAndxRequest < RubySMB::GenericPacket
8
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX
9
+
8
10
  # A SMB1 Parameter Block as defined by the {ReadAndxRequest}
9
11
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
10
12
  endian :little
@@ -54,11 +56,6 @@ module RubySMB
54
56
  parameter_block :parameter_block
55
57
  data_block :data_block
56
58
 
57
- def initialize_instance
58
- super
59
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX
60
- end
61
-
62
59
  # Sets the read_from_named_pipe flag to `read_from_named_pipe` value (true or false).
63
60
  # When reading from a named pipe, this flag needs to be set to true, which forces
64
61
  # the use of Timeout field in Timeout_or_MaxCountHigh. When set to false (default),
@@ -5,6 +5,8 @@ module RubySMB
5
5
  # [2.2.4.42.2 Response](https://msdn.microsoft.com/en-us/library/ee441872.aspx)
6
6
  # [2.2.4.2.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/ff470017.aspx)
7
7
  class ReadAndxResponse < RubySMB::GenericPacket
8
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX
9
+
8
10
  # A SMB1 Parameter Block as defined by the {ReadAndxResponse}
9
11
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
10
12
  endian :little
@@ -38,7 +40,6 @@ module RubySMB
38
40
 
39
41
  def initialize_instance
40
42
  super
41
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX
42
43
  smb_header.flags.reply = 1
43
44
  end
44
45
  end
@@ -4,6 +4,8 @@ module RubySMB
4
4
  # A SMB1 SMB_COM_SESSION_SETUP_ANDX Request Packet, without NTLMSSP as defined in
5
5
  # [2.2.4.53.1 Request](https://msdn.microsoft.com/en-us/library/ee441849.aspx)
6
6
  class SessionSetupLegacyRequest < RubySMB::GenericPacket
7
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
8
+
7
9
  # A SMB1 Parameter Block as defined by the {SessionSetupRequest}
8
10
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
9
11
  and_x_block :andx_block
@@ -37,7 +39,6 @@ module RubySMB
37
39
 
38
40
  def initialize_instance
39
41
  super
40
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
41
42
  parameter_block.capabilities.extended_security = 0
42
43
  end
43
44
  end
@@ -4,6 +4,8 @@ module RubySMB
4
4
  # A SMB1 SMB_COM_SESSION_SETUP Legacy Response Packet as defined in
5
5
  # [2.2.4.53.2 Response](https://msdn.microsoft.com/en-us/library/ee442143.aspx)
6
6
  class SessionSetupLegacyResponse < RubySMB::GenericPacket
7
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
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_SESSION_SETUP
28
29
  smb_header.flags.reply = 1
29
30
  end
30
31
  end
@@ -4,6 +4,8 @@ module RubySMB
4
4
  # A SMB1 SMB_COM_SESSION_SETUP_ANDX Request Packet as defined in
5
5
  # [2.2.4.6.1](https://msdn.microsoft.com/en-us/library/cc246328.aspx)
6
6
  class SessionSetupRequest < RubySMB::GenericPacket
7
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
8
+
7
9
  # A SMB1 Parameter Block as defined by the {SessionSetupRequest}
8
10
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
9
11
  and_x_block :andx_block
@@ -30,11 +32,6 @@ module RubySMB
30
32
  parameter_block :parameter_block
31
33
  data_block :data_block
32
34
 
33
- def initialize_instance
34
- super
35
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
36
- end
37
-
38
35
  # Takes an NTLM Type 1 Message and creates the GSS Security Blob
39
36
  # for it and sets it in the {RubySMB::SMB1::Packet::SessionSetupRequest::DataBlock#security_blob}
40
37
  # field. It also automaticaly sets the length in
@@ -4,6 +4,8 @@ module RubySMB
4
4
  # A SMB1 SMB_COM_SESSION_SETUP Response Packet as defined in
5
5
  # [2.2.4.6.2](https://msdn.microsoft.com/en-us/library/cc246329.aspx)
6
6
  class SessionSetupResponse < RubySMB::GenericPacket
7
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
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_SESSION_SETUP
28
29
  smb_header.flags.reply = 1
29
30
  end
30
31
 
@@ -12,7 +12,6 @@ module RubySMB
12
12
 
13
13
  def initialize_instance
14
14
  super
15
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
16
15
  data_block.name = "\\PIPE\\"
17
16
  parameter_block.setup << RubySMB::SMB1::Packet::Trans::Subcommands::PEEK_NMPIPE
18
17
  parameter_block.setup_count = 2
@@ -5,6 +5,8 @@ module RubySMB
5
5
  # This class represents an SMB1 Trans PeekNamedPipe Response Packet as defined in
6
6
  # [2.2.5.5.2 Response](https://msdn.microsoft.com/en-us/library/ee441883.aspx)
7
7
  class PeekNmpipeResponse < RubySMB::GenericPacket
8
+ COMMAND = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
9
+
8
10
  class ParameterBlock < RubySMB::SMB1::Packet::Trans::Response::ParameterBlock
9
11
  end
10
12
 
@@ -22,7 +24,7 @@ module RubySMB
22
24
  do_num_bytes
23
25
  end
24
26
  end
25
-
27
+
26
28
  class TransData < BinData::Record
27
29
  string :read_data, label: 'Readable data', length: -> { parent.parameter_block.total_data_count }
28
30
 
@@ -48,7 +50,6 @@ module RubySMB
48
50
 
49
51
  def initialize_instance
50
52
  super
51
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION
52
53
  smb_header.flags.reply = 1
53
54
  parameter_block.setup << RubySMB::SMB1::Packet::Trans::Subcommands::PEEK_NMPIPE
54
55
  end
@@ -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
- information_classes << file_info.read(data)
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
- information_classes << file_info.read(data)
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