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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_smb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -68,20 +68,20 @@ cert_chain:
68
68
  -----END CERTIFICATE-----
69
69
  - |
70
70
  -----BEGIN CERTIFICATE-----
71
- MIIFIzCCBAugAwIBAgIQDX9ZkVJ2eNVTlibR5ALyJTANBgkqhkiG9w0BAQsFADBy
71
+ MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
72
72
  MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
73
73
  d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
74
- SUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MTAxNjAwMDAwMFoXDTIwMTAxOTEyMDAw
74
+ SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
75
75
  MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
76
76
  BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
77
- IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHnKegPAghKuZk4
78
- Gy1jKaZEXbWc4fxioTemv/F1yIYzAjCWP65qjKtyeeFDe4/kJzG9nseF9oa93YBf
79
- 1nyEqxNSZMw/sCAZ87lOl713dRi73uxOoszy2PT5xEB+Q5R6cbzExkWG2zrLdXDr
80
- so0Bd6VHw+IsAoBBkAq5FrZOJQYGn5VY20xw/2DqtCeoW4QDWyqTnbJmwO9tZrfr
81
- 3Le2crfk2eOgafaPNhLon5uuIKCZsk2YkUSNURSS3M7gosMwU9Gg4JTBi7X5+oww
82
- rY43dJT28YklxmNVu8o5kJxW4dqLKJLOIgSXZ63nceT/EaCSg7DcofHNcUzejFwb
83
- M7Zbb2kCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
84
- dQ5YMB0GA1UdDgQWBBR18CAeMsIEU+0pXal/XXw9LCtMADAOBgNVHQ8BAf8EBAMC
77
+ IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNTz4zvAy7h/vQp
78
+ 4dr1txXHlABAagkwYYwTMCtHs5PXsJITx/5SAjx5swuaLfze5kPBNF2YImvFlOXY
79
+ WaB+0PsOnXnaARsDZU683xFlj8izU6IN6VrAHzDLKFBzruJENrOJD/ikbEtbjO/q
80
+ gFbmS9J9v5ohG/pcRSS0t4ZPAwymf8eCp6QsvOKK/Aymp1RhlRaP8N6N5CIpkhz1
81
+ 9p968iCE+DjOXVYxcWE+jE/7uB1dbgrXykNBujMSS3GULOvVEY28n6NCmrPlo23g
82
+ yRjYVJ2Vy14nBqnxDZ/yRIfWRVjWoT9TsAEbe9gY29oDpSCSs4wSmLQd5zGCpZ9h
83
+ r0HDFB8CAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
84
+ dQ5YMB0GA1UdDgQWBBTLBL7DTwumVEKtdCdpHVYMXOFeDzAOBgNVHQ8BAf8EBAMC
85
85
  B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
86
86
  L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
87
87
  L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
@@ -90,14 +90,14 @@ cert_chain:
90
90
  JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
91
91
  AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
92
92
  ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
93
- BQADggEBAFpzR9s7lcYKDzSJucOHztEPj+iSIeCzxEw34NTE9M2AfkYIu82c4r2a
94
- bzIGmzZWiCGufjOp0gF5xW6sSSJ9n0TqH0nhHhvjtZQkmkGtOBbN1zeYDFS2ozAp
95
- sljF/g68Y1eYs3NaFf7kQUa6vb6RdjW3J8M9AQ8gthBt7gr/guVxd/gJUYbdDdBX
96
- cWfJJi/X7GVBOBmmvA43qoKideuhOBrVGBHvIF/yO9p23dIiUrGmW9kxXCSxgute
97
- JI/W23RbIRksG2pioMhd4dCXq3FLLlkOV1YfCwWixNB+iIhQPPZVaPNfgPhCn4Dt
98
- DeGjje/qA4fkLtRmOtb9PUBq3ToRDE4=
93
+ BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
94
+ 37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
95
+ YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
96
+ dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
97
+ EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
98
+ 9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
99
99
  -----END CERTIFICATE-----
100
- date: 2020-06-23 00:00:00.000000000 Z
100
+ date: 2022-01-05 00:00:00.000000000 Z
101
101
  dependencies:
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: redcarpet
@@ -246,10 +246,10 @@ executables: []
246
246
  extensions: []
247
247
  extra_rdoc_files: []
248
248
  files:
249
+ - ".github/workflows/verify.yml"
249
250
  - ".gitignore"
250
251
  - ".rspec"
251
252
  - ".simplecov"
252
- - ".travis.yml"
253
253
  - ".yardopts"
