ruby_smb 0.0.18 → 0.0.19

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 (298) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +247 -7
  5. data/examples/anonymous_auth.rb +6 -3
  6. data/examples/append_file.rb +40 -0
  7. data/examples/authenticate.rb +12 -7
  8. data/examples/delete_file.rb +40 -0
  9. data/examples/list_directory.rb +45 -0
  10. data/examples/negotiate.rb +0 -1
  11. data/examples/negotiate_with_netbios_service.rb +36 -0
  12. data/examples/net_share_enum_all.rb +30 -0
  13. data/examples/read_file.rb +39 -0
  14. data/examples/rename_file.rb +41 -0
  15. data/examples/tree_connect.rb +2 -4
  16. data/examples/write_file.rb +40 -0
  17. data/lib/ruby_smb.rb +5 -0
  18. data/lib/ruby_smb/client.rb +196 -43
  19. data/lib/ruby_smb/client/authentication.rb +89 -48
  20. data/lib/ruby_smb/client/echo.rb +1 -4
  21. data/lib/ruby_smb/client/negotiation.rb +46 -45
  22. data/lib/ruby_smb/client/signing.rb +9 -16
  23. data/lib/ruby_smb/client/tree_connect.rb +8 -13
  24. data/lib/ruby_smb/client/utils.rb +79 -0
  25. data/lib/ruby_smb/dcerpc.rb +30 -0
  26. data/lib/ruby_smb/dcerpc/bind.rb +60 -0
  27. data/lib/ruby_smb/dcerpc/handle.rb +60 -0
  28. data/lib/ruby_smb/dcerpc/ndr.rb +41 -0
  29. data/lib/ruby_smb/dcerpc/request.rb +43 -0
  30. data/lib/ruby_smb/dcerpc/response.rb +46 -0
  31. data/lib/ruby_smb/dcerpc/srvsvc.rb +17 -0
  32. data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +93 -0
  33. data/lib/ruby_smb/dcerpc/uuid.rb +28 -0
  34. data/lib/ruby_smb/dispatcher.rb +7 -3
  35. data/lib/ruby_smb/dispatcher/base.rb +23 -14
  36. data/lib/ruby_smb/dispatcher/socket.rb +71 -51
  37. data/lib/ruby_smb/dispositions.rb +32 -0
  38. data/lib/ruby_smb/error.rb +24 -18
  39. data/lib/ruby_smb/field.rb +5 -2
  40. data/lib/ruby_smb/field/extended_attribute_flag.rb +1 -1
  41. data/lib/ruby_smb/field/file_time.rb +3 -1
  42. data/lib/ruby_smb/field/security_descriptor.rb +6 -6
  43. data/lib/ruby_smb/field/smb2_fileid.rb +11 -0
  44. data/lib/ruby_smb/field/smb_fea.rb +3 -3
  45. data/lib/ruby_smb/field/smb_fea_list.rb +3 -3
  46. data/lib/ruby_smb/field/smb_gea.rb +12 -0
  47. data/lib/ruby_smb/field/smb_gea_list.rb +13 -0
  48. data/lib/ruby_smb/field/string16.rb +14 -0
  49. data/lib/ruby_smb/field/stringz16.rb +3 -7
  50. data/lib/ruby_smb/field/utime.rb +11 -10
  51. data/lib/ruby_smb/fscc.rb +12 -0
  52. data/lib/ruby_smb/fscc/control_codes.rb +26 -0
  53. data/lib/ruby_smb/{field → fscc}/ea_info_array.rb +12 -14
  54. data/lib/ruby_smb/fscc/file_attributes.rb +29 -0
  55. data/lib/ruby_smb/{field → fscc}/file_full_ea_info.rb +5 -5
  56. data/lib/ruby_smb/fscc/file_information.rb +60 -0
  57. data/lib/ruby_smb/fscc/file_information/file_both_directory_information.rb +29 -0
  58. data/lib/ruby_smb/fscc/file_information/file_directory_information.rb +25 -0
  59. data/lib/ruby_smb/fscc/file_information/file_disposition_information.rb +15 -0
  60. data/lib/ruby_smb/fscc/file_information/file_full_directory_information.rb +26 -0
  61. data/lib/ruby_smb/fscc/file_information/file_id_both_directory_information.rb +31 -0
  62. data/lib/ruby_smb/fscc/file_information/file_id_full_directory_information.rb +28 -0
  63. data/lib/ruby_smb/fscc/file_information/file_names_information.rb +18 -0
  64. data/lib/ruby_smb/fscc/file_information/file_rename_information.rb +44 -0
  65. data/lib/ruby_smb/generic_packet.rb +40 -18
  66. data/lib/ruby_smb/gss.rb +49 -56
  67. data/lib/ruby_smb/impersonation_levels.rb +7 -2
  68. data/lib/ruby_smb/nbss.rb +16 -0
  69. data/lib/ruby_smb/nbss/negative_session_response.rb +30 -0
  70. data/lib/ruby_smb/nbss/session_header.rb +13 -0
  71. data/lib/ruby_smb/nbss/session_request.rb +13 -0
  72. data/lib/ruby_smb/smb1.rb +20 -17
  73. data/lib/ruby_smb/smb1/bit_field.rb +3 -0
  74. data/lib/ruby_smb/smb1/bit_field/create_options.rb +5 -5
  75. data/lib/ruby_smb/smb1/bit_field/file_status_flags.rb +18 -0
  76. data/lib/ruby_smb/smb1/bit_field/open2_access_mode.rb +11 -11
  77. data/lib/ruby_smb/smb1/bit_field/open2_open_mode.rb +1 -1
  78. data/lib/ruby_smb/smb1/bit_field/optional_support.rb +0 -1
  79. data/lib/ruby_smb/smb1/bit_field/security_flags.rb +15 -0
  80. data/lib/ruby_smb/smb1/bit_field/share_access.rb +2 -3
  81. data/lib/ruby_smb/smb1/bit_field/smb_ext_file_attributes.rb +21 -24
  82. data/lib/ruby_smb/smb1/bit_field/smb_file_attributes.rb +1 -1
  83. data/lib/ruby_smb/smb1/commands.rb +5 -0
  84. data/lib/ruby_smb/smb1/create_actions.rb +3 -5
  85. data/lib/ruby_smb/smb1/file.rb +289 -0
  86. data/lib/ruby_smb/smb1/oplock_levels.rb +2 -4
  87. data/lib/ruby_smb/smb1/packet.rb +10 -0
  88. data/lib/ruby_smb/smb1/packet/close_request.rb +31 -0
  89. data/lib/ruby_smb/smb1/packet/close_response.rb +28 -0
  90. data/lib/ruby_smb/smb1/packet/echo_request.rb +5 -7
  91. data/lib/ruby_smb/smb1/packet/echo_response.rb +5 -7
  92. data/lib/ruby_smb/smb1/packet/empty_packet.rb +1 -2
  93. data/lib/ruby_smb/smb1/packet/logoff_request.rb +1 -4
  94. data/lib/ruby_smb/smb1/packet/logoff_response.rb +1 -4
  95. data/lib/ruby_smb/smb1/packet/negotiate_response.rb +22 -0
  96. data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +22 -0
  97. data/lib/ruby_smb/smb1/packet/nt_create_andx_request.rb +62 -0
  98. data/lib/ruby_smb/smb1/packet/nt_create_andx_response.rb +66 -0
  99. data/lib/ruby_smb/smb1/packet/nt_trans.rb +1 -2
  100. data/lib/ruby_smb/smb1/packet/nt_trans/create_request.rb +19 -13
  101. data/lib/ruby_smb/smb1/packet/nt_trans/create_response.rb +8 -10
  102. data/lib/ruby_smb/smb1/packet/nt_trans/request.rb +11 -11
  103. data/lib/ruby_smb/smb1/packet/nt_trans/response.rb +10 -10
  104. data/lib/ruby_smb/smb1/packet/nt_trans/subcommands.rb +8 -1
  105. data/lib/ruby_smb/smb1/packet/read_andx_request.rb +84 -0
  106. data/lib/ruby_smb/smb1/packet/read_andx_response.rb +47 -0
  107. data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +2 -6
  108. data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +1 -4
  109. data/lib/ruby_smb/smb1/packet/session_setup_request.rb +1 -6
  110. data/lib/ruby_smb/smb1/packet/session_setup_response.rb +2 -4
  111. data/lib/ruby_smb/smb1/packet/trans2.rb +8 -2
  112. data/lib/ruby_smb/smb1/packet/trans2/data_block.rb +6 -7
  113. data/lib/ruby_smb/smb1/packet/trans2/find_first2_request.rb +77 -0
  114. data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +87 -0
  115. data/lib/ruby_smb/smb1/packet/trans2/find_information_level.rb +32 -0
  116. data/lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_full_directory_info.rb +45 -0
  117. data/lib/ruby_smb/smb1/packet/trans2/find_next2_request.rb +77 -0
  118. data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +86 -0
  119. data/lib/ruby_smb/smb1/packet/trans2/open2_request.rb +10 -10
  120. data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +10 -12
  121. data/lib/ruby_smb/smb1/packet/trans2/request.rb +15 -17
  122. data/lib/ruby_smb/smb1/packet/trans2/request_secondary.rb +8 -10
  123. data/lib/ruby_smb/smb1/packet/trans2/response.rb +11 -13
  124. data/lib/ruby_smb/smb1/packet/trans2/set_file_information_request.rb +66 -0
  125. data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +57 -0
  126. data/lib/ruby_smb/smb1/packet/trans2/subcommands.rb +5 -2
  127. data/lib/ruby_smb/smb1/packet/tree_connect_request.rb +4 -6
  128. data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +5 -7
  129. data/lib/ruby_smb/smb1/packet/tree_disconnect_request.rb +2 -4
  130. data/lib/ruby_smb/smb1/packet/tree_disconnect_response.rb +2 -4
  131. data/lib/ruby_smb/smb1/packet/write_andx_request.rb +68 -0
  132. data/lib/ruby_smb/smb1/packet/write_andx_response.rb +35 -0
  133. data/lib/ruby_smb/smb1/resource_type.rb +18 -0
  134. data/lib/ruby_smb/smb1/tree.rb +188 -5
  135. data/lib/ruby_smb/smb2.rb +16 -11
  136. data/lib/ruby_smb/smb2/bit_field.rb +1 -0
  137. data/lib/ruby_smb/smb2/bit_field/file_access_mask.rb +1 -1
  138. data/lib/ruby_smb/smb2/bit_field/session_flags.rb +1 -2
  139. data/lib/ruby_smb/smb2/bit_field/share_flags.rb +4 -6
  140. data/lib/ruby_smb/smb2/create_context.rb +29 -0
  141. data/lib/ruby_smb/smb2/file.rb +251 -0
  142. data/lib/ruby_smb/smb2/info_type.rb +21 -0
  143. data/lib/ruby_smb/smb2/packet.rb +16 -0
  144. data/lib/ruby_smb/smb2/packet/close_request.rb +22 -0
  145. data/lib/ruby_smb/smb2/packet/close_response.rb +29 -0
  146. data/lib/ruby_smb/smb2/packet/create_request.rb +54 -0
  147. data/lib/ruby_smb/smb2/packet/create_response.rb +35 -0
  148. data/lib/ruby_smb/smb2/packet/echo_request.rb +1 -3
  149. data/lib/ruby_smb/smb2/packet/echo_response.rb +1 -3
  150. data/lib/ruby_smb/smb2/packet/error_packet.rb +1 -3
  151. data/lib/ruby_smb/smb2/packet/ioctl_request.rb +54 -0
  152. data/lib/ruby_smb/smb2/packet/ioctl_response.rb +39 -0
  153. data/lib/ruby_smb/smb2/packet/logoff_request.rb +1 -4
  154. data/lib/ruby_smb/smb2/packet/logoff_response.rb +1 -4
  155. data/lib/ruby_smb/smb2/packet/negotiate_request.rb +1 -1
  156. data/lib/ruby_smb/smb2/packet/negotiate_response.rb +1 -1
  157. data/lib/ruby_smb/smb2/packet/query_directory_request.rb +35 -0
  158. data/lib/ruby_smb/smb2/packet/query_directory_response.rb +45 -0
  159. data/lib/ruby_smb/smb2/packet/read_request.rb +30 -0
  160. data/lib/ruby_smb/smb2/packet/read_response.rb +26 -0
  161. data/lib/ruby_smb/smb2/packet/session_setup_request.rb +2 -5
  162. data/lib/ruby_smb/smb2/packet/session_setup_response.rb +4 -7
  163. data/lib/ruby_smb/smb2/packet/set_info_request.rb +58 -0
  164. data/lib/ruby_smb/smb2/packet/set_info_response.rb +20 -0
  165. data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +3 -4
  166. data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +5 -9
  167. data/lib/ruby_smb/smb2/packet/tree_disconnect_request.rb +1 -4
  168. data/lib/ruby_smb/smb2/packet/tree_disconnect_response.rb +1 -4
  169. data/lib/ruby_smb/smb2/packet/write_request.rb +29 -0
  170. data/lib/ruby_smb/smb2/packet/write_response.rb +26 -0
  171. data/lib/ruby_smb/smb2/tree.rb +163 -7
  172. data/lib/ruby_smb/version.rb +1 -1
  173. data/spec/lib/ruby_smb/client_spec.rb +459 -120
  174. data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +14 -0
  175. data/spec/lib/ruby_smb/dcerpc/handle_spec.rb +31 -0
  176. data/spec/lib/ruby_smb/dcerpc/request_spec.rb +21 -0
  177. data/spec/lib/ruby_smb/dcerpc/response_spec.rb +15 -0
  178. data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +13 -0
  179. data/spec/lib/ruby_smb/dcerpc/uuid_spec.rb +12 -0
  180. data/spec/lib/ruby_smb/dispatcher/base_spec.rb +26 -0
  181. data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +118 -18
  182. data/spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb +0 -3
  183. data/spec/lib/ruby_smb/field/file_time_spec.rb +4 -2
  184. data/spec/lib/ruby_smb/field/security_descriptor.rb +0 -1
  185. data/spec/lib/ruby_smb/field/smb2_fileid_spec.rb +10 -0
  186. data/spec/lib/ruby_smb/field/smb_fea_list_spec.rb +3 -5
  187. data/spec/lib/ruby_smb/field/smb_gea_list_spec.rb +37 -0
  188. data/spec/lib/ruby_smb/field/smb_gea_spec.rb +22 -0
  189. data/spec/lib/ruby_smb/field/stringz16_spec.rb +7 -9
  190. data/spec/lib/ruby_smb/field/utime_spec.rb +4 -2
  191. data/spec/lib/ruby_smb/{field → fscc}/ea_info_array_spec.rb +7 -9
  192. data/spec/lib/ruby_smb/{field → fscc}/file_full_ea_info_spec.rb +2 -3
  193. data/spec/lib/ruby_smb/fscc/file_information/file_both_directory_information_spec.rb +71 -0
  194. data/spec/lib/ruby_smb/fscc/file_information/file_directory_information_spec.rb +68 -0
  195. data/spec/lib/ruby_smb/fscc/file_information/file_disposition_information_spec.rb +26 -0
  196. data/spec/lib/ruby_smb/fscc/file_information/file_full_directory_information_spec.rb +69 -0
  197. data/spec/lib/ruby_smb/fscc/file_information/file_id_both_directory_information_spec.rb +72 -0
  198. data/spec/lib/ruby_smb/fscc/file_information/file_id_full_directory_information_spec.rb +70 -0
  199. data/spec/lib/ruby_smb/fscc/file_information/file_names_information_spec.rb +41 -0
  200. data/spec/lib/ruby_smb/fscc/file_information/file_rename_information_spec.rb +133 -0
  201. data/spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb +143 -0
  202. data/spec/lib/ruby_smb/generic_packet_spec.rb +46 -21
  203. data/spec/lib/ruby_smb/nbss/negative_session_response_spec.rb +29 -0
  204. data/spec/lib/ruby_smb/nbss/session_header_spec.rb +30 -0
  205. data/spec/lib/ruby_smb/nbss/session_request_spec.rb +30 -0
  206. data/spec/lib/ruby_smb/smb1/bit_field/create_options_spec.rb +9 -1
  207. data/spec/lib/ruby_smb/smb1/bit_field/directory_access_mask_spec.rb +0 -2
  208. data/spec/lib/ruby_smb/smb1/bit_field/file_access_mask_spec.rb +0 -2
  209. data/spec/lib/ruby_smb/smb1/bit_field/file_status_flags_spec.rb +35 -0
  210. data/spec/lib/ruby_smb/smb1/bit_field/open2_access_mode_spec.rb +1 -3
  211. data/spec/lib/ruby_smb/smb1/bit_field/open2_flags_spec.rb +0 -2
  212. data/spec/lib/ruby_smb/smb1/bit_field/open2_open_mode_spec.rb +0 -1
  213. data/spec/lib/ruby_smb/smb1/bit_field/optional_support_spec.rb +0 -1
  214. data/spec/lib/ruby_smb/smb1/bit_field/security_flags_spec.rb +26 -0
  215. data/spec/lib/ruby_smb/smb1/bit_field/share_access_spec.rb +0 -3
  216. data/spec/lib/ruby_smb/smb1/bit_field/smb_ext_file_attributes_spec.rb +20 -39
  217. data/spec/lib/ruby_smb/smb1/bit_field/smb_file_attributes_spec.rb +0 -6
  218. data/spec/lib/ruby_smb/smb1/bit_field/smb_nmpipe_status_spec.rb +0 -2
  219. data/spec/lib/ruby_smb/smb1/bit_field/trans2_flags_spec.rb +0 -2
  220. data/spec/lib/ruby_smb/smb1/bit_field/tree_connect_flags_spec.rb +0 -2
  221. data/spec/lib/ruby_smb/smb1/file_spec.rb +469 -0
  222. data/spec/lib/ruby_smb/smb1/packet/close_request_spec.rb +54 -0
  223. data/spec/lib/ruby_smb/smb1/packet/close_response_spec.rb +45 -0
  224. data/spec/lib/ruby_smb/smb1/packet/echo_request_spec.rb +1 -4
  225. data/spec/lib/ruby_smb/smb1/packet/echo_response_spec.rb +1 -4
  226. data/spec/lib/ruby_smb/smb1/packet/error_packet_spec.rb +1 -3
  227. data/spec/lib/ruby_smb/smb1/packet/logoff_request_spec.rb +1 -4
  228. data/spec/lib/ruby_smb/smb1/packet/logoff_response_spec.rb +1 -4
  229. data/spec/lib/ruby_smb/smb1/packet/negotiate_request_spec.rb +1 -1
  230. data/spec/lib/ruby_smb/smb1/packet/negotiate_response_extended_spec.rb +37 -0
  231. data/spec/lib/ruby_smb/smb1/packet/negotiate_response_spec.rb +37 -0
  232. data/spec/lib/ruby_smb/smb1/packet/nt_create_andx_request_spec.rb +151 -0
  233. data/spec/lib/ruby_smb/smb1/packet/nt_create_andx_response_spec.rb +157 -0
  234. data/spec/lib/ruby_smb/smb1/packet/nt_trans/create_request_spec.rb +13 -6
  235. data/spec/lib/ruby_smb/smb1/packet/nt_trans/create_response_spec.rb +1 -7
  236. data/spec/lib/ruby_smb/smb1/packet/nt_trans/request_spec.rb +1 -6
  237. data/spec/lib/ruby_smb/smb1/packet/nt_trans/response_spec.rb +1 -5
  238. data/spec/lib/ruby_smb/smb1/packet/read_andx_request_spec.rb +149 -0
  239. data/spec/lib/ruby_smb/smb1/packet/read_andx_response_spec.rb +93 -0
  240. data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_request_spec.rb +1 -5
  241. data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_response_spec.rb +1 -5
  242. data/spec/lib/ruby_smb/smb1/packet/session_setup_request_spec.rb +3 -8
  243. data/spec/lib/ruby_smb/smb1/packet/session_setup_response_spec.rb +2 -4
  244. data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_request_spec.rb +180 -0
  245. data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +104 -0
  246. data/spec/lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_full_directory_info_spec.rb +128 -0
  247. data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_request_spec.rb +174 -0
  248. data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +102 -0
  249. data/spec/lib/ruby_smb/smb1/packet/trans2/open2_request_spec.rb +1 -6
  250. data/spec/lib/ruby_smb/smb1/packet/trans2/open2_response_spec.rb +2 -7
  251. data/spec/lib/ruby_smb/smb1/packet/trans2/request_secondary_spec.rb +1 -5
  252. data/spec/lib/ruby_smb/smb1/packet/trans2/request_spec.rb +1 -5
  253. data/spec/lib/ruby_smb/smb1/packet/trans2/response_spec.rb +1 -4
  254. data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_request_spec.rb +98 -0
  255. data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb +56 -0
  256. data/spec/lib/ruby_smb/smb1/packet/tree_connect_request_spec.rb +1 -5
  257. data/spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb +1 -6
  258. data/spec/lib/ruby_smb/smb1/packet/tree_disconnect_request_spec.rb +1 -4
  259. data/spec/lib/ruby_smb/smb1/packet/tree_disconnect_response_spec.rb +1 -4
  260. data/spec/lib/ruby_smb/smb1/packet/write_andx_request_spec.rb +148 -0
  261. data/spec/lib/ruby_smb/smb1/packet/write_andx_response_spec.rb +54 -0
  262. data/spec/lib/ruby_smb/smb1/tree_spec.rb +409 -7
  263. data/spec/lib/ruby_smb/smb2/bit_field/directory_access_mask_spec.rb +0 -2
  264. data/spec/lib/ruby_smb/smb2/bit_field/file_access_mask_spec.rb +0 -2
  265. data/spec/lib/ruby_smb/smb2/bit_field/session_flags_spec.rb +1 -1
  266. data/spec/lib/ruby_smb/smb2/bit_field/share_capabilities_spec.rb +0 -1
  267. data/spec/lib/ruby_smb/smb2/bit_field/share_flags_spec.rb +0 -2
  268. data/spec/lib/ruby_smb/smb2/create_context_spec.rb +42 -0
  269. data/spec/lib/ruby_smb/smb2/file_spec.rb +233 -0
  270. data/spec/lib/ruby_smb/smb2/packet/close_request_spec.rb +40 -0
  271. data/spec/lib/ruby_smb/smb2/packet/close_response_spec.rb +40 -0
  272. data/spec/lib/ruby_smb/smb2/packet/create_request_spec.rb +101 -0
  273. data/spec/lib/ruby_smb/smb2/packet/create_response_spec.rb +64 -0
  274. data/spec/lib/ruby_smb/smb2/packet/echo_request_spec.rb +1 -3
  275. data/spec/lib/ruby_smb/smb2/packet/echo_response_spec.rb +1 -3
  276. data/spec/lib/ruby_smb/smb2/packet/ioctl_request_spec.rb +48 -0
  277. data/spec/lib/ruby_smb/smb2/packet/logoff_request_spec.rb +1 -3
  278. data/spec/lib/ruby_smb/smb2/packet/logoff_response_spec.rb +1 -3
  279. data/spec/lib/ruby_smb/smb2/packet/query_directory_request_spec.rb +80 -0
  280. data/spec/lib/ruby_smb/smb2/packet/query_directory_response_spec.rb +64 -0
  281. data/spec/lib/ruby_smb/smb2/packet/read_request_spec.rb +43 -0
  282. data/spec/lib/ruby_smb/smb2/packet/read_response_spec.rb +50 -0
  283. data/spec/lib/ruby_smb/smb2/packet/session_setup_request_spec.rb +3 -4
  284. data/spec/lib/ruby_smb/smb2/packet/session_setup_response_spec.rb +2 -3
  285. data/spec/lib/ruby_smb/smb2/packet/set_info_request_spec.rb +205 -0
  286. data/spec/lib/ruby_smb/smb2/packet/set_info_response_spec.rb +32 -0
  287. data/spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb +3 -5
  288. data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +1 -2
  289. data/spec/lib/ruby_smb/smb2/packet/tree_disconnect_request_spec.rb +1 -3
  290. data/spec/lib/ruby_smb/smb2/packet/tree_disconnect_response_spec.rb +1 -3
  291. data/spec/lib/ruby_smb/smb2/packet/write_request_spec.rb +51 -0
  292. data/spec/lib/ruby_smb/smb2/packet/write_response_spec.rb +38 -0
  293. data/spec/lib/ruby_smb/smb2/tree_spec.rb +191 -5
  294. data/spec/spec_helper.rb +1 -1
  295. metadata +195 -12
  296. metadata.gz.sig +0 -0
  297. data/lib/ruby_smb/smb1/dispositions.rb +0 -36
  298. data/spec/lib/ruby_smb/dispatcher/dispatcher_base_spec.rb +0 -22
