2021-06-18 08:31:49 +03:00
/* SPDX-License-Identifier: LGPL-2.1 */
2011-03-15 05:08:48 +03:00
/*
*
* Copyright ( c ) International Business Machines Corp . , 2002 , 2011
* Etersoft , 2012
* Author ( s ) : Steve French ( sfrench @ us . ibm . com )
* Pavel Shilovsky ( pshilovsky @ samba . org ) 2012
*
*/
# ifndef _SMB2PROTO_H
# define _SMB2PROTO_H
# include <linux/nls.h>
# include <linux/key-type.h>
struct statfs ;
2012-09-19 03:20:34 +04:00
struct smb_rqst ;
2011-03-15 05:08:48 +03:00
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* All Prototypes
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
extern int map_smb2_to_linux_error ( char * buf , bool log_err ) ;
2015-12-18 22:05:30 +03:00
extern int smb2_check_message ( char * buf , unsigned int length ,
struct TCP_Server_Info * server ) ;
2022-08-17 20:14:02 +03:00
extern unsigned int smb2_calc_size ( void * buf ) ;
2018-06-01 03:53:05 +03:00
extern char * smb2_get_data_area_len ( int * off , int * len ,
2021-11-05 02:39:01 +03:00
struct smb2_hdr * shdr ) ;
2011-12-26 22:58:46 +04:00
extern __le16 * cifs_convert_path_to_utf16 ( const char * from ,
struct cifs_sb_info * cifs_sb ) ;
2011-03-15 05:08:48 +03:00
2012-09-19 03:20:34 +04:00
extern int smb2_verify_signature ( struct smb_rqst * , struct TCP_Server_Info * ) ;
2011-12-26 22:53:34 +04:00
extern int smb2_check_receive ( struct mid_q_entry * mid ,
struct TCP_Server_Info * server , bool log_error ) ;
2012-09-19 03:20:35 +04:00
extern struct mid_q_entry * smb2_setup_request ( struct cifs_ses * ses ,
2019-09-20 07:08:34 +03:00
struct TCP_Server_Info * ,
struct smb_rqst * rqst ) ;
2012-09-19 03:20:35 +04:00
extern struct mid_q_entry * smb2_setup_async_request (
struct TCP_Server_Info * server , struct smb_rqst * rqst ) ;
2017-03-04 02:41:38 +03:00
extern struct cifs_ses * smb2_find_smb_ses ( struct TCP_Server_Info * server ,
__u64 ses_id ) ;
extern struct cifs_tcon * smb2_find_smb_tcon ( struct TCP_Server_Info * server ,
__u64 ses_id , __u32 tid ) ;
2012-12-09 08:08:06 +04:00
extern int smb2_calc_signature ( struct smb_rqst * rqst ,
2020-04-01 02:21:43 +03:00
struct TCP_Server_Info * server ,
bool allocate_crypto ) ;
2012-12-09 08:08:06 +04:00
extern int smb3_calc_signature ( struct smb_rqst * rqst ,
2020-04-01 02:21:43 +03:00
struct TCP_Server_Info * server ,
bool allocate_crypto ) ;
2012-07-11 14:45:28 +04:00
extern void smb2_echo_request ( struct work_struct * work ) ;
2012-09-19 17:22:45 +04:00
extern __le32 smb2_get_lease_state ( struct cifsInodeInfo * cinode ) ;
2012-09-19 03:20:33 +04:00
extern bool smb2_is_valid_oplock_break ( char * buffer ,
struct TCP_Server_Info * srv ) ;
2016-11-18 02:24:46 +03:00
extern int smb3_handle_read_data ( struct TCP_Server_Info * server ,
struct mid_q_entry * mid ) ;
2020-10-23 06:03:14 +03:00
extern int smb2_query_reparse_tag ( const unsigned int xid , struct cifs_tcon * tcon ,
struct cifs_sb_info * cifs_sb , const char * path ,
__u32 * reparse_tag ) ;
2023-08-17 18:34:01 +03:00
int smb2_query_path_info ( const unsigned int xid ,
struct cifs_tcon * tcon ,
struct cifs_sb_info * cifs_sb ,
const char * full_path ,
struct cifs_open_info_data * data ) ;
2012-09-19 03:20:32 +04:00
extern int smb2_set_path_size ( const unsigned int xid , struct cifs_tcon * tcon ,
const char * full_path , __u64 size ,
struct cifs_sb_info * cifs_sb , bool set_alloc ) ;
2012-09-19 03:20:32 +04:00
extern int smb2_set_file_info ( struct inode * inode , const char * full_path ,
FILE_BASIC_INFO * buf , const unsigned int xid ) ;
2018-06-15 05:56:32 +03:00
extern int smb311_posix_mkdir ( const unsigned int xid , struct inode * inode ,
umode_t mode , struct cifs_tcon * tcon ,
const char * full_path ,
struct cifs_sb_info * cifs_sb ) ;
2019-09-25 08:32:13 +03:00
extern int smb2_mkdir ( const unsigned int xid , struct inode * inode ,
umode_t mode , struct cifs_tcon * tcon ,
2011-07-19 12:56:37 +04:00
const char * name , struct cifs_sb_info * cifs_sb ) ;
extern void smb2_mkdir_setinfo ( struct inode * inode , const char * full_path ,
struct cifs_sb_info * cifs_sb ,
struct cifs_tcon * tcon , const unsigned int xid ) ;
2012-07-10 16:14:38 +04:00
extern int smb2_rmdir ( const unsigned int xid , struct cifs_tcon * tcon ,
const char * name , struct cifs_sb_info * cifs_sb ) ;
2012-09-19 03:20:25 +04:00
extern int smb2_unlink ( const unsigned int xid , struct cifs_tcon * tcon ,
const char * name , struct cifs_sb_info * cifs_sb ) ;
2012-09-19 03:20:31 +04:00
extern int smb2_rename_path ( const unsigned int xid , struct cifs_tcon * tcon ,
const char * from_name , const char * to_name ,
struct cifs_sb_info * cifs_sb ) ;
2012-09-19 03:20:31 +04:00
extern int smb2_create_hardlink ( const unsigned int xid , struct cifs_tcon * tcon ,
const char * from_name , const char * to_name ,
struct cifs_sb_info * cifs_sb ) ;
2014-09-15 13:49:28 +04:00
extern int smb3_create_mf_symlink ( unsigned int xid , struct cifs_tcon * tcon ,
struct cifs_sb_info * cifs_sb , const unsigned char * path ,
char * pbuf , unsigned int * pbytes_written ) ;
2014-09-16 16:18:19 +04:00
extern int smb3_query_mf_symlink ( unsigned int xid , struct cifs_tcon * tcon ,
struct cifs_sb_info * cifs_sb ,
const unsigned char * path , char * pbuf ,
unsigned int * pbytes_read ) ;
2022-10-04 00:43:50 +03:00
int smb2_parse_symlink_response ( struct cifs_sb_info * cifs_sb , const struct kvec * iov , char * * path ) ;
int smb2_open_file ( const unsigned int xid , struct cifs_open_parms * oparms , __u32 * oplock ,
void * buf ) ;
2012-09-19 17:22:43 +04:00
extern int smb2_unlock_range ( struct cifsFileInfo * cfile ,
struct file_lock * flock , const unsigned int xid ) ;
2012-09-19 17:22:44 +04:00
extern int smb2_push_mandatory_locks ( struct cifsFileInfo * cfile ) ;
2016-11-04 21:50:31 +03:00
extern void smb2_reconnect_server ( struct work_struct * work ) ;
2016-11-04 02:47:37 +03:00
extern int smb3_crypto_aead_allocate ( struct TCP_Server_Info * server ) ;
2018-06-28 03:47:14 +03:00
extern unsigned long smb_rqst_len ( struct TCP_Server_Info * server ,
struct smb_rqst * rqst ) ;
2018-12-31 06:43:40 +03:00
extern void smb2_set_next_command ( struct cifs_tcon * tcon ,
struct smb_rqst * rqst ) ;
2018-09-03 06:33:41 +03:00
extern void smb2_set_related ( struct smb_rqst * rqst ) ;
2012-09-19 03:20:26 +04:00
2011-12-27 16:12:43 +04:00
/*
* SMB2 Worker functions - most of protocol specific implementation details
* are contained within these calls .
*/
2021-07-19 16:54:16 +03:00
extern int SMB2_negotiate ( const unsigned int xid ,
struct cifs_ses * ses ,
struct TCP_Server_Info * server ) ;
2011-12-27 16:22:00 +04:00
extern int SMB2_sess_setup ( const unsigned int xid , struct cifs_ses * ses ,
2021-07-19 16:54:16 +03:00
struct TCP_Server_Info * server ,
2011-12-27 16:22:00 +04:00
const struct nls_table * nls_cp ) ;
extern int SMB2_logoff ( const unsigned int xid , struct cifs_ses * ses ) ;
2011-12-27 16:04:00 +04:00
extern int SMB2_tcon ( const unsigned int xid , struct cifs_ses * ses ,
const char * tree , struct cifs_tcon * tcon ,
const struct nls_table * ) ;
extern int SMB2_tdis ( const unsigned int xid , struct cifs_tcon * tcon ) ;
2013-07-09 18:20:30 +04:00
extern int SMB2_open ( const unsigned int xid , struct cifs_open_parms * oparms ,
__le16 * path , __u8 * oplock ,
2013-08-14 19:25:21 +04:00
struct smb2_file_all_info * buf ,
2020-03-02 19:53:22 +03:00
struct create_posix_rsp * posix ,
2018-06-08 06:21:18 +03:00
struct kvec * err_iov , int * resp_buftype ) ;
2020-05-31 20:38:22 +03:00
extern int SMB2_open_init ( struct cifs_tcon * tcon ,
struct TCP_Server_Info * server ,
struct smb_rqst * rqst ,
2018-08-08 08:07:46 +03:00
__u8 * oplock , struct cifs_open_parms * oparms ,
__le16 * path ) ;
extern void SMB2_open_free ( struct smb_rqst * rqst ) ;
2013-06-25 09:20:49 +04:00
extern int SMB2_ioctl ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid , u32 opcode ,
2022-08-17 22:08:34 +03:00
char * in_data , u32 indatalen , u32 maxoutlen ,
2013-06-25 09:20:49 +04:00
char * * out_data , u32 * plen /* returned data len */ ) ;
2020-05-31 20:38:22 +03:00
extern int SMB2_ioctl_init ( struct cifs_tcon * tcon ,
struct TCP_Server_Info * server ,
struct smb_rqst * rqst ,
2019-03-13 07:37:48 +03:00
u64 persistent_fid , u64 volatile_fid , u32 opcode ,
2022-08-17 22:08:34 +03:00
char * in_data , u32 indatalen ,
2019-03-29 06:32:49 +03:00
__u32 max_response_size ) ;
2019-03-13 07:37:48 +03:00
extern void SMB2_ioctl_free ( struct smb_rqst * rqst ) ;
2019-10-02 05:25:46 +03:00
extern int SMB2_change_notify ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid , bool watch_tree ,
2022-10-15 08:43:22 +03:00
u32 completion_filter , u32 max_out_data_len ,
char * * out_data , u32 * plen /* returned data len */ ) ;
2019-10-02 05:25:46 +03:00
2019-12-03 06:46:54 +03:00
extern int __SMB2_close ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid ,
struct smb2_file_network_open_info * pbuf ) ;
2011-12-26 22:58:46 +04:00
extern int SMB2_close ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_file_id , u64 volatile_file_id ) ;
2020-05-31 20:38:22 +03:00
extern int SMB2_close_init ( struct cifs_tcon * tcon ,
struct TCP_Server_Info * server ,
struct smb_rqst * rqst ,
u64 persistent_fid , u64 volatile_fid ,
bool query_attrs ) ;
2018-08-01 02:26:16 +03:00
extern void SMB2_close_free ( struct smb_rqst * rqst ) ;
2012-09-19 03:20:28 +04:00
extern int SMB2_flush ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_file_id , u64 volatile_file_id ) ;
2019-07-16 08:07:08 +03:00
extern int SMB2_flush_init ( const unsigned int xid , struct smb_rqst * rqst ,
struct cifs_tcon * tcon ,
2020-05-31 20:38:22 +03:00
struct TCP_Server_Info * server ,
2019-07-16 08:07:08 +03:00
u64 persistent_file_id , u64 volatile_file_id ) ;
extern void SMB2_flush_free ( struct smb_rqst * rqst ) ;
2020-06-12 04:23:38 +03:00
extern int SMB311_posix_query_info ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid , struct smb311_posix_qinfo * data , u32 * plen ) ;
2011-12-29 17:06:33 +04:00
extern int SMB2_query_info ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_file_id , u64 volatile_file_id ,
struct smb2_file_all_info * data ) ;
2020-05-31 20:38:22 +03:00
extern int SMB2_query_info_init ( struct cifs_tcon * tcon ,
struct TCP_Server_Info * server ,
struct smb_rqst * rqst ,
2018-08-01 02:26:17 +03:00
u64 persistent_fid , u64 volatile_fid ,
u8 info_class , u8 info_type ,
2018-10-08 03:19:58 +03:00
u32 additional_info , size_t output_len ,
size_t input_len , void * input ) ;
2018-08-01 02:26:17 +03:00
extern void SMB2_query_info_free ( struct smb_rqst * rqst ) ;
2017-06-23 06:51:31 +03:00
extern int SMB2_query_acl ( const unsigned int xid , struct cifs_tcon * tcon ,
2020-12-18 20:30:12 +03:00
u64 persistent_file_id , u64 volatile_file_id ,
void * * data , unsigned int * plen , u32 info ) ;
2012-09-19 03:20:26 +04:00
extern int SMB2_get_srv_num ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid ,
__le64 * uniqueid ) ;
2012-09-19 03:20:29 +04:00
extern int smb2_async_readv ( struct cifs_readdata * rdata ) ;
2012-09-19 03:20:30 +04:00
extern int SMB2_read ( const unsigned int xid , struct cifs_io_parms * io_parms ,
unsigned int * nbytes , char * * buf , int * buf_type ) ;
2014-02-08 06:45:12 +04:00
extern int smb2_async_writev ( struct cifs_writedata * wdata ,
void ( * release ) ( struct kref * kref ) ) ;
2012-09-19 03:20:30 +04:00
extern int SMB2_write ( const unsigned int xid , struct cifs_io_parms * io_parms ,
unsigned int * nbytes , struct kvec * iov , int n_vec ) ;
2012-07-12 18:30:44 +04:00
extern int SMB2_echo ( struct TCP_Server_Info * server ) ;
2012-09-19 03:20:33 +04:00
extern int SMB2_query_directory ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid , int index ,
struct cifs_search_info * srch_inf ) ;
2020-01-08 06:08:04 +03:00
extern int SMB2_query_directory_init ( unsigned int xid , struct cifs_tcon * tcon ,
2020-05-31 20:38:22 +03:00
struct TCP_Server_Info * server ,
2020-01-08 06:08:04 +03:00
struct smb_rqst * rqst ,
u64 persistent_fid , u64 volatile_fid ,
int index , int info_level ) ;
extern void SMB2_query_directory_free ( struct smb_rqst * rqst ) ;
2012-09-19 03:20:32 +04:00
extern int SMB2_set_eof ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid , u32 pid ,
2018-09-03 06:33:47 +03:00
__le64 * eof ) ;
2020-05-31 20:38:22 +03:00
extern int SMB2_set_info_init ( struct cifs_tcon * tcon ,
struct TCP_Server_Info * server ,
struct smb_rqst * rqst ,
2018-09-03 06:33:44 +03:00
u64 persistent_fid , u64 volatile_fid , u32 pid ,
u8 info_class , u8 info_type , u32 additional_info ,
void * * data , unsigned int * size ) ;
extern void SMB2_set_info_free ( struct smb_rqst * rqst ) ;
2017-06-29 06:37:00 +03:00
extern int SMB2_set_acl ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid ,
struct cifs_ntsd * pnntsd , int pacllen , int aclflag ) ;
2017-08-24 04:24:56 +03:00
extern int SMB2_set_ea ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid ,
struct smb2_file_full_ea_info * buf , int len ) ;
2013-10-15 00:31:32 +04:00
extern int SMB2_set_compression ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_fid , u64 volatile_fid ) ;
2012-09-19 03:20:33 +04:00
extern int SMB2_oplock_break ( const unsigned int xid , struct cifs_tcon * tcon ,
const u64 persistent_fid , const u64 volatile_fid ,
const __u8 oplock_level ) ;
2019-11-21 22:35:12 +03:00
extern int smb2_handle_cancelled_close ( struct cifs_tcon * tcon ,
__u64 persistent_fid ,
__u64 volatile_fid ) ;
2021-03-08 18:00:50 +03:00
extern int smb2_handle_cancelled_mid ( struct mid_q_entry * mid , struct TCP_Server_Info * server ) ;
2017-03-04 02:41:38 +03:00
void smb2_cancelled_close_fid ( struct work_struct * work ) ;
2012-09-19 03:20:34 +04:00
extern int SMB2_QFS_info ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_file_id , u64 volatile_file_id ,
struct kstatfs * FSData ) ;
2018-06-25 07:28:12 +03:00
extern int SMB311_posix_qfs_info ( const unsigned int xid , struct cifs_tcon * tcon ,
u64 persistent_file_id , u64 volatile_file_id ,
struct kstatfs * FSData ) ;
2013-10-09 11:07:00 +04:00
extern int SMB2_QFS_attr ( const unsigned int xid , struct cifs_tcon * tcon ,
2013-10-09 22:36:35 +04:00
u64 persistent_file_id , u64 volatile_file_id , int lvl ) ;
2012-09-19 17:22:43 +04:00
extern int SMB2_lock ( const unsigned int xid , struct cifs_tcon * tcon ,
const __u64 persist_fid , const __u64 volatile_fid ,
const __u32 pid , const __u64 length , const __u64 offset ,
const __u32 lockFlags , const bool wait ) ;
extern int smb2_lockv ( const unsigned int xid , struct cifs_tcon * tcon ,
const __u64 persist_fid , const __u64 volatile_fid ,
const __u32 pid , const __u32 num_lock ,
struct smb2_lock_element * buf ) ;
2012-09-19 17:22:45 +04:00
extern int SMB2_lease_break ( const unsigned int xid , struct cifs_tcon * tcon ,
__u8 * lease_key , const __le32 lease_state ) ;
2013-11-20 09:44:46 +04:00
extern int smb3_validate_negotiate ( const unsigned int , struct cifs_tcon * ) ;
2011-12-27 16:12:43 +04:00
2017-01-18 13:05:57 +03:00
extern enum securityEnum smb2_select_sectype ( struct TCP_Server_Info * ,
enum securityEnum ) ;
2019-07-19 01:22:18 +03:00
extern void smb2_parse_contexts ( struct TCP_Server_Info * server ,
struct smb2_create_rsp * rsp ,
unsigned int * epoch , char * lease_key ,
2020-03-02 19:53:22 +03:00
__u8 * oplock , struct smb2_file_all_info * buf ,
struct create_posix_rsp * posix ) ;
2018-08-08 08:07:49 +03:00
extern int smb3_encryption_required ( const struct cifs_tcon * tcon ) ;
extern int smb2_validate_iov ( unsigned int offset , unsigned int buffer_length ,
struct kvec * iov , unsigned int min_buf_size ) ;
2018-09-03 06:33:41 +03:00
extern int smb2_validate_and_copy_iov ( unsigned int offset ,
unsigned int buffer_length ,
struct kvec * iov ,
unsigned int minbufsize , char * data ) ;
2018-08-08 08:07:49 +03:00
extern void smb2_copy_fs_info_to_kstatfs (
struct smb2_fs_full_size_info * pfs_inf ,
struct kstatfs * kst ) ;
2018-02-16 21:19:28 +03:00
extern int smb311_crypto_shash_allocate ( struct TCP_Server_Info * server ) ;
2018-02-16 21:19:29 +03:00
extern int smb311_update_preauth_hash ( struct cifs_ses * ses ,
2021-07-19 16:54:16 +03:00
struct TCP_Server_Info * server ,
2018-02-16 21:19:29 +03:00
struct kvec * iov , int nvec ) ;
2018-11-27 02:52:04 +03:00
extern int smb2_query_info_compound ( const unsigned int xid ,
struct cifs_tcon * tcon ,
2022-03-22 09:29:02 +03:00
const char * path , u32 desired_access ,
2018-11-27 02:52:04 +03:00
u32 class , u32 type , u32 output_len ,
struct kvec * rsp , int * buftype ,
struct cifs_sb_info * cifs_sb ) ;
2020-06-12 03:25:47 +03:00
/* query path info from the server using SMB311 POSIX extensions*/
2023-08-17 18:34:01 +03:00
int smb311_posix_query_path_info ( const unsigned int xid ,
struct cifs_tcon * tcon ,
struct cifs_sb_info * cifs_sb ,
const char * full_path ,
2022-11-25 14:37:44 +03:00
struct cifs_open_info_data * data ,
struct cifs_sid * owner ,
2023-08-17 18:34:01 +03:00
struct cifs_sid * group ) ;
2020-02-08 17:50:57 +03:00
int posix_info_parse ( const void * beg , const void * end ,
struct smb2_posix_info_parsed * out ) ;
2020-03-02 19:53:22 +03:00
int posix_info_sid_size ( const void * beg , const void * end ) ;
2011-03-15 05:08:48 +03:00
# endif /* _SMB2PROTO_H */