ruby_smb 2.0.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/verify.yml +46 -0
  4. data/README.md +0 -1
  5. data/examples/anonymous_auth.rb +3 -3
  6. data/examples/append_file.rb +10 -8
  7. data/examples/auth_capture.rb +71 -0
  8. data/examples/authenticate.rb +9 -5
  9. data/examples/delete_file.rb +8 -6
  10. data/examples/dump_secrets_from_sid.rb +207 -0
  11. data/examples/enum_domain_users.rb +75 -0
  12. data/examples/enum_registry_key.rb +5 -4
  13. data/examples/enum_registry_values.rb +5 -4
  14. data/examples/get_computer_info.rb +42 -0
  15. data/examples/list_directory.rb +8 -6
  16. data/examples/negotiate_with_netbios_service.rb +9 -5
  17. data/examples/net_share_enum_all.rb +6 -4
  18. data/examples/pipes.rb +11 -12
  19. data/examples/query_service_status.rb +102 -0
  20. data/examples/read_file.rb +8 -6
  21. data/examples/read_registry_key_value.rb +6 -5
  22. data/examples/rename_file.rb +9 -7
  23. data/examples/tree_connect.rb +7 -5
  24. data/examples/write_file.rb +9 -7
  25. data/lib/ruby_smb/client/authentication.rb +5 -10
  26. data/lib/ruby_smb/client/echo.rb +2 -4
  27. data/lib/ruby_smb/client/negotiation.rb +13 -16
  28. data/lib/ruby_smb/client/tree_connect.rb +2 -4
  29. data/lib/ruby_smb/client/utils.rb +16 -10
  30. data/lib/ruby_smb/client/winreg.rb +1 -1
  31. data/lib/ruby_smb/client.rb +102 -75
  32. data/lib/ruby_smb/compression/lznt1.rb +164 -0
  33. data/lib/ruby_smb/compression.rb +7 -0
  34. data/lib/ruby_smb/dcerpc/bind.rb +28 -20
  35. data/lib/ruby_smb/dcerpc/bind_ack.rb +29 -28
  36. data/lib/ruby_smb/dcerpc/client.rb +542 -0
  37. data/lib/ruby_smb/dcerpc/drsr/drs_bind_request.rb +24 -0
  38. data/lib/ruby_smb/dcerpc/drsr/drs_bind_response.rb +26 -0
  39. data/lib/ruby_smb/dcerpc/drsr/drs_crack_names_request.rb +57 -0
  40. data/lib/ruby_smb/dcerpc/drsr/drs_crack_names_response.rb +76 -0
  41. data/lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_request.rb +46 -0
  42. data/lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_response.rb +168 -0
  43. data/lib/ruby_smb/dcerpc/drsr/drs_extensions.rb +56 -0
  44. data/lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_request.rb +121 -0
  45. data/lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_response.rb +118 -0
  46. data/lib/ruby_smb/dcerpc/drsr/drs_unbind_request.rb +24 -0
  47. data/lib/ruby_smb/dcerpc/drsr/drs_unbind_response.rb +26 -0
  48. data/lib/ruby_smb/dcerpc/drsr.rb +909 -0
  49. data/lib/ruby_smb/dcerpc/epm/epm_ept_map_request.rb +26 -0
  50. data/lib/ruby_smb/dcerpc/epm/epm_ept_map_response.rb +25 -0
  51. data/lib/ruby_smb/dcerpc/epm/epm_twrt.rb +211 -0
  52. data/lib/ruby_smb/dcerpc/epm.rb +75 -0
  53. data/lib/ruby_smb/dcerpc/error.rb +20 -0
  54. data/lib/ruby_smb/dcerpc/ndr.rb +1204 -80
  55. data/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request.rb +27 -0
  56. data/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response.rb +26 -0
  57. data/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request.rb +27 -0
  58. data/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response.rb +23 -0
  59. data/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request.rb +24 -0
  60. data/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response.rb +24 -0
  61. data/lib/ruby_smb/dcerpc/netlogon.rb +102 -0
  62. data/lib/ruby_smb/dcerpc/p_syntax_id_t.rb +4 -3
  63. data/lib/ruby_smb/dcerpc/pdu_header.rb +7 -7
  64. data/lib/ruby_smb/dcerpc/ptypes.rb +1 -0
  65. data/lib/ruby_smb/dcerpc/request.rb +85 -19
  66. data/lib/ruby_smb/dcerpc/response.rb +45 -10
  67. data/lib/ruby_smb/dcerpc/rpc_auth3.rb +28 -0
  68. data/lib/ruby_smb/dcerpc/rpc_security_attributes.rb +34 -0
  69. data/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string.rb +118 -0
  70. data/lib/ruby_smb/dcerpc/samr/rpc_sid.rb +150 -0
  71. data/lib/ruby_smb/dcerpc/samr/samr_close_handle_request.rb +23 -0
  72. data/lib/ruby_smb/dcerpc/samr/samr_close_handle_response.rb +24 -0
  73. data/lib/ruby_smb/dcerpc/samr/samr_connect_request.rb +32 -0
  74. data/lib/ruby_smb/dcerpc/samr/samr_connect_response.rb +23 -0
  75. data/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request.rb +26 -0
  76. data/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response.rb +55 -0
  77. data/lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_request.rb +48 -0
  78. data/lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_response.rb +38 -0
  79. data/lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_request.rb +23 -0
  80. data/lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_response.rb +48 -0
  81. data/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request.rb +24 -0
  82. data/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response.rb +25 -0
  83. data/lib/ruby_smb/dcerpc/samr/samr_open_domain_request.rb +27 -0
  84. data/lib/ruby_smb/dcerpc/samr/samr_open_domain_response.rb +24 -0
  85. data/lib/ruby_smb/dcerpc/samr/samr_open_user_request.rb +26 -0
  86. data/lib/ruby_smb/dcerpc/samr/samr_open_user_response.rb +24 -0
  87. data/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request.rb +23 -0
  88. data/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response.rb +23 -0
  89. data/lib/ruby_smb/dcerpc/samr.rb +613 -0
  90. data/lib/ruby_smb/dcerpc/sec_trailer.rb +26 -0
  91. data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +56 -79
  92. data/lib/ruby_smb/dcerpc/srvsvc.rb +27 -4
  93. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb +36 -0
  94. data/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb +26 -0
  95. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb +25 -0
  96. data/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb +26 -0
  97. data/lib/ruby_smb/dcerpc/svcctl/control_service_request.rb +26 -0
  98. data/lib/ruby_smb/dcerpc/svcctl/control_service_response.rb +26 -0
  99. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb +25 -0
  100. data/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb +23 -0
  101. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb +23 -0
  102. data/lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb +23 -0
  103. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb +25 -0
  104. data/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb +45 -0
  105. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb +23 -0
  106. data/lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb +27 -0
  107. data/lib/ruby_smb/dcerpc/svcctl/service_status.rb +26 -0
  108. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb +27 -0
  109. data/lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb +25 -0
  110. data/lib/ruby_smb/dcerpc/svcctl.rb +477 -0
  111. data/lib/ruby_smb/dcerpc/uuid.rb +3 -0
  112. data/lib/ruby_smb/dcerpc/winreg/close_key_response.rb +2 -2
  113. data/lib/ruby_smb/dcerpc/winreg/create_key_request.rb +62 -0
  114. data/lib/ruby_smb/dcerpc/winreg/create_key_response.rb +36 -0
  115. data/lib/ruby_smb/dcerpc/winreg/enum_key_request.rb +2 -19
  116. data/lib/ruby_smb/dcerpc/winreg/enum_key_response.rb +3 -20
  117. data/lib/ruby_smb/dcerpc/winreg/enum_value_request.rb +5 -14
  118. data/lib/ruby_smb/dcerpc/winreg/enum_value_response.rb +5 -14
  119. data/lib/ruby_smb/dcerpc/winreg/open_key_request.rb +1 -9
  120. data/lib/ruby_smb/dcerpc/winreg/open_key_response.rb +4 -3
  121. data/lib/ruby_smb/dcerpc/winreg/open_root_key_request.rb +6 -7
  122. data/lib/ruby_smb/dcerpc/winreg/open_root_key_response.rb +2 -2
  123. data/lib/ruby_smb/dcerpc/winreg/query_info_key_request.rb +1 -1
  124. data/lib/ruby_smb/dcerpc/winreg/query_info_key_response.rb +9 -18
  125. data/lib/ruby_smb/dcerpc/winreg/query_value_request.rb +4 -13
  126. data/lib/ruby_smb/dcerpc/winreg/query_value_response.rb +7 -15
  127. data/lib/ruby_smb/dcerpc/winreg/regsam.rb +3 -1
  128. data/lib/ruby_smb/dcerpc/winreg/save_key_request.rb +28 -0
  129. data/lib/ruby_smb/dcerpc/winreg/save_key_response.rb +23 -0
  130. data/lib/ruby_smb/dcerpc/winreg.rb +99 -22
  131. data/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request.rb +26 -0
  132. data/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response.rb +88 -0
  133. data/lib/ruby_smb/dcerpc/wkssvc.rb +65 -0
  134. data/lib/ruby_smb/dcerpc.rb +45 -11
  135. data/lib/ruby_smb/dialect.rb +45 -0
  136. data/lib/ruby_smb/dispatcher/base.rb +1 -1
  137. data/lib/ruby_smb/dispatcher/socket.rb +2 -2
  138. data/lib/ruby_smb/error.rb +21 -5
  139. data/lib/ruby_smb/field/file_time.rb +1 -1
  140. data/lib/ruby_smb/field/string16.rb +5 -1
  141. data/lib/ruby_smb/field/stringz16.rb +17 -1
  142. data/lib/ruby_smb/generic_packet.rb +11 -1
  143. data/lib/ruby_smb/gss/provider/authenticator.rb +42 -0
  144. data/lib/ruby_smb/gss/provider/ntlm.rb +303 -0
  145. data/lib/ruby_smb/gss/provider.rb +35 -0
  146. data/lib/ruby_smb/gss.rb +56 -63
  147. data/lib/ruby_smb/nbss/session_header.rb +4 -4
  148. data/lib/ruby_smb/ntlm.rb +61 -0
  149. data/lib/ruby_smb/server/server_client/negotiation.rb +156 -0
  150. data/lib/ruby_smb/server/server_client/session_setup.rb +82 -0
  151. data/lib/ruby_smb/server/server_client.rb +162 -0
  152. data/lib/ruby_smb/server.rb +54 -0
  153. data/lib/ruby_smb/signing.rb +59 -0
  154. data/lib/ruby_smb/smb1/file.rb +10 -25
  155. data/lib/ruby_smb/smb1/packet/negotiate_response.rb +11 -11
  156. data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +1 -1
  157. data/lib/ruby_smb/smb1/packet/session_setup_request.rb +1 -1
  158. data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +0 -1
  159. data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +0 -1
  160. data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +1 -2
  161. data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +1 -13
  162. data/lib/ruby_smb/smb1/pipe.rb +12 -6
  163. data/lib/ruby_smb/smb1/tree.rb +13 -9
  164. data/lib/ruby_smb/smb2/file.rb +33 -33
  165. data/lib/ruby_smb/smb2/negotiate_context.rb +18 -2
  166. data/lib/ruby_smb/smb2/packet/compression_transform_header.rb +4 -0
  167. data/lib/ruby_smb/smb2/packet/negotiate_request.rb +9 -0
  168. data/lib/ruby_smb/smb2/packet/negotiate_response.rb +0 -1
  169. data/lib/ruby_smb/smb2/packet/session_setup_response.rb +2 -2
  170. data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +1 -1
  171. data/lib/ruby_smb/smb2/pipe.rb +13 -6
  172. data/lib/ruby_smb/smb2/tree.rb +21 -11
  173. data/lib/ruby_smb/smb2.rb +3 -1
  174. data/lib/ruby_smb/version.rb +1 -1
  175. data/lib/ruby_smb.rb +5 -3
  176. data/spec/lib/ruby_smb/client_spec.rb +199 -86
  177. data/spec/lib/ruby_smb/compression/lznt1_spec.rb +32 -0
  178. data/spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb +69 -41
  179. data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +75 -21
  180. data/spec/lib/ruby_smb/dcerpc/client_spec.rb +714 -0
  181. data/spec/lib/ruby_smb/dcerpc/drsr_spec.rb +2169 -0
  182. data/spec/lib/ruby_smb/dcerpc/ndr_spec.rb +3977 -239
  183. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request_spec.rb +69 -0
  184. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response_spec.rb +53 -0
  185. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request_spec.rb +69 -0
  186. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response_spec.rb +37 -0
  187. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request_spec.rb +45 -0
  188. data/spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response_spec.rb +37 -0
  189. data/spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb +18 -4
  190. data/spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb +27 -1
  191. data/spec/lib/ruby_smb/dcerpc/request_spec.rb +76 -11
  192. data/spec/lib/ruby_smb/dcerpc/response_spec.rb +99 -9
  193. data/spec/lib/ruby_smb/dcerpc/rpc_auth3_spec.rb +75 -0
  194. data/spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb +162 -0
  195. data/spec/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string_spec.rb +340 -0
  196. data/spec/lib/ruby_smb/dcerpc/samr/rpc_sid_spec.rb +116 -0
  197. data/spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_request_spec.rb +40 -0
  198. data/spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_response_spec.rb +48 -0
  199. data/spec/lib/ruby_smb/dcerpc/samr/samr_connect_request_spec.rb +56 -0
  200. data/spec/lib/ruby_smb/dcerpc/samr/samr_connect_response_spec.rb +47 -0
  201. data/spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request_spec.rb +63 -0
  202. data/spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response_spec.rb +265 -0
  203. data/spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request_spec.rb +52 -0
  204. data/spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response_spec.rb +36 -0
  205. data/spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_request_spec.rb +56 -0
  206. data/spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_response_spec.rb +48 -0
  207. data/spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request_spec.rb +48 -0
  208. data/spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response_spec.rb +42 -0
  209. data/spec/lib/ruby_smb/dcerpc/samr_spec.rb +420 -0
  210. data/spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb +92 -0
  211. data/spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb +149 -110
  212. data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +21 -17
  213. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb +168 -0
  214. data/spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb +38 -0
  215. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb +30 -0
  216. data/spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb +38 -0
  217. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb +39 -0
  218. data/spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb +38 -0
  219. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb +68 -0
  220. data/spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb +38 -0
  221. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb +53 -0
  222. data/spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb +38 -0
  223. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb +38 -0
  224. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb +152 -0
  225. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb +30 -0
  226. data/spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb +38 -0
  227. data/spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb +76 -0
  228. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb +47 -0
  229. data/spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb +30 -0
  230. data/spec/lib/ruby_smb/dcerpc/svcctl_spec.rb +508 -0
  231. data/spec/lib/ruby_smb/dcerpc/uuid_spec.rb +15 -23
  232. data/spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb +2 -2
  233. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb +73 -0
  234. data/spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb +44 -0
  235. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb +4 -56
  236. data/spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb +4 -56
  237. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb +10 -34
  238. data/spec/lib/ruby_smb/dcerpc/winreg/enum_value_response_spec.rb +10 -34
  239. data/spec/lib/ruby_smb/dcerpc/winreg/open_key_request_spec.rb +2 -26
  240. data/spec/lib/ruby_smb/dcerpc/winreg/open_key_response_spec.rb +2 -2
  241. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_request_spec.rb +17 -20
  242. data/spec/lib/ruby_smb/dcerpc/winreg/open_root_key_response_spec.rb +2 -2
  243. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_request_spec.rb +0 -4
  244. data/spec/lib/ruby_smb/dcerpc/winreg/query_info_key_response_spec.rb +20 -44
  245. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb +8 -32
  246. data/spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb +18 -42
  247. data/spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb +4 -0
  248. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb +45 -0
  249. data/spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb +22 -0
  250. data/spec/lib/ruby_smb/dcerpc/winreg_spec.rb +219 -62
  251. data/spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request_spec.rb +43 -0
  252. data/spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response_spec.rb +410 -0
  253. data/spec/lib/ruby_smb/dcerpc/wkssvc_spec.rb +70 -0
  254. data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +10 -10
  255. data/spec/lib/ruby_smb/error_spec.rb +34 -5
  256. data/spec/lib/ruby_smb/field/string16_spec.rb +22 -0
  257. data/spec/lib/ruby_smb/field/stringz16_spec.rb +12 -0
  258. data/spec/lib/ruby_smb/generic_packet_spec.rb +7 -0
  259. data/spec/lib/ruby_smb/gss/provider/ntlm/account_spec.rb +32 -0
  260. data/spec/lib/ruby_smb/gss/provider/ntlm/authenticator_spec.rb +101 -0
  261. data/spec/lib/ruby_smb/gss/provider/ntlm/os_version_spec.rb +32 -0
  262. data/spec/lib/ruby_smb/gss/provider/ntlm_spec.rb +113 -0
  263. data/spec/lib/ruby_smb/nbss/session_header_spec.rb +4 -11
  264. data/spec/lib/ruby_smb/server/server_client_spec.rb +156 -0
  265. data/spec/lib/ruby_smb/server_spec.rb +32 -0
  266. data/spec/lib/ruby_smb/smb1/file_spec.rb +2 -4
  267. data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +0 -1
  268. data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +0 -1
  269. data/spec/lib/ruby_smb/smb1/packet/trans2/open2_response_spec.rb +0 -5
  270. data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb +0 -6
  271. data/spec/lib/ruby_smb/smb1/pipe_spec.rb +20 -14
  272. data/spec/lib/ruby_smb/smb1/tree_spec.rb +22 -0
  273. data/spec/lib/ruby_smb/smb2/file_spec.rb +61 -9
  274. data/spec/lib/ruby_smb/smb2/negotiate_context_spec.rb +2 -2
  275. data/spec/lib/ruby_smb/smb2/pipe_spec.rb +20 -14
  276. data/spec/lib/ruby_smb/smb2/tree_spec.rb +58 -1
  277. data/spec/spec_helper.rb +1 -1
  278. data/spec/support/bin_helper.rb +9 -0
  279. data.tar.gz.sig +0 -0
  280. metadata +229 -23
  281. metadata.gz.sig +0 -0
  282. data/.travis.yml +0 -6
  283. data/lib/ruby_smb/client/signing.rb +0 -64
  284. data/lib/ruby_smb/dcerpc/rrp_unicode_string.rb +0 -35
  285. data/spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb +0 -98