@@ -2,16 +2,15 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module Trans2
5
-
6
5
  # This class represents an SMB1 Trans2 Open2 Response Packet as defined in
7
6
  # [2.2.6.1.2 Response](https://msdn.microsoft.com/en-us/library/ee441545.aspx)
8
7
  class Open2Response < RubySMB::GenericPacket
9
-
10
8
  class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
11
9
  end
12
10
 
11
+ # The Trans2 Parameter Block for this particular Subcommand
13
12
  class Trans2Parameters < BinData::Record
14
- endian :little
13
+ endian :little
15
14
  uint8 :fid, label: 'File ID'
16
15
  smb_file_attributes :file_attributes, label: 'File Attributes'
17
16
  utime :creation_time, label: 'Creation Time'
@@ -19,7 +18,7 @@ module RubySMB
19
18
  uint16 :resource_type, label: 'Resource Type'
20
19
  smb_nmpipe_status :nmpipe_status, label: 'Named Pipe Status'
21
20
 
22
- struct :action_taken do
21
+ struct :action_taken do
23
22
  endian :little
24
23
  bit6 :reserved, label: 'Reserved Space'
25
24
  bit2 :open_result, label: 'Open Result'
@@ -35,15 +34,16 @@ module RubySMB
35
34
  # Returns the length of the Trans2Parameters struct
