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
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 Echo Request Packet as defined in
|
6
5
|
# [2.2.28 SMB2 ECHO Request](https://msdn.microsoft.com/en-us/library/cc246540.aspx)
|
7
6
|
class EchoRequest < RubySMB::GenericPacket
|
@@ -14,8 +13,7 @@ module RubySMB
|
|
14
13
|
super
|
15
14
|
smb2_header.command = RubySMB::SMB2::Commands::ECHO
|
16
15
|
end
|
17
|
-
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
21
|
-
end
|
19
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 Echo response Packet as defined in
|
6
5
|
# [2.2.29 SMB2 ECHO Response](https://msdn.microsoft.com/en-us/library/cc246541.aspx)
|
7
6
|
class EchoResponse < RubySMB::GenericPacket
|
@@ -15,8 +14,7 @@ module RubySMB
|
|
15
14
|
smb2_header.command = RubySMB::SMB2::Commands::ECHO
|
16
15
|
smb2_header.flags.reply = 1
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
22
|
-
end
|
20
|
+
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 Error packet for when an incomplete response comes back
|
6
|
-
|
7
5
|
class ErrorPacket < RubySMB::GenericPacket
|
8
6
|
endian :little
|
9
7
|
smb2_header :smb2_header
|
@@ -12,4 +10,4 @@ module RubySMB
|
|
12
10
|
end
|
13
11
|
end
|
14
12
|
end
|
15
|
-
end
|
13
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Ioctl Request Packet as defined in
|
5
|
+
# [2.2.31 SMB2 IOCTL Request](https://msdn.microsoft.com/en-us/library/cc246545.aspx)
|
6
|
+
class IoctlRequest < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
|
9
|
+
smb2_header :smb2_header
|
10
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 57
|
11
|
+
uint16 :reserved1, label: 'Reserved Space'
|
12
|
+
uint32 :ctl_code, label: 'Control Code'
|
13
|
+
smb2_fileid :file_id, label: 'File Id'
|
14
|
+
uint32 :input_offset, label: 'Input Offset', initial_value: -> { calc_input_offset }
|
15
|
+
uint32 :input_count, label: 'Input Count', initial_value: -> { buffer.do_num_bytes }
|
16
|
+
uint32 :max_input_response, label: 'Max Input Response'
|
17
|
+
uint32 :output_offset, label: 'Output Offset', initial_value: -> { input_offset + output_count }
|
18
|
+
uint32 :output_count, label: 'Output Count'
|
19
|
+
uint32 :max_output_response, label: 'Max Output response', initial_value: 65536
|
20
|
+
|
21
|
+
struct :flags do
|
22
|
+
bit7 :reserved1, label: 'Reserved Space'
|
23
|
+
bit1 :is_fsctl, label: 'FSCTL not IOCTL'
|
24
|
+
|
25
|
+
bit8 :reserved2, label: 'Reserved Space'
|
26
|
+
bit8 :reserved3, label: 'Reserved Space'
|
27
|
+
bit8 :reserved4, label: 'Reserved Space'
|
28
|
+
end
|
29
|
+
|
30
|
+
uint32 :reserved2, label: 'Reserved Space'
|
31
|
+
string :buffer, label: 'Input Buffer', read_length: -> { input_count + output_count }
|
32
|
+
|
33
|
+
def initialize_instance
|
34
|
+
super
|
35
|
+
smb2_header.command = RubySMB::SMB2::Commands::IOCTL
|
36
|
+
end
|
37
|
+
|
38
|
+
# Calculates the value for the input_offset field.
|
39
|
+
# If the input buffer is empty then this should be set to 0,
|
40
|
+
# otherwise it should return the absolute offset of the input buffer.
|
41
|
+
#
|
42
|
+
# @return [Integer] the value to store in #input_offset
|
43
|
+
def calc_input_offset
|
44
|
+
if input_count.zero?
|
45
|
+
0
|
46
|
+
else
|
47
|
+
buffer.abs_offset
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Ioctl Response Packet as defined in
|
5
|
+
# [2.2.32 SMB2 IOCTL Response](https://msdn.microsoft.com/en-us/library/cc246548.aspx)
|
6
|
+
class IoctlResponse < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
|
9
|
+
smb2_header :smb2_header
|
10
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 49
|
11
|
+
uint16 :reserved1, label: 'Reserved Space'
|
12
|
+
uint32 :ctl_code, label: 'Control Code'
|
13
|
+
smb2_fileid :file_id, label: 'File Id'
|
14
|
+
uint32 :input_offset, label: 'Input Offset'
|
15
|
+
uint32 :input_count, label: 'Input Count'
|
16
|
+
uint32 :output_offset, label: 'Output Offset'
|
17
|
+
uint32 :output_count, label: 'Output Count'
|
18
|
+
uint32 :flags, label: 'Flags'
|
19
|
+
uint32 :reserved2, label: 'Reserved Space'
|
20
|
+
string :buffer, label: 'Input Buffer', read_length: -> { input_count + output_count }
|
21
|
+
|
22
|
+
def initialize_instance
|
23
|
+
super
|
24
|
+
smb2_header.flags.reply = 1
|
25
|
+
smb2_header.command = RubySMB::SMB2::Commands::IOCTL
|
26
|
+
end
|
27
|
+
|
28
|
+
def input_data
|
29
|
+
to_binary_s[input_offset, input_count]
|
30
|
+
end
|
31
|
+
|
32
|
+
def output_data
|
33
|
+
to_binary_s[output_offset, output_count]
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 LOGOFF Request Packet as defined in
|
6
5
|
# [2.2.7 SMB2 LOGOFF Request](https://msdn.microsoft.com/en-us/library/cc246565.aspx)
|
7
6
|
class LogoffRequest < RubySMB::GenericPacket
|
@@ -10,13 +9,11 @@ module RubySMB
|
|
10
9
|
uint16 :structure_size, label: 'Structure Size', initial_value: 4
|
11
10
|
uint16 :reserved, label: 'Reserved Space'
|
12
11
|
|
13
|
-
|
14
12
|
def initialize_instance
|
15
13
|
super
|
16
14
|
smb2_header.command = RubySMB::SMB2::Commands::LOGOFF
|
17
15
|
end
|
18
|
-
|
19
16
|
end
|
20
17
|
end
|
21
18
|
end
|
22
|
-
end
|
19
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 LOGOFF Response Packet as defined in
|
6
5
|
# [2.2.8 SMB2 LOGOFF Response](https://msdn.microsoft.com/en-us/library/cc246566.aspx)
|
7
6
|
class LogoffResponse < RubySMB::GenericPacket
|
@@ -10,14 +9,12 @@ module RubySMB
|
|
10
9
|
uint16 :structure_size, label: 'Structure Size', initial_value: 4
|
11
10
|
uint16 :reserved, label: 'Reserved Space'
|
12
11
|
|
13
|
-
|
14
12
|
def initialize_instance
|
15
13
|
super
|
16
14
|
smb2_header.command = RubySMB::SMB2::Commands::LOGOFF
|
17
15
|
smb2_header.flags.reply = 1
|
18
16
|
end
|
19
|
-
|
20
17
|
end
|
21
18
|
end
|
22
19
|
end
|
23
|
-
end
|
20
|
+
end
|
@@ -25,7 +25,7 @@ module RubySMB
|
|
25
25
|
# @param [Fixnum] the numeric code for the dialect you wish to add
|
26
26
|
# @return [Array<Fixnum>] the array of all currently selected dialects
|
27
27
|
def add_dialect(dialect)
|
28
|
-
return ArgumentError, 'Must be a number' unless dialect.is_a?
|
28
|
+
return ArgumentError, 'Must be a number' unless dialect.is_a? Integer
|
29
29
|
self.dialect_count += 1
|
30
30
|
dialects << dialect
|
31
31
|
end
|
@@ -6,7 +6,7 @@ module RubySMB
|
|
6
6
|
class NegotiateResponse < RubySMB::GenericPacket
|
7
7
|
endian :little
|
8
8
|
smb2_header :smb2_header
|
9
|
-
uint16 :structure_size,
|
9
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 65
|
10
10
|
smb2_security_mode :security_mode
|
11
11
|
uint16 :dialect_revision, label: 'Dialect Revision'
|
12
12
|
uint16 :negotiate_context_count, label: 'Negotiate Context Count', initial_value: 0
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Query Directory Request Packet as defined in
|
5
|
+
# [2.2.33 SMB2 QUERY_DIRECTORY Request](https://msdn.microsoft.com/en-us/library/cc246551.aspx)
|
6
|
+
class QueryDirectoryRequest < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
smb2_header :smb2_header
|
9
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 33
|
10
|
+
uint8 :file_information_class, label: 'File Information Class'
|
11
|
+
|
12
|
+
struct :flags do
|
13
|
+
bit3 :reserved2, label: 'Reserved Space'
|
14
|
+
bit1 :reopen, label: 'Reopen Search'
|
15
|
+
bit1 :reserved, label: 'Reserved Space'
|
16
|
+
bit1 :index_specified, label: 'Start at Specified Index'
|
17
|
+
bit1 :return_single, label: 'Return Single Entry'
|
18
|
+
bit1 :restart_scans, label: 'Restart Enumeration from Start'
|
19
|
+
end
|
20
|
+
|
21
|
+
uint32 :file_index, label: 'File Index'
|
22
|
+
smb2_fileid :file_id, label: 'File ID'
|
23
|
+
uint16 :name_offset, label: 'File Name Offset', initial_value: -> { name.abs_offset }
|
24
|
+
uint16 :name_length, label: 'File Name Length', initial_value: -> { name.do_num_bytes }
|
25
|
+
uint32 :output_length, label: 'Output Buffer Length'
|
26
|
+
string16 :name, label: 'Name/Search Pattern'
|
27
|
+
|
28
|
+
def initialize_instance
|
29
|
+
super
|
30
|
+
smb2_header.command = RubySMB::SMB2::Commands::QUERY_DIRECTORY
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Query Directory Response Packet as defined in
|
5
|
+
# [2.2.34 SMB2 QUERY_DIRECTORY Response](https://msdn.microsoft.com/en-us/library/cc246552.aspx)
|
6
|
+
class QueryDirectoryResponse < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
smb2_header :smb2_header
|
9
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 9
|
10
|
+
uint16 :buffer_offset, label: 'Output Buffer Offset', initial_value: -> { buffer.abs_offset }
|
11
|
+
uint32 :buffer_length, label: 'Output Buffer Length', initial_value: -> { buffer.do_num_bytes }
|
12
|
+
string :buffer, read_length: -> { buffer_length }
|
13
|
+
|
14
|
+
def initialize_instance
|
15
|
+
super
|
16
|
+
smb2_header.command = RubySMB::SMB2::Commands::QUERY_DIRECTORY
|
17
|
+
smb2_header.flags.reply = 1
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the File Information in an array of appropriate
|
21
|
+
# structs for the given FileInformationClass. Pulled out of
|
22
|
+
# the string buffer.
|
23
|
+
#
|
24
|
+
# @param klass [Class] the FileInformationClass class to read the data as
|
25
|
+
# @return [array<BinData::Record>] An array of structs holding the requested information
|
26
|
+
def results(klass)
|
27
|
+
information_classes = []
|
28
|
+
blob = buffer.to_binary_s.dup
|
29
|
+
until blob.empty?
|
30
|
+
length = blob[0, 4].unpack('V').first
|
31
|
+
|
32
|
+
data = if length.zero?
|
33
|
+
blob.slice!(0, blob.length)
|
34
|
+
else
|
35
|
+
blob.slice!(0, length)
|
36
|
+
end
|
37
|
+
|
38
|
+
information_classes << klass.read(data)
|
39
|
+
end
|
40
|
+
information_classes
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Read Request Packet as defined in
|
5
|
+
# [2.2.19 SMB2 READ Request](https://msdn.microsoft.com/en-us/library/cc246527.aspx)
|
6
|
+
class ReadRequest < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
|
9
|
+
smb2_header :smb2_header
|
10
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 49
|
11
|
+
uint8 :padding, label: 'Padding', initial_value: 0x50
|
12
|
+
uint8 :flags, label: 'Flags'
|
13
|
+
uint32 :read_length, label: 'Read Length'
|
14
|
+
uint64 :offset, label: 'Read Offset'
|
15
|
+
smb2_fileid :file_id, label: 'File ID'
|
16
|
+
uint32 :min_bytes, label: 'Minimum Count'
|
17
|
+
uint32 :channel, label: 'Channel'
|
18
|
+
uint32 :remaining_bytes, label: 'Remaining Bytes'
|
19
|
+
uint16 :channel_offset, label: 'Read Channel Info Offset'
|
20
|
+
uint16 :channel_length, label: 'Read Channel Info Length'
|
21
|
+
string :buffer, label: 'Read Channel info Buffer', initial_value: 0x00
|
22
|
+
|
23
|
+
def initialize_instance
|
24
|
+
super
|
25
|
+
smb2_header.command = RubySMB::SMB2::Commands::READ
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Read Response Packet as defined in
|
5
|
+
# [2.2.20 SMB2 READ Response](https://msdn.microsoft.com/en-us/library/cc246531.aspx)
|
6
|
+
class ReadResponse < RubySMB::GenericPacket
|
7
|
+
endian :little
|
8
|
+
|
9
|
+
smb2_header :smb2_header
|
10
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 17
|
11
|
+
uint8 :data_offset, label: 'Data Buffer Offset', initial_value: -> { buffer.abs_offset }
|
12
|
+
uint8 :reserved, label: 'Reserved Space'
|
13
|
+
uint32 :data_length, label: 'Data Buffer Length'
|
14
|
+
uint32 :data_remaining, label: 'Data Remaining'
|
15
|
+
uint32 :reserved2, label: 'Reserved Space'
|
16
|
+
string :buffer, label: 'Data Buffer', length: -> { data_length }
|
17
|
+
|
18
|
+
def initialize_instance
|
19
|
+
super
|
20
|
+
smb2_header.command = RubySMB::SMB2::Commands::READ
|
21
|
+
smb2_header.flags.reply = 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 SessionSetupRequest Packet as defined in
|
6
5
|
# [2.2.5 SMB2 SESSION_SETUP Request](https://msdn.microsoft.com/en-us/library/cc246563.aspx)
|
7
6
|
class SessionSetupRequest < RubySMB::GenericPacket
|
@@ -15,8 +14,7 @@ module RubySMB
|
|
15
14
|
uint16 :security_buffer_offset, label: 'Security Buffer Offset', initial_value: 0x58
|
16
15
|
uint16 :security_buffer_length, label: 'Security Buffer Length'
|
17
16
|
uint64 :previous_session_id, label: 'Previous Session ID'
|
18
|
-
string :buffer, label: 'Security Buffer',
|
19
|
-
|
17
|
+
string :buffer, label: 'Security Buffer', length: -> { security_buffer_length }
|
20
18
|
|
21
19
|
def initialize_instance
|
22
20
|
super
|
@@ -46,8 +44,7 @@ module RubySMB
|
|
46
44
|
self.security_buffer_length = gss_blob.length
|
47
45
|
self.buffer = gss_blob
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
48
|
end
|
52
49
|
end
|
53
|
-
end
|
50
|
+
end
|
@@ -1,18 +1,16 @@
|
|
1
1
|
module RubySMB
|
2
2
|
module SMB2
|
3
3
|
module Packet
|
4
|
-
|
5
4
|
# An SMB2 SessionSetupResponse Packet as defined in
|
6
5
|
# [2.2.6 SMB2 SESSION_SETUP Response](https://msdn.microsoft.com/en-us/library/cc246564.aspx)
|
7
6
|
class SessionSetupResponse < RubySMB::GenericPacket
|
8
7
|
endian :little
|
9
8
|
smb2_header :smb2_header
|
10
|
-
uint16 :structure_size,
|
9
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 9
|
11
10
|
session_flags :session_flags
|
12
|
-
uint16 :security_buffer_offset, label: 'Security Buffer Offset',
|
11
|
+
uint16 :security_buffer_offset, label: 'Security Buffer Offset', initial_value: 0x48
|
13
12
|
uint16 :security_buffer_length, label: 'Security Buffer Length'
|
14
|
-
string :buffer, label: 'Security Buffer',
|
15
|
-
|
13
|
+
string :buffer, label: 'Security Buffer', length: -> { security_buffer_length }
|
16
14
|
|
17
15
|
def initialize_instance
|
18
16
|
super
|
@@ -31,8 +29,7 @@ module RubySMB
|
|
31
29
|
self.security_buffer_length = gss_blob.length
|
32
30
|
self.buffer = gss_blob
|
33
31
|
end
|
34
|
-
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
38
|
-
end
|
35
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module RubySMB
|
2
|
+
module SMB2
|
3
|
+
module Packet
|
4
|
+
# An SMB2 Set Info Request Packet as defined in
|
5
|
+
# [2.2.39 SMB2 SET_INFO Request](https://msdn.microsoft.com/en-us/library/cc246560.aspx)
|
6
|
+
class SetInfoRequest < RubySMB::GenericPacket
|
7
|
+
include RubySMB::Fscc::FileInformation
|
8
|
+
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
smb2_header :smb2_header
|
12
|
+
uint16 :structure_size, label: 'Structure Size', initial_value: 33
|
13
|
+
# Constants defined in RubySMB::SMB2::InfoType
|
14
|
+
uint8 :info_type, label: 'Info Type', initial_value: RubySMB::SMB2::InfoType::SMB2_0_INFO_FILE
|
15
|
+
uint8 :file_info_class, label: 'File Info Class'
|
16
|
+
uint32 :buffer_length, label: 'Buffer Length', initial_value: -> { buffer.do_num_bytes }
|
17
|
+
uint16 :buffer_offset, label: 'Buffer Offset', initial_value: -> { buffer.abs_offset }
|
18
|
+
uint16 :reserved, label: 'Reserved', initial_value: 0
|
19
|
+
|
20
|
+
struct :additional_information do
|
21
|
+
bit1 :reserved, label: 'Reserved Space'
|
22
|
+
bit1 :scope_security_information, label: 'Scope Security Information'
|
23
|
+
bit1 :attribute_security_information, label: 'Attribute Security Information'
|
24
|
+
bit1 :label_security_information, label: 'Label Security Information'
|
25
|
+
bit1 :sacl_security_information, label: 'SACL Security Information'
|
26
|
+
bit1 :dacl_security_information, label: 'DACL Security Information'
|
27
|
+
bit1 :group_security_information, label: 'Group Security Information'
|
28
|
+
bit1 :owner_security_information, label: 'Owner Security Information'
|
29
|
+
# byte boundary
|
30
|
+
bit8 :reserved2, label: 'Reserved Space'
|
31
|
+
# byte boundary
|
32
|
+
bit7 :reserved3, label: 'Reserved Space'
|
33
|
+
bit1 :backup_security_information, label: 'Backup Security Information'
|
34
|
+
# byte boundary
|
35
|
+
bit8 :reserved4, label: 'Reserved Space'
|
36
|
+
end
|
37
|
+
|
38
|
+
smb2_fileid :file_id, label: 'File ID'
|
39
|
+
|
40
|
+
choice :buffer, label: 'Buffer', selection: -> { file_info_class } do
|
41
|
+
file_directory_information FILE_DIRECTORY_INFORMATION, label: 'File Directory Information'
|
42
|
+
file_full_directory_information FILE_FULL_DIRECTORY_INFORMATION, label: 'File Full Directory Information'
|
43
|
+
file_both_directory_information FILE_BOTH_DIRECTORY_INFORMATION, label: 'File Both Directory Information'
|
44
|
+
file_rename_information FILE_RENAME_INFORMATION, label: 'File Rename Information'
|
45
|
+
file_names_information FILE_NAMES_INFORMATION, label: 'File Names Information'
|
46
|
+
file_disposition_information FILE_DISPOSITION_INFORMATION, label: 'File Disposition Information'
|
47
|
+
file_id_both_directory_information FILE_ID_BOTH_DIRECTORY_INFORMATION, label: 'File Id Both Directory Information'
|
48
|
+
file_id_full_directory_information FILE_ID_FULL_DIRECTORY_INFORMATION, label: 'File Id Full Directory Information'
|
49
|
+
end
|
50
|
+
|
51
|
+
def initialize_instance
|
52
|
+
super
|
53
|
+
smb2_header.command = RubySMB::SMB2::Commands::SET_INFO
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|