@@ -0,0 +1,73 @@
1
+ RSpec.describe RubySMB::Dcerpc::Winreg::RpcHkey do
2
+ subject(:packet) { described_class.new }
3
+
4
+ it 'is NdrContextHandle subclass' do
5
+ expect(described_class).to be < RubySMB::Dcerpc::Ndr::NdrContextHandle
6
+ end
7
+ end
8
+
9
+ RSpec.describe RubySMB::Dcerpc::Winreg::CreateKeyRequest do
10
+ subject(:packet) { described_class.new }
11
+
12
+
13
+ it 'is little endian' do
14
+ expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
15
+ end
16
+
17
+ it { is_expected.to respond_to :hkey }
18
+ it { is_expected.to respond_to :lp_sub_key }
19
+ it { is_expected.to respond_to :lp_class }
20
+ it { is_expected.to respond_to :dw_options }
21
+ it { is_expected.to respond_to :sam_desired }
22
+ it { is_expected.to respond_to :lp_security_attributes }
23
+ it { is_expected.to respond_to :lpdw_disposition }
24
+
25
+ describe '#hkey' do
26
+ it 'is a RpcHkey structure' do
27
+ expect(packet.hkey).to be_a RubySMB::Dcerpc::Winreg::RpcHkey
28
+ end
29
+ end
30
+
31
+ describe '#lp_sub_key' do
32
+ it 'is a RrpUnicodeString structure' do
33
+ expect(packet.lp_sub_key).to be_a RubySMB::Dcerpc::RrpUnicodeString
34
+ end
35
+ end
36
+
37
+ describe '#lp_class' do
38
+ it 'is a RrpUnicodeString structure' do
39
+ expect(packet.lp_class).to be_a RubySMB::Dcerpc::RrpUnicodeString
40
+ end
41
+ end
42
+
43
+ describe '#dw_options' do
44
+ it 'is a NdrUint32' do
45
+ expect(packet.dw_options).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
46
+ end
47
+ end
48
+
49
+ describe '#sam_desired' do
50
+ it 'is a Regsam structure' do
51
+ expect(packet.sam_desired).to be_a RubySMB::Dcerpc::Winreg::Regsam
52
+ end
53
+ end
54
+
55
+ describe '#lp_security_attributes' do
56
+ it 'is a PrpcSecurityAttributes structure' do
57
+ expect(packet.lp_security_attributes).to be_a RubySMB::Dcerpc::PrpcSecurityAttributes
58
+ end
59
+ end
60
+
61
+ describe '#lpdw_disposition' do
62
+ it 'is a NdrUint32Ptr structure' do
63
+ expect(packet.lpdw_disposition).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
64
+ end
65
+ end
66
+
67
+ describe '#initialize_instance' do
68
+ it 'sets #opnum to REG_CREATE_KEY constant' do
69
+ expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_CREATE_KEY)
70
+ end
71
+ end
72
+ end
73
+
@@ -0,0 +1,44 @@
1
+ RSpec.describe RubySMB::Dcerpc::Winreg::PrpcHkey do
2
+ subject(:packet) { described_class.new }
3
+
4
+ it 'is NdrContextHandle subclass' do
5
+ expect(described_class).to be < RubySMB::Dcerpc::Ndr::NdrContextHandle
6
+ end
7
+ end
8
+
9
+ RSpec.describe RubySMB::Dcerpc::Winreg::CreateKeyResponse do
10
+ subject(:packet) { described_class.new }
11
+
12
+ it { is_expected.to respond_to :hkey }
13
+ it { is_expected.to respond_to :lpdw_disposition }
14
+ it { is_expected.to respond_to :error_status }
15
+
16
+ it 'is little endian' do
17
+ expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
18
+ end
19
+
20
+ describe '#hkey' do
21
+ it 'is a PrpcHkey structure' do
22
+ expect(packet.hkey).to be_a RubySMB::Dcerpc::Winreg::PrpcHkey
23
+ end
24
+ end
25
+
26
+ describe '#lpdw_disposition' do
27
+ it 'is a Ndr::NdrUint32Ptr structure' do
28
+ expect(packet.lpdw_disposition).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
29
+ end
30
+ end
31
+
32
+ describe '#error_status' do
33
+ it 'is a NdrUint32' do
34
+ expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
35
+ end
36
+ end
37
+
38
+ describe '#initialize_instance' do
39
+ it 'sets #opnum to REG_CREATE_KEY constant' do
40
+ expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_CREATE_KEY)
41
+ end
42
+ end
43
+ end
44
+
@@ -10,9 +10,7 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyRequest do
10
10
  it { is_expected.to respond_to :hkey }
