cifsproto.h 14.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
/*
 *   fs/cifs/cifsproto.h
 *
4
 *   Copyright (c) International Business Machines  Corp., 2002,2006
L
Linus Torvalds 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
 *   Author(s): Steve French (sfrench@us.ibm.com)
 *
 *   This library is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Lesser General Public License as published
 *   by the Free Software Foundation; either version 2.1 of the License, or
 *   (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
 *   the GNU Lesser General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public License
 *   along with this library; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 */
#ifndef _CIFSPROTO_H
#define _CIFSPROTO_H
#include <linux/nls.h>

struct statfs;

/*
 *****************************************************************
 * All Prototypes
 *****************************************************************
 */

extern struct smb_hdr *cifs_buf_get(void);
extern void cifs_buf_release(void *);
extern struct smb_hdr *cifs_small_buf_get(void);
extern void cifs_small_buf_release(void *);
extern int smb_send(struct socket *, struct smb_hdr *,
			unsigned int /* length */ , struct sockaddr *);
extern unsigned int _GetXid(void);
extern void _FreeXid(unsigned int);
#define GetXid() (int)_GetXid(); cFYI(1,("CIFS VFS: in %s as Xid: %d with uid: %d",__FUNCTION__, xid,current->fsuid));
#define FreeXid(curr_xid) {_FreeXid(curr_xid); cFYI(1,("CIFS VFS: leaving %s (xid = %d) rc = %d",__FUNCTION__,curr_xid,(int)rc));}
43
extern char *build_path_from_dentry(struct dentry *);
L
Linus Torvalds 已提交
44 45 46 47 48 49
extern char *build_wildcard_path_from_dentry(struct dentry *direntry);
extern void renew_parental_timestamps(struct dentry *direntry);
extern int SendReceive(const unsigned int /* xid */ , struct cifsSesInfo *,
			struct smb_hdr * /* input */ ,
			struct smb_hdr * /* out */ ,
			int * /* bytes returned */ , const int long_op);
50
extern int SendReceive2(const unsigned int /* xid */ , struct cifsSesInfo *,
51
			struct kvec *, int /* nvec to send */, 
52
			int * /* type of buf returned */ , const int long_op);
J
[CIFS]  
Jeremy Allison 已提交
53 54 55 56
extern int SendReceiveBlockingLock(const unsigned int /* xid */ , struct cifsTconInfo *,
				struct smb_hdr * /* input */ ,
				struct smb_hdr * /* out */ ,
				int * /* bytes returned */);
L
Linus Torvalds 已提交
57 58
extern int checkSMBhdr(struct smb_hdr *smb, __u16 mid);
extern int checkSMB(struct smb_hdr *smb, __u16 mid, int length);
59
extern int is_valid_oplock_break(struct smb_hdr *smb, struct TCP_Server_Info *);
L
Linus Torvalds 已提交
60
extern int is_size_safe_to_change(struct cifsInodeInfo *);
61
extern struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *);
L
Linus Torvalds 已提交
62
extern unsigned int smbCalcSize(struct smb_hdr *ptr);
63
extern unsigned int smbCalcSize_LE(struct smb_hdr *ptr);
L
Linus Torvalds 已提交
64 65 66 67 68
extern int decode_negTokenInit(unsigned char *security_blob, int length,
			enum securityEnum *secType);
extern int cifs_inet_pton(int, char * source, void *dst);
extern int map_smb_to_linux_error(struct smb_hdr *smb);
extern void header_assemble(struct smb_hdr *, char /* command */ ,
69 70
			    const struct cifsTconInfo *, int /* length of
			    fixed section (word count) in two byte units */);
71 72
extern int small_smb_init_no_tc(const int smb_cmd, const int wct,
				struct cifsSesInfo *ses,
73
				void ** request_buf);
74
extern int CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses,
75
			     const int stage, 
76
			     const struct nls_table *nls_cp);
77
extern __u16 GetNextMid(struct TCP_Server_Info *server);
78 79
extern struct oplock_q_entry * AllocOplockQEntry(struct inode *, u16, 
						 struct cifsTconInfo *);
L
Linus Torvalds 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
extern void DeleteOplockQEntry(struct oplock_q_entry *);
extern struct timespec cifs_NTtimeToUnix(u64 /* utc nanoseconds since 1601 */ );
extern u64 cifs_UnixTimeToNT(struct timespec);
extern int cifs_get_inode_info(struct inode **pinode,
			const unsigned char *search_path, 
			FILE_ALL_INFO * pfile_info,
			struct super_block *sb, int xid);
