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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +247 -7
- data/examples/anonymous_auth.rb +6 -3
- data/examples/append_file.rb +40 -0
- data/examples/authenticate.rb +12 -7
- data/examples/delete_file.rb +40 -0
- data/examples/list_directory.rb +45 -0
- data/examples/negotiate.rb +0 -1
- data/examples/negotiate_with_netbios_service.rb +36 -0
- data/examples/net_share_enum_all.rb +30 -0
- data/examples/read_file.rb +39 -0
- data/examples/rename_file.rb +41 -0
- data/examples/tree_connect.rb +2 -4
- data/examples/write_file.rb +40 -0
- data/lib/ruby_smb.rb +5 -0
- data/lib/ruby_smb/client.rb +196 -43
- data/lib/ruby_smb/client/authentication.rb +89 -48
- data/lib/ruby_smb/client/echo.rb +1 -4
- data/lib/ruby_smb/client/negotiation.rb +46 -45
- data/lib/ruby_smb/client/signing.rb +9 -16
- data/lib/ruby_smb/client/tree_connect.rb +8 -13
- data/lib/ruby_smb/client/utils.rb +79 -0
- data/lib/ruby_smb/dcerpc.rb +30 -0
- data/lib/ruby_smb/dcerpc/bind.rb +60 -0
- data/lib/ruby_smb/dcerpc/handle.rb +60 -0
- data/lib/ruby_smb/dcerpc/ndr.rb +41 -0
- data/lib/ruby_smb/dcerpc/request.rb +43 -0
- data/lib/ruby_smb/dcerpc/response.rb +46 -0
- data/lib/ruby_smb/dcerpc/srvsvc.rb +17 -0
- data/lib/ruby_smb/dcerpc/srvsvc/net_share_enum_all.rb +93 -0
- data/lib/ruby_smb/dcerpc/uuid.rb +28 -0
- data/lib/ruby_smb/dispatcher.rb +7 -3
- data/lib/ruby_smb/dispatcher/base.rb +23 -14
- data/lib/ruby_smb/dispatcher/socket.rb +71 -51
- data/lib/ruby_smb/dispositions.rb +32 -0
- data/lib/ruby_smb/error.rb +24 -18
- data/lib/ruby_smb/field.rb +5 -2
- data/lib/ruby_smb/field/extended_attribute_flag.rb +1 -1
- data/lib/ruby_smb/field/file_time.rb +3 -1
- data/lib/ruby_smb/field/security_descriptor.rb +6 -6
- data/lib/ruby_smb/field/smb2_fileid.rb +11 -0
- data/lib/ruby_smb/field/smb_fea.rb +3 -3
- data/lib/ruby_smb/field/smb_fea_list.rb +3 -3
- data/lib/ruby_smb/field/smb_gea.rb +12 -0
- data/lib/ruby_smb/field/smb_gea_list.rb +13 -0
- data/lib/ruby_smb/field/string16.rb +14 -0
- data/lib/ruby_smb/field/stringz16.rb +3 -7
- data/lib/ruby_smb/field/utime.rb +11 -10
- data/lib/ruby_smb/fscc.rb +12 -0
- data/lib/ruby_smb/fscc/control_codes.rb +26 -0
- data/lib/ruby_smb/{field → fscc}/ea_info_array.rb +12 -14
- data/lib/ruby_smb/fscc/file_attributes.rb +29 -0
- data/lib/ruby_smb/{field → fscc}/file_full_ea_info.rb +5 -5
- data/lib/ruby_smb/fscc/file_information.rb +60 -0
- data/lib/ruby_smb/fscc/file_information/file_both_directory_information.rb +29 -0
- data/lib/ruby_smb/fscc/file_information/file_directory_information.rb +25 -0
- data/lib/ruby_smb/fscc/file_information/file_disposition_information.rb +15 -0
- data/lib/ruby_smb/fscc/file_information/file_full_directory_information.rb +26 -0
- data/lib/ruby_smb/fscc/file_information/file_id_both_directory_information.rb +31 -0
- data/lib/ruby_smb/fscc/file_information/file_id_full_directory_information.rb +28 -0
- data/lib/ruby_smb/fscc/file_information/file_names_information.rb +18 -0
- data/lib/ruby_smb/fscc/file_information/file_rename_information.rb +44 -0
- data/lib/ruby_smb/generic_packet.rb +40 -18
- data/lib/ruby_smb/gss.rb +49 -56
- data/lib/ruby_smb/impersonation_levels.rb +7 -2
- data/lib/ruby_smb/nbss.rb +16 -0
- data/lib/ruby_smb/nbss/negative_session_response.rb +30 -0
- data/lib/ruby_smb/nbss/session_header.rb +13 -0
- data/lib/ruby_smb/nbss/session_request.rb +13 -0
- data/lib/ruby_smb/smb1.rb +20 -17
- data/lib/ruby_smb/smb1/bit_field.rb +3 -0
- data/lib/ruby_smb/smb1/bit_field/create_options.rb +5 -5
- data/lib/ruby_smb/smb1/bit_field/file_status_flags.rb +18 -0
- data/lib/ruby_smb/smb1/bit_field/open2_access_mode.rb +11 -11
- data/lib/ruby_smb/smb1/bit_field/open2_open_mode.rb +1 -1
- data/lib/ruby_smb/smb1/bit_field/optional_support.rb +0 -1
- data/lib/ruby_smb/smb1/bit_field/security_flags.rb +15 -0
- data/lib/ruby_smb/smb1/bit_field/share_access.rb +2 -3
- data/lib/ruby_smb/smb1/bit_field/smb_ext_file_attributes.rb +21 -24
- data/lib/ruby_smb/smb1/bit_field/smb_file_attributes.rb +1 -1
- data/lib/ruby_smb/smb1/commands.rb +5 -0
- data/lib/ruby_smb/smb1/create_actions.rb +3 -5
- data/lib/ruby_smb/smb1/file.rb +289 -0
- data/lib/ruby_smb/smb1/oplock_levels.rb +2 -4
- data/lib/ruby_smb/smb1/packet.rb +10 -0
- data/lib/ruby_smb/smb1/packet/close_request.rb +31 -0
- data/lib/ruby_smb/smb1/packet/close_response.rb +28 -0
- data/lib/ruby_smb/smb1/packet/echo_request.rb +5 -7
- data/lib/ruby_smb/smb1/packet/echo_response.rb +5 -7
- data/lib/ruby_smb/smb1/packet/empty_packet.rb +1 -2
- data/lib/ruby_smb/smb1/packet/logoff_request.rb +1 -4
- data/lib/ruby_smb/smb1/packet/logoff_response.rb +1 -4
- data/lib/ruby_smb/smb1/packet/negotiate_response.rb +22 -0
- data/lib/ruby_smb/smb1/packet/negotiate_response_extended.rb +22 -0
- data/lib/ruby_smb/smb1/packet/nt_create_andx_request.rb +62 -0
- data/lib/ruby_smb/smb1/packet/nt_create_andx_response.rb +66 -0
- data/lib/ruby_smb/smb1/packet/nt_trans.rb +1 -2
- data/lib/ruby_smb/smb1/packet/nt_trans/create_request.rb +19 -13
- data/lib/ruby_smb/smb1/packet/nt_trans/create_response.rb +8 -10
- data/lib/ruby_smb/smb1/packet/nt_trans/request.rb +11 -11
- data/lib/ruby_smb/smb1/packet/nt_trans/response.rb +10 -10
- data/lib/ruby_smb/smb1/packet/nt_trans/subcommands.rb +8 -1
- data/lib/ruby_smb/smb1/packet/read_andx_request.rb +84 -0
- data/lib/ruby_smb/smb1/packet/read_andx_response.rb +47 -0
- data/lib/ruby_smb/smb1/packet/session_setup_legacy_request.rb +2 -6
- data/lib/ruby_smb/smb1/packet/session_setup_legacy_response.rb +1 -4
- data/lib/ruby_smb/smb1/packet/session_setup_request.rb +1 -6
- data/lib/ruby_smb/smb1/packet/session_setup_response.rb +2 -4
- data/lib/ruby_smb/smb1/packet/trans2.rb +8 -2
- data/lib/ruby_smb/smb1/packet/trans2/data_block.rb +6 -7
- data/lib/ruby_smb/smb1/packet/trans2/find_first2_request.rb +77 -0
- data/lib/ruby_smb/smb1/packet/trans2/find_first2_response.rb +87 -0
- data/lib/ruby_smb/smb1/packet/trans2/find_information_level.rb +32 -0
- data/lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_full_directory_info.rb +45 -0
- data/lib/ruby_smb/smb1/packet/trans2/find_next2_request.rb +77 -0
- data/lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb +86 -0
- data/lib/ruby_smb/smb1/packet/trans2/open2_request.rb +10 -10
- data/lib/ruby_smb/smb1/packet/trans2/open2_response.rb +10 -12
- data/lib/ruby_smb/smb1/packet/trans2/request.rb +15 -17
- data/lib/ruby_smb/smb1/packet/trans2/request_secondary.rb +8 -10
- data/lib/ruby_smb/smb1/packet/trans2/response.rb +11 -13
- data/lib/ruby_smb/smb1/packet/trans2/set_file_information_request.rb +66 -0
- data/lib/ruby_smb/smb1/packet/trans2/set_file_information_response.rb +57 -0
- data/lib/ruby_smb/smb1/packet/trans2/subcommands.rb +5 -2
- data/lib/ruby_smb/smb1/packet/tree_connect_request.rb +4 -6
- data/lib/ruby_smb/smb1/packet/tree_connect_response.rb +5 -7
- data/lib/ruby_smb/smb1/packet/tree_disconnect_request.rb +2 -4
- data/lib/ruby_smb/smb1/packet/tree_disconnect_response.rb +2 -4
- data/lib/ruby_smb/smb1/packet/write_andx_request.rb +68 -0
- data/lib/ruby_smb/smb1/packet/write_andx_response.rb +35 -0
- data/lib/ruby_smb/smb1/resource_type.rb +18 -0
- data/lib/ruby_smb/smb1/tree.rb +188 -5
- data/lib/ruby_smb/smb2.rb +16 -11
- data/lib/ruby_smb/smb2/bit_field.rb +1 -0
- data/lib/ruby_smb/smb2/bit_field/file_access_mask.rb +1 -1
- data/lib/ruby_smb/smb2/bit_field/session_flags.rb +1 -2
- data/lib/ruby_smb/smb2/bit_field/share_flags.rb +4 -6
- data/lib/ruby_smb/smb2/create_context.rb +29 -0
- data/lib/ruby_smb/smb2/file.rb +251 -0
- data/lib/ruby_smb/smb2/info_type.rb +21 -0
- data/lib/ruby_smb/smb2/packet.rb +16 -0
- data/lib/ruby_smb/smb2/packet/close_request.rb +22 -0
- data/lib/ruby_smb/smb2/packet/close_response.rb +29 -0
- data/lib/ruby_smb/smb2/packet/create_request.rb +54 -0
- data/lib/ruby_smb/smb2/packet/create_response.rb +35 -0
- data/lib/ruby_smb/smb2/packet/echo_request.rb +1 -3
- data/lib/ruby_smb/smb2/packet/echo_response.rb +1 -3
- data/lib/ruby_smb/smb2/packet/error_packet.rb +1 -3
- data/lib/ruby_smb/smb2/packet/ioctl_request.rb +54 -0
- data/lib/ruby_smb/smb2/packet/ioctl_response.rb +39 -0
- data/lib/ruby_smb/smb2/packet/logoff_request.rb +1 -4
- data/lib/ruby_smb/smb2/packet/logoff_response.rb +1 -4
- data/lib/ruby_smb/smb2/packet/negotiate_request.rb +1 -1
- data/lib/ruby_smb/smb2/packet/negotiate_response.rb +1 -1
- data/lib/ruby_smb/smb2/packet/query_directory_request.rb +35 -0
- data/lib/ruby_smb/smb2/packet/query_directory_response.rb +45 -0
- data/lib/ruby_smb/smb2/packet/read_request.rb +30 -0
- data/lib/ruby_smb/smb2/packet/read_response.rb +26 -0
- data/lib/ruby_smb/smb2/packet/session_setup_request.rb +2 -5
- data/lib/ruby_smb/smb2/packet/session_setup_response.rb +4 -7
- data/lib/ruby_smb/smb2/packet/set_info_request.rb +58 -0
- data/lib/ruby_smb/smb2/packet/set_info_response.rb +20 -0
- data/lib/ruby_smb/smb2/packet/tree_connect_request.rb +3 -4
- data/lib/ruby_smb/smb2/packet/tree_connect_response.rb +5 -9
- data/lib/ruby_smb/smb2/packet/tree_disconnect_request.rb +1 -4
- data/lib/ruby_smb/smb2/packet/tree_disconnect_response.rb +1 -4
- data/lib/ruby_smb/smb2/packet/write_request.rb +29 -0
- data/lib/ruby_smb/smb2/packet/write_response.rb +26 -0
- data/lib/ruby_smb/smb2/tree.rb +163 -7
- data/lib/ruby_smb/version.rb +1 -1
- data/spec/lib/ruby_smb/client_spec.rb +459 -120
- data/spec/lib/ruby_smb/dcerpc/bind_spec.rb +14 -0
- data/spec/lib/ruby_smb/dcerpc/handle_spec.rb +31 -0
- data/spec/lib/ruby_smb/dcerpc/request_spec.rb +21 -0
- data/spec/lib/ruby_smb/dcerpc/response_spec.rb +15 -0
- data/spec/lib/ruby_smb/dcerpc/srvsvc_spec.rb +13 -0
- data/spec/lib/ruby_smb/dcerpc/uuid_spec.rb +12 -0
- data/spec/lib/ruby_smb/dispatcher/base_spec.rb +26 -0
- data/spec/lib/ruby_smb/dispatcher/socket_spec.rb +118 -18
- data/spec/lib/ruby_smb/field/extended_attribute_flag_spec.rb +0 -3
- data/spec/lib/ruby_smb/field/file_time_spec.rb +4 -2
- data/spec/lib/ruby_smb/field/security_descriptor.rb +0 -1
- data/spec/lib/ruby_smb/field/smb2_fileid_spec.rb +10 -0
- data/spec/lib/ruby_smb/field/smb_fea_list_spec.rb +3 -5
- data/spec/lib/ruby_smb/field/smb_gea_list_spec.rb +37 -0
- data/spec/lib/ruby_smb/field/smb_gea_spec.rb +22 -0
- data/spec/lib/ruby_smb/field/stringz16_spec.rb +7 -9
- data/spec/lib/ruby_smb/field/utime_spec.rb +4 -2
- data/spec/lib/ruby_smb/{field → fscc}/ea_info_array_spec.rb +7 -9
- data/spec/lib/ruby_smb/{field → fscc}/file_full_ea_info_spec.rb +2 -3
- data/spec/lib/ruby_smb/fscc/file_information/file_both_directory_information_spec.rb +71 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_directory_information_spec.rb +68 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_disposition_information_spec.rb +26 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_full_directory_information_spec.rb +69 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_id_both_directory_information_spec.rb +72 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_id_full_directory_information_spec.rb +70 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_names_information_spec.rb +41 -0
- data/spec/lib/ruby_smb/fscc/file_information/file_rename_information_spec.rb +133 -0
- data/spec/lib/ruby_smb/fscc/fscc_file_attributes_spec.rb +143 -0
- data/spec/lib/ruby_smb/generic_packet_spec.rb +46 -21
- data/spec/lib/ruby_smb/nbss/negative_session_response_spec.rb +29 -0
- data/spec/lib/ruby_smb/nbss/session_header_spec.rb +30 -0
- data/spec/lib/ruby_smb/nbss/session_request_spec.rb +30 -0
- data/spec/lib/ruby_smb/smb1/bit_field/create_options_spec.rb +9 -1
- data/spec/lib/ruby_smb/smb1/bit_field/directory_access_mask_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/bit_field/file_access_mask_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/bit_field/file_status_flags_spec.rb +35 -0
- data/spec/lib/ruby_smb/smb1/bit_field/open2_access_mode_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb1/bit_field/open2_flags_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/bit_field/open2_open_mode_spec.rb +0 -1
- data/spec/lib/ruby_smb/smb1/bit_field/optional_support_spec.rb +0 -1
- data/spec/lib/ruby_smb/smb1/bit_field/security_flags_spec.rb +26 -0
- data/spec/lib/ruby_smb/smb1/bit_field/share_access_spec.rb +0 -3
- data/spec/lib/ruby_smb/smb1/bit_field/smb_ext_file_attributes_spec.rb +20 -39
- data/spec/lib/ruby_smb/smb1/bit_field/smb_file_attributes_spec.rb +0 -6
- data/spec/lib/ruby_smb/smb1/bit_field/smb_nmpipe_status_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/bit_field/trans2_flags_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/bit_field/tree_connect_flags_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb1/file_spec.rb +469 -0
- data/spec/lib/ruby_smb/smb1/packet/close_request_spec.rb +54 -0
- data/spec/lib/ruby_smb/smb1/packet/close_response_spec.rb +45 -0
- data/spec/lib/ruby_smb/smb1/packet/echo_request_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/echo_response_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/error_packet_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb1/packet/logoff_request_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/logoff_response_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/negotiate_request_spec.rb +1 -1
- data/spec/lib/ruby_smb/smb1/packet/negotiate_response_extended_spec.rb +37 -0
- data/spec/lib/ruby_smb/smb1/packet/negotiate_response_spec.rb +37 -0
- data/spec/lib/ruby_smb/smb1/packet/nt_create_andx_request_spec.rb +151 -0
- data/spec/lib/ruby_smb/smb1/packet/nt_create_andx_response_spec.rb +157 -0
- data/spec/lib/ruby_smb/smb1/packet/nt_trans/create_request_spec.rb +13 -6
- data/spec/lib/ruby_smb/smb1/packet/nt_trans/create_response_spec.rb +1 -7
- data/spec/lib/ruby_smb/smb1/packet/nt_trans/request_spec.rb +1 -6
- data/spec/lib/ruby_smb/smb1/packet/nt_trans/response_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/read_andx_request_spec.rb +149 -0
- data/spec/lib/ruby_smb/smb1/packet/read_andx_response_spec.rb +93 -0
- data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_request_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/session_setup_legacy_response_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/session_setup_request_spec.rb +3 -8
- data/spec/lib/ruby_smb/smb1/packet/session_setup_response_spec.rb +2 -4
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_request_spec.rb +180 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_first2_response_spec.rb +104 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_information_level/find_file_full_directory_info_spec.rb +128 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_request_spec.rb +174 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/find_next2_response_spec.rb +102 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/open2_request_spec.rb +1 -6
- data/spec/lib/ruby_smb/smb1/packet/trans2/open2_response_spec.rb +2 -7
- data/spec/lib/ruby_smb/smb1/packet/trans2/request_secondary_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/trans2/request_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/trans2/response_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_request_spec.rb +98 -0
- data/spec/lib/ruby_smb/smb1/packet/trans2/set_file_information_response_spec.rb +56 -0
- data/spec/lib/ruby_smb/smb1/packet/tree_connect_request_spec.rb +1 -5
- data/spec/lib/ruby_smb/smb1/packet/tree_connect_response_spec.rb +1 -6
- data/spec/lib/ruby_smb/smb1/packet/tree_disconnect_request_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/tree_disconnect_response_spec.rb +1 -4
- data/spec/lib/ruby_smb/smb1/packet/write_andx_request_spec.rb +148 -0
- data/spec/lib/ruby_smb/smb1/packet/write_andx_response_spec.rb +54 -0
- data/spec/lib/ruby_smb/smb1/tree_spec.rb +409 -7
- data/spec/lib/ruby_smb/smb2/bit_field/directory_access_mask_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb2/bit_field/file_access_mask_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb2/bit_field/session_flags_spec.rb +1 -1
- data/spec/lib/ruby_smb/smb2/bit_field/share_capabilities_spec.rb +0 -1
- data/spec/lib/ruby_smb/smb2/bit_field/share_flags_spec.rb +0 -2
- data/spec/lib/ruby_smb/smb2/create_context_spec.rb +42 -0
- data/spec/lib/ruby_smb/smb2/file_spec.rb +233 -0
- data/spec/lib/ruby_smb/smb2/packet/close_request_spec.rb +40 -0
- data/spec/lib/ruby_smb/smb2/packet/close_response_spec.rb +40 -0
- data/spec/lib/ruby_smb/smb2/packet/create_request_spec.rb +101 -0
- data/spec/lib/ruby_smb/smb2/packet/create_response_spec.rb +64 -0
- data/spec/lib/ruby_smb/smb2/packet/echo_request_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/echo_response_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/ioctl_request_spec.rb +48 -0
- data/spec/lib/ruby_smb/smb2/packet/logoff_request_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/logoff_response_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/query_directory_request_spec.rb +80 -0
- data/spec/lib/ruby_smb/smb2/packet/query_directory_response_spec.rb +64 -0
- data/spec/lib/ruby_smb/smb2/packet/read_request_spec.rb +43 -0
- data/spec/lib/ruby_smb/smb2/packet/read_response_spec.rb +50 -0
- data/spec/lib/ruby_smb/smb2/packet/session_setup_request_spec.rb +3 -4
- data/spec/lib/ruby_smb/smb2/packet/session_setup_response_spec.rb +2 -3
- data/spec/lib/ruby_smb/smb2/packet/set_info_request_spec.rb +205 -0
- data/spec/lib/ruby_smb/smb2/packet/set_info_response_spec.rb +32 -0
- data/spec/lib/ruby_smb/smb2/packet/tree_connect_request_spec.rb +3 -5
- data/spec/lib/ruby_smb/smb2/packet/tree_connect_response_spec.rb +1 -2
- data/spec/lib/ruby_smb/smb2/packet/tree_disconnect_request_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/tree_disconnect_response_spec.rb +1 -3
- data/spec/lib/ruby_smb/smb2/packet/write_request_spec.rb +51 -0
- data/spec/lib/ruby_smb/smb2/packet/write_response_spec.rb +38 -0
- data/spec/lib/ruby_smb/smb2/tree_spec.rb +191 -5
- data/spec/spec_helper.rb +1 -1
- metadata +195 -12
- metadata.gz.sig +0 -0
- data/lib/ruby_smb/smb1/dispositions.rb +0 -36
- data/spec/lib/ruby_smb/dispatcher/dispatcher_base_spec.rb +0 -22
@@ -3,8 +3,7 @@ module RubySMB
|
|
3
3
|
# This module holds the OPLock Levels used in NT_TRANSACT_CREATE and
|
4
4
|
# SMB_COM_NT_CREATE_ANDX responses. The definitions for these values can be found at
|
5
5
|
# [2.2.7.1.2 Response](https://msdn.microsoft.com/en-us/library/ee441961.aspx)
|
6
|
-
module
|
7
|
-
|
6
|
+
module OplockLevels
|
8
7
|
# No OpLock Granted
|
9
8
|
NO_OPLOCK = 0x00
|
10
9
|
# Exclusive OpLock Granted
|
@@ -13,7 +12,6 @@ module RubySMB
|
|
13
12
|
BATCH_OPLOCK = 0x02
|
14
13
|
# Level 2 OpLock Granted
|
15
14
|
LEVEL2_OPLOCK = 0x03
|
16
|
-
|
17
15
|
end
|
18
16
|
end
|
19
|
-
end
|
17
|
+
end
|
data/lib/ruby_smb/smb1/packet.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
|
+
# Namespace for all SMB1 packet definitions
|
4
|
+
# see [2.2 Message Syntax](https://msdn.microsoft.com/en-us/library/ee441466.aspx)
|
3
5
|
module Packet
|
4
6
|
require 'ruby_smb/smb1/packet/empty_packet'
|
5
7
|
require 'ruby_smb/smb1/packet/negotiate_request'
|
@@ -19,6 +21,14 @@ module RubySMB
|
|
19
21
|
require 'ruby_smb/smb1/packet/echo_response'
|
20
22
|
require 'ruby_smb/smb1/packet/trans2'
|
21
23
|
require 'ruby_smb/smb1/packet/nt_trans'
|
24
|
+
require 'ruby_smb/smb1/packet/nt_create_andx_request'
|
25
|
+
require 'ruby_smb/smb1/packet/nt_create_andx_response'
|
26
|
+
require 'ruby_smb/smb1/packet/read_andx_request'
|
27
|
+
require 'ruby_smb/smb1/packet/read_andx_response'
|
28
|
+
require 'ruby_smb/smb1/packet/write_andx_request'
|
29
|
+
require 'ruby_smb/smb1/packet/write_andx_response'
|
30
|
+
require 'ruby_smb/smb1/packet/close_request'
|
31
|
+
require 'ruby_smb/smb1/packet/close_response'
|
22
32
|
end
|
23
33
|
end
|
24
34
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB1
|
3
|
+
module Packet
|
4
|
+
# A SMB1 SMB_COM_CLOSE Request Packet as defined in
|
5
|
+
# [2.2.4.5.1 Request](https://msdn.microsoft.com/en-us/library/ee442151.aspx)
|
6
|
+
class CloseRequest < RubySMB::GenericPacket
|
7
|
+
# A SMB1 Parameter Block as defined by the {CloseRequest}
|
8
|
+
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
uint16 :fid, label: 'FID'
|
12
|
+
uint32 :last_time_modified, label: 'Last Time Modified', initial_value: 0xFFFFFFFF
|
13
|
+
end
|
14
|
+
|
15
|
+
# Represents the specific layout of the DataBlock for a {CloseRequest} Packet.
|
16
|
+
class DataBlock < RubySMB::SMB1::DataBlock
|
17
|
+
end
|
18
|
+
|
19
|
+
smb_header :smb_header
|
20
|
+
parameter_block :parameter_block
|
21
|
+
data_block :data_block
|
22
|
+
|
23
|
+
def initialize_instance
|
24
|
+
super
|
25
|
+
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB1
|
3
|
+
module Packet
|
4
|
+
# A SMB1 SMB_COM_CLOSE Response Packet as defined in
|
5
|
+
# [2.2.4.5.2 Response](https://msdn.microsoft.com/en-us/library/ee441667.aspx)
|
6
|
+
class CloseResponse < RubySMB::GenericPacket
|
7
|
+
# A SMB1 Parameter Block as defined by the {CloseResponse}
|
8
|
+
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
9
|
+
end
|
10
|
+
|
11
|
+
# Represents the specific layout of the DataBlock for a {CloseResponse} Packet.
|
12
|
+
class DataBlock < RubySMB::SMB1::DataBlock
|
13
|
+
end
|
14
|
+
|
15
|
+
smb_header :smb_header
|
16
|
+
parameter_block :parameter_block
|
17
|
+
data_block :data_block
|
18
|
+
|
19
|
+
def initialize_instance
|
20
|
+
super
|
21
|
+
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_CLOSE
|
22
|
+
smb_header.flags.reply = 1
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,18 +1,17 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# This class represents an SMB1 Echo Request Packet as defined in
|
6
5
|
# [2.2.4.39.1 Request](https://msdn.microsoft.com/en-us/library/ee441746.aspx)
|
7
6
|
class EchoRequest < RubySMB::GenericPacket
|
8
|
-
|
9
|
-
|
7
|
+
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
10
8
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
|
-
uint16
|
9
|
+
uint16 :echo_count, label: 'Echo Count', initial_value: 1
|
12
10
|
end
|
13
11
|
|
12
|
+
# The {RubySMB::SMB1::DataBlock} specific to this packet type.
|
14
13
|
class DataBlock < RubySMB::SMB1::DataBlock
|
15
|
-
string
|
14
|
+
string :data, label: 'Data'
|
16
15
|
end
|
17
16
|
|
18
17
|
smb_header :smb_header
|
@@ -23,8 +22,7 @@ module RubySMB
|
|
23
22
|
super
|
24
23
|
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
25
24
|
end
|
26
|
-
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
30
|
-
end
|
28
|
+
end
|
@@ -1,18 +1,17 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# This class represents an SMB1 Echo Request Packet as defined in
|
6
5
|
# [2.2.4.39.2 Response](https://msdn.microsoft.com/en-us/library/ee441626.aspx)
|
7
6
|
class EchoResponse < RubySMB::GenericPacket
|
8
|
-
|
9
|
-
|
7
|
+
# The {RubySMB::SMB1::ParameterBlock} specific to this packet type.
|
10
8
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
|
-
uint16
|
9
|
+
uint16 :sequence_number, label: 'Sequence Number'
|
12
10
|
end
|
13
11
|
|
12
|
+
# The {RubySMB::SMB1::DataBlock} specific to this packet type.
|
14
13
|
class DataBlock < RubySMB::SMB1::DataBlock
|
15
|
-
string
|
14
|
+
string :data, label: 'Data'
|
16
15
|
end
|
17
16
|
|
18
17
|
smb_header :smb_header
|
@@ -24,8 +23,7 @@ module RubySMB
|
|
24
23
|
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_ECHO
|
25
24
|
smb_header.flags.reply = 1
|
26
25
|
end
|
27
|
-
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
31
|
-
end
|
29
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# This packet represent an SMB1 Response Packet when the parameter and
|
6
5
|
# data blocks will be empty.
|
7
6
|
class EmptyPacket < RubySMB::GenericPacket
|
@@ -11,4 +10,4 @@ module RubySMB
|
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
14
|
-
end
|
13
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# This class represents an SMB1 LOGOFF Request Packet as defined in
|
6
5
|
# [2.2.4.54.1 Request](https://msdn.microsoft.com/en-us/library/ee442167.aspx)
|
7
6
|
class LogoffRequest < RubySMB::GenericPacket
|
8
|
-
|
9
7
|
# The Parameter Block for this packet is empty save the Word Count and ANDX Block
|
10
8
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
9
|
and_x_block :andx_block
|
@@ -23,8 +21,7 @@ module RubySMB
|
|
23
21
|
super
|
24
22
|
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
25
|
end
|
29
26
|
end
|
30
|
-
end
|
27
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# This class represents an SMB1 LOGOFF Response Packet as defined in
|
6
5
|
# [2.2.4.54.2 Response](https://msdn.microsoft.com/en-us/library/ee441488.aspx)
|
7
6
|
class LogoffResponse < RubySMB::GenericPacket
|
8
|
-
|
9
7
|
# The Parameter Block for this packet is empty save the Word Count and ANDX Block
|
10
8
|
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
11
9
|
and_x_block :andx_block
|
@@ -24,8 +22,7 @@ module RubySMB
|
|
24
22
|
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_LOGOFF
|
25
23
|
smb_header.flags.reply = 1
|
26
24
|
end
|
27
|
-
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
31
|
-
end
|
28
|
+
end
|
@@ -40,6 +40,28 @@ module RubySMB
|
|
40
40
|
def valid?
|
41
41
|
smb_header.command == RubySMB::SMB1::Commands::SMB_COM_NEGOTIATE
|
42
42
|
end
|
43
|
+
|
44
|
+
# Stores the list of {RubySMB::SMB1::Dialect} that were sent to the
|
45
|
+
# peer/server in the related Negotiate Request. This will be used by
|
46
|
+
# the {#negotiated_dialect} method.
|
47
|
+
#
|
48
|
+
# @param dialects [Array] array of {RubySMB::SMB1::Dialect}
|
49
|
+
# @return dialects [Array] array of {RubySMB::SMB1::Dialect}
|
50
|
+
# @raise [ArgumentError] if dialects is not an array of {RubySMB::SMB1::Dialect}
|
51
|
+
def dialects=(dialects)
|
52
|
+
unless dialects.all? { |dialect| dialect.is_a? Dialect }
|
53
|
+
raise ArgumentError, 'Dialects must be an array of Dialect objects'
|
54
|
+
end
|
55
|
+
@dialects = dialects
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns the negotiated dialect identifier
|
59
|
+
#
|
60
|
+
# @return [String] the negotiated dialect identifier or an empty string if the list of {RubySMB::SMB1::Dialect} was not provided.
|
61
|
+
def negotiated_dialect
|
62
|
+
return '' if @dialects.nil? || @dialects.empty?
|
63
|
+
@dialects[parameter_block.dialect_index].dialect_string
|
64
|
+
end
|
43
65
|
end
|
44
66
|
end
|
45
67
|
end
|
@@ -41,6 +41,28 @@ module RubySMB
|
|
41
41
|
return false unless parameter_block.capabilities.extended_security == 1
|
42
42
|
true
|
43
43
|
end
|
44
|
+
|
45
|
+
# Stores the list of {RubySMB::SMB1::Dialect} that were sent to the
|
46
|
+
# peer/server in the related Negotiate Request. This will be used by
|
47
|
+
# the {#negotiated_dialect} method.
|
48
|
+
#
|
49
|
+
# @param dialects [Array] array of {RubySMB::SMB1::Dialect}
|
50
|
+
# @return dialects [Array] array of {RubySMB::SMB1::Dialect}
|
51
|
+
# @raise [ArgumentError] if dialects is not an array of {RubySMB::SMB1::Dialect}
|
52
|
+
def dialects=(dialects)
|
53
|
+
unless dialects.all? { |dialect| dialect.is_a? Dialect }
|
54
|
+
raise ArgumentError, 'Dialects must be an array of Dialect objects'
|
55
|
+
end
|
56
|
+
@dialects = dialects
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns the negotiated dialect identifier
|
60
|
+
#
|
61
|
+
# @return [String] the negotiated dialect identifier or an empty string if the list of {RubySMB::SMB1::Dialect} was not provided.
|
62
|
+
def negotiated_dialect
|
63
|
+
return '' if @dialects.nil? || @dialects.empty?
|
64
|
+
@dialects[parameter_block.dialect_index].dialect_string
|
65
|
+
end
|
44
66
|
end
|
45
67
|
end
|
46
68
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB1
|
3
|
+
module Packet
|
4
|
+
# A SMB1 SMB_COM_NT_CREATE_ANDX Request Packet as defined in
|
5
|
+
# [2.2.4.64.1 Request](https://msdn.microsoft.com/en-us/library/ee442175.aspx) and
|
6
|
+
# [2.2.4.9.1 Client Request Extensions](https://msdn.microsoft.com/en-us/library/cc246332.aspx)
|
7
|
+
class NtCreateAndxRequest < RubySMB::GenericPacket
|
8
|
+
# A SMB1 Parameter Block as defined by the {NtCreateAndxRequest}
|
9
|
+
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
|
+
endian :little
|
11
|
+
and_x_block :andx_block
|
12
|
+
uint8 :reserved, label: 'Reserved'
|
13
|
+
uint16 :name_length, label: 'Name Length(bytes)', value: -> { parent.data_block.file_name.length }
|
14
|
+
|
15
|
+
struct :flags, label: 'Flags' do
|
16
|
+
bit3 :reserved, label: 'Reserved Space'
|
17
|
+
bit1 :request_extended_response, label: 'Request Extended Response'
|
18
|
+
bit1 :open_target_dir, label: 'Open Target Directory'
|
19
|
+
bit1 :request_opbatch, label: 'Request Batch OpLock'
|
20
|
+
bit1 :request_oplock, label: 'Request OpLock'
|
21
|
+
bit1 :reserved2, label: 'Reserved Space'
|
22
|
+
# Byte boundary
|
23
|
+
bit8 :reserved3, label: 'Reserved Space'
|
24
|
+
bit8 :reserved4, label: 'Reserved Space'
|
25
|
+
bit8 :reserved5, label: 'Reserved Space'
|
26
|
+
end
|
27
|
+
|
28
|
+
uint32 :root_directory_fid, label: 'Root Directory FID'
|
29
|
+
|
30
|
+
choice :desired_access, selection: -> { ext_file_attributes.directory } do
|
31
|
+
file_access_mask 0, label: 'Desired Access'
|
32
|
+
directory_access_mask 1, label: 'Desired Access'
|
33
|
+
end
|
34
|
+
|
35
|
+
uint64 :allocation_size, label: 'Allocation Size'
|
36
|
+
smb_ext_file_attributes :ext_file_attributes, label: 'Extented File Attributes'
|
37
|
+
share_access :share_access, label: 'Share Access'
|
38
|
+
# The following constants are defined in RubySMB::Dispositions
|
39
|
+
uint32 :create_disposition, label: 'Create Disposition'
|
40
|
+
create_options :create_options, label: 'Create Options'
|
41
|
+
# The following constants are defined in RubySMB::ImpersonationLevels
|
42
|
+
uint32 :impersonation_level, label: 'Impersonation Level'
|
43
|
+
security_flags :security_flags, label: 'Security Flags'
|
44
|
+
end
|
45
|
+
|
46
|
+
# Represents the specific layout of the DataBlock for a {NtCreateAndxRequest} Packet.
|
47
|
+
class DataBlock < RubySMB::SMB1::DataBlock
|
48
|
+
string :file_name, label: 'File Name'
|
49
|
+
end
|
50
|
+
|
51
|
+
smb_header :smb_header
|
52
|
+
parameter_block :parameter_block
|
53
|
+
data_block :data_block
|
54
|
+
|
55
|
+
def initialize_instance
|
56
|
+
super
|
57
|
+
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB1
|
3
|
+
module Packet
|
4
|
+
# A SMB1 SMB_COM_NT_CREATE_ANDX Response Packet as defined in
|
5
|
+
# [2.2.4.64.2 Response](https://msdn.microsoft.com/en-us/library/ee441612.aspx) and
|
6
|
+
# [2.2.4.9.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/cc246334.aspx)
|
7
|
+
class NtCreateAndxResponse < RubySMB::GenericPacket
|
8
|
+
# A SMB1 Parameter Block as defined by the {NtCreateAndxResponse}
|
9
|
+
class ParameterBlock < RubySMB::SMB1::ParameterBlock
|
10
|
+
endian :little
|
11
|
+
|
12
|
+
and_x_block :andx_block
|
13
|
+
# Constants defined in RubySMB::SMB1::OplockLevels
|
14
|
+
uint8 :oplock_level, label: 'OpLock Level'
|
15
|
+
uint16 :fid, label: 'FID'
|
16
|
+
# Constants defined in RubySMB::Dispositions
|
17
|
+
uint32 :create_disposition, label: 'Create Disposition'
|
18
|
+
file_time :create_time, label: 'Create Time'
|
19
|
+
file_time :last_access_time, label: 'Last Access Time'
|
20
|
+
file_time :last_write_time, label: 'Last Write Time'
|
21
|
+
file_time :last_change_time, label: 'Last Change Time'
|
22
|
+
smb_ext_file_attributes :ext_file_attributes, label: 'Extented File Attributes'
|
23
|
+
uint64 :allocation_size, label: 'Allocation Size'
|
24
|
+
uint64 :end_of_file, label: 'End of File Offset'
|
25
|
+
# Constants defined in RubySMB::SMB1::ResourceType
|
26
|
+
uint16 :resource_type, label: 'Resource Type'
|
27
|
+
|
28
|
+
choice :status_flags, selection: -> { resource_type } do
|
29
|
+
smb_nmpipe_status RubySMB::SMB1::ResourceType::BYTE_MODE_PIPE, label: 'Status Flags'
|
30
|
+
smb_nmpipe_status RubySMB::SMB1::ResourceType::MESSAGE_MODE_PIPE, label: 'Status Flags'
|
31
|
+
file_status_flags RubySMB::SMB1::ResourceType::DISK, label: 'Status Flags'
|
32
|
+
uint16 :default, label: 'Status Flags'
|
33
|
+
end
|
34
|
+
|
35
|
+
uint8 :directory, label: 'Directory'
|
36
|
+
string :volume_guid, label: 'Volume GUID', length: 16
|
37
|
+
uint64 :file_id, label: 'File ID'
|
38
|
+
|
39
|
+
choice :maximal_access_rights, selection: -> { ext_file_attributes.directory } do
|
40
|
+
file_access_mask 0, label: 'Maximal Access Rights'
|
41
|
+
directory_access_mask 1, label: 'Maximal Access Rights'
|
42
|
+
end
|
43
|
+
|
44
|
+
choice :guest_maximal_access_rights, selection: -> { ext_file_attributes.directory } do
|
45
|
+
file_access_mask 0, label: 'Guest Maximal Access Rights'
|
46
|
+
directory_access_mask 1, label: 'Guest Maximal Access Rights'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Represents the specific layout of the DataBlock for a {SessionSetupResponse} Packet.
|
51
|
+
class DataBlock < RubySMB::SMB1::DataBlock
|
52
|
+
end
|
53
|
+
|
54
|
+
smb_header :smb_header
|
55
|
+
parameter_block :parameter_block
|
56
|
+
data_block :data_block
|
57
|
+
|
58
|
+
def initialize_instance
|
59
|
+
super
|
60
|
+
smb_header.command = RubySMB::SMB1::Commands::SMB_COM_NT_CREATE_ANDX
|
61
|
+
smb_header.flags.reply = 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB1
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# Namespace for the NT Transaction sub-protocol documented in
|
6
5
|
# [2.2.4.62 SMB_COM_NT_TRANSACT (0xA0)](https://msdn.microsoft.com/en-us/library/ee441720.aspx)
|
7
6
|
module NtTrans
|
@@ -13,4 +12,4 @@ module RubySMB
|
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
16
|
-
end
|
15
|
+
end
|
@@ -2,16 +2,15 @@ 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 CreateRequest < RubySMB::GenericPacket
|
9
|
-
|
10
8
|
class ParameterBlock < RubySMB::SMB1::Packet::NtTrans::Request::ParameterBlock
|
11
9
|
end
|
12
10
|
|
11
|
+
# The Trans2 Parameter Block for this particular Subcommand
|
13
12
|
class Trans2Parameters < BinData::Record
|
14
|
-
endian
|
13
|
+
endian :little
|
15
14
|
|
16
15
|
struct :flags do
|
17
16
|
bit4 :reserved
|
@@ -25,15 +24,20 @@ module RubySMB
|
|
25
24
|
bit8 :reserved5, label: 'Reserved Space'
|
26
25
|
end
|
27
26
|
|
28
|
-
uint32 :root_directory_fid,
|
29
|
-
|
30
|
-
|
27
|
+
uint32 :root_directory_fid, label: 'Root Directory FID'
|
28
|
+
|
29
|
+
choice :desired_access, selection: -> { ext_file_attribute.directory } do
|
30
|
+
file_access_mask 0, label: 'Desired Access'
|
31
|
+
directory_access_mask 1, label: 'Desired Access'
|
32
|
+
end
|
33
|
+
|
34
|
+
uint64 :allocation_size, label: 'Allocation Size'
|
31
35
|
smb_ext_file_attributes :ext_file_attribute
|
32
36
|
share_access :share_access, label: 'Share Access'
|
33
37
|
uint32 :create_disposition, label: 'Create Disposition'
|
34
38
|
create_options :create_options
|
35
|
-
uint32 :security_descriptor_length, label: 'Security Descriptor Length', initial_value:
|
36
|
-
uint32 :ea_length, label: 'Extended Attributes Length', initial_value:
|
39
|
+
uint32 :security_descriptor_length, label: 'Security Descriptor Length', initial_value: -> { parent.trans2_data.security_descriptor.length }
|
40
|
+
uint32 :ea_length, label: 'Extended Attributes Length', initial_value: -> { parent.trans2_data.extended_attributes.length }
|
37
41
|
uint32 :impersonation_level, label: 'Impersonation Level'
|
38
42
|
|
39
43
|
struct :security_flags do
|
@@ -47,10 +51,11 @@ module RubySMB
|
|
47
51
|
# Returns the length of the Trans2Parameters struct
|
48
52
|
# in number of bytes
|
49
53
|
def length
|
50
|
-
|
54
|
+
do_num_bytes
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
58
|
+
# The Trans2 Data Blcok for this particular Subcommand
|
54
59
|
class Trans2Data < BinData::Record
|
55
60
|
security_descriptor :security_descriptor
|
56
61
|
file_full_ea_info :extended_attributes
|
@@ -58,14 +63,15 @@ module RubySMB
|
|
58
63
|
# Returns the length of the Trans2Data struct
|
59
64
|
# in number of bytes
|
60
65
|
def length
|
61
|
-
|
66
|
+
do_num_bytes
|
62
67
|
end
|
63
68
|
end
|
64
69
|
|
70
|
+
# The {RubySMB::SMB1::DataBlock} specific to this packet type.
|
65
71
|
class DataBlock < RubySMB::SMB1::Packet::Trans2::DataBlock
|
66
|
-
string :pad1, length:
|
72
|
+
string :pad1, length: -> { pad1_length }
|
67
73
|
trans2_parameters :trans2_parameters, label: 'Trans2 Parameters'
|
68
|
-
string :pad2, length:
|
74
|
+
string :pad2, length: -> { pad2_length }
|
69
75
|
trans2_data :trans2_data, label: 'Trans2 Data'
|
70
76
|
end
|
71
77
|
|
@@ -82,4 +88,4 @@ module RubySMB
|
|
82
88
|
end
|
83
89
|
end
|
84
90
|
end
|
85
|
-
end
|
91
|
+
end
|