254
254
  - CONTRIBUTING.md
255
255
  - Gemfile
@@ -258,15 +258,20 @@ files:
258
258
  - Rakefile
259
259
  - examples/anonymous_auth.rb
260
260
  - examples/append_file.rb
261
+ - examples/auth_capture.rb
261
262
  - examples/authenticate.rb
262
263
  - examples/delete_file.rb
264
+ - examples/dump_secrets_from_sid.rb
265
+ - examples/enum_domain_users.rb
263
266
  - examples/enum_registry_key.rb
264
267
  - examples/enum_registry_values.rb
268
+ - examples/get_computer_info.rb
265
269
  - examples/list_directory.rb
266
270
  - examples/negotiate.rb
267
271
  - examples/negotiate_with_netbios_service.rb
268
272
  - examples/net_share_enum_all.rb
269
273
  - examples/pipes.rb
274
+ - examples/query_service_status.rb
270
275
  - examples/read_file.rb
271
276
  - examples/read_file_encryption.rb
272
277
  - examples/read_registry_key_value.rb
@@ -279,28 +284,96 @@ files:
279
284
  - lib/ruby_smb/client/echo.rb
280
285
  - lib/ruby_smb/client/encryption.rb
281
286
  - lib/ruby_smb/client/negotiation.rb
282
- - lib/ruby_smb/client/signing.rb
283
287
  - lib/ruby_smb/client/tree_connect.rb
284
288
  - lib/ruby_smb/client/utils.rb
285
289
  - lib/ruby_smb/client/winreg.rb
290
+ - lib/ruby_smb/compression.rb
291
+ - lib/ruby_smb/compression/lznt1.rb
286
292
  - lib/ruby_smb/crypto.rb
287
293
  - lib/ruby_smb/dcerpc.rb
288
294
  - lib/ruby_smb/dcerpc/bind.rb
289
295
  - lib/ruby_smb/dcerpc/bind_ack.rb
296
+ - lib/ruby_smb/dcerpc/client.rb
297
+ - lib/ruby_smb/dcerpc/drsr.rb
298
+ - lib/ruby_smb/dcerpc/drsr/drs_bind_request.rb
299
+ - lib/ruby_smb/dcerpc/drsr/drs_bind_response.rb
300
+ - lib/ruby_smb/dcerpc/drsr/drs_crack_names_request.rb
301
+ - lib/ruby_smb/dcerpc/drsr/drs_crack_names_response.rb
302
+ - lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_request.rb
303
+ - lib/ruby_smb/dcerpc/drsr/drs_domain_controller_info_response.rb
304
+ - lib/ruby_smb/dcerpc/drsr/drs_extensions.rb
305
+ - lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_request.rb
306
+ - lib/ruby_smb/dcerpc/drsr/drs_get_nc_changes_response.rb
307
+ - lib/ruby_smb/dcerpc/drsr/drs_unbind_request.rb
308
+ - lib/ruby_smb/dcerpc/drsr/drs_unbind_response.rb
309
+ - lib/ruby_smb/dcerpc/epm.rb
310
+ - lib/ruby_smb/dcerpc/epm/epm_ept_map_request.rb
311
+ - lib/ruby_smb/dcerpc/epm/epm_ept_map_response.rb
312
+ - lib/ruby_smb/dcerpc/epm/epm_twrt.rb
290
313
  - lib/ruby_smb/dcerpc/error.rb
291
314
  - lib/ruby_smb/dcerpc/ndr.rb
315
+ - lib/ruby_smb/dcerpc/netlogon.rb
316
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request.rb
317
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response.rb
318
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request.rb
319
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response.rb
320
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request.rb
321
+ - lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response.rb
292
322
  - lib/ruby_smb/dcerpc/p_syntax_id_t.rb
293
323
  - lib/ruby_smb/dcerpc/pdu_header.rb
294
324
  - lib/ruby_smb/dcerpc/ptypes.rb
295
325
  - lib/ruby_smb/dcerpc/request.rb
296
326
  - lib/ruby_smb/dcerpc/response.rb
