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 NtTrans
5
-
6
5
  # Class representing a NT Transaction Create response packet as defined in
7
6
  # [2.2.7.1.2 Response](https://msdn.microsoft.com/en-us/library/ee441961.aspx)
8
7
  class CreateResponse < RubySMB::GenericPacket
9
-
10
8
  class ParameterBlock < RubySMB::SMB1::Packet::NtTrans::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
 
16
15
  uint8 :oplock_level, label: 'OpLock Level'
17
16
  uint8 :reserved, label: 'Reserved Space'
@@ -32,17 +31,16 @@ module RubySMB
32
31
  # Returns the length of the Trans2Parameters struct
33
32
  # in number of bytes
34
33
  def length
35
- self.do_num_bytes
34
+ do_num_bytes
36
35
  end
37
36
  end
38
37
 
39
-
40
-
38
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
41
39
  class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
42
- string :pad1, length: lambda { pad1_length }
40
+ string :pad1, length: -> { pad1_length }
43
41
  trans2_parameters :trans2_parameters, label: 'Trans2 Parameters'
44
- string :pad2, length: lambda { pad2_length }
45
- string :trans2_data, label: 'Trans2 Data', length: 0
42
+ string :pad2, length: -> { pad2_length }
43
+ string :trans2_data, label: 'Trans2 Data', length: 0
46
44
  end
47
45
 
48
46
  smb_header :smb_header
@@ -58,4 +56,4 @@ module RubySMB
58
56
  end
59
57
  end
60
58
  end
61
- end
59
+ end
@@ -2,33 +2,33 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module NtTrans
5
-
6
5
  # Class representing a generic NT Transaction request packet as defined in
7
6
  # [2.2.4.62.1 Request](https://msdn.microsoft.com/en-us/library/ee441534.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
- endian :little
10
+ endian :little
12
11
  uint8 :max_setup_count, label: 'Max Setup Count'
13
12
  uint16 :reserved, label: 'Reserved Space'
14
13
  uint32 :total_parameter_count, label: 'Total Parameter Count(bytes)'
15
14
  uint32 :total_data_count, label: 'Total Data Count(bytes)'
16
15
  uint32 :max_parameter_count, label: 'Max Parameter Count(bytes)'
17
16
  uint32 :max_data_count, label: 'Max Data Count(bytes)'
18
- uint32 :parameter_count, label: 'Parameter Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_parameters.length}
19
- uint32 :parameter_offset, label: 'Parameter Offset', initial_value: lambda {self.parent.data_block.trans2_parameters.abs_offset}
20
- uint32 :data_count, label: 'Data Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_data.length}
21
- uint32 :data_offset, label: 'Data Offset', initial_value: lambda {self.parent.data_block.trans2_data.abs_offset}
22
- uint8 :setup_count, label: 'Setup Count', initial_value: lambda {setup.length}
17
+ uint32 :parameter_count, label: 'Parameter Count(bytes)', initial_value: -> { parent.data_block.trans2_parameters.length }
18
+ uint32 :parameter_offset, label: 'Parameter Offset', initial_value: -> { parent.data_block.trans2_parameters.abs_offset }
19
+ uint32 :data_count, label: 'Data Count(bytes)', initial_value: -> { parent.data_block.trans2_data.length }
20
+ uint32 :data_offset, label: 'Data Offset', initial_value: -> { parent.data_block.trans2_data.abs_offset }
21
+ uint8 :setup_count, label: 'Setup Count', initial_value: -> { setup.length }
23
22
  uint16 :function, label: 'Function'
24
23
 
25
24
  array :setup, type: :uint16, initial_length: 0
26
25
  end
27
26
 
27
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
28
28
  class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
29
- string :pad1, length: lambda { pad1_length }
29
+ string :pad1, length: -> { pad1_length }
30
30
  string :trans2_parameters, label: 'Trans2 Parameters'
31
- string :pad2, length: lambda { pad2_length }
31
+ string :pad2, length: -> { pad2_length }
32
32
  string :trans2_data, label: 'Trans2 Data'
33
33
  end
34
34
 
@@ -44,4 +44,4 @@ module RubySMB
44
44
  end
45
45
  end
46
46
  end
47
- end
47
+ end
@@ -2,29 +2,29 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module NtTrans
5
-
6
5
  # Class representing a generic NT Transaction response packet as defined in