36
35
  # in number of bytes
37
36
  def length
38
- self.do_num_bytes
37
+ do_num_bytes
39
38
  end
40
39
  end
41
40
 
41
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
42
42
  class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
43
- string :pad1, length: lambda { pad1_length }
43
+ string :pad1, length: -> { pad1_length }
44
44
  trans2_parameters :trans2_parameters, label: 'Trans2 Parameters'
45
- string :pad2, length: lambda { pad2_length }
46
- string :trans2_data, label: 'Trans2 Data', length: 0
45
+ string :pad2, length: -> { pad2_length }
46
+ string :trans2_data, label: 'Trans2 Data', length: 0
47
47
  end
48
48
 
49
49
  smb_header :smb_header
@@ -52,14 +52,12 @@ module RubySMB
52
52
 
53
53
  def initialize_instance
54
54
  super
55
- smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
55
+ smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
56
56
  parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::OPEN2
57
57
  smb_header.flags.reply = 1
58
58
  end
59
-
60
-
61
59
  end
62
60
  end
63
61
  end
64
62
  end
65
- end
63
+ end
@@ -2,36 +2,36 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module Trans2
5
-
6
5
  # This class represents a generic SMB1 Trans2 Request Packet as defined in
7
6
  # [2.2.4.46.1 Request](https://msdn.microsoft.com/en-us/library/ee442192.aspx)