297
- - lib/ruby_smb/dcerpc/rrp_unicode_string.rb
327
+ - lib/ruby_smb/dcerpc/rpc_auth3.rb
328
+ - lib/ruby_smb/dcerpc/rpc_security_attributes.rb
329
+ - lib/ruby_smb/dcerpc/rrp_rpc_unicode_string.rb
330
+ - lib/ruby_smb/dcerpc/samr.rb
331
+ - lib/ruby_smb/dcerpc/samr/rpc_sid.rb
332
+ - lib/ruby_smb/dcerpc/samr/samr_close_handle_request.rb
333
+ - lib/ruby_smb/dcerpc/samr/samr_close_handle_response.rb
334
+ - lib/ruby_smb/dcerpc/samr/samr_connect_request.rb
335
+ - lib/ruby_smb/dcerpc/samr/samr_connect_response.rb
336
+ - lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request.rb
337
+ - lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response.rb
338
+ - lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_request.rb
339
+ - lib/ruby_smb/dcerpc/samr/samr_get_alias_membership_response.rb
340
+ - lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_request.rb
341
+ - lib/ruby_smb/dcerpc/samr/samr_get_groups_for_user_response.rb
342
+ - lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request.rb
343
+ - lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response.rb
344
+ - lib/ruby_smb/dcerpc/samr/samr_open_domain_request.rb
345
+ - lib/ruby_smb/dcerpc/samr/samr_open_domain_response.rb
346
+ - lib/ruby_smb/dcerpc/samr/samr_open_user_request.rb
347
+ - lib/ruby_smb/dcerpc/samr/samr_open_user_response.rb
348
+ - lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request.rb
349
+ - lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response.rb
350
+ - lib/ruby_smb/dcerpc/sec_trailer.rb
298
351
  - lib/ruby_smb/dcerpc/srvsvc.rb
299
352
  - lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb
353
+ - lib/ruby_smb/dcerpc/svcctl.rb
354
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request.rb
355
+ - lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response.rb
356
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_request.rb
357
+ - lib/ruby_smb/dcerpc/svcctl/close_service_handle_response.rb
358
+ - lib/ruby_smb/dcerpc/svcctl/control_service_request.rb
359
+ - lib/ruby_smb/dcerpc/svcctl/control_service_response.rb
360
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request.rb
361
+ - lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response.rb
362
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_request.rb
363
+ - lib/ruby_smb/dcerpc/svcctl/open_service_w_response.rb
364
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request.rb
365
+ - lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response.rb
366
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_request.rb
367
+ - lib/ruby_smb/dcerpc/svcctl/query_service_status_response.rb
368
+ - lib/ruby_smb/dcerpc/svcctl/service_status.rb
369
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_request.rb
370
+ - lib/ruby_smb/dcerpc/svcctl/start_service_w_response.rb
300
371
  - lib/ruby_smb/dcerpc/uuid.rb
301
372
  - lib/ruby_smb/dcerpc/winreg.rb
302
373
  - lib/ruby_smb/dcerpc/winreg/close_key_request.rb
303
374
  - lib/ruby_smb/dcerpc/winreg/close_key_response.rb
375
+ - lib/ruby_smb/dcerpc/winreg/create_key_request.rb
376
+ - lib/ruby_smb/dcerpc/winreg/create_key_response.rb
304
377
  - lib/ruby_smb/dcerpc/winreg/enum_key_request.rb
305
378
  - lib/ruby_smb/dcerpc/winreg/enum_key_response.rb
306
379
  - lib/ruby_smb/dcerpc/winreg/enum_value_request.rb
@@ -314,6 +387,12 @@ files:
314
387
  - lib/ruby_smb/dcerpc/winreg/query_value_request.rb
315
388
  - lib/ruby_smb/dcerpc/winreg/query_value_response.rb
316
389
  - lib/ruby_smb/dcerpc/winreg/regsam.rb
390
+ - lib/ruby_smb/dcerpc/winreg/save_key_request.rb
391
+ - lib/ruby_smb/dcerpc/winreg/save_key_response.rb
392
+ - lib/ruby_smb/dcerpc/wkssvc.rb
393
+ - lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request.rb
394
+ - lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response.rb
395
+ - lib/ruby_smb/dialect.rb
317
396
  - lib/ruby_smb/dispatcher.rb
318
397
  - lib/ruby_smb/dispatcher/base.rb
319
398
  - lib/ruby_smb/dispatcher/socket.rb
@@ -348,12 +427,21 @@ files:
348
427
  - lib/ruby_smb/fscc/file_information/file_rename_information.rb
349
428
  - lib/ruby_smb/generic_packet.rb
350
429
  - lib/ruby_smb/gss.rb
430
+ - lib/ruby_smb/gss/provider.rb
431
+ - lib/ruby_smb/gss/provider/authenticator.rb
432
+ - lib/ruby_smb/gss/provider/ntlm.rb
351
433
  - lib/ruby_smb/impersonation_levels.rb
