Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
typedef struct SmbSession SmbSession;
2
typedef struct SmbTree SmbTree;
3
typedef struct SmbService SmbService;
4
typedef struct SmbPeerInfo SmbPeerInfo;
5
typedef struct SmbTransaction SmbTransaction;
6
typedef struct SmbBuffer SmbBuffer;
7
typedef struct SmbIdMap SmbIdMap;
8
typedef struct SmbSearch SmbSearch;
9
typedef struct SmbDirCache SmbDirCache;
10
typedef struct SmbFile SmbFile;
11
typedef struct SmbSharedFile SmbSharedFile;
12
typedef struct SmbCifsSession SmbCifsSession;
13
typedef struct SmbServerInfo SmbServerInfo;
14
typedef struct SmbRapServerInfo1 SmbRapServerInfo1;
15
typedef struct SmbFindFileBothDirectoryInfo SmbFindFileBothDirectoryInfo;
16
typedef struct SmbLock SmbLock;
17
typedef struct SmbLockList SmbLockList;
18
typedef struct SmbSlut SmbSlut;
19
 
20
#pragma incomplete SmbIdMap
21
#pragma incomplete SmbBuffer
22
#pragma incomplete SmbLockList
23
 
24
typedef int SMBCIFSWRITEFN(SmbCifsSession *cifs, void *buf, long n);
25
typedef int SMBCIFSACCEPTFN(SmbCifsSession *cifs, SMBCIFSWRITEFN **fnp);
26
typedef void SMBIDMAPAPPLYFN(void *magic, void *p);
27
 
28
struct SmbPeerInfo {
29
	ulong capabilities;
30
	ushort maxlen;
31
	uchar securitymode;
32
	ushort maxmpxcount;
33
	ushort maxnumbervcs;
34
	ulong maxbuffersize;
35
	ulong maxrawsize;
36
	ulong sessionkey;
37
	vlong utc;
38
	short tzoff;
39
	uchar encryptionkeylength;
40
	uchar *encryptionkey;
41
	char *oemdomainname;
42
};
43
 
44
struct SmbTransaction {
45
	struct {
46
		char *name;
47
		ulong tpcount;
48
		uchar *parameters;
49
		ulong pcount;
50
		ulong tdcount;
51
		uchar *data;
52
		ulong maxpcount;
53
		ulong maxdcount;
54
		ulong maxscount;
55
		ulong dcount;
56
		ushort scount;
57
		ushort *setup;
58
		ushort flags;
59
	} in;
60
	struct {
61
		ulong tpcount;
62
		ulong tdcount;
63
		SmbBuffer *parameters;
64
		SmbBuffer *data;
65
		ushort *setup;
66
	} out;
67
};
68
 
69
enum {
70
	SmbSessionNeedNegotiate,
71
	SmbSessionNeedSetup,
72
	SmbSessionEstablished,
73
};
74
 
75
struct SmbSession {
76
	NbSession *nbss;
77
	SmbCifsSession *cifss;
78
	uchar nextcommand;
79
	SmbBuffer *response;
80
	SmbPeerInfo peerinfo;
81
	Chalstate *cs;
82
	struct {
83
		char *accountname;	
84
		char *primarydomain;
85
		char *nativeos;
86
		char *nativelanman;
87
		ushort maxmpxcount;
88
		MSchapreply mschapreply;
89
	} client;
90
	SmbTransaction transaction;
91
	SmbIdMap *fidmap;
92
	SmbIdMap *tidmap;
93
	SmbIdMap *sidmap;
94
	int state;
95
	uchar errclass;
96
	ushort error;
97
	int tzoff;		// as passed to client during negotiation
98
	SmbService *serv;
99
};
100
 
101
typedef struct SmbHeader {
102
	uchar command;
103
	union {
104
		struct {
105
			uchar errclass;
106
			ushort error;
107
		};
108
		ulong status;
109
	};
110
	uchar flags;
111
	ushort flags2;
112
	union {
113
		struct {
114
			ushort pidhigh;
115
			uchar securitysignature[8];
116
		};
117
	};
118
	ushort tid;
119
	ushort pid;
120
	ushort uid;
121
	ushort mid;
122
	uchar wordcount;
123
} SmbHeader;
124
 
125
typedef enum SmbProcessResult {
126
	SmbProcessResultOk,
127
	SmbProcessResultUnimp,
128
	SmbProcessResultFormat,
129
	SmbProcessResultMisc,
130
	SmbProcessResultError,
131
	SmbProcessResultReply,
132
	SmbProcessResultDie,
133
} SmbProcessResult;
134
 
135
typedef SmbProcessResult SMBPROCESSFN(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *);
136
typedef struct SmbOpTableEntry SmbOpTableEntry;
137
struct SmbOpTableEntry {
138
	char *name;
139
	SMBPROCESSFN *process;
140
	int debug;
141
};
142
 
143
extern SmbOpTableEntry smboptable[256];
144
 
145
typedef struct SmbGlobals SmbGlobals;
146
 
147
extern SmbGlobals smbglobals;
148
 
149
struct SmbServerInfo {
150
	char *name;
151
	char *nativelanman;
152
	uchar vmaj, vmin;
153
	ulong stype;
154
	char *remark;
155
};
156
 
