2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #ifndef __SMB3_H_ENV__
11 #define __SMB3_H_ENV__ 1
13 typedef struct smb_tran2Packet {
14 osi_queue_t q; /* queue of all packets */
15 int com; /* Trans or Trans2 (0x25 or 0x32) */
16 int totalData; /* total # of expected data bytes */
17 int totalParms; /* total # of expected parm bytes */
18 int oldTotalParms; /* initial estimate of parm bytes */
19 int curData; /* current # of received data bytes */
20 int curParms; /* current # of received parm bytes */
21 int maxReturnData; /* max # of returned data bytes */
22 int maxReturnParms; /* max # of returned parm bytes */
23 int opcode; /* subopcode we're handling */
24 long flags; /* flags */
25 smb_vc_t *vcp; /* virtual circuit we're dealing with */
26 unsigned short tid; /* tid to match */
27 unsigned short mid; /* mid to match */
28 unsigned short pid; /* pid to remember */
29 unsigned short uid; /* uid to remember */
30 unsigned short res[6]; /* contains PidHigh */
31 unsigned short *parmsp; /* parms */
32 unsigned char *datap; /* data bytes */
36 #define SMB_TRAN2PFLAG_ALLOC 1
38 typedef struct smb_tran2Dispatch {
39 long (*procp)(smb_vc_t *, smb_tran2Packet_t *, smb_packet_t *);
41 } smb_tran2Dispatch_t;
43 /* Data Structures that are written to or read from the wire directly
44 * must be byte aligned (no padding).
47 typedef struct smb_tran2QFSInfo {
50 unsigned long FSID; /* file system ID */
51 unsigned long sectorsPerAllocUnit;
52 unsigned long totalAllocUnits; /* on the disk */
53 unsigned long availAllocUnits; /* free blocks */
54 unsigned short bytesPerSector; /* bytes per sector */
57 unsigned long vsn; /* volume serial number */
58 char vnCount; /* count of chars in label, incl null */
59 char label[12]; /* pad out with nulls */
62 FILETIME vct; /* volume creation time */
63 unsigned long vsn; /* volume serial number */
64 unsigned long vnCount; /* length of volume label in bytes */
65 char res[2]; /* reserved */
66 char label[10]; /* volume label */
69 LARGE_INTEGER totalAllocUnits; /* on the disk */
70 LARGE_INTEGER availAllocUnits; /* free blocks */
71 unsigned long sectorsPerAllocUnit;
72 unsigned long bytesPerSector; /* bytes per sector */
75 unsigned long devType; /* device type */
76 unsigned long characteristics;
79 unsigned long attributes;
80 unsigned long maxCompLength; /* max path component length */
81 unsigned long FSnameLength; /* length of file system name */
82 unsigned char FSname[12];
90 unsigned long creationDateTime; /* SMB_DATE / SMB_TIME */
91 unsigned long lastAccessDateTime; /* SMB_DATE / SMB_TIME */
92 unsigned long lastWriteDateTime; /* SMB_DATE / SMB_TIME */
93 unsigned long dataSize;
94 unsigned long allocationSize;
95 unsigned short attributes;
99 unsigned long creationDateTime; /* SMB_DATE / SMB_TIME */
100 unsigned long lastAccessDateTime; /* SMB_DATE / SMB_TIME */
101 unsigned long lastWriteDateTime; /* SMB_DATE / SMB_TIME */
102 unsigned long dataSize;
103 unsigned long allocationSize;
104 unsigned short attributes;
105 unsigned long eaSize;
108 unsigned short maxDataCount;
109 unsigned short eaErrorOffset;
110 unsigned long listLength;
111 unsigned char eaList[128];
114 unsigned short maxDataCount;
115 unsigned short eaErrorOffset;
116 unsigned long listLength;
117 unsigned char eaList[128];
120 FILETIME creationTime;
121 FILETIME lastAccessTime;
122 FILETIME lastWriteTime;
124 unsigned long attributes;
125 unsigned long reserved;
128 LARGE_INTEGER allocationSize;
129 LARGE_INTEGER endOfFile;
130 unsigned long numberOfLinks;
131 unsigned char deletePending;
132 unsigned char directory;
133 unsigned short reserved;
134 } QPfileStandardInfo;
136 unsigned long eaSize;
139 unsigned long fileNameLength;
140 unsigned char fileName[512];
143 FILETIME creationTime;
144 FILETIME lastAccessTime;
145 FILETIME lastWriteTime;
147 unsigned long attributes;
148 LARGE_INTEGER allocationSize;
149 LARGE_INTEGER endOfFile;
150 unsigned long numberOfLinks;
151 unsigned char deletePending;
152 unsigned char directory;
153 LARGE_INTEGER indexNumber;
154 unsigned long eaSize;
155 unsigned long accessFlags;
156 LARGE_INTEGER indexNumber2;
157 LARGE_INTEGER currentByteOffset;
159 unsigned long alignmentRequirement;
160 unsigned long fileNameLength;
161 unsigned char fileName[512];
164 unsigned long fileNameLength;
165 unsigned char fileName[512];
168 unsigned long nextEntryOffset;
169 unsigned long streamNameLength;
170 LARGE_INTEGER streamSize;
171 LARGE_INTEGER streamAllocationSize;
172 unsigned char fileName[512];
175 LARGE_INTEGER compressedFileSize;
176 unsigned short compressionFormat;
177 unsigned char compressionUnitShift;
178 unsigned char chuckShift;
179 unsigned char clusterShift;
180 unsigned char reserved[3];
181 } QPfileCompressionInfo;
183 } smb_tran2QPathInfo_t;
188 FILETIME creationTime;
189 FILETIME lastAccessTime;
190 FILETIME lastWriteTime;
191 FILETIME lastChangeTime;
192 unsigned long attributes;
195 LARGE_INTEGER allocationSize;
196 LARGE_INTEGER endOfFile;
197 unsigned long numberOfLinks;
198 unsigned char deletePending;
199 unsigned char directory;
202 unsigned long eaSize;
205 unsigned long fileNameLength;
206 unsigned char fileName[512];
209 } smb_tran2QFileInfo_t;
212 /* more than enough opcodes for today, anyway */
213 #define SMB_TRAN2_NOPCODES 20
215 extern smb_tran2Dispatch_t smb_tran2DispatchTable[SMB_TRAN2_NOPCODES];
217 #define SMB_RAP_NOPCODES 64
219 extern smb_tran2Dispatch_t smb_rapDispatchTable[SMB_RAP_NOPCODES];
221 extern long smb_ReceiveV3SessionSetupX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
223 extern long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
225 extern long smb_ReceiveV3Trans(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
227 extern long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
229 extern long smb_ReceiveRAPNetShareEnum(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
231 extern long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
233 extern long smb_ReceiveRAPNetWkstaGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
235 extern long smb_ReceiveRAPNetServerGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
237 extern long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p,
240 extern long smb_ReceiveTran2FindFirst(smb_vc_t *vcp, smb_tran2Packet_t *p,
243 extern long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p,
246 extern long smb_ReceiveTran2FindNext(smb_vc_t *vcp, smb_tran2Packet_t *p,
249 extern long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
252 extern long smb_ReceiveTran2SetFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
255 extern long smb_ReceiveTran2QFSInfoFid(smb_vc_t *vcp, smb_tran2Packet_t *p,
258 extern long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
261 extern long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
264 extern long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
267 extern long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
270 extern long smb_ReceiveTran2FSCTL(smb_vc_t *vcp, smb_tran2Packet_t *p,
273 extern long smb_ReceiveTran2IOCTL(smb_vc_t *vcp, smb_tran2Packet_t *p,
276 extern long smb_ReceiveTran2FindNotifyFirst(smb_vc_t *vcp, smb_tran2Packet_t *p,
279 extern long smb_ReceiveTran2FindNotifyNext(smb_vc_t *vcp, smb_tran2Packet_t *p,
282 extern long smb_ReceiveTran2CreateDirectory(smb_vc_t *vcp, smb_tran2Packet_t *p,
285 extern long smb_ReceiveTran2SessionSetup(smb_vc_t *vcp, smb_tran2Packet_t *p,
288 extern long smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p,
291 extern long smb_ReceiveTran2ReportDFSInconsistency(smb_vc_t *vcp, smb_tran2Packet_t *p,
294 extern long smb_ReceiveV3FindClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
296 extern long smb_ReceiveV3FindNotifyClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
298 extern long smb_ReceiveV3UserLogoffX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
300 extern long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
302 extern long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
304 extern long smb_ReceiveV3GetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
306 extern long smb_ReceiveV3ReadX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
308 extern long smb_ReceiveV3WriteX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
310 extern long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
312 extern long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
314 extern long smb_ReceiveNTTransact(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
316 extern void smb_NotifyChange(DWORD action, DWORD notifyFilter,
317 cm_scache_t *dscp, char *filename, char *otherFilename,
318 BOOL isDirectParent);
320 extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
322 extern long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
324 extern int smb_V3MatchMask(char *namep, char *maskp, int flags);
326 extern void smb3_Init();
327 extern cm_user_t *smb_FindCMUserByName(char *usern, char *machine, afs_uint32 flags);
329 /* SMB auth related functions */
330 extern void smb_NegotiateExtendedSecurity(void ** secBlob, int * secBlobLength);
333 #define DELETE (0x00010000)
334 #define READ_CONTROL (0x00020000)
335 #define SYNCHRONIZE (0x00100000)
336 #define FILE_WRITE_ATTRIBUTES ( 0x0100 )
337 #define FILE_GENERIC_READ (0x00120089)
338 #define FILE_GENERIC_WRITE (0x00120116)
339 #define FILE_GENERIC_EXECUTE (0x001200a0)
342 /* Some of the FILE_NOTIFY_CHANGE values are undefined in winnt.h */
343 #define FILE_NOTIFY_CHANGE_EA 0x00000080
344 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
345 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
346 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
347 #endif /* __SMB3_H_ENV__ */