8
7
  class Request < RubySMB::GenericPacket
9
-
8
+ # The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
10
9
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
10
  uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
12
11
  uint16 :total_data_count, label: 'Total Data Count(bytes)'
13
12
  uint16 :max_parameter_count, label: 'Max Parameter Count(bytes)'
14
13
  uint16 :max_data_count, label: 'Max Data Count(bytes)'
15
14
  uint8 :max_setup_count, label: 'Max Setup Count'
16
- uint8 :reserved, label: 'Reserved Space', initial_value: 0x00
15
+ uint8 :reserved, label: 'Reserved Space', initial_value: 0x00
17
16
  trans2_flags :flags
18
- uint32 :timeout, label: 'Timeout', initial_value: 0x00000000
19
- uint16 :reserved2, label: 'Reserved Space', initial_value: 0x00
20
- uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_parameters.length}
21
- uint16 :parameter_offset, label: 'Parameter Offset', initial_value: lambda {self.parent.data_block.trans2_parameters.abs_offset}
22
- uint16 :data_count, label: 'Data Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_data.length}
23
- uint16 :data_offset, label: 'Data Offset', initial_value: lambda {self.parent.data_block.trans2_data.abs_offset}
24
- uint8 :setup_count, label: 'Setup Count', initial_value: lambda {setup.length}
25
- uint8 :reserved3, label: 'Reserved Space', initial_value: 0x00
17
+ uint32 :timeout, label: 'Timeout', initial_value: 0x00000000
18
+ uint16 :reserved2, label: 'Reserved Space', initial_value: 0x00
19
+ uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: -> { parent.data_block.trans2_parameters.length }
20
+ uint16 :parameter_offset, label: 'Parameter Offset', initial_value: -> { parent.data_block.trans2_parameters.abs_offset }
21
+ uint16 :data_count, label: 'Data Count(bytes)', initial_value: -> { parent.data_block.trans2_data.length }
22
+ uint16 :data_offset, label: 'Data Offset', initial_value: -> { parent.data_block.trans2_data.abs_offset }
23
+ uint8 :setup_count, label: 'Setup Count', initial_value: -> { setup.length }
24
+ uint8 :reserved3, label: 'Reserved Space', initial_value: 0x00
26
25
 