extern int cifs_get_inode_info_unix(struct inode **pinode,
			const unsigned char *search_path,
			struct super_block *sb,int xid);

extern int cifs_mount(struct super_block *, struct cifs_sb_info *, char *,
			const char *);
extern int cifs_umount(struct super_block *, struct cifs_sb_info *);
void cifs_proc_init(void);
void cifs_proc_clean(void);

extern int cifs_setup_session(unsigned int xid, struct cifsSesInfo *pSesInfo, 
			struct nls_table * nls_info);
extern int CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses);

extern int CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
			const char *tree, struct cifsTconInfo *tcon,
			const struct nls_table *);

extern int CIFSFindFirst(const int xid, struct cifsTconInfo *tcon,
106 107 108
		const char *searchName, const struct nls_table *nls_codepage,
		__u16 *searchHandle, struct cifs_search_info * psrch_inf, 
		int map, const char dirsep);
L
Linus Torvalds 已提交
109 110

extern int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
111
		__u16 searchHandle, struct cifs_search_info * psrch_inf);
L
Linus Torvalds 已提交
112 113 114 115 116 117 118

extern int CIFSFindClose(const int, struct cifsTconInfo *tcon,
			const __u16 search_handle);

extern int CIFSSMBQPathInfo(const int xid, struct cifsTconInfo *tcon,
			const unsigned char *searchName,
			FILE_ALL_INFO * findData,
119
			const struct nls_table *nls_codepage, int remap);
120 121 122 123
extern int SMBQueryInformation(const int xid, struct cifsTconInfo *tcon,
                        const unsigned char *searchName,
                        FILE_ALL_INFO * findData,
                        const struct nls_table *nls_codepage, int remap);
L
Linus Torvalds 已提交
124 125 126 127 128

extern int CIFSSMBUnixQPathInfo(const int xid,
			struct cifsTconInfo *tcon,
			const unsigned char *searchName,
			FILE_UNIX_BASIC_INFO * pFindData,
129
			const struct nls_table *nls_codepage, int remap);
L
Linus Torvalds 已提交
130 131 132 133 134

extern int CIFSGetDFSRefer(const int xid, struct cifsSesInfo *ses,
			const unsigned char *searchName,
			unsigned char **targetUNCs,
			unsigned int *number_of_UNC_in_array,
135
			const struct nls_table *nls_codepage, int remap);
L
Linus Torvalds 已提交
136 137 138

extern int connect_to_dfs_path(int xid, struct cifsSesInfo *pSesInfo,
			const char *old_path,
139
			const struct nls_table *nls_codepage, int remap);
L
Linus Torvalds 已提交
140
extern int get_dfs_path(int xid, struct cifsSesInfo *pSesInfo,
141 142 143 144 145
			const char *old_path, 
			const struct nls_table *nls_codepage,
			unsigned int *pnum_referrals, 
			unsigned char ** preferrals,
			int remap);
L
Linus Torvalds 已提交
146
extern int CIFSSMBQFSInfo(const int xid, struct cifsTconInfo *tcon,
147
			struct kstatfs *FSData);
148 149
extern int SMBOldQFSInfo(const int xid, struct cifsTconInfo *tcon,
			struct kstatfs *FSData);
150
extern int CIFSSMBSetFSUnixInfo(const int xid, struct cifsTconInfo *tcon,
151 152
			__u64 cap);

L
Linus Torvalds 已提交
153
extern int CIFSSMBQFSAttributeInfo(const int xid,
154 155 156
			struct cifsTconInfo *tcon);
extern int CIFSSMBQFSDeviceInfo(const int xid, struct cifsTconInfo *tcon);
extern int CIFSSMBQFSUnixInfo(const int xid, struct cifsTconInfo *tcon);
L
Linus Torvalds 已提交
157
extern int CIFSSMBQFSPosixInfo(const int xid, struct cifsTconInfo *tcon,
158
			struct kstatfs *FSData);
L
Linus Torvalds 已提交
159 160 161

extern int CIFSSMBSetTimes(const int xid, struct cifsTconInfo *tcon,
			const char *fileName, const FILE_BASIC_INFO * data,
162 163
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
164 165 166 167 168 169 170 171
extern int CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon,
			const FILE_BASIC_INFO * data, __u16 fid);
#if 0
extern int CIFSSMBSetAttrLegacy(int xid, struct cifsTconInfo *tcon,
			char *fileName, __u16 dos_attributes,
			const struct nls_table *nls_codepage);