352
434
  - lib/ruby_smb/nbss.rb
353
435
  - lib/ruby_smb/nbss/negative_session_response.rb
354
436
  - lib/ruby_smb/nbss/netbios_name.rb
355
437
  - lib/ruby_smb/nbss/session_header.rb
356
438
  - lib/ruby_smb/nbss/session_request.rb
439
+ - lib/ruby_smb/ntlm.rb
440
+ - lib/ruby_smb/server.rb
441
+ - lib/ruby_smb/server/server_client.rb
442
+ - lib/ruby_smb/server/server_client/negotiation.rb
443
+ - lib/ruby_smb/server/server_client/session_setup.rb
444
+ - lib/ruby_smb/signing.rb
357
445
  - lib/ruby_smb/smb1.rb
358
446
  - lib/ruby_smb/smb1/andx_block.rb
359
447
  - lib/ruby_smb/smb1/bit_field.rb
@@ -495,20 +583,66 @@ files:
495
583
  - lib/ruby_smb/version.rb
496
584
  - ruby_smb.gemspec
497
585
  - spec/lib/ruby_smb/client_spec.rb
586
+ - spec/lib/ruby_smb/compression/lznt1_spec.rb
498
587
  - spec/lib/ruby_smb/crypto_spec.rb
499
588
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
500
589
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
590
+ - spec/lib/ruby_smb/dcerpc/client_spec.rb
591
+ - spec/lib/ruby_smb/dcerpc/drsr_spec.rb
501
592
  - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
593
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request_spec.rb
594
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response_spec.rb
595
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request_spec.rb
596
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response_spec.rb
597
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request_spec.rb
598
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response_spec.rb
502
599
  - spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb
503
600
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
504
601
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
505
602
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
506
- - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
603
+ - spec/lib/ruby_smb/dcerpc/rpc_auth3_spec.rb
604
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
605
+ - spec/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string_spec.rb
606
+ - spec/lib/ruby_smb/dcerpc/samr/rpc_sid_spec.rb
607
+ - spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_request_spec.rb
608
+ - spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_response_spec.rb
609
+ - spec/lib/ruby_smb/dcerpc/samr/samr_connect_request_spec.rb
610
+ - spec/lib/ruby_smb/dcerpc/samr/samr_connect_response_spec.rb
611
+ - spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request_spec.rb
612
+ - spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response_spec.rb
613
+ - spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request_spec.rb
614
+ - spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response_spec.rb
615
+ - spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_request_spec.rb
616
+ - spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_response_spec.rb
617
+ - spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request_spec.rb
618
+ - spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response_spec.rb
619
+ - spec/lib/ruby_smb/dcerpc/samr_spec.rb
620
+ - spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb
507
621
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
508
622
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
623
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
624
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
625
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
626
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
627
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
628
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
629
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
630
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
631
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
632
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
633
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
634
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
635
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
636
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
637
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
638
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
639
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
640
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
509
641
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
510
642
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
511
643
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
644
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
645
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
512
646
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
513
647
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
514
648
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -522,7 +656,12 @@ files:
522
656
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
523
657
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
524
658
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
659
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
660
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
525
661
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
662
+ - spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request_spec.rb
663
+ - spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response_spec.rb
664
+ - spec/lib/ruby_smb/dcerpc/wkssvc_spec.rb
526
665
  - spec/lib/ruby_smb/dcerpc_spec.rb
527
666
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
528
667
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
@@ -536,6 +675,7 @@ files:
536
675
  - spec/lib/ruby_smb/field/smb_fea_spec.rb
537
676
  - spec/lib/ruby_smb/field/smb_gea_list_spec.rb
538
677
  - spec/lib/ruby_smb/field/smb_gea_spec.rb
678
+ - spec/lib/ruby_smb/field/string16_spec.rb
539
679
  - spec/lib/ruby_smb/field/stringz16_spec.rb
540
680
  - spec/lib/ruby_smb/field/utime_spec.rb
541
681
  - spec/lib/ruby_smb/fscc/ea_info_array_spec.rb
@@ -550,10 +690,16 @@ files:
550
690
  - spec/lib/ruby_smb/fscc/file_information/file_rename_information_spec.rb
551
691
  - spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb
552
692
  - spec/lib/ruby_smb/generic_packet_spec.rb