27
26
  array :setup, type: :uint16, initial_length: 0
28
27
  end
29
28
 
29
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
30
30
  class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
31
- uint8 :name, label: 'Name', initial_value: 0x00
32
- string :pad1, length: lambda { pad1_length }
31
+ uint8 :name, label: 'Name', initial_value: 0x00
32
+ string :pad1, length: -> { pad1_length }
33
33
  string :trans2_parameters, label: 'Trans2 Parameters'
34
- string :pad2, length: lambda { pad2_length }
34
+ string :pad2, length: -> { pad2_length }
35
35
  string :trans2_data, label: 'Trans2 Data'
36
36
  end
37
37
 
@@ -43,10 +43,8 @@ module RubySMB
43
43
  super
44
44
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
45
45
  end
46
-
47
-
48
46
  end
49
47
  end
50
48
  end
51
49
  end
52
- end
50
+ end
@@ -2,23 +2,23 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module Trans2
5
-
6
5
  # This class represents a generic SMB1 Trans2 Secondary Request Packet as defined in
7
6
  # [2.2.4.47.1 Request](https://msdn.microsoft.com/en-us/library/ee442105.aspx)
8
7
  class RequestSecondary < RubySMB::GenericPacket
9
-
8
+ # The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
10
9
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
- uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
10
+ uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
12
11
  uint16 :total_data_count, label: 'Total Data Count(bytes)'