#endif /* possibly unneeded function */
extern int CIFSSMBSetEOF(const int xid, struct cifsTconInfo *tcon,
172 173 174 175
			const char *fileName, __u64 size,
			int setAllocationSizeFlag,
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
176
extern int CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon,
177 178
			 __u64 size, __u16 fileHandle,__u32 opener_pid, 
			int AllocSizeFlag);
L
Linus Torvalds 已提交
179 180
extern int CIFSSMBUnixSetPerms(const int xid, struct cifsTconInfo *pTcon,
			char *full_path, __u64 mode, __u64 uid,
181 182 183
			__u64 gid, dev_t dev, 
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
184 185 186

extern int CIFSSMBMkDir(const int xid, struct cifsTconInfo *tcon,
			const char *newName,
187 188
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
189
extern int CIFSSMBRmDir(const int xid, struct cifsTconInfo *tcon,
190 191
			const char *name, const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
192 193 194

extern int CIFSSMBDelFile(const int xid, struct cifsTconInfo *tcon,
			const char *name,
195 196
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
197 198
extern int CIFSSMBRename(const int xid, struct cifsTconInfo *tcon,
			const char *fromName, const char *toName,
199 200
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
201
extern int CIFSSMBRenameOpenFile(const int xid,struct cifsTconInfo *pTcon,
202 203 204
			int netfid, char * target_name, 
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
205 206 207
extern int CIFSCreateHardLink(const int xid,
			struct cifsTconInfo *tcon,
			const char *fromName, const char *toName,
208 209
			const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
210 211 212
extern int CIFSUnixCreateHardLink(const int xid,
			struct cifsTconInfo *tcon,
			const char *fromName, const char *toName,
213 214
			const struct nls_table *nls_codepage, 
			int remap_special_chars);
L
Linus Torvalds 已提交
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
extern int CIFSUnixCreateSymLink(const int xid,
			struct cifsTconInfo *tcon,
			const char *fromName, const char *toName,
			const struct nls_table *nls_codepage);
extern int CIFSSMBUnixQuerySymLink(const int xid,
			struct cifsTconInfo *tcon,
			const unsigned char *searchName,
			char *syminfo, const int buflen,
			const struct nls_table *nls_codepage);
extern int CIFSSMBQueryReparseLinkInfo(const int xid, 
			struct cifsTconInfo *tcon,
			const unsigned char *searchName,
			char *symlinkinfo, const int buflen, __u16 fid,
			const struct nls_table *nls_codepage);

extern int CIFSSMBOpen(const int xid, struct cifsTconInfo *tcon,
			const char *fileName, const int disposition,
			const int access_flags, const int omode,
			__u16 * netfid, int *pOplock, FILE_ALL_INFO *,
234
			const struct nls_table *nls_codepage, int remap);
235 236 237 238 239
extern int SMBLegacyOpen(const int xid, struct cifsTconInfo *tcon,
			const char *fileName, const int disposition,
			const int access_flags, const int omode,
			__u16 * netfid, int *pOplock, FILE_ALL_INFO *,
			const struct nls_table *nls_codepage, int remap);
L
Linus Torvalds 已提交
240 241 242 243
extern int CIFSSMBClose(const int xid, struct cifsTconInfo *tcon,
			const int smb_file_id);

extern int CIFSSMBRead(const int xid, struct cifsTconInfo *tcon,
244 245 246
                        const int netfid, unsigned int count,
                        const __u64 lseek, unsigned int *nbytes, char **buf,
			int * return_buf_type);
L
Linus Torvalds 已提交
247 248 249 250 251 252 253 254
extern int CIFSSMBWrite(const int xid, struct cifsTconInfo *tcon,
			const int netfid, const unsigned int count,
			const __u64 lseek, unsigned int *nbytes,
			const char *buf, const char __user *ubuf, 
			const int long_op);
extern int CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
			const int netfid, const unsigned int count,
			const __u64 offset, unsigned int *nbytes, 
255
			struct kvec *iov, const int nvec, const int long_op);
L
Linus Torvalds 已提交
256 257
extern int CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
			const unsigned char *searchName, __u64 * inode_number,
258 259
			const struct nls_table *nls_codepage, 
			int remap_special_chars);
260
extern int cifs_convertUCSpath(char *target, const __le16 *source, int maxlen,
261
			const struct nls_table * codepage);
262 263
extern int cifsConvertToUCS(__le16 * target, const char *source, int maxlen,
			const struct nls_table * cp, int mapChars);
L
Linus Torvalds 已提交
264 265 266 267 268 269

extern int CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
			const __u16 netfid, const __u64 len,
			const __u64 offset, const __u32 numUnlock,
			const __u32 numLock, const __u8 lockType,
			const int waitFlag);
270 271
extern int CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
			const __u16 smb_file_id, const int get_flag,
272
			const __u64 len, struct file_lock *, 
273
			const __u16 lock_type, const int waitFlag);
L
Linus Torvalds 已提交
274 275 276 277 278 279 280 281 282 283
extern int CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon);
extern int CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses);

extern struct cifsSesInfo *sesInfoAlloc(void);
extern void sesInfoFree(struct cifsSesInfo *);
extern struct cifsTconInfo *tconInfoAlloc(void);
extern void tconInfoFree(struct cifsTconInfo *);

extern int cifs_reconnect(struct TCP_Server_Info *server);

284
extern int cifs_sign_smb(struct smb_hdr *, struct TCP_Server_Info *,__u32 *);
285 286
extern int cifs_sign_smb2(struct kvec *iov, int n_vec, struct TCP_Server_Info *,
			  __u32 *);
L
Linus Torvalds 已提交
287 288 289
extern int cifs_verify_signature(struct smb_hdr *, const char * mac_key,
	__u32 expected_sequence_number);
extern int cifs_calculate_mac_key(char * key,const char * rn,const char * pass);
S
Steve French 已提交
290 291 292 293 294
extern int CalcNTLMv2_partial_mac_key(struct cifsSesInfo *, 
			const struct nls_table *);
extern void CalcNTLMv2_response(const struct cifsSesInfo *, char * );
extern void setup_ntlmv2_rsp(struct cifsSesInfo *, char *, 
			     const struct nls_table *);
295 296 297
#ifdef CONFIG_CIFS_WEAK_PW_HASH
extern void calc_lanman_hash(struct cifsSesInfo * ses, char * lnm_session_key);
#endif /* CIFS_WEAK_PW_HASH */
L
Linus Torvalds 已提交
298 299 300 301 302
extern int CIFSSMBCopy(int xid,
			struct cifsTconInfo *source_tcon,
			const char *fromName,
			const __u16 target_tid,
			const char *toName, const int flags,
303 304
			const struct nls_table *nls_codepage, 
			int remap_special_chars);
L
Linus Torvalds 已提交
305
extern int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon, 
306
			const int notify_subdirs,const __u16 netfid,
307 308
			__u32 filter, struct file * file, int multishot, 
			const struct nls_table *nls_codepage);