11
11
  it { is_expected.to respond_to :dw_index }
12
12
  it { is_expected.to respond_to :lp_name }
13
- it { is_expected.to respond_to :pad1 }
14
13
  it { is_expected.to respond_to :lp_class }
15
- it { is_expected.to respond_to :pad2 }
16
14
  it { is_expected.to respond_to :lpft_last_write_time }
17
15
  it { is_expected.to respond_to :opnum }
18
16
 
@@ -27,8 +25,8 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyRequest do
27
25
  end
28
26
 
29
27
  describe '#dw_index' do
30
- it 'is a 32-bit unsigned integer' do
31
- expect(packet.dw_index).to be_a BinData::Uint32le
28
+ it 'is a NdrUint32' do
29
+ expect(packet.dw_index).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
32
30
  end
33
31
  end
34
32
 
@@ -38,41 +36,15 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyRequest do
38
36
  end
39
37
  end
40
38
 
41
- describe '#pad1' do
42
- it 'is a string' do
43
- expect(packet.pad1).to be_a BinData::String
44
- end
45
-
46
- it 'should keep #lp_class 4-byte aligned' do
47
- packet.lp_name = "test"
48
- expect(packet.lp_class.abs_offset % 4).to eq 0
49
- end
50
- end
51
-
52
39
  describe '#lp_class' do