13
- uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_parameters.length}
14
- uint16 :parameter_offset, label: 'Parameter Offset', initial_value: lambda {self.parent.data_block.trans2_parameters.abs_offset}
12
+ uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: -> { parent.data_block.trans2_parameters.length }
13
+ uint16 :parameter_offset, label: 'Parameter Offset', initial_value: -> { parent.data_block.trans2_parameters.abs_offset }
15
14
  uint16 :parameter_displacement, label: 'Parameter Displacement'
16
- uint16 :data_count, label: 'Data Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_data.length}
17
- uint16 :data_offset, label: 'Data Offset', initial_value: lambda {self.parent.data_block.trans2_data.abs_offset}
15
+ uint16 :data_count, label: 'Data Count(bytes)', initial_value: -> { parent.data_block.trans2_data.length }
16
+ uint16 :data_offset, label: 'Data Offset', initial_value: -> { parent.data_block.trans2_data.abs_offset }
18
17
  uint16 :data_displacement, label: 'Data Displacement'
19
18
  uint16 :fid, label: 'FileID'
20
19
  end
21
20
 
21
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
22
22
  class DataBlock < RubySMB::SMB1::Packet::Trans2::Request::DataBlock
23
23
  end
24
24
 
@@ -30,10 +30,8 @@ module RubySMB
30
30
  super
31
31
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2_SECONDARY
32
32
  end
33
-
34
-
35
33
  end
36
34
  end
37
35
  end
38
36
  end
39
- end
37
+ end
@@ -2,31 +2,31 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module Trans2
5
-
6
5
  # This class represents a generic SMB1 Trans2 Response Packet as defined in
7
6
  # [2.2.4.46.2 Response](https://msdn.microsoft.com/en-us/library/ee441550.aspx)
8
7
  class Response < RubySMB::GenericPacket
9
-
8
+ # The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
10
9
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
- uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
10
+ uint16 :total_parameter_count, label: 'Total Parameter Count(bytes)'
12
11
  uint16 :total_data_count, label: 'Total Data Count(bytes)'