7
6
  # [2.2.4.62.2 Response](https://msdn.microsoft.com/en-us/library/ee442112.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
- endian :little
10
+ endian :little
12
11
 
13
- array :reserved, type: :uint8, inital_length: 3
12
+ array :reserved, type: :uint8, inital_length: 3
14
13
 
15
14
  uint32 :total_parameter_count, label: 'Total Parameter Count(bytes)'
16
15
  uint32 :total_data_count, label: 'Total Data Count(bytes)'
17
- uint32 :parameter_count, label: 'Parameter Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_parameters.length}
18
- uint32 :parameter_offset, label: 'Parameter Offset', initial_value: lambda {self.parent.data_block.trans2_parameters.abs_offset}
16
+ uint32 :parameter_count, label: 'Parameter Count(bytes)', initial_value: -> { parent.data_block.trans2_parameters.length }
17
+ uint32 :parameter_offset, label: 'Parameter Offset', initial_value: -> { parent.data_block.trans2_parameters.abs_offset }
19
18
  uint32 :parameter_displacement, label: 'Parameter Displacement'
20
- uint32 :data_count, label: 'Data Count(bytes)', initial_value: lambda {self.parent.data_block.trans2_data.length}
21
- uint32 :data_offset, label: 'Data Offset', initial_value: lambda {self.parent.data_block.trans2_data.abs_offset}
19
+ uint32 :data_count, label: 'Data Count(bytes)', initial_value: -> { parent.data_block.trans2_data.length }
20
+ uint32 :data_offset, label: 'Data Offset', initial_value: -> { parent.data_block.trans2_data.abs_offset }
22
21
  uint32 :data_displacement, label: 'Data Displacement'
23
- uint8 :setup_count, label: 'Setup Count', initial_value: lambda {setup.length}
22
+ uint8 :setup_count, label: 'Setup Count', initial_value: -> { setup.length }
24
23
 
25
24
  array :setup, type: :uint16, initial_length: 0
26
25
  end
27
26
 
27
+ # The {RubySMB::SMB1::DataBlock} specific to this packet type.
28
28
  class DataBlock < RubySMB::SMB1::Packet::NtTrans::Request::DataBlock
29
29
  end
30
30
 
@@ -41,4 +41,4 @@ module RubySMB
41
41
  end
42
42
  end
43
43
  end
44
- end
44
+ end
@@ -3,7 +3,14 @@ module RubySMB
3
3
  module Packet
4
4
  module NtTrans
5
5
  module Subcommands
6
- CREATE = 0x0001
6
+ CREATE = 0x0001
7
+ IOCTL = 0x0002
8
+ SET_SECURITY_DESC = 0x0003
9
+ NOTIFY = 0x0004
10
+ RENAME = 0x0005
11
+ QUERY_SECURITY_DESC = 0x0006
12
+ GET_USER_QUOTA = 0x0007
13
+ SET_USER_QUOTA = 0x0008
7
14
  end
8
15
  end
9
16
  end
