brintos

brintos / linux-shallow public Read only

0
0
Text · 14.8 KiB · 6f9885e Raw
322 lines · c
1/* SPDX-License-Identifier: LGPL-2.1 */2/*3 *4 *   Copyright (c) International Business Machines  Corp., 2002, 20115 *                 Etersoft, 20126 *   Author(s): Steve French (sfrench@us.ibm.com)7 *              Pavel Shilovsky (pshilovsky@samba.org) 20128 *9 */10#ifndef _SMB2PROTO_H11#define _SMB2PROTO_H12#include <linux/nls.h>13#include <linux/key-type.h>14 15struct statfs;16struct smb_rqst;17 18/*19 *****************************************************************20 * All Prototypes21 *****************************************************************22 */23extern int map_smb2_to_linux_error(char *buf, bool log_err);24extern int smb2_check_message(char *buf, unsigned int length,25			      struct TCP_Server_Info *server);26extern unsigned int smb2_calc_size(void *buf);27extern char *smb2_get_data_area_len(int *off, int *len,28				    struct smb2_hdr *shdr);29extern __le16 *cifs_convert_path_to_utf16(const char *from,30					  struct cifs_sb_info *cifs_sb);31 32extern int smb2_verify_signature(struct smb_rqst *, struct TCP_Server_Info *);33extern int smb2_check_receive(struct mid_q_entry *mid,34			      struct TCP_Server_Info *server, bool log_error);35extern struct mid_q_entry *smb2_setup_request(struct cifs_ses *ses,36					      struct TCP_Server_Info *,37					      struct smb_rqst *rqst);38extern struct mid_q_entry *smb2_setup_async_request(39			struct TCP_Server_Info *server, struct smb_rqst *rqst);40extern struct cifs_ses *smb2_find_smb_ses(struct TCP_Server_Info *server,41					   __u64 ses_id);42extern struct cifs_tcon *smb2_find_smb_tcon(struct TCP_Server_Info *server,43						__u64 ses_id, __u32  tid);44extern int smb2_calc_signature(struct smb_rqst *rqst,45				struct TCP_Server_Info *server,46				bool allocate_crypto);47extern int smb3_calc_signature(struct smb_rqst *rqst,48				struct TCP_Server_Info *server,49				bool allocate_crypto);50extern void smb2_echo_request(struct work_struct *work);51extern __le32 smb2_get_lease_state(struct cifsInodeInfo *cinode);52extern bool smb2_is_valid_oplock_break(char *buffer,53				       struct TCP_Server_Info *srv);54extern int smb3_handle_read_data(struct TCP_Server_Info *server,55				 struct mid_q_entry *mid);56extern int smb2_query_reparse_tag(const unsigned int xid, struct cifs_tcon *tcon,57				struct cifs_sb_info *cifs_sb, const char *path,58				__u32 *reparse_tag);59struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,60				     struct super_block *sb,61				     const unsigned int xid,62				     struct cifs_tcon *tcon,63				     const char *full_path,64				     bool directory,65				     struct kvec *reparse_iov,66				     struct kvec *xattr_iov);67int smb2_query_reparse_point(const unsigned int xid,68			     struct cifs_tcon *tcon,69			     struct cifs_sb_info *cifs_sb,70			     const char *full_path,71			     u32 *tag, struct kvec *rsp,72			     int *rsp_buftype);73int smb2_query_path_info(const unsigned int xid,74			 struct cifs_tcon *tcon,75			 struct cifs_sb_info *cifs_sb,76			 const char *full_path,77			 struct cifs_open_info_data *data);78extern int smb2_set_path_size(const unsigned int xid, struct cifs_tcon *tcon,79			      const char *full_path, __u64 size,80			      struct cifs_sb_info *cifs_sb, bool set_alloc,81				  struct dentry *dentry);82extern int smb2_set_file_info(struct inode *inode, const char *full_path,83			      FILE_BASIC_INFO *buf, const unsigned int xid);84extern int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,85			       umode_t mode, struct cifs_tcon *tcon,86			       const char *full_path,87			       struct cifs_sb_info *cifs_sb);88extern int smb2_mkdir(const unsigned int xid, struct inode *inode,89		      umode_t mode, struct cifs_tcon *tcon,90		      const char *name, struct cifs_sb_info *cifs_sb);91extern void smb2_mkdir_setinfo(struct inode *inode, const char *full_path,92			       struct cifs_sb_info *cifs_sb,93			       struct cifs_tcon *tcon, const unsigned int xid);94extern int smb2_rmdir(const unsigned int xid, struct cifs_tcon *tcon,95		      const char *name, struct cifs_sb_info *cifs_sb);96extern int smb2_unlink(const unsigned int xid, struct cifs_tcon *tcon,97		       const char *name, struct cifs_sb_info *cifs_sb,98			   struct dentry *dentry);99int smb2_rename_path(const unsigned int xid,100		     struct cifs_tcon *tcon,101		     struct dentry *source_dentry,102		     const char *from_name, const char *to_name,103		     struct cifs_sb_info *cifs_sb);104int smb2_create_hardlink(const unsigned int xid,105			 struct cifs_tcon *tcon,106			 struct dentry *source_dentry,107			 const char *from_name, const char *to_name,108			 struct cifs_sb_info *cifs_sb);109extern int smb3_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,110			struct cifs_sb_info *cifs_sb, const unsigned char *path,111			char *pbuf, unsigned int *pbytes_written);112extern int smb3_query_mf_symlink(unsigned int xid, struct cifs_tcon *tcon,113			  struct cifs_sb_info *cifs_sb,114			  const unsigned char *path, char *pbuf,115			  unsigned int *pbytes_read);116int smb2_parse_symlink_response(struct cifs_sb_info *cifs_sb, const struct kvec *iov, char **path);117int smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms, __u32 *oplock,118		   void *buf);119extern int smb2_unlock_range(struct cifsFileInfo *cfile,120			     struct file_lock *flock, const unsigned int xid);121extern int smb2_push_mandatory_locks(struct cifsFileInfo *cfile);122extern void smb2_reconnect_server(struct work_struct *work);123extern int smb3_crypto_aead_allocate(struct TCP_Server_Info *server);124extern unsigned long smb_rqst_len(struct TCP_Server_Info *server,125				  struct smb_rqst *rqst);126extern void smb2_set_next_command(struct cifs_tcon *tcon,127				  struct smb_rqst *rqst);128extern void smb2_set_related(struct smb_rqst *rqst);129extern void smb2_set_replay(struct TCP_Server_Info *server,130			    struct smb_rqst *rqst);131extern bool smb2_should_replay(struct cifs_tcon *tcon,132			  int *pretries,133			  int *pcur_sleep);134 135/*136 * SMB2 Worker functions - most of protocol specific implementation details137 * are contained within these calls.138 */139extern int SMB2_negotiate(const unsigned int xid,140			  struct cifs_ses *ses,141			  struct TCP_Server_Info *server);142extern int SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses,143			   struct TCP_Server_Info *server,144			   const struct nls_table *nls_cp);145extern int SMB2_logoff(const unsigned int xid, struct cifs_ses *ses);146extern int SMB2_tcon(const unsigned int xid, struct cifs_ses *ses,147		     const char *tree, struct cifs_tcon *tcon,148		     const struct nls_table *);149extern int SMB2_tdis(const unsigned int xid, struct cifs_tcon *tcon);150extern int SMB2_open(const unsigned int xid, struct cifs_open_parms *oparms,151		     __le16 *path, __u8 *oplock,152		     struct smb2_file_all_info *buf,153		     struct create_posix_rsp *posix,154		     struct kvec *err_iov, int *resp_buftype);155extern int SMB2_open_init(struct cifs_tcon *tcon,156			  struct TCP_Server_Info *server,157			  struct smb_rqst *rqst,158			  __u8 *oplock, struct cifs_open_parms *oparms,159			  __le16 *path);160extern void SMB2_open_free(struct smb_rqst *rqst);161extern int SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon,162		     u64 persistent_fid, u64 volatile_fid, u32 opcode,163		     char *in_data, u32 indatalen, u32 maxoutlen,164		     char **out_data, u32 *plen /* returned data len */);165extern int SMB2_ioctl_init(struct cifs_tcon *tcon,166			   struct TCP_Server_Info *server,167			   struct smb_rqst *rqst,168			   u64 persistent_fid, u64 volatile_fid, u32 opcode,169			   char *in_data, u32 indatalen,170			   __u32 max_response_size);171extern void SMB2_ioctl_free(struct smb_rqst *rqst);172extern int SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,173			u64 persistent_fid, u64 volatile_fid, bool watch_tree,174			u32 completion_filter, u32 max_out_data_len,175			char **out_data, u32 *plen /* returned data len */);176 177extern int __SMB2_close(const unsigned int xid, struct cifs_tcon *tcon,178			u64 persistent_fid, u64 volatile_fid,179			struct smb2_file_network_open_info *pbuf);180extern int SMB2_close(const unsigned int xid, struct cifs_tcon *tcon,181		      u64 persistent_file_id, u64 volatile_file_id);182extern int SMB2_close_init(struct cifs_tcon *tcon,183			   struct TCP_Server_Info *server,184			   struct smb_rqst *rqst,185			   u64 persistent_fid, u64 volatile_fid,186			   bool query_attrs);187extern void SMB2_close_free(struct smb_rqst *rqst);188extern int SMB2_flush(const unsigned int xid, struct cifs_tcon *tcon,189		      u64 persistent_file_id, u64 volatile_file_id);190extern int SMB2_flush_init(const unsigned int xid, struct smb_rqst *rqst,191			   struct cifs_tcon *tcon,192			   struct TCP_Server_Info *server,193			   u64 persistent_file_id, u64 volatile_file_id);194extern void SMB2_flush_free(struct smb_rqst *rqst);195extern int SMB311_posix_query_info(const unsigned int xid, struct cifs_tcon *tcon,196		u64 persistent_fid, u64 volatile_fid, struct smb311_posix_qinfo *data, u32 *plen);197extern int SMB2_query_info(const unsigned int xid, struct cifs_tcon *tcon,198			   u64 persistent_file_id, u64 volatile_file_id,199			   struct smb2_file_all_info *data);200extern int SMB2_query_info_init(struct cifs_tcon *tcon,201				struct TCP_Server_Info *server,202				struct smb_rqst *rqst,203				u64 persistent_fid, u64 volatile_fid,204				u8 info_class, u8 info_type,205				u32 additional_info, size_t output_len,206				size_t input_len, void *input);207extern void SMB2_query_info_free(struct smb_rqst *rqst);208extern int SMB2_query_acl(const unsigned int xid, struct cifs_tcon *tcon,209			  u64 persistent_file_id, u64 volatile_file_id,210			  void **data, unsigned int *plen, u32 info);211extern int SMB2_get_srv_num(const unsigned int xid, struct cifs_tcon *tcon,212			    u64 persistent_fid, u64 volatile_fid,213			    __le64 *uniqueid);214extern int smb2_async_readv(struct cifs_io_subrequest *rdata);215extern int SMB2_read(const unsigned int xid, struct cifs_io_parms *io_parms,216		     unsigned int *nbytes, char **buf, int *buf_type);217extern void smb2_async_writev(struct cifs_io_subrequest *wdata);218extern int SMB2_write(const unsigned int xid, struct cifs_io_parms *io_parms,219		      unsigned int *nbytes, struct kvec *iov, int n_vec);220extern int SMB2_echo(struct TCP_Server_Info *server);221extern int SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,222				u64 persistent_fid, u64 volatile_fid, int index,223				struct cifs_search_info *srch_inf);224extern int SMB2_query_directory_init(unsigned int xid, struct cifs_tcon *tcon,225				     struct TCP_Server_Info *server,226				     struct smb_rqst *rqst,227				     u64 persistent_fid, u64 volatile_fid,228				     int index, int info_level);229extern void SMB2_query_directory_free(struct smb_rqst *rqst);230extern int SMB2_set_eof(const unsigned int xid, struct cifs_tcon *tcon,231			u64 persistent_fid, u64 volatile_fid, u32 pid,232			loff_t new_eof);233extern int SMB2_set_info_init(struct cifs_tcon *tcon,234			      struct TCP_Server_Info *server,235			      struct smb_rqst *rqst,236			      u64 persistent_fid, u64 volatile_fid, u32 pid,237			      u8 info_class, u8 info_type, u32 additional_info,238			      void **data, unsigned int *size);239extern void SMB2_set_info_free(struct smb_rqst *rqst);240extern int SMB2_set_acl(const unsigned int xid, struct cifs_tcon *tcon,241			u64 persistent_fid, u64 volatile_fid,242			struct smb_ntsd *pnntsd, int pacllen, int aclflag);243extern int SMB2_set_ea(const unsigned int xid, struct cifs_tcon *tcon,244		       u64 persistent_fid, u64 volatile_fid,245		       struct smb2_file_full_ea_info *buf, int len);246extern int SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon,247				u64 persistent_fid, u64 volatile_fid);248extern int SMB2_oplock_break(const unsigned int xid, struct cifs_tcon *tcon,249			     const u64 persistent_fid, const u64 volatile_fid,250			     const __u8 oplock_level);251extern int smb2_handle_cancelled_close(struct cifs_tcon *tcon,252				       __u64 persistent_fid,253				       __u64 volatile_fid);254extern int smb2_handle_cancelled_mid(struct mid_q_entry *mid, struct TCP_Server_Info *server);255void smb2_cancelled_close_fid(struct work_struct *work);256extern int SMB2_QFS_info(const unsigned int xid, struct cifs_tcon *tcon,257			 u64 persistent_file_id, u64 volatile_file_id,258			 struct kstatfs *FSData);259extern int SMB311_posix_qfs_info(const unsigned int xid, struct cifs_tcon *tcon,260			 u64 persistent_file_id, u64 volatile_file_id,261			 struct kstatfs *FSData);262extern int SMB2_QFS_attr(const unsigned int xid, struct cifs_tcon *tcon,263			 u64 persistent_file_id, u64 volatile_file_id, int lvl);264extern int SMB2_lock(const unsigned int xid, struct cifs_tcon *tcon,265		     const __u64 persist_fid, const __u64 volatile_fid,266		     const __u32 pid, const __u64 length, const __u64 offset,267		     const __u32 lockFlags, const bool wait);268extern int smb2_lockv(const unsigned int xid, struct cifs_tcon *tcon,269		      const __u64 persist_fid, const __u64 volatile_fid,270		      const __u32 pid, const __u32 num_lock,271		      struct smb2_lock_element *buf);272extern int SMB2_lease_break(const unsigned int xid, struct cifs_tcon *tcon,273			    __u8 *lease_key, const __le32 lease_state);274extern int smb3_validate_negotiate(const unsigned int, struct cifs_tcon *);275 276extern enum securityEnum smb2_select_sectype(struct TCP_Server_Info *,277					enum securityEnum);278int smb2_parse_contexts(struct TCP_Server_Info *server,279			struct kvec *rsp_iov,280			unsigned int *epoch,281			char *lease_key, __u8 *oplock,282			struct smb2_file_all_info *buf,283			struct create_posix_rsp *posix);284 285extern int smb3_encryption_required(const struct cifs_tcon *tcon);286extern int smb2_validate_iov(unsigned int offset, unsigned int buffer_length,287			     struct kvec *iov, unsigned int min_buf_size);288extern int smb2_validate_and_copy_iov(unsigned int offset,289				      unsigned int buffer_length,290				      struct kvec *iov,291				      unsigned int minbufsize, char *data);292extern void smb2_copy_fs_info_to_kstatfs(293	 struct smb2_fs_full_size_info *pfs_inf,294	 struct kstatfs *kst);295extern int smb311_crypto_shash_allocate(struct TCP_Server_Info *server);296extern int smb311_update_preauth_hash(struct cifs_ses *ses,297				      struct TCP_Server_Info *server,298				      struct kvec *iov, int nvec);299extern int smb2_query_info_compound(const unsigned int xid,300				    struct cifs_tcon *tcon,301				    const char *path, u32 desired_access,302				    u32 class, u32 type, u32 output_len,303				    struct kvec *rsp, int *buftype,304				    struct cifs_sb_info *cifs_sb);305/* query path info from the server using SMB311 POSIX extensions*/306int smb311_posix_query_path_info(const unsigned int xid,307				 struct cifs_tcon *tcon,308				 struct cifs_sb_info *cifs_sb,309				 const char *full_path,310				 struct cifs_open_info_data *data);311int posix_info_parse(const void *beg, const void *end,312		     struct smb2_posix_info_parsed *out);313int posix_info_sid_size(const void *beg, const void *end);314int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,315				struct dentry *dentry, struct cifs_tcon *tcon,316				const char *full_path, const char *symname);317int smb2_make_nfs_node(unsigned int xid, struct inode *inode,318		       struct dentry *dentry, struct cifs_tcon *tcon,319		       const char *full_path, umode_t mode, dev_t dev);320 321#endif			/* _SMB2PROTO_H */322