13
12
  uint16 :reserved, label: 'Reserved Space', initial_value: 0x00
14
- uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_parameters.length}
15
- uint16 :parameter_offset, label: 'Parameter Offset', initial_value: lambda {self.parent.data_block.trans2_parameters.abs_offset}
13
+ uint16 :parameter_count, label: 'Parameter Count(bytes)', initial_value: -> { parent.data_block.trans2_parameters.length }
14
+ uint16 :parameter_offset, label: 'Parameter Offset', initial_value: -> { parent.data_block.trans2_parameters.abs_offset }
16
15
  uint16 :parameter_displacement, label: 'Parameter Displacement'
17
- uint16 :data_count, label: 'Data Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_data.length}
18
- uint16 :data_offset, label: 'Data Offset', initial_value: lambda {self.parent.data_block.trans2_data.abs_offset}
16
+ uint16 :data_count, label: 'Data Count(bytes)', initial_value: -> { parent.data_block.trans2_data.length }
17
+ uint16 :data_offset, label: 'Data Offset', initial_value: -> { parent.data_block.trans2_data.abs_offset }
19
18
  uint16 :data_displacement, label: 'Data Displacement'
20
- uint8 :setup_count, label: 'Setup Count', initial_value: lambda {setup.length}
19
+ uint8 :setup_count, label: 'Setup Count', initial_value: -> { setup.length }
21
20
  uint8 :reserved2, label: 'Reserved Space', initial_value: 0x00
22
21
 
23
22
  array :setup, type: :uint16, initial_length: 0
24
23
  end
25
24
 
25
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
26
26
  class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
27
- string :pad1, length: lambda { pad1_length }
27
+ string :pad1, length: -> { pad1_length }
28
28
  string :trans2_parameters, label: 'Trans2 Parameters'
29
- string :pad2, length: lambda { pad2_length }
29
+ string :pad2, length: -> { pad2_length }
30
30
  string :trans2_data, label: 'Trans2 Data'
31
31
  end
32
32
 
@@ -39,10 +39,8 @@ module RubySMB
39
39
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
40
40
  smb_header.flags.reply = 1
41
41
  end
42
-
43
-
44
42
  end
45
43
  end
46
44
  end
47
45
  end
48
- end
46
+ end
@@ -0,0 +1,66 @@
1
+ module RubySMB
2
+ module SMB1
3
+ module Packet
4
+ module Trans2
5
+ # A Trans2 SET_FILE_INFORMATION Request Packet as defined in
6
+ # [2.2.6.9.1 Request](https://msdn.microsoft.com/en-us/library/ee441527.aspx)
7
+ class SetFileInformationRequest < RubySMB::GenericPacket
8
+ class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Request::ParameterBlock
9
+ end
10
+
11
+ # The Trans2 Parameter Block for this particular Subcommand
12
+ class Trans2Parameters < BinData::Record
13
+ endian :little
14
+
15
+ uint16 :fid, label: 'FID'
16
+ uint16 :information_level, label: 'Information Level'
17
+ uint16 :reserved, label: 'Reserved Space'
18
+
19
+ # Returns the length of the Trans2Parameters struct
20
+ # in number of bytes
21
+ def length
22
+ do_num_bytes
23
+ end
24
+ end
25
+
26
+ # The Trans2 Data Block for this particular Subcommand
27
+ class Trans2Data < BinData::Record
28
+ include RubySMB::Fscc::FileInformation
29
+
30
+ choice :info_level_struct, selection: -> { parent.trans2_parameters.information_level } do
31
+ # It supports new pass-through Information Level capabilities, as specified in
32
+ # [2.2.2.3.5 Pass-through Information Level Codes](https://msdn.microsoft.com/en-us/library/ff470158.aspx)
33
+ file_disposition_information (FILE_DISPOSITION_INFORMATION + SMB_INFO_PASSTHROUGH), label: 'File Disposition Information'
34
+ file_rename_information (FILE_RENAME_INFORMATION + SMB_INFO_PASSTHROUGH), label: 'File Rename Information'
35
+ end
36
+
37
+ # Returns the length of the Trans2Data struct
38
+ # in number of bytes
39
+ def length
40
+ do_num_bytes
41
+ end
42
+ end
43
+
44
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
45
+ class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
46
+ uint8 :name, label: 'Name', initial_value: 0x00
47
+ string :pad1, length: -> { pad1_length }
48
+ trans2_parameters :trans2_parameters, label: 'Trans2 Parameters'
49
+ string :pad2, length: -> { pad2_length }
50
+ trans2_data :trans2_data, label: 'Trans2 Data'
51
+ end
52
+
53
+ smb_header :smb_header
54
+ parameter_block :parameter_block
55
+ data_block :data_block
56
+
57
+ def initialize_instance
58
+ super
59
+ smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
60
+ parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::SET_FILE_INFORMATION
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,57 @@
1
+ module RubySMB
2
+ module SMB1
3
+ module Packet
4
+ module Trans2
5
+ # A Trans2 SET_FILE_INFORMATION Response Packet as defined in
6
+ # [2.2.6.9.2 Response](https://msdn.microsoft.com/en-us/library/ff469853.aspx)
7
+ class SetFileInformationResponse < RubySMB::GenericPacket
8
+ class ParameterBlock < RubySMB::SMB1::Packet::Trans2::Response::ParameterBlock
9
+ end
10
+
11
+ # The Trans2 Parameter Block for this particular Subcommand
12
+ class Trans2Parameters < BinData::Record
13
+ endian :little
14
+
15
+ uint16 :ea_error_offset, label: 'Extended Attribute Error Offset'
16
+
17
+ # Returns the length of the Trans2Parameters struct
18
+ # in number of bytes
19
+ def length
20
+ do_num_bytes
21
+ end
22
+ end
23
+
24
+ # The Trans2 Data Block for this particular Subcommand
25
+ class Trans2Data < BinData::Record
26
+
27
+ # Returns the length of the Trans2Data struct
28
+ # in number of bytes
29
+ def length
30
+ do_num_bytes
31
+ end
32
+ end
33
+
34
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
35
+ class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
36
+ uint8 :name, label: 'Name', initial_value: 0x00
37
+ string :pad1, length: -> { pad1_length }
38
+ trans2_parameters :trans2_parameters, label: 'Trans2 Parameters'
39
+ string :pad2, length: -> { pad2_length }
40
+ trans2_data :trans2_data, label: 'Trans2 Data'
41
+ end
42
+
43
+ smb_header :smb_header
44
+ parameter_block :parameter_block
45
+ data_block :data_block
46
+
47
+ def initialize_instance
48
+ super
49
+ smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2
50
+ parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::SET_FILE_INFORMATION
51
+ smb_header.flags.reply = 1
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -3,8 +3,11 @@ module RubySMB
3
3
  module Packet
