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.
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