53
40
  it 'is a PrrpUnicodeString structure' do
54
41
  expect(packet.lp_class).to be_a RubySMB::Dcerpc::PrrpUnicodeString
55
42
  end
56
-
57
- it 'has a initial value of 0' do
58
- expect(packet.lp_class).to eq(0)
59
- end
60
- end
61
-
62
- describe '#pad2' do
63
- it 'is a string' do
64
- expect(packet.pad2).to be_a BinData::String
65
- end
66
-
67
- it 'should keep #lpft_last_write_time 4-byte aligned' do
68
- packet.lp_class = "test"
69
- expect(packet.lpft_last_write_time.abs_offset % 4).to eq 0
70
- end
71
43
  end
72
44
 
73
45
  describe '#lpft_last_write_time' do
74
- it 'is a NdrLpFileTime structure' do
75
- expect(packet.lpft_last_write_time).to be_a RubySMB::Dcerpc::Ndr::NdrLpFileTime
46
+ it 'is a NdrFileTimePtr structure' do
47
+ expect(packet.lpft_last_write_time).to be_a RubySMB::Dcerpc::Ndr::NdrFileTimePtr
76
48
  end
77
49
  end
78
50
 
@@ -81,28 +53,4 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyRequest do
81
53
  expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_ENUM_KEY)
