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