@@ -0,0 +1,84 @@
1
+ module RubySMB
2
+ module SMB1
3
+ module Packet
4
+ # A SMB1 SMB_COM_READ_ANDX Request Packet as defined in
5
+ # [2.2.4.42.1 Request](https://msdn.microsoft.com/en-us/library/ee441839.aspx)
6
+ # [2.2.4.2.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/ff470250.aspx)
7
+ class ReadAndxRequest < RubySMB::GenericPacket
8
+ # A SMB1 Parameter Block as defined by the {ReadAndxRequest}
9
+ class ParameterBlock < RubySMB::SMB1::ParameterBlock
10
+ endian :little
11
+
12
+ and_x_block :andx_block
13
+ uint16 :fid, label: 'FID'
14
+ uint32 :offset, label: 'Offset'
15
+ uint16 :max_count_of_bytes_to_return, label: 'Max Count of Bytes to Return'
16
+ uint16 :min_count_of_bytes_to_return, label: 'Min Count of Bytes to Return'
17
+
18
+ choice :timeout_or_max_count_high, selection: -> { read_from_named_pipe } do
19
+ struct true do
20
+ uint32 :timeout, label: 'Timeout'
21
+ end
22
+ struct false do
23
+ uint16 :max_count_high, label: 'Max Count High'
24
+ uint16 :reserved, label: 'Reserved'
25
+ end
26
+ end
27
+
28
+ uint16 :remaining, label: 'Remaining', initial_value: 0x0000
29
+ uint32 :offset_high, label: 'Offset High', onlyif: -> { word_count == 0x0C }
30
+
31
+ # Specifies if the file to read is a named pipe or a regular file.
32
+ # @return [TrueClass, FalseClass] true if reading from a named pipe, false otherwise
33
+ attr_accessor :read_from_named_pipe
34
+
35
+ def initialize_instance
36
+ super
37
+ @read_from_named_pipe = false
38
+ end
39
+
40
+ # Bypass the word count calculation to use 32-bit offset by default.
41
+ # As a result, the optional offset_high field won't be defined until
42
+ # #set_64_bit_offset(true) is explicitly called.
43
+ def calculate_word_count
44
+ 0x0A
45
+ end
46
+ private :calculate_word_count
47
+ end
48
+
49
+ # Represents the specific layout of the DataBlock for a {ReadAndxRequest} Packet.
50
+ class DataBlock < RubySMB::SMB1::DataBlock
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_READ_ANDX
60
+ end
61
+
62
+ # Sets the read_from_named_pipe flag to `read_from_named_pipe` value (true or false).
63
+ # When reading from a named pipe, this flag needs to be set to true, which forces
64
+ # the use of Timeout field in Timeout_or_MaxCountHigh. When set to false (default),
65
+ # for regular files, MaxCountHigh field will be used instead.
66
+ #
67
+ # @param read_from_named_pipe [TrueClass, FalseClass] the value the read_from_named_pipe flag is to be set to.
68
+ def set_read_from_named_pipe(read_from_named_pipe)
69
+ raise ArgumentError.new, 'The value can only be true or false' unless [true, false].include?(read_from_named_pipe)
70
+ parameter_block.read_from_named_pipe = read_from_named_pipe
71
+ end
72
+
73
+ # Specifies whether the offset is a 32-bit (default) or 64-bit value. When `is_64_bit`
74
+ # is true, a 64-bit offset will be used and the OffsetHigh field will be added to the structure.
75
+ #
76
+ # @param is_64_bit [TrueClass, FalseClass] use a 64-bit offset if set to true, 32-bit otherwise
77
+ def set_64_bit_offset(is_64_bit)
78
+ raise ArgumentError.new, 'The value can only be true or false' unless [true, false].include?(is_64_bit)
79
+ parameter_block.word_count = is_64_bit ? 0x0C : 0x0A
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,47 @@
1
+ module RubySMB
2
+ module SMB1
3
+ module Packet
4
+ # A SMB1 SMB_COM_READ_ANDX Response Packet as defined in
5
+ # [2.2.4.42.2 Response](https://msdn.microsoft.com/en-us/library/ee441872.aspx)
6
+ # [2.2.4.2.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/ff470017.aspx)
7
+ class ReadAndxResponse < RubySMB::GenericPacket
8
+ # A SMB1 Parameter Block as defined by the {ReadAndxResponse}
9
+ class ParameterBlock < RubySMB::SMB1::ParameterBlock
10
+ endian :little
11
+ and_x_block :andx_block
12
+ uint16 :available, label: 'Available'
13
+ uint16 :data_compaction_mode, label: 'Data Compaction Mode', initial_value: 0x0000
14
+ uint16 :reserved, label: 'Reserved'
15
+ uint16 :data_length, label: 'Data Length'
16
+ uint16 :data_offset, label: 'Data Offset'
17
+ uint16 :data_length_high, label: 'Data Length High'
18
+ uint64 :reserved2, label: 'Reserved'
19
+ end
20
+
21
+ # Represents the specific layout of the DataBlock for a {ReadAndxResponse} Packet.
22
+ class DataBlock < RubySMB::SMB1::DataBlock
23
+ uint8 :pad, label: 'Pad', onlyif: -> { has_padding? }
24
+ string :data, label: 'Data', read_length: -> { parent.parameter_block.data_length }
25
+
26
+ # This method checks if the optional pad field is present in the response.
27
+ def has_padding?
28
+ return false if byte_count.zero?
29
+ return true if byte_count - parent.parameter_block.data_length == 1
30
+ false
31
+ end
32
+ private :has_padding?
33
+ end
34
+
35
+ smb_header :smb_header
36
+ parameter_block :parameter_block
37
+ data_block :data_block
38
+
39
+ def initialize_instance
40
+ super
41
+ smb_header.command = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX
42
+ smb_header.flags.reply = 1
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,11 +1,9 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # A SMB1 SMB_COM_SESSION_SETUP_ANDX Request Packet, without NTLMSSP as defined in
6
5
  # [2.2.4.53.1 Request](https://msdn.microsoft.com/en-us/library/ee441849.aspx)
