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 typedef struct smb_tran2QFSInfo {
47 long FSID; /* file system ID */
48 long sectorsPerAllocUnit;
49 long totalAllocUnits; /* on the disk */
50 long availAllocUnits; /* free blocks */
51 unsigned short bytesPerSector; /* bytes per sector */
55 long vsn; /* volume serial number */
56 char vnCount; /* count of chars in label, incl null */
57 char label[12]; /* pad out with nulls */
60 FILETIME vct; /* volume creation time */
61 long vsn; /* volume serial number */
62 long vnCount; /* length of volume label in bytes */
63 char res[2]; /* reserved */
64 char label[10]; /* volume label */
67 osi_hyper_t totalAllocUnits; /* on the disk */
68 osi_hyper_t availAllocUnits; /* free blocks */
69 long sectorsPerAllocUnit;
70 long bytesPerSector; /* bytes per sector */
73 long devType; /* device type */
78 long maxCompLength; /* max path component length */
79 long FSnameLength; /* length of file system name */
85 /* more than enough opcodes for today, anyway */
86 #define SMB_TRAN2_NOPCODES 20
88 extern smb_tran2Dispatch_t smb_tran2DispatchTable[SMB_TRAN2_NOPCODES];
90 #define SMB_RAP_NOPCODES 64
92 extern smb_tran2Dispatch_t smb_rapDispatchTable[SMB_RAP_NOPCODES];
94 extern long smb_ReceiveV3SessionSetupX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
96 extern long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
98 extern long smb_ReceiveV3Trans(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
100 extern long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
102 extern long smb_ReceiveRAPNetShareEnum(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
104 extern long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
106 extern long smb_ReceiveRAPNetWkstaGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
108 extern long smb_ReceiveRAPNetServerGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op);
110 extern long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p,
113 extern long smb_ReceiveTran2FindFirst(smb_vc_t *vcp, smb_tran2Packet_t *p,
116 extern long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p,
119 extern long smb_ReceiveTran2FindNext(smb_vc_t *vcp, smb_tran2Packet_t *p,
122 extern long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
125 extern long smb_ReceiveTran2SetFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
128 extern long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
131 extern long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
134 extern long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
137 extern long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p,
140 extern long smb_ReceiveTran2FSCTL(smb_vc_t *vcp, smb_tran2Packet_t *p,
143 extern long smb_ReceiveTran2IOCTL(smb_vc_t *vcp, smb_tran2Packet_t *p,
146 extern long smb_ReceiveTran2FindNotifyFirst(smb_vc_t *vcp, smb_tran2Packet_t *p,
149 extern long smb_ReceiveTran2FindNotifyNext(smb_vc_t *vcp, smb_tran2Packet_t *p,
152 extern long smb_ReceiveTran2CreateDirectory(smb_vc_t *vcp, smb_tran2Packet_t *p,
155 extern long smb_ReceiveTran2SessionSetup(smb_vc_t *vcp, smb_tran2Packet_t *p,
158 extern long smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p,
161 extern long smb_ReceiveTran2ReportDFSInconsistency(smb_vc_t *vcp, smb_tran2Packet_t *p,
164 extern long smb_ReceiveV3FindClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
166 extern long smb_ReceiveV3FindNotifyClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
168 extern long smb_ReceiveV3UserLogoffX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
170 extern long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
172 extern long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
174 extern long smb_ReceiveV3GetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
176 extern long smb_ReceiveV3ReadX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
178 extern long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
180 extern long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
182 extern long smb_ReceiveNTTransact(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
184 extern void smb_NotifyChange(DWORD action, DWORD notifyFilter,
185 cm_scache_t *dscp, char *filename, char *otherFilename,
186 BOOL isDirectParent);
188 extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
190 extern long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
192 extern int smb_V3MatchMask(char *namep, char *maskp, int flags);
194 extern void smb3_Init();
195 extern cm_user_t *smb_FindCMUserByName(/*smb_vc_t *vcp,*/ char *usern, char *machine);
197 /* SMB auth related functions */
198 extern void smb_NegotiateExtendedSecurity(void ** secBlob, int * secBlobLength);
201 #define DELETE (0x00010000)
202 #define READ_CONTROL (0x00020000)
203 #define SYNCHRONIZE (0x00100000)
204 #define FILE_WRITE_ATTRIBUTES ( 0x0100 )
205 #define FILE_GENERIC_READ (0x00120089)
206 #define FILE_GENERIC_WRITE (0x00120116)
207 #define FILE_GENERIC_EXECUTE (0x001200a0)
210 #endif /* __SMB3_H_ENV__ */