157
struct SmbGlobals {
158
	int maxreceive;
159
	int unicode;
160
	SmbServerInfo serverinfo;
161
	char *nativeos;
162
	char *primarydomain;
163
	NbName nbname;
164
	char *accountname;
165
	char *mailslotbrowse;
166
	char *pipelanman;
167
	int l2sectorsize;
168
	int l2allocationsize;
169
	int convertspace;
170
	struct {
171
		int fd;
172
		int print;
173
		int tids;
174
		int sids;
175
		int fids;
176
		int rap2;
177
		int find;
178
		int query;
179
		int sharedfiles;
180
		int sessions;
181
		int rep;
182
		int poolparanoia;
183
		int locks;
184
	} log;
185
};
186
 
187
struct SmbTree {
188
	long id;
189
	SmbService *serv;
190
};
191
 
192
struct SmbService {
193
	Ref;
194
	char *name;
195
	char *type;
196
	ushort stype;
197
	char *path;
198
	char *remark;
199
	SmbService *next;
200
};
201
 
202
extern SmbService *smbservices;
203
 
204
typedef struct SmbClient SmbClient;
205
 
206
 
207
typedef struct SmbTransactionMethod {
208
	int (*encodeprimary)(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p,
209
		SmbBuffer *ob, uchar *wordcount, ushort *bytecount, char **errmsgp);
210
	int (*encodesecondary)(SmbTransaction *t, SmbHeader *h, SmbBuffer *ob, char **errmsgp);
211
	int (*sendrequest)(void *magic, SmbBuffer *ob, char **errmsgp);
212
	int (*receiveintermediate)(void *magic, uchar *wordcountp, ushort *bytecountp, char **errmsgp);
213
	int (*receiveresponse)(void *magic, SmbBuffer *ib, char **errmsgp);
214
	int (*decoderesponse)(SmbTransaction *t, SmbHeader *h, uchar *pdata, SmbBuffer *b, char **errmsgp);
215
	int (*encoderesponse)(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p,
216
		SmbBuffer *ob, char **errmsgp);
217
	int (*sendresponse)(void *magic, SmbBuffer *ob, char **errmsgp);
218
} SmbTransactionMethod;
219
 
220
extern SmbTransactionMethod smbtransactionmethoddgram;
221
 
222
struct SmbSearch {
223
	long id;
224
	SmbTree *t;
225
	SmbDirCache *dc;
226
	Reprog *rep;
227
	ushort tid;
228
};
229
 
230
struct SmbFile {
231
	long id;
232
	SmbTree *t;		// tree this belongs to
233
	int fd;
234
	char *name;
235
	int p9mode;		// how it was opened
236
	int share;			// additional sharing restictions added by this fid
237
	int ioallowed;
238
	SmbSharedFile *sf;
239
};
240
 
241
struct SmbSharedFile {
242
	ushort type;
243
	ulong dev;
244
	vlong path;
245
//	char *name;
246
	int share;			// current share level
247
	int deleteonclose;
248
	SmbLockList *locklist;
249
};
250
 
251
struct SmbLock {
252
	vlong base;
253
	vlong limit;
254
	SmbSession *s;		// owning session
255
	ushort pid;		// owning pid
256
};
257
 
258
struct SmbCifsSession {
259
	int fd;
260
	void *magic;
261
};
262
 
263
struct SmbClient {
264
	SmbPeerInfo peerinfo;
265
	NbSession *nbss;
266
	SmbBuffer *b;
267
	ushort ipctid;
268
	ushort sharetid;
269
	SmbHeader protoh;
270
};
271
 
272
struct SmbRapServerInfo1 {
273
	char name[16];
274
	uchar vmaj;
275
	uchar vmin;
276
	ulong type;
277
	char *remark;
278
};
279
 
280
struct SmbFindFileBothDirectoryInfo {
281
	ulong fileindex;
282
	vlong creationtime;
283
	vlong lastaccesstime;
284
	vlong lastwritetime;
285
	vlong changetime;
286
	vlong endoffile;
287
	vlong allocationsize;
288
	ulong extfileattributes;
289
	char *filename;
290
};
291
 
292
enum {
293
	SMB_STRING_UNALIGNED = 1,
294
	SMB_STRING_UPCASE = 2,
295
	SMB_STRING_UNTERMINATED = 4,
296
	SMB_STRING_UNICODE = 8,
297
	SMB_STRING_ASCII = 16,
298
	SMB_STRING_REVPATH = 32,
299
	SMB_STRING_PATH = 64,
300
	SMB_STRING_CONVERT_MASK = SMB_STRING_PATH | SMB_STRING_REVPATH | SMB_STRING_UPCASE,
301
};
302
 
303
struct SmbDirCache {
304
	Dir *buf;
305
	long n;
306
	long i;
307
};
308
 
309
typedef struct SmbTrans2OpTableEntry SmbTrans2OpTableEntry;
310
typedef SmbProcessResult SMBTRANS2PROCESSFN(SmbSession *s, SmbHeader *h);
311
struct SmbTrans2OpTableEntry {
312
	char *name;
313
	SMBTRANS2PROCESSFN *process;
314
	int debug;
315
};
316
extern SmbTrans2OpTableEntry smbtrans2optable[];
317
extern int smbtrans2optablesize;
318
 
319
struct SmbSlut {
320
	char *name;
321
	int val;
322
};
323
 
324
extern SmbSlut smbopenmodeslut[];
325
extern SmbSlut smbsharemodeslut[];