693
+ - spec/lib/ruby_smb/gss/provider/ntlm/account_spec.rb
694
+ - spec/lib/ruby_smb/gss/provider/ntlm/authenticator_spec.rb
695
+ - spec/lib/ruby_smb/gss/provider/ntlm/os_version_spec.rb
696
+ - spec/lib/ruby_smb/gss/provider/ntlm_spec.rb
553
697
  - spec/lib/ruby_smb/nbss/negative_session_response_spec.rb
554
698
  - spec/lib/ruby_smb/nbss/netbios_name_spec.rb
555
699
  - spec/lib/ruby_smb/nbss/session_header_spec.rb
556
700
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
701
+ - spec/lib/ruby_smb/server/server_client_spec.rb
702
+ - spec/lib/ruby_smb/server_spec.rb
557
703
  - spec/lib/ruby_smb/smb1/andx_block_spec.rb
558
704
  - spec/lib/ruby_smb/smb1/bit_field/capabilities_spec.rb
559
705
  - spec/lib/ruby_smb/smb1/bit_field/create_options_spec.rb
@@ -672,6 +818,7 @@ files:
672
818
  - spec/lib/ruby_smb/smb2/tree_spec.rb
673
819
  - spec/lib/ruby_smb_spec.rb
674
820
  - spec/spec_helper.rb
821
+ - spec/support/bin_helper.rb
675
822
  - spec/support/mock_socket_dispatcher.rb
676
823
  - spec/support/shared/examples/bit_field_single_flag.rb
677
824
  homepage: https://github.com/rapid7/ruby_smb
@@ -700,20 +847,66 @@ specification_version: 4
700
847
  summary: A pure Ruby implementation of the SMB Protocol Family
701
848
  test_files:
702
849
  - spec/lib/ruby_smb/client_spec.rb
850
+ - spec/lib/ruby_smb/compression/lznt1_spec.rb
703
851
  - spec/lib/ruby_smb/crypto_spec.rb
704
852
  - spec/lib/ruby_smb/dcerpc/bind_ack_spec.rb
705
853
  - spec/lib/ruby_smb/dcerpc/bind_spec.rb
854
+ - spec/lib/ruby_smb/dcerpc/client_spec.rb
855
+ - spec/lib/ruby_smb/dcerpc/drsr_spec.rb
706
856
  - spec/lib/ruby_smb/dcerpc/ndr_spec.rb
857
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_request_spec.rb
858
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_authenticate3_response_spec.rb
859
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_request_spec.rb
860
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_password_set2_response_spec.rb
861
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_request_spec.rb
862
+ - spec/lib/ruby_smb/dcerpc/netlogon/netr_server_req_challenge_response_spec.rb
707
863
  - spec/lib/ruby_smb/dcerpc/p_syntax_id_t_spec.rb
708
864
  - spec/lib/ruby_smb/dcerpc/pdu_header_spec.rb
709
865
  - spec/lib/ruby_smb/dcerpc/request_spec.rb
710
866
  - spec/lib/ruby_smb/dcerpc/response_spec.rb
711
- - spec/lib/ruby_smb/dcerpc/rrp_unicode_string_spec.rb
867
+ - spec/lib/ruby_smb/dcerpc/rpc_auth3_spec.rb
868
+ - spec/lib/ruby_smb/dcerpc/rpc_security_attributes_spec.rb
869
+ - spec/lib/ruby_smb/dcerpc/rrp_rpc_unicode_string_spec.rb
870
+ - spec/lib/ruby_smb/dcerpc/samr/rpc_sid_spec.rb
871
+ - spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_request_spec.rb
872
+ - spec/lib/ruby_smb/dcerpc/samr/samr_close_handle_response_spec.rb
873
+ - spec/lib/ruby_smb/dcerpc/samr/samr_connect_request_spec.rb
874
+ - spec/lib/ruby_smb/dcerpc/samr/samr_connect_response_spec.rb
875
+ - spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_request_spec.rb
876
+ - spec/lib/ruby_smb/dcerpc/samr/samr_enumerate_users_in_domain_response_spec.rb
877
+ - spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_request_spec.rb
878
+ - spec/lib/ruby_smb/dcerpc/samr/samr_lookup_domain_in_sam_server_response_spec.rb
879
+ - spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_request_spec.rb
880
+ - spec/lib/ruby_smb/dcerpc/samr/samr_open_domain_response_spec.rb
881
+ - spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_request_spec.rb
882
+ - spec/lib/ruby_smb/dcerpc/samr/samr_rid_to_sid_response_spec.rb
883
+ - spec/lib/ruby_smb/dcerpc/samr_spec.rb
884
+ - spec/lib/ruby_smb/dcerpc/sec_trailer_spec.rb
712
885
  - spec/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all_spec.rb