7
6
  class SessionSetupLegacyRequest < RubySMB::GenericPacket
8
-
9
7
  # A SMB1 Parameter Block as defined by the {SessionSetupRequest}
10
8
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
9
  and_x_block :andx_block
@@ -13,8 +11,8 @@ module RubySMB
13
11
  uint16 :max_mpx_count, label: 'Max Mpx Count'
14
12
  uint16 :vc_number, label: 'VC Number'
15
13
  uint32 :session_key, label: 'Session Key'
16
- uint16 :oem_password_length, label: 'OEM Password Length', initial_value: lambda { self.parent.data_block.oem_password.length }
17
- uint16 :unicode_password_length, label: 'Unicored Password Length', initial_value: lambda { self.parent.data_block.unicode_password.length }
14
+ uint16 :oem_password_length, label: 'OEM Password Length', initial_value: -> { parent.data_block.oem_password.length }
15
+ uint16 :unicode_password_length, label: 'Unicored Password Length', initial_value: -> { parent.data_block.unicode_password.length }
18
16
  uint32 :reserved
19
17
  capabilities :capabilities
20
18
  end
@@ -42,8 +40,6 @@ module RubySMB
42
40
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
43
41
  parameter_block.capabilities.extended_security = 0
44
42
  end
45
-
46
-
47
43
  end
48
44
  end
49
45
  end
@@ -1,11 +1,9 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # A SMB1 SMB_COM_SESSION_SETUP Legacy Response Packet as defined in
6
5
  # [2.2.4.53.2 Response](https://msdn.microsoft.com/en-us/library/ee442143.aspx)
7
6
  class SessionSetupLegacyResponse < 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
@@ -14,7 +12,7 @@ module RubySMB
14
12
 
15
13
  # Represents the specific layout of the DataBlock for a {SessionSetupResponse} Packet.
16
14
  class DataBlock < RubySMB::SMB1::DataBlock
17
- string :pad, label: 'Padding', length: 0
15
+ string :pad, label: 'Padding', length: 0
18
16
  stringz :native_os, label: 'Native OS'
19
17
  stringz :native_lan_man, label: 'Native LAN Manager'
20
18
  stringz :primary_domain, label: 'Primary Domain'
@@ -29,7 +27,6 @@ module RubySMB
29
27
  smb_header.command = RubySMB::SMB1::Commands::SMB_COM_SESSION_SETUP
30
28
  smb_header.flags.reply = 1
31
29
  end
32
-
33
30
  end
34
31
  end
35
32
  end
@@ -1,11 +1,9 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # A SMB1 SMB_COM_SESSION_SETUP_ANDX Request Packet as defined in
6
5
  # [2.2.4.6.1](https://msdn.microsoft.com/en-us/library/cc246328.aspx)
7
6
  class SessionSetupRequest < RubySMB::GenericPacket
8
-
9
7
  # A SMB1 Parameter Block as defined by the {SessionSetupRequest}
10
8
  class ParameterBlock < RubySMB::SMB1::ParameterBlock
11
9
  and_x_block :andx_block
@@ -23,7 +21,7 @@ module RubySMB
23
21
  # for the security blob, you must null-terminate the {native_os} and {native_lan_man} fields
24
22
  # yourself if you set them away from their defaults.
25
23
  class DataBlock < RubySMB::SMB1::DataBlock
26
- string :security_blob, label: 'Security Blob (GSS-API)', length: lambda { self.parent.parameter_block.security_blob_length }
24
+ string :security_blob, label: 'Security Blob (GSS-API)', length: -> { parent.parameter_block.security_blob_length }
27
25
  string :native_os, label: 'Native OS', initial_value: "Windows 7 Ultimate N 7601 Service Pack 1\x00"
28
26
  string :native_lan_man, label: 'Native LAN Manager', initial_value: "Windows 7 Ultimate N 6.1\x00"
29
27
  end
@@ -48,7 +46,6 @@ module RubySMB
48
46
  gss_blob = RubySMB::Gss.gss_type1(type1_message)