82
54
  end
83
55
  end
84
-
85
- describe '#pad_length1' do
86
- it 'returns 0 when #lp_class is already 4-byte aligned' do
87
- packet.lp_name = 'align'
88
- expect(packet.pad_length1).to eq 0
89
- end
90
-
91
- it 'returns 2 when #lp_class is only 2-byte aligned' do
92
- packet.lp_name = 'align' + 'A'
93
- expect(packet.pad_length1).to eq 2
94
- end
95
- end
96
-
97
- describe '#pad_length2' do
98
- it 'returns 0 when #lpft_last_write_time is already 4-byte aligned' do
99
- packet.lp_class = 'align'
100
- expect(packet.pad_length2).to eq 0
101
- end
102
-
103
- it 'returns 2 when #lpft_last_write_time is only 2-byte aligned' do
104
- packet.lp_class = 'align' + 'A'
105
- expect(packet.pad_length2).to eq 2
106
- end
107
- end
108
56
  end
@@ -2,9 +2,7 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyResponse do
2
2
  subject(:packet) { described_class.new }
3
3
 
4
4
  it { is_expected.to respond_to :lp_name }
5
- it { is_expected.to respond_to :pad1 }
6
5
  it { is_expected.to respond_to :lp_class }
7
- it { is_expected.to respond_to :pad2 }
8
6
  it { is_expected.to respond_to :lpft_last_write_time }