4
4
  module Trans2
5
5
  module Subcommands
6
- OPEN2 = 0x0000
7
- SESSION_SETUP = 0x000E
6
+ OPEN2 = 0x0000
7
+ FIND_FIRST2 = 0x0001
8
+ FIND_NEXT2 = 0x0002
9
+ SET_FILE_INFORMATION = 0x0008
10
+ SESSION_SETUP = 0x000E
8
11
  end
9
12
  end
10
13
  end
@@ -1,11 +1,9 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # This class represents an SMB1 TreeConnect Request Packet as defined in
6
5
  # [2.2.4.7.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/cc246330.aspx)
7
6
  class TreeConnectRequest < RubySMB::GenericPacket
8
-
9
7
  # A SMB1 Parameter Block as defined by the {TreeConnectRequest}
10
8
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
9
  and_x_block :andx_block
@@ -13,10 +11,11 @@ module RubySMB
13
11
  uint16 :password_length, label: 'Password Length', initial_value: 0x01
14
12
  end
15
13
 
14
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
16
15
  class DataBlock < RubySMB::SMB1::DataBlock
17
- stringz :password, label: 'Password Field', initial_value: '', length: lambda { self.parent.parameter_block.password_length }
16
+ stringz :password, label: 'Password Field', initial_value: '', length: -> { parent.parameter_block.password_length }
18
17
  stringz :path, label: 'Resource Path'
19
- stringz :service, label: 'Resource Type', initial_value: '?????'
18
+ stringz :service, label: 'Resource Type', initial_value: '?????'
20
19
  end
21
20
 
22
21
  smb_header :smb_header
@@ -27,8 +26,7 @@ module RubySMB
27
26
  super
28
27
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TREE_CONNECT
29
28
  end
30
-
31
29
  end
32
30
  end
33
31
  end
34
- end
32
+ end
@@ -1,11 +1,9 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # A SMB1 TreeConnect Response Packet as defined in
6
5
  # [2.2.4.7.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/cc246331.aspx)
7
6
  class TreeConnectResponse < RubySMB::GenericPacket
8
-
9
7
  # A SMB1 Parameter Block as defined by the {SessionSetupResponse}
10
8
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
9
  and_x_block :andx_block
@@ -38,9 +36,9 @@ module RubySMB
38
36
  # @return [RubySMB::SMB1::BitField::FileAccessMask] if anything else was connected to
39
37
  def access_rights
40
38
  if is_directory?
41
- self.parameter_block.access_rights
39
+ parameter_block.access_rights
42
40
  else
43
- mask = self.parameter_block.access_rights.to_binary_s
41
+ mask = parameter_block.access_rights.to_binary_s
44
42
  RubySMB::SMB1::BitField::FileAccessMask.read(mask)
45
43
  end
46
44
  end
@@ -53,9 +51,9 @@ module RubySMB
53
51
  # @return [RubySMB::SMB1::BitField::FileAccessMask] if anything else was connected to
54
52
  def guest_access_rights
55
53
  if is_directory?
56
- self.parameter_block.guest_access_rights
54
+ parameter_block.guest_access_rights
57
55
  else
58
- mask = self.parameter_block.guest_access_rights.to_binary_s
56
+ mask = parameter_block.guest_access_rights.to_binary_s
59
57
  RubySMB::SMB1::BitField::FileAccessMask.read(mask)
60
58
  end
61
59
  end
@@ -66,7 +64,7 @@ module RubySMB
66
64
  # @return [TrueClass] if service is 'A:'
67
65
  # @return [FalseClass] if service is NOT 'A:'
68
66
  def is_directory?
69
- self.data_block.service == 'A:'
67
+ data_block.service == 'A:'
70
68
  end
71
69
  end
72
70
  end
@@ -1,12 +1,11 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # This class represents an SMB1 TreeDisonnect Request Packet as defined in
6
5
  # [2.2.4.51.1 Request](https://msdn.microsoft.com/en-us/library/ee441622.aspx)
7
6
  class TreeDisconnectRequest < RubySMB::GenericPacket
8
-
9
7
  # The Parameter Block for this packet is empty save the Word Count
8
+ # The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
10
9
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
10
  end
12
11
 
@@ -22,8 +21,7 @@ module RubySMB
22
21
  super
23
22
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_TREE_DISCONNECT
24
23
  end
25
-
26
24
  end
27
25
  end
28
26
  end
29
- end
27
+ end