49
47
  parameter_block.security_blob_length = gss_blob.length
50
48
  data_block.security_blob = gss_blob
51
-
52
49
  end
53
50
 
54
51
  # Takes an NTLM Type 3 Message and creates the GSS Security Blob
@@ -63,8 +60,6 @@ module RubySMB
63
60
  parameter_block.security_blob_length = gss_blob.length
64
61
  data_block.security_blob = gss_blob
65
62
  end
66
-
67
-
68
63
  end
69
64
  end
70
65
  end
@@ -1,21 +1,19 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # A SMB1 SMB_COM_SESSION_SETUP Response Packet as defined in
6
5
  # [2.2.4.6.2](https://msdn.microsoft.com/en-us/library/cc246329.aspx)
7
6
  class SessionSetupResponse < 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
12
10
  uint16 :action, label: 'Action'
13
- uint16 :security_blob_length, label: 'Security Blob Length'
11
+ uint16 :security_blob_length, label: 'Security Blob Length'
14
12
  end
15
13
 
16
14
  # Represents the specific layout of the DataBlock for a {SessionSetupResponse} Packet.
17
15
  class DataBlock < RubySMB::SMB1::DataBlock
18
- string :security_blob, label: 'Security Blob (GSS-API)', length: lambda { self.parent.parameter_block.security_blob_length }
16
+ string :security_blob, label: 'Security Blob (GSS-API)', length: -> { parent.parameter_block.security_blob_length }
19
17
  stringz :native_os, label: 'Native OS'
20
18
  stringz :native_lan_man, label: 'Native LAN Manager'
21
19
  end
@@ -1,10 +1,10 @@
1
1
  module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
-
5
4
  # Namespace for the Transaction2 sub-protocol documented in
6
5
  # [2.2.4.46 SMB_COM_TRANSACTION2 (0x32)](https://msdn.microsoft.com/en-us/library/ee441652.aspx)
7
6
  module Trans2
7
+ require 'ruby_smb/smb1/packet/trans2/find_information_level'
8
8
  require 'ruby_smb/smb1/packet/trans2/data_block'
9
9
  require 'ruby_smb/smb1/packet/trans2/subcommands'
10
10
  require 'ruby_smb/smb1/packet/trans2/request'
@@ -12,7 +12,13 @@ module RubySMB
12
12
  require 'ruby_smb/smb1/packet/trans2/response'
13
13
  require 'ruby_smb/smb1/packet/trans2/open2_request'
14
14
  require 'ruby_smb/smb1/packet/trans2/open2_response'
15
+ require 'ruby_smb/smb1/packet/trans2/find_first2_request'
16
+ require 'ruby_smb/smb1/packet/trans2/find_first2_response'
17
+ require 'ruby_smb/smb1/packet/trans2/find_next2_request'
18
+ require 'ruby_smb/smb1/packet/trans2/find_next2_response'
19
+ require 'ruby_smb/smb1/packet/trans2/set_file_information_request'
20
+ require 'ruby_smb/smb1/packet/trans2/set_file_information_response'
15
21
  end
16
22
  end
17
23
  end
18
- end
24
+ end
@@ -2,7 +2,6 @@ module RubySMB
2
2
  module SMB1
3
3
  module Packet
4
4
  module Trans2
5
-
6
5
  # Extends the {RubySMB::SMB1::DataBlock} to include padding methods
7
6
  # that all Trans2 DataBlocks will need to handle proper byte alignment.
8
7
  class DataBlock < RubySMB::SMB1::DataBlock
@@ -22,11 +21,11 @@ module RubySMB
22
21
  # #trans2_parameters. It should always force a 4-byte alignment.
23
22
  def pad1_length
24
23
  if enable_padding
25
- if self.respond_to?(:name)
26
- offset = (name.abs_offset + 1) % 4
27
- else
28
- offset = (byte_count.abs_offset + 2) % 4
29
- end
24
+ offset = if respond_to?(:name)
25
+ (name.abs_offset + 1) % 4
26
+ else
27
+ (byte_count.abs_offset + 2) % 4
28
+ end
30
29
  (4 - offset) % 4
31
30
  else
32
31
  0
@@ -47,4 +46,4 @@ module RubySMB
47
46
  end
48
47
  end
49
48
  end
50
- end
49
+ end