9
7
  it { is_expected.to respond_to :error_status }
10
8
  it { is_expected.to respond_to :opnum }
@@ -20,47 +18,21 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyResponse do
20
18
  end
21
19
  end
22
20
 
23
- describe '#pad1' do
24
- it 'is a string' do
25
- expect(packet.pad1).to be_a BinData::String
26
- end
27
-
28
- it 'should keep #lp_class 4-byte aligned' do
29
- packet.lp_name = "test"
30
- expect(packet.lp_class.abs_offset % 4).to eq 0
31
- end
32
- end
33
-
34
21
  describe '#lp_class' do
35
22
  it 'is a PrrpUnicodeString structure' do
36
23
  expect(packet.lp_class).to be_a RubySMB::Dcerpc::PrrpUnicodeString
37
24
  end
38
-
39
- it 'has a initial value of 0' do
40
- expect(packet.lp_class).to eq(0)
41
- end
42
- end
43
-
44
- describe '#pad2' do
45
- it 'is a string' do
46
- expect(packet.pad2).to be_a BinData::String
47
- end
48
-
49
- it 'should keep #lpft_last_write_time 4-byte aligned' do
50
- packet.lp_class = "test"
51
- expect(packet.lpft_last_write_time.abs_offset % 4).to eq 0
52
- end
53
25
  end
54
26
 
55
27
  describe '#lpft_last_write_time' do
56
- it 'is a NdrLpFileTime structure' do
57
- expect(packet.lpft_last_write_time).to be_a RubySMB::Dcerpc::Ndr::NdrLpFileTime
28
+ it 'is a NdrFileTimePtr structure' do
29
+ expect(packet.lpft_last_write_time).to be_a RubySMB::Dcerpc::Ndr::NdrFileTimePtr
58
30
  end
59
31
  end
60
32
 
61
33
  describe '#error_status' do
62
- it 'is a 32-bit unsigned integer' do
63
- expect(packet.error_status).to be_a BinData::Uint32le
34
+ it 'is a NdrUint32' do
35
+ expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
64
36
  end
65
37
  end
66
38
 
@@ -69,29 +41,5 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumKeyResponse do
69
41
  expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_ENUM_KEY)
70
42
  end
71
43
  end
72
-
73
- describe '#pad_length1' do
74
- it 'returns 0 when #lp_class is already 4-byte aligned' do
75
- packet.lp_name = 'align'
76
- expect(packet.pad_length1).to eq 0
77
- end
78
-
79
- it 'returns 2 when #lp_class is only 2-byte aligned' do
80
- packet.lp_name = 'align' + 'A'
81
- expect(packet.pad_length1).to eq 2
82
- end
83
- end
84
-
85
- describe '#pad_length2' do
86
- it 'returns 0 when #lpft_last_write_time is already 4-byte aligned' do
87
- packet.lp_class = 'align'
88
- expect(packet.pad_length2).to eq 0
89
- end
90
-
91
- it 'returns 2 when #lpft_last_write_time is only 2-byte aligned' do
92
- packet.lp_class = 'align' + 'A'
93
- expect(packet.pad_length2).to eq 2
94
- end
95
- end
96
44
  end
97
45
 
@@ -10,7 +10,6 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueRequest do
10
10
  it { is_expected.to respond_to :hkey }
11
11
  it { is_expected.to respond_to :dw_index }
12
12
  it { is_expected.to respond_to :lp_value_name }
13
- it { is_expected.to respond_to :pad }
14
13
  it { is_expected.to respond_to :lp_type }
15
14
  it { is_expected.to respond_to :lp_data }
16
15
  it { is_expected.to respond_to :lpcb_data }
@@ -28,8 +27,8 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueRequest do
28
27
  end
29
28
 
30
29
  describe '#dw_index' do
31
- it 'is a 32-bit unsigned integer' do
32
- expect(packet.dw_index).to be_a BinData::Uint32le
30
+ it 'is a NdrUint32' do
31
+ expect(packet.dw_index).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
33
32
  end
34
33
  end
35
34
 
@@ -39,38 +38,27 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueRequest do
39
38
  end
40
39
  end
41
40
 
42
- describe '#pad' do
43
- it 'is a string' do
44
- expect(packet.pad).to be_a BinData::String
45
- end
46
-
47
- it 'should keep #lp_type 4-byte aligned' do
48
- packet.lp_value_name = "test"
49
- expect(packet.lp_type.abs_offset % 4).to eq 0
50
- end
51
- end
52
-
53
41
  describe '#lp_type' do
54
- it 'is a NdrLpDword structure' do
55
- expect(packet.lp_type).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
42
+ it 'is a NdrUint32Ptr structure' do
43
+ expect(packet.lp_type).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
56
44
  end
57
45
  end
58
46
 
59
47
  describe '#lp_data' do
60
- it 'is a NdrLpByte structure' do
61
- expect(packet.lp_data).to be_a RubySMB::Dcerpc::Ndr::NdrLpByte
48
+ it 'is a NdrByteArrayPtr structure' do
49
+ expect(packet.lp_data).to be_a RubySMB::Dcerpc::Ndr::NdrByteArrayPtr
62
50
  end
63
51
  end
64
52
 
65
53
  describe '#lpcb_data' do