713
886
  - spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb
887
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_request_spec.rb
888
+ - spec/lib/ruby_smb/dcerpc/svcctl/change_service_config_w_response_spec.rb
889
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_request_spec.rb
890
+ - spec/lib/ruby_smb/dcerpc/svcctl/close_service_handle_response_spec.rb
891
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_request_spec.rb
892
+ - spec/lib/ruby_smb/dcerpc/svcctl/control_service_response_spec.rb
893
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_request_spec.rb
894
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_sc_manager_w_response_spec.rb
895
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_request_spec.rb
896
+ - spec/lib/ruby_smb/dcerpc/svcctl/open_service_w_response_spec.rb
897
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_request_spec.rb
898
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_config_w_response_spec.rb
899
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_request_spec.rb
900
+ - spec/lib/ruby_smb/dcerpc/svcctl/query_service_status_response_spec.rb
901
+ - spec/lib/ruby_smb/dcerpc/svcctl/service_status_spec.rb
902
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_request_spec.rb
903
+ - spec/lib/ruby_smb/dcerpc/svcctl/start_service_w_response_spec.rb
904
+ - spec/lib/ruby_smb/dcerpc/svcctl_spec.rb
714
905
  - spec/lib/ruby_smb/dcerpc/uuid_spec.rb
715
906
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_request_spec.rb
716
907
  - spec/lib/ruby_smb/dcerpc/winreg/close_key_response_spec.rb
908
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_request_spec.rb
909
+ - spec/lib/ruby_smb/dcerpc/winreg/create_key_response_spec.rb
717
910
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_request_spec.rb
718
911
  - spec/lib/ruby_smb/dcerpc/winreg/enum_key_response_spec.rb
719
912
  - spec/lib/ruby_smb/dcerpc/winreg/enum_value_request_spec.rb
@@ -727,7 +920,12 @@ test_files:
727
920
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_request_spec.rb
728
921
  - spec/lib/ruby_smb/dcerpc/winreg/query_value_response_spec.rb
729
922
  - spec/lib/ruby_smb/dcerpc/winreg/regsam_spec.rb
923
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_request_spec.rb
924
+ - spec/lib/ruby_smb/dcerpc/winreg/save_key_response_spec.rb
730
925
  - spec/lib/ruby_smb/dcerpc/winreg_spec.rb
926
+ - spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_request_spec.rb
927
+ - spec/lib/ruby_smb/dcerpc/wkssvc/netr_wksta_get_info_response_spec.rb
928
+ - spec/lib/ruby_smb/dcerpc/wkssvc_spec.rb
731
929
  - spec/lib/ruby_smb/dcerpc_spec.rb
732
930
  - spec/lib/ruby_smb/dispatcher/base_spec.rb
733
931
  - spec/lib/ruby_smb/dispatcher/socket_spec.rb
@@ -741,6 +939,7 @@ test_files:
741
939
  - spec/lib/ruby_smb/field/smb_fea_spec.rb
742
940
  - spec/lib/ruby_smb/field/smb_gea_list_spec.rb
743
941
  - spec/lib/ruby_smb/field/smb_gea_spec.rb
942
+ - spec/lib/ruby_smb/field/string16_spec.rb
744
943
  - spec/lib/ruby_smb/field/stringz16_spec.rb
745
944
  - spec/lib/ruby_smb/field/utime_spec.rb
746
945
  - spec/lib/ruby_smb/fscc/ea_info_array_spec.rb
@@ -755,10 +954,16 @@ test_files:
755
954
  - spec/lib/ruby_smb/fscc/file_information/file_rename_information_spec.rb
756
955
  - spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb
757
956
  - spec/lib/ruby_smb/generic_packet_spec.rb
957
+ - spec/lib/ruby_smb/gss/provider/ntlm/account_spec.rb
958
+ - spec/lib/ruby_smb/gss/provider/ntlm/authenticator_spec.rb
959
+ - spec/lib/ruby_smb/gss/provider/ntlm/os_version_spec.rb
960
+ - spec/lib/ruby_smb/gss/provider/ntlm_spec.rb
758
961
  - spec/lib/ruby_smb/nbss/negative_session_response_spec.rb
759
962
  - spec/lib/ruby_smb/nbss/netbios_name_spec.rb
760
963
  - spec/lib/ruby_smb/nbss/session_header_spec.rb
761
964
  - spec/lib/ruby_smb/nbss/session_request_spec.rb