L
Linus Torvalds 已提交
309 310
extern ssize_t CIFSSMBQAllEAs(const int xid, struct cifsTconInfo *tcon,
			const unsigned char *searchName, char * EAData,
311 312
			size_t bufsize, const struct nls_table *nls_codepage,
			int remap_special_chars);
L
Linus Torvalds 已提交
313 314 315
extern ssize_t CIFSSMBQueryEA(const int xid,struct cifsTconInfo * tcon,
		const unsigned char * searchName,const unsigned char * ea_name,
		unsigned char * ea_value, size_t buf_size, 
316
		const struct nls_table *nls_codepage, int remap_special_chars);
L
Linus Torvalds 已提交
317 318 319
extern int CIFSSMBSetEA(const int xid, struct cifsTconInfo *tcon, 
		const char *fileName, const char * ea_name, 
		const void * ea_value, const __u16 ea_value_len, 
320
		const struct nls_table *nls_codepage, int remap_special_chars);
321 322 323
extern int CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon,
			__u16 fid, char *acl_inf, const int buflen,
			const int acl_type /* ACCESS vs. DEFAULT */);
L
Linus Torvalds 已提交
324 325 326
extern int CIFSSMBGetPosixACL(const int xid, struct cifsTconInfo *tcon,
		const unsigned char *searchName,
		char *acl_inf, const int buflen,const int acl_type,
327
		const struct nls_table *nls_codepage, int remap_special_chars);
L
Linus Torvalds 已提交
328 329 330
extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon,
		const unsigned char *fileName,
		const char *local_acl, const int buflen, const int acl_type,
331
		const struct nls_table *nls_codepage, int remap_special_chars);
332 333
extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
                const int netfid, __u64 * pExtAttrBits, __u64 *pMask);
L
Linus Torvalds 已提交
334
#endif			/* _CIFSPROTO_H */