66
- it 'is a NdrLpDword structure' do
67
- expect(packet.lpcb_data).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
54
+ it 'is a NdrUint32Ptr structure' do
55
+ expect(packet.lpcb_data).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
68
56
  end
69
57
  end
70
58
 
71
59
  describe '#lpcb_len' do
72
- it 'is a NdrLpDword structure' do
73
- expect(packet.lpcb_len).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
60
+ it 'is a NdrUint32Ptr structure' do
61
+ expect(packet.lpcb_len).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
74
62
  end
75
63
  end
76
64
 
@@ -79,16 +67,4 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueRequest do
79
67
  expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_ENUM_VALUE)
80
68
  end
81
69
  end
82
-
83
- describe '#pad_length' do
84
- it 'returns 0 when #lp_class is already 4-byte aligned' do
85
- packet.lp_value_name = 'align'
86
- expect(packet.pad_length).to eq 0
87
- end
88
-
89
- it 'returns 2 when #lp_class is only 2-byte aligned' do
90
- packet.lp_value_name = 'align' + 'A'
91
- expect(packet.pad_length).to eq 2
92
- end
93
- end
94
70
  end
@@ -2,7 +2,6 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueResponse do
2
2
  subject(:packet) { described_class.new }
3
3
 
4
4
  it { is_expected.to respond_to :lp_value_name }
5
- it { is_expected.to respond_to :pad }
6
5
  it { is_expected.to respond_to :lp_type }
7
6
  it { is_expected.to respond_to :lp_data }
8
7
  it { is_expected.to respond_to :lpcb_data }
@@ -20,44 +19,33 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueResponse do
20
19
  end
21
20
  end
22
21
 
23
- describe '#pad' do
24
- it 'is a string' do
25
- expect(packet.pad).to be_a BinData::String
26
- end
27
-
28
- it 'should keep #lp_type 4-byte aligned' do
29
- packet.lp_value_name = "test"
30
- expect(packet.lp_type.abs_offset % 4).to eq 0
31
- end
32
- end
33
-
34
22
  describe '#lp_type' do
35
- it 'is a NdrLpDword structure' do
36
- expect(packet.lp_type).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
23
+ it 'is a NdrUint32Ptr structure' do
24
+ expect(packet.lp_type).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
37
25
  end
38
26
  end
39
27
 
40
28
  describe '#lp_data' do
41
- it 'is a NdrLpByte structure' do
42
- expect(packet.lp_data).to be_a RubySMB::Dcerpc::Ndr::NdrLpByte
29
+ it 'is a NdrByteArrayPtr structure' do
30
+ expect(packet.lp_data).to be_a RubySMB::Dcerpc::Ndr::NdrByteArrayPtr
43
31
  end
44
32
  end
45
33
 
46
34
  describe '#lpcb_data' do
47
- it 'is a NdrLpDword structure' do
48
- expect(packet.lpcb_data).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
35
+ it 'is a NdrUint32Ptr structure' do
36
+ expect(packet.lpcb_data).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
49
37
  end
50
38
  end
51
39
 
52
40
  describe '#lpcb_len' do
53
- it 'is a NdrLpDword structure' do
54
- expect(packet.lpcb_len).to be_a RubySMB::Dcerpc::Ndr::NdrLpDword
41
+ it 'is a NdrUint32Ptr structure' do
42
+ expect(packet.lpcb_len).to be_a RubySMB::Dcerpc::Ndr::NdrUint32Ptr
55
43
  end
56
44
  end
57
45
 
58
46
  describe '#error_status' do
59
- it 'is a 32-bit unsigned integer' do
60
- expect(packet.error_status).to be_a BinData::Uint32le
47
+ it 'is a NdrUint32' do
48
+ expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
61
49
  end
62
50
  end
63
51
 
@@ -66,17 +54,5 @@ RSpec.describe RubySMB::Dcerpc::Winreg::EnumValueResponse do
66
54
  expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_ENUM_VALUE)
67
55
  end
68
56
  end
69
-
70
- describe '#pad_length' do
71
- it 'returns 0 when #lp_class is already 4-byte aligned' do
72
- packet.lp_value_name = 'align'
73
- expect(packet.pad_length).to eq 0
74
- end
75
-
76
- it 'returns 2 when #lp_class is only 2-byte aligned' do
77
- packet.lp_value_name = 'align' + 'A'
78
- expect(packet.pad_length).to eq 2
79
- end
80
- end
81
57
  end
82
58
 
@@ -9,7 +9,6 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenKeyRequest do
9
9
 
10
10
  it { is_expected.to respond_to :hkey }
11
11
  it { is_expected.to respond_to :lp_sub_key }
12
- it { is_expected.to respond_to :pad }
13
12
  it { is_expected.to respond_to :dw_options }
14
13
  it { is_expected.to respond_to :sam_desired }
15
14
  it { is_expected.to respond_to :opnum }
@@ -30,20 +29,9 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenKeyRequest do
30
29
  end
31
30
  end
32
31
 
33
- describe '#pad' do
34
- it 'is a string' do
35
- expect(packet.pad).to be_a BinData::String
36
- end
37
-
38
- it 'should keep #dw_options 4-byte aligned' do
39
- packet.lp_sub_key = "test"
40
- expect(packet.dw_options.abs_offset % 4).to eq 0
41
- end
42
- end
43
-
44
32
  describe '#dw_options' do
45
- it 'is a 32-bit unsigned integer' do
46
- expect(packet.dw_options).to be_a BinData::Uint32le
33
+ it 'is a NdrUint32' do
34
+ expect(packet.dw_options).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
47
35
  end