965
+ - spec/lib/ruby_smb/server/server_client_spec.rb
966
+ - spec/lib/ruby_smb/server_spec.rb
762
967
  - spec/lib/ruby_smb/smb1/andx_block_spec.rb
763
968
  - spec/lib/ruby_smb/smb1/bit_field/capabilities_spec.rb
764
969
  - spec/lib/ruby_smb/smb1/bit_field/create_options_spec.rb
@@ -877,5 +1082,6 @@ test_files:
877
1082
  - spec/lib/ruby_smb/smb2/tree_spec.rb
878
1083
  - spec/lib/ruby_smb_spec.rb
879
1084
  - spec/spec_helper.rb
1085
+ - spec/support/bin_helper.rb
880
1086
  - spec/support/mock_socket_dispatcher.rb
881
1087
  - spec/support/shared/examples/bit_field_single_flag.rb
metadata.gz.sig CHANGED
Binary file
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- rvm:
4
- - '2.5.8'
5
- - '2.6.6'
6
- - '2.7.0'
@@ -1,64 +0,0 @@
1
- module RubySMB
2
- class Client
3
- # Contains the methods for handling packet signing
4
- module Signing
5
- # The NTLM Session Key used for signing
6
- # @!attribute [rw] session_key
7
- # @return [String]
8
- attr_accessor :session_key
9
-
10
- # Take an SMB1 packet and checks to see if it should be signed.
11
- # If signing is enabled and we have a session key already, then
12
- # it will sign the packet appropriately.
13
- #
14
- # @param packet [RubySMB::GenericPacket] the packet to sign
15
- # @return [RubySMB::GenericPacket] the packet, signed if needed
16
- def smb1_sign(packet)
17
- if signing_required && !session_key.empty?
18
- # Pack the Sequence counter into a int64le
19
- packed_sequence_counter = [sequence_counter].pack('Q<')
20
- packet.smb_header.security_features = packed_sequence_counter
21
- signature = OpenSSL::Digest::MD5.digest(session_key + packet.to_binary_s)[0, 8]
22
- packet.smb_header.security_features = signature
23
- self.sequence_counter += 1
24
- end
25
- packet
26
- end
27
-
28
- # Take an SMB2 packet and checks to see if it should be signed.
29
- # If signing is enabled and we have a session key already, then
30
- # it will sign the packet appropriately.
31
- #
32
- # @param packet [RubySMB::GenericPacket] the packet to sign
33
- # @return [RubySMB::GenericPacket] the packet, signed if needed
34
- def smb2_sign(packet)
35
- if signing_required && !session_key.empty?
36
- packet.smb2_header.flags.signed = 1
37
- packet.smb2_header.signature = "\x00" * 16
38
- hmac = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, session_key, packet.to_binary_s)
39
- packet.smb2_header.signature = hmac[0, 16]
40
- end
41
- packet
42
- end
43
-
44
- def smb3_sign(packet)
45
- if !session_key.empty? && (signing_required || packet.is_a?(RubySMB::SMB2::Packet::TreeConnectRequest))
46
- case @dialect
47
- when '0x0300', '0x0302'
48
- signing_key = RubySMB::Crypto::KDF.counter_mode(@session_key, "SMB2AESCMAC\x00", "SmbSign\x00")
49
- when '0x0311'
50
- signing_key = RubySMB::Crypto::KDF.counter_mode(@session_key, "SMBSigningKey\x00", @preauth_integrity_hash_value)
51
- else
52
- raise RubySMB::Error::SigningError.new('Dialect is incompatible with SMBv3 signing')
53
- end
54
-
55
- packet.smb2_header.flags.signed = 1
56
- packet.smb2_header.signature = "\x00" * 16
57
- hmac = OpenSSL::CMAC.digest('AES', signing_key, packet.to_binary_s)
58
- packet.smb2_header.signature = hmac[0, 16]
59
- end
60
- packet
61
- end
62
- end
63
- end
64
- end
@@ -1,35 +0,0 @@
1
- require 'ruby_smb/dcerpc/ndr'
2
-
3
- module RubySMB
4
- module Dcerpc
5
-
6
- # A RRP_UNICODE_STRING structure as defined in
7
- # [2.2.4 RRP_UNICODE_STRING](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rrp/c0c90f11-a4c4-496a-ac09-8a8a3697ceef)
8
- class RrpUnicodeString < BinData::Primitive
9
- endian :little
10
-
11
- uint16 :buffer_length, initial_value: -> { buffer.to_s == "\0" ? 0 : buffer.actual_count * 2 }
12
- uint16 :maximum_length, initial_value: -> { buffer.to_s == "\0" ? 0 : buffer.max_count * 2 }
13
- ndr_lp_str :buffer
14
-
15
- def get
16
- self.buffer
17
- end
18
-
19
- def set(buf)
20
- self.buffer = buf
21
- self.buffer_length = self.buffer.to_s == "\0" ? 0 : self.buffer.actual_count * 2
22
- self.maximum_length = self.buffer.to_s == "\0" ? 0 : self.buffer.max_count * 2
23
- end
24
- end
25
-
26
- # A pointer to a RRP_UNICODE_STRING structure
27
- class PrrpUnicodeString < Ndr::NdrTopLevelFullPointer
28
- endian :little
29
-
30
- rrp_unicode_string :referent, onlyif: -> { !is_a_null_pointer? }
31
- end
32
-
33
- end
34
- end
35
-
@@ -1,98 +0,0 @@
1
- RSpec.describe RubySMB::Dcerpc::RrpUnicodeString do
2
- subject(:packet) { described_class.new }
3
-
4
- it { is_expected.to respond_to :buffer_length }
5
- it { is_expected.to respond_to :maximum_length }
6
- it { is_expected.to respond_to :buffer }
7
-
8
- it 'is little endian' do
9
- expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
10
- end
11
-
12
- describe '#buffer_length' do
13
- it 'should be a 16-bit unsigned integer' do
14
- expect(packet.buffer_length).to be_a BinData::Uint16le
15
- end
16
-
17
- it 'is set to 0 when #buffer in empty' do
18
- expect(packet.buffer_length).to eq(0)
19
- end
20
- end
21
-
22
- describe '#maximum_length' do
23
- it 'should be a 16-bit unsigned integer' do
24
- expect(packet.maximum_length).to be_a BinData::Uint16le
25
- end
26
- end
27
-
28
- describe '#buffer' do
29
- it 'should be a NdrLpStr' do
30
- expect(packet.buffer).to be_a RubySMB::Dcerpc::Ndr::NdrLpStr
31
- end
32
- end
33
-
34
- describe '#get' do
35
- it 'returns #buffer' do
36
- packet.buffer = 'spec_test'
37
- expect(packet.get).to eq(RubySMB::Dcerpc::Ndr::NdrLpStr.new('spec_test'))
38
- end
39
- end
40
-
41
- describe '#set' do
42
- it 'sets #buffer to the expected value' do
43
- packet.set('spec_test')
44
- expect(packet.buffer).to eq(RubySMB::Dcerpc::Ndr::NdrLpStr.new('spec_test'))
45
- end
46
-
47
- it 'sets #buffer_length to the expected value' do
48
- packet.set('spec_test')
49
- expect(packet.buffer_length).to eq(('spec_test'.size + 1) * 2)
50
- end
51
-
52
- it 'sets #maximum_length to the expected value' do
53
- packet.set('spec_test')
54
- expect(packet.maximum_length).to eq(('spec_test'.size + 1) * 2)
55
- end
56
-
57
- context 'when the value is 0' do
58
- it 'sets #buffer_length to 0' do
59
- packet.set(0)
60
- expect(packet.buffer_length).to eq(0)
61
- end
62
-
63
- it 'sets #maximum_length to 0' do
64
- packet.set(0)
65
- expect(packet.maximum_length).to eq(0)
66
- end
67
- end
68
- end
69
- end
70
-
71
- RSpec.describe RubySMB::Dcerpc::PrrpUnicodeString do
72
- it 'is NdrTopLevelFullPointer subclass' do
73
- expect(described_class).to be < RubySMB::Dcerpc::Ndr::NdrTopLevelFullPointer
74
- end
75
-
76
- subject(:packet) { described_class.new }
77
-
78
- it { is_expected.to respond_to :referent }
79
-
80
- it 'is little endian' do
81
- expect(described_class.fields.instance_variable_get(:@hints)[:endian]).to eq :little
82
- end
83
-
84
- describe '#referent' do
85
- it 'is a RrpUnicodeString' do
86
- expect(packet.referent).to be_a RubySMB::Dcerpc::RrpUnicodeString
87
- end
88
-
89
- it 'exists if superclass #referent_identifier is not zero' do
90
- expect(packet.referent?).to be true
91
- end
92
-
93
- it 'does not exist if superclass #referent_identifier is zero' do
94
- packet.referent_identifier = 0
95
- expect(packet.referent?).to be false
96
- end
97
- end
98
- end