linux/fs/cifs/cifsproto.h
<<
>>
Prefs
   1/*
   2 *   fs/cifs/cifsproto.h
   3 *
   4 *   Copyright (c) International Business Machines  Corp., 2002,2008
   5 *   Author(s): Steve French (sfrench@us.ibm.com)
   6 *
   7 *   This library is free software; you can redistribute it and/or modify
   8 *   it under the terms of the GNU Lesser General Public License as published
   9 *   by the Free Software Foundation; either version 2.1 of the License, or
  10 *   (at your option) any later version.
  11 *
  12 *   This library is distributed in the hope that it will be useful,
  13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  15 *   the GNU Lesser General Public License for more details.
  16 *
  17 *   You should have received a copy of the GNU Lesser General Public License
  18 *   along with this library; if not, write to the Free Software
  19 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20 */
  21#ifndef _CIFSPROTO_H
  22#define _CIFSPROTO_H
  23#include <linux/nls.h>
  24
  25struct statfs;
  26struct smb_vol;
  27
  28/*
  29 *****************************************************************
  30 * All Prototypes
  31 *****************************************************************
  32 */
  33
  34extern struct smb_hdr *cifs_buf_get(void);
  35extern void cifs_buf_release(void *);
  36extern struct smb_hdr *cifs_small_buf_get(void);
  37extern void cifs_small_buf_release(void *);
  38extern int smb_send(struct TCP_Server_Info *, struct smb_hdr *,
  39                        unsigned int /* length */);
  40extern unsigned int _GetXid(void);
  41extern void _FreeXid(unsigned int);
  42#define GetXid()                                                \
  43({                                                              \
  44        int __xid = (int)_GetXid();                             \
  45        cFYI(1, "CIFS VFS: in %s as Xid: %d with uid: %d",      \
  46             __func__, __xid, current_fsuid());                 \
  47        __xid;                                                  \
  48})
  49
  50#define FreeXid(curr_xid)                                       \
  51do {                                                            \
  52        _FreeXid(curr_xid);                                     \
  53        cFYI(1, "CIFS VFS: leaving %s (xid = %d) rc = %d",      \
  54             __func__, curr_xid, (int)rc);                      \
  55} while (0)
  56extern char *build_path_from_dentry(struct dentry *);
  57extern char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb,
  58                                        struct cifsTconInfo *tcon);
  59extern char *build_wildcard_path_from_dentry(struct dentry *direntry);
  60extern char *cifs_compose_mount_options(const char *sb_mountdata,
  61                const char *fullpath, const struct dfs_info3_param *ref,
  62                char **devname);
  63/* extern void renew_parental_timestamps(struct dentry *direntry);*/
  64extern struct mid_q_entry *AllocMidQEntry(const struct smb_hdr *smb_buffer,
  65                                        struct TCP_Server_Info *server);
  66extern void DeleteMidQEntry(struct mid_q_entry *midEntry);
  67extern int cifs_call_async(struct TCP_Server_Info *server,
  68                           struct smb_hdr *in_buf, mid_callback_t *callback,
  69                           void *cbdata);
  70extern int SendReceive(const unsigned int /* xid */ , struct cifsSesInfo *,
  71                        struct smb_hdr * /* input */ ,
  72                        struct smb_hdr * /* out */ ,
  73                        int * /* bytes returned */ , const int long_op);
  74extern int SendReceiveNoRsp(const unsigned int xid, struct cifsSesInfo *ses,
  75                        struct smb_hdr *in_buf, int flags);
  76extern int SendReceive2(const unsigned int /* xid */ , struct cifsSesInfo *,
  77                        struct kvec *, int /* nvec to send */,
  78                        int * /* type of buf returned */ , const int flags);
  79extern int SendReceiveBlockingLock(const unsigned int xid,
  80                        struct cifsTconInfo *ptcon,
  81                        struct smb_hdr *in_buf ,
  82                        struct smb_hdr *out_buf,
  83                        int *bytes_returned);
  84extern int checkSMB(struct smb_hdr *smb, __u16 mid, unsigned int length);
  85extern bool is_valid_oplock_break(struct smb_hdr *smb,
  86                                  struct TCP_Server_Info *);
  87extern bool is_size_safe_to_change(struct cifsInodeInfo *, __u64 eof);
  88extern void cifs_update_eof(struct cifsInodeInfo *cifsi, loff_t offset,
  89                            unsigned int bytes_written);
  90extern struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *, bool);
  91extern struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *, bool);
  92extern unsigned int smbCalcSize(struct smb_hdr *ptr);
  93extern unsigned int smbCalcSize_LE(struct smb_hdr *ptr);
  94extern int decode_negTokenInit(unsigned char *security_blob, int length,
  95                        struct TCP_Server_Info *server);
  96extern int cifs_convert_address(struct sockaddr *dst, const char *src, int len);
  97extern int cifs_set_port(struct sockaddr *addr, const unsigned short int port);
  98extern int cifs_fill_sockaddr(struct sockaddr *dst, const char *src, int len,
  99                                const unsigned short int port);
 100extern int map_smb_to_linux_error(struct smb_hdr *smb, int logErr);
 101extern void header_assemble(struct smb_hdr *, char /* command */ ,
 102                            const struct cifsTconInfo *, int /* length of
 103                            fixed section (word count) in two byte units */);
 104extern int small_smb_init_no_tc(const int smb_cmd, const int wct,
 105                                struct cifsSesInfo *ses,
 106                                void **request_buf);
 107extern int CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses,
 108                             const struct nls_table *nls_cp);
 109extern __u16 GetNextMid(struct TCP_Server_Info *server);
 110extern struct timespec cifs_NTtimeToUnix(__le64 utc_nanoseconds_since_1601);
 111extern u64 cifs_UnixTimeToNT(struct timespec);
 112extern struct timespec cnvrtDosUnixTm(__le16 le_date, __le16 le_time,
 113                                      int offset);
 114extern void cifs_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock);
 115
 116extern struct cifsFileInfo *cifs_new_fileinfo(__u16 fileHandle,
 117                                struct file *file, struct tcon_link *tlink,
 118                                __u32 oplock);
 119extern int cifs_posix_open(char *full_path, struct inode **pinode,
 120                                struct super_block *sb,
 121                                int mode, unsigned int f_flags,
 122                                __u32 *poplock, __u16 *pnetfid, int xid);
 123void cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr);
 124extern void cifs_unix_basic_to_fattr(struct cifs_fattr *fattr,
 125                                     FILE_UNIX_BASIC_INFO *info,
 126                                     struct cifs_sb_info *cifs_sb);
 127extern void cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr);
 128extern struct inode *cifs_iget(struct super_block *sb,
 129                               struct cifs_fattr *fattr);
 130
 131extern int cifs_get_file_info(struct file *filp);
 132extern int cifs_get_inode_info(struct inode **pinode,
 133                        const unsigned char *search_path,
 134                        FILE_ALL_INFO *pfile_info,
 135                        struct super_block *sb, int xid, const __u16 *pfid);
 136extern int cifs_get_file_info_unix(struct file *filp);
 137extern int cifs_get_inode_info_unix(struct inode **pinode,
 138                        const unsigned char *search_path,
 139                        struct super_block *sb, int xid);
 140extern int cifs_acl_to_fattr(struct cifs_sb_info *cifs_sb,
 141                              struct cifs_fattr *fattr, struct inode *inode,
 142                              const char *path, const __u16 *pfid);
 143extern int mode_to_cifs_acl(struct inode *inode, const char *path, __u64);
 144extern struct cifs_ntsd *get_cifs_acl(struct cifs_sb_info *, struct inode *,
 145                                        const char *, u32 *);
 146
 147extern int cifs_mount(struct super_block *, struct cifs_sb_info *, char *,
 148                        const char *);
 149extern int cifs_umount(struct super_block *, struct cifs_sb_info *);
 150extern void cifs_dfs_release_automount_timer(void);
 151void cifs_proc_init(void);
 152void cifs_proc_clean(void);
 153
 154extern int cifs_negotiate_protocol(unsigned int xid,
 155                                  struct cifsSesInfo *ses);
 156extern int cifs_setup_session(unsigned int xid, struct cifsSesInfo *ses,
 157                        struct nls_table *nls_info);
 158extern int CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses);
 159
 160extern int CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
 161                        const char *tree, struct cifsTconInfo *tcon,
 162                        const struct nls_table *);
 163
 164extern int CIFSFindFirst(const int xid, struct cifsTconInfo *tcon,
 165                const char *searchName, const struct nls_table *nls_codepage,
 166                __u16 *searchHandle, struct cifs_search_info *psrch_inf,
 167                int map, const char dirsep);
 168
 169extern int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
 170                __u16 searchHandle, struct cifs_search_info *psrch_inf);
 171
 172extern int CIFSFindClose(const int, struct cifsTconInfo *tcon,
 173                        const __u16 search_handle);
 174
 175extern int CIFSSMBQFileInfo(const int xid, struct cifsTconInfo *tcon,
 176                        u16 netfid, FILE_ALL_INFO *pFindData);
 177extern int CIFSSMBQPathInfo(const int xid, struct cifsTconInfo *tcon,
 178                        const unsigned char *searchName,
 179                        FILE_ALL_INFO *findData,
 180                        int legacy /* whether to use old info level */,
 181                        const struct nls_table *nls_codepage, int remap);
 182extern int SMBQueryInformation(const int xid, struct cifsTconInfo *tcon,
 183                        const unsigned char *searchName,
 184                        FILE_ALL_INFO *findData,
 185                        const struct nls_table *nls_codepage, int remap);
 186
 187extern int CIFSSMBUnixQFileInfo(const int xid, struct cifsTconInfo *tcon,
 188                        u16 netfid, FILE_UNIX_BASIC_INFO *pFindData);
 189extern int CIFSSMBUnixQPathInfo(const int xid,
 190                        struct cifsTconInfo *tcon,
 191                        const unsigned char *searchName,
 192                        FILE_UNIX_BASIC_INFO *pFindData,
 193                        const struct nls_table *nls_codepage, int remap);
 194
 195extern int CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses,
 196                        const unsigned char *searchName,
 197                        struct dfs_info3_param **target_nodes,
 198                        unsigned int *number_of_nodes_in_array,
 199                        const struct nls_table *nls_codepage, int remap);
 200
 201extern int get_dfs_path(int xid, struct cifsSesInfo *pSesInfo,
 202                        const char *old_path,
 203                        const struct nls_table *nls_codepage,
 204                        unsigned int *pnum_referrals,
 205                        struct dfs_info3_param **preferrals,
 206                        int remap);
 207extern void reset_cifs_unix_caps(int xid, struct cifsTconInfo *tcon,
 208                                 struct super_block *sb, struct smb_vol *vol);
 209extern int CIFSSMBQFSInfo(const int xid, struct cifsTconInfo *tcon,
 210                        struct kstatfs *FSData);
 211extern int SMBOldQFSInfo(const int xid, struct cifsTconInfo *tcon,
 212                        struct kstatfs *FSData);
 213extern int CIFSSMBSetFSUnixInfo(const int xid, struct cifsTconInfo *tcon,
 214                        __u64 cap);
 215
 216extern int CIFSSMBQFSAttributeInfo(const int xid,
 217                        struct cifsTconInfo *tcon);
 218extern int CIFSSMBQFSDeviceInfo(const int xid, struct cifsTconInfo *tcon);
 219extern int CIFSSMBQFSUnixInfo(const int xid, struct cifsTconInfo *tcon);
 220extern int CIFSSMBQFSPosixInfo(const int xid, struct cifsTconInfo *tcon,
 221                        struct kstatfs *FSData);
 222
 223extern int CIFSSMBSetPathInfo(const int xid, struct cifsTconInfo *tcon,
 224                        const char *fileName, const FILE_BASIC_INFO *data,
 225                        const struct nls_table *nls_codepage,
 226                        int remap_special_chars);
 227extern int CIFSSMBSetFileInfo(const int xid, struct cifsTconInfo *tcon,
 228                        const FILE_BASIC_INFO *data, __u16 fid,
 229                        __u32 pid_of_opener);
 230extern int CIFSSMBSetFileDisposition(const int xid, struct cifsTconInfo *tcon,
 231                        bool delete_file, __u16 fid, __u32 pid_of_opener);
 232#if 0
 233extern int CIFSSMBSetAttrLegacy(int xid, struct cifsTconInfo *tcon,
 234                        char *fileName, __u16 dos_attributes,
 235                        const struct nls_table *nls_codepage);
 236#endif /* possibly unneeded function */
 237extern int CIFSSMBSetEOF(const int xid, struct cifsTconInfo *tcon,
 238                        const char *fileName, __u64 size,
 239                        bool setAllocationSizeFlag,
 240                        const struct nls_table *nls_codepage,
 241                        int remap_special_chars);
 242extern int CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon,
 243                         __u64 size, __u16 fileHandle, __u32 opener_pid,
 244                        bool AllocSizeFlag);
 245
 246struct cifs_unix_set_info_args {
 247        __u64   ctime;
 248        __u64   atime;
 249        __u64   mtime;
 250        __u64   mode;
 251        __u64   uid;
 252        __u64   gid;
 253        dev_t   device;
 254};
 255
 256extern int CIFSSMBUnixSetFileInfo(const int xid, struct cifsTconInfo *tcon,
 257                                  const struct cifs_unix_set_info_args *args,
 258                                  u16 fid, u32 pid_of_opener);
 259
 260extern int CIFSSMBUnixSetPathInfo(const int xid, struct cifsTconInfo *pTcon,
 261                        char *fileName,
 262                        const struct cifs_unix_set_info_args *args,
 263                        const struct nls_table *nls_codepage,
 264                        int remap_special_chars);
 265
 266extern int CIFSSMBMkDir(const int xid, struct cifsTconInfo *tcon,
 267                        const char *newName,
 268                        const struct nls_table *nls_codepage,
 269                        int remap_special_chars);
 270extern int CIFSSMBRmDir(const int xid, struct cifsTconInfo *tcon,
 271                        const char *name, const struct nls_table *nls_codepage,
 272                        int remap_special_chars);
 273extern int CIFSPOSIXDelFile(const int xid, struct cifsTconInfo *tcon,
 274                        const char *name, __u16 type,
 275                        const struct nls_table *nls_codepage,
 276                        int remap_special_chars);
 277extern int CIFSSMBDelFile(const int xid, struct cifsTconInfo *tcon,
 278                        const char *name,
 279                        const struct nls_table *nls_codepage,
 280                        int remap_special_chars);
 281extern int CIFSSMBRename(const int xid, struct cifsTconInfo *tcon,
 282                        const char *fromName, const char *toName,
 283                        const struct nls_table *nls_codepage,
 284                        int remap_special_chars);
 285extern int CIFSSMBRenameOpenFile(const int xid, struct cifsTconInfo *pTcon,
 286                        int netfid, const char *target_name,
 287                        const struct nls_table *nls_codepage,
 288                        int remap_special_chars);
 289extern int CIFSCreateHardLink(const int xid,
 290                        struct cifsTconInfo *tcon,
 291                        const char *fromName, const char *toName,
 292                        const struct nls_table *nls_codepage,
 293                        int remap_special_chars);
 294extern int CIFSUnixCreateHardLink(const int xid,
 295                        struct cifsTconInfo *tcon,
 296                        const char *fromName, const char *toName,
 297                        const struct nls_table *nls_codepage,
 298                        int remap_special_chars);
 299extern int CIFSUnixCreateSymLink(const int xid,
 300                        struct cifsTconInfo *tcon,
 301                        const char *fromName, const char *toName,
 302                        const struct nls_table *nls_codepage);
 303extern int CIFSSMBUnixQuerySymLink(const int xid,
 304                        struct cifsTconInfo *tcon,
 305                        const unsigned char *searchName, char **syminfo,
 306                        const struct nls_table *nls_codepage);
 307extern int CIFSSMBQueryReparseLinkInfo(const int xid,
 308                        struct cifsTconInfo *tcon,
 309                        const unsigned char *searchName,
 310                        char *symlinkinfo, const int buflen, __u16 fid,
 311                        const struct nls_table *nls_codepage);
 312
 313extern int CIFSSMBOpen(const int xid, struct cifsTconInfo *tcon,
 314                        const char *fileName, const int disposition,
 315                        const int access_flags, const int omode,
 316                        __u16 *netfid, int *pOplock, FILE_ALL_INFO *,
 317                        const struct nls_table *nls_codepage, int remap);
 318extern int SMBLegacyOpen(const int xid, struct cifsTconInfo *tcon,
 319                        const char *fileName, const int disposition,
 320                        const int access_flags, const int omode,
 321                        __u16 *netfid, int *pOplock, FILE_ALL_INFO *,
 322                        const struct nls_table *nls_codepage, int remap);
 323extern int CIFSPOSIXCreate(const int xid, struct cifsTconInfo *tcon,
 324                        u32 posix_flags, __u64 mode, __u16 *netfid,
 325                        FILE_UNIX_BASIC_INFO *pRetData,
 326                        __u32 *pOplock, const char *name,
 327                        const struct nls_table *nls_codepage, int remap);
 328extern int CIFSSMBClose(const int xid, struct cifsTconInfo *tcon,
 329                        const int smb_file_id);
 330
 331extern int CIFSSMBFlush(const int xid, struct cifsTconInfo *tcon,
 332                        const int smb_file_id);
 333
 334extern int CIFSSMBRead(const int xid, struct cifsTconInfo *tcon,
 335                        const int netfid, unsigned int count,
 336                        const __u64 lseek, unsigned int *nbytes, char **buf,
 337                        int *return_buf_type);
 338extern int CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
 339                        const int netfid, const unsigned int count,
 340                        const __u64 lseek, unsigned int *nbytes,
 341                        const char *buf, const char __user *ubuf,
 342                        const int long_op);
 343extern int CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
 344                        const int netfid, const unsigned int count,
 345                        const __u64 offset, unsigned int *nbytes,
 346                        struct kvec *iov, const int nvec, const int long_op);
 347extern int CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
 348                        const unsigned char *searchName, __u64 *inode_number,
 349                        const struct nls_table *nls_codepage,
 350                        int remap_special_chars);
 351extern int cifsConvertToUCS(__le16 *target, const char *source, int maxlen,
 352                        const struct nls_table *cp, int mapChars);
 353
 354extern int CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
 355                        const __u16 netfid, const __u64 len,
 356                        const __u64 offset, const __u32 numUnlock,
 357                        const __u32 numLock, const __u8 lockType,
 358                        const bool waitFlag, const __u8 oplock_level);
 359extern int CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
 360                        const __u16 smb_file_id, const int get_flag,
 361                        const __u64 len, struct file_lock *,
 362                        const __u16 lock_type, const bool waitFlag);
 363extern int CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon);
 364extern int CIFSSMBEcho(struct TCP_Server_Info *server);
 365extern int CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses);
 366
 367extern struct cifsSesInfo *sesInfoAlloc(void);
 368extern void sesInfoFree(struct cifsSesInfo *);
 369extern struct cifsTconInfo *tconInfoAlloc(void);
 370extern void tconInfoFree(struct cifsTconInfo *);
 371
 372extern int cifs_sign_smb(struct smb_hdr *, struct TCP_Server_Info *, __u32 *);
 373extern int cifs_sign_smb2(struct kvec *iov, int n_vec, struct TCP_Server_Info *,
 374                          __u32 *);
 375extern int cifs_verify_signature(struct smb_hdr *,
 376                                 struct TCP_Server_Info *server,
 377                                __u32 expected_sequence_number);
 378extern int SMBNTencrypt(unsigned char *, unsigned char *, unsigned char *);
 379extern int setup_ntlm_response(struct cifsSesInfo *);
 380extern int setup_ntlmv2_rsp(struct cifsSesInfo *, const struct nls_table *);
 381extern int cifs_crypto_shash_allocate(struct TCP_Server_Info *);
 382extern void cifs_crypto_shash_release(struct TCP_Server_Info *);
 383extern int calc_seckey(struct cifsSesInfo *);
 384
 385#ifdef CONFIG_CIFS_WEAK_PW_HASH
 386extern void calc_lanman_hash(const char *password, const char *cryptkey,
 387                                bool encrypt, char *lnm_session_key);
 388#endif /* CIFS_WEAK_PW_HASH */
 389extern int CIFSSMBCopy(int xid,
 390                        struct cifsTconInfo *source_tcon,
 391                        const char *fromName,
 392                        const __u16 target_tid,
 393                        const char *toName, const int flags,
 394                        const struct nls_table *nls_codepage,
 395                        int remap_special_chars);
 396extern int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
 397                        const int notify_subdirs, const __u16 netfid,
 398                        __u32 filter, struct file *file, int multishot,
 399                        const struct nls_table *nls_codepage);
 400extern ssize_t CIFSSMBQAllEAs(const int xid, struct cifsTconInfo *tcon,
 401                        const unsigned char *searchName,
 402                        const unsigned char *ea_name, char *EAData,
 403                        size_t bufsize, const struct nls_table *nls_codepage,
 404                        int remap_special_chars);
 405extern int CIFSSMBSetEA(const int xid, struct cifsTconInfo *tcon,
 406                const char *fileName, const char *ea_name,
 407                const void *ea_value, const __u16 ea_value_len,
 408                const struct nls_table *nls_codepage, int remap_special_chars);
 409extern int CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon,
 410                        __u16 fid, struct cifs_ntsd **acl_inf, __u32 *buflen);
 411extern int CIFSSMBSetCIFSACL(const int, struct cifsTconInfo *, __u16,
 412                        struct cifs_ntsd *, __u32);
 413extern int CIFSSMBGetPosixACL(const int xid, struct cifsTconInfo *tcon,
 414                const unsigned char *searchName,
 415                char *acl_inf, const int buflen, const int acl_type,
 416                const struct nls_table *nls_codepage, int remap_special_chars);
 417extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon,
 418                const unsigned char *fileName,
 419                const char *local_acl, const int buflen, const int acl_type,
 420                const struct nls_table *nls_codepage, int remap_special_chars);
 421extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
 422                        const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
 423extern void cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb);
 424extern bool CIFSCouldBeMFSymlink(const struct cifs_fattr *fattr);
 425extern int CIFSCheckMFSymlink(struct cifs_fattr *fattr,
 426                const unsigned char *path,
 427                struct cifs_sb_info *cifs_sb, int xid);
 428extern int mdfour(unsigned char *, unsigned char *, int);
 429extern int E_md4hash(const unsigned char *passwd, unsigned char *p16);
 430extern void SMBencrypt(unsigned char *passwd, const unsigned char *c8,
 431                        unsigned char *p24);
 432extern void E_P16(unsigned char *p14, unsigned char *p16);
 433extern void E_P24(unsigned char *p21, const unsigned char *c8,
 434                        unsigned char *p24);
 435#endif                  /* _CIFSPROTO_H */
 436
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.