48
36
  end
49
37
 
@@ -58,17 +46,5 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenKeyRequest do
58
46
  expect(packet.opnum).to eq(RubySMB::Dcerpc::Winreg::REG_OPEN_KEY)
59
47
  end
60
48
  end
61
-
62
- describe '#pad_length' do
63
- it 'returns 0 when #dw_options is already 4-byte aligned' do
64
- packet.lp_sub_key = 'align'
65
- expect(packet.pad_length).to eq 0
66
- end
67
-
68
- it 'returns 2 when #dw_options is only 2-byte aligned' do
69
- packet.lp_sub_key = 'align' + 'A'
70
- expect(packet.pad_length).to eq 2
71
- end
72
- end
73
49
  end
74
50
 
@@ -22,8 +22,8 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenKeyResponse do
22
22
  end
23
23
 
24
24
  describe '#error_status' do
25
- it 'is a 32-bit unsigned integer' do
26
- expect(packet.error_status).to be_a BinData::Uint32le
25
+ it 'is a NdrUint32' do
26
+ expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
27
27
  end
28
28
  end
29
29
 
@@ -1,33 +1,30 @@
1
1
  RSpec.describe RubySMB::Dcerpc::Winreg::PRegistryServerName do
2
- it 'is NdrTopLevelFullPointer subclass' do
3
- expect(described_class).to be < RubySMB::Dcerpc::Ndr::NdrTopLevelFullPointer
2
+ it 'is BinData::Array subclass' do
3
+ expect(described_class).to be < BinData::Array
4
+ end
5
+
6
+ it 'is a RubySMB::Dcerpc::Ndr::PointerClassPlugin class' do
7
+ expect(described_class).to be_a(RubySMB::Dcerpc::Ndr::PointerClassPlugin)
4
8
  end
5
9
 
6
10
  subject(:packet) { described_class.new }
7
11
 
8
- it { is_expected.to respond_to :referent }
12
+ it { is_expected.to respond_to :ref_id }
9
13
 
10
- it 'is little endian' do
11
- expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
14
+ it 'is an array of UTF-16LE strings' do
15
+ expect(packet[0]).to be_a RubySMB::Field::String16
12
16
  end
13
17
 
14
- describe '#referent' do
15
- it 'is a string in UTF-16LE' do
16
- expect(packet.referent).to be_a RubySMB::Field::String16
17
- end
18
-
19
- it 'reads 4-bytes' do
20
- str = 'spec_test'.encode('utf-16le')
21
- packet.referent.read(str)
22
- expect(packet.referent.to_binary_s.bytes).to eq(str.bytes[0,4])
23
- end
18
+ it 'is :null if #ref_id is 0' do
19
+ packet.ref_id = 0
20
+ expect(packet).to eq(:null)
24
21
  end
25
22
  end
26
23
 
27
24
  RSpec.describe RubySMB::Dcerpc::Winreg::OpenRootKeyRequest do
28
25
  subject(:packet) { described_class.new }
29
26
 
30
- it { is_expected.to respond_to :p_registry_server_name }
27
+ it { is_expected.to respond_to :server_name }
31
28
  it { is_expected.to respond_to :sam_desired }
32
29
  it { is_expected.to respond_to :opnum }
33
30
 
@@ -35,9 +32,9 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenRootKeyRequest do
35
32
  expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
36
33
  end
37
34
 
38
- describe '#p_registry_server_name' do
35
+ describe '#server_name' do
39
36
  it 'is a PRegistryServerName structure' do
40
- expect(packet.p_registry_server_name).to be_a RubySMB::Dcerpc::Winreg::PRegistryServerName
37
+ expect(packet.server_name).to be_a RubySMB::Dcerpc::Winreg::PRegistryServerName
41
38
  end
42
39
  end
43
40
 
@@ -55,8 +52,8 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenRootKeyRequest do
55
52
  end
56
53
  end
57
54
 
58
- it 'sets #p_registry_server_name.referent to NULL unicode value' do
59
- expect(packet.p_registry_server_name.referent).to eq("\0\0".encode('utf-16le'))
55
+ it 'sets #server_name.referent to :null' do
56
+ expect(packet.server_name).to eq(:null)
60
57
  end
61
58
 
62
59
  context 'when #opnum is not OPEN_HKPD, OPEN_HKPT or OPEN_HKPN' do
@@ -22,8 +22,8 @@ RSpec.describe RubySMB::Dcerpc::Winreg::OpenRootKeyResponse do
22
22
  end
23
23
 
24
24
  describe '#error_status' do
25
- it 'is a 32-bit unsigned integer' do
26
- expect(packet.error_status).to be_a BinData::Uint32le
25
+ it 'is a NdrUint32' do
26
+ expect(packet.error_status).to be_a RubySMB::Dcerpc::Ndr::NdrUint32
27
27
  end
28
28
  end
29
29
 
@@ -25,10 +25,6 @@ RSpec.describe RubySMB::Dcerpc::Winreg::QueryInfoKeyRequest do
25
25
  it 'is a RrpUnicodeString structure' do
26
26
  expect(packet.lp_class).to be_a RubySMB::Dcerpc::RrpUnicodeString
27
27
  end
28
-
29
- it 'has an initial value of 0' do
30
- expect(packet.lp_class).to eq(0)
31
- end
32
28
  end
33
29
 
34
30
  describe '#initialize_instance' do