1
#ifndef __SMBLIB_PRIV_H__
2
#define __SMBLIB_PRIV_H__
4
/* UNIX SMBlib NetBIOS implementation
7
* SMBlib private Defines
9
* Copyright (C) Richard Sharpe 1996
14
* This program is free software; you can redistribute it and/or modify
15
* it under the terms of the GNU General Public License as published by
16
* the Free Software Foundation; either version 2 of the License, or
17
* (at your option) any later version.
19
* This program is distributed in the hope that it will be useful,
20
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
* GNU General Public License for more details.
24
* You should have received a copy of the GNU General Public License
25
* along with this program; if not, write to the Free Software
26
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29
#include "std-defines.h"
30
#include "smblib-common.h"
33
#include "byteorder.h" /* Hmmm ... hot good */
35
#define max(a,b) (a < b ? b : a)
37
#define SMB_DEF_IDF 0x424D53FF /* "\377SMB" */
39
/* Core protocol commands */
41
#define SMBmkdir 0x00 /* create directory */
42
#define SMBrmdir 0x01 /* delete directory */
43
#define SMBopen 0x02 /* open file */
44
#define SMBcreate 0x03 /* create file */
45
#define SMBclose 0x04 /* close file */
46
#define SMBflush 0x05 /* flush file */
47
#define SMBunlink 0x06 /* delete file */
48
#define SMBmv 0x07 /* rename file */
49
#define SMBgetatr 0x08 /* get file attributes */
50
#define SMBsetatr 0x09 /* set file attributes */
51
#define SMBread 0x0A /* read from file */
52
#define SMBwrite 0x0B /* write to file */
53
#define SMBlock 0x0C /* lock byte range */
54
#define SMBunlock 0x0D /* unlock byte range */
55
#define SMBctemp 0x0E /* create temporary file */
56
#define SMBmknew 0x0F /* make new file */
57
#define SMBchkpth 0x10 /* check directory path */
58
#define SMBexit 0x11 /* process exit */
59
#define SMBlseek 0x12 /* seek */
60
#define SMBtcon 0x70 /* tree connect */
61
#define SMBtdis 0x71 /* tree disconnect */
62
#define SMBnegprot 0x72 /* negotiate protocol */
63
#define SMBdskattr 0x80 /* get disk attributes */
64
#define SMBsearch 0x81 /* search directory */
65
#define SMBsplopen 0xC0 /* open print spool file */
66
#define SMBsplwr 0xC1 /* write to print spool file */
67
#define SMBsplclose 0xC2 /* close print spool file */
68
#define SMBsplretq 0xC3 /* return print queue */
69
#define SMBsends 0xD0 /* send single block message */
70
#define SMBsendb 0xD1 /* send broadcast message */
71
#define SMBfwdname 0xD2 /* forward user name */
72
#define SMBcancelf 0xD3 /* cancel forward */
73
#define SMBgetmac 0xD4 /* get machine name */
74
#define SMBsendstrt 0xD5 /* send start of multi-block message */
75
#define SMBsendend 0xD6 /* send end of multi-block message */
76
#define SMBsendtxt 0xD7 /* send text of multi-block message */
78
/* CorePlus protocol */
80
#define SMBlockread 0x13 /* Lock a range and read it */
81
#define SMBwriteunlock 0x14 /* Unlock a range and then write */
82
#define SMBreadbraw 0x1a /* read a block of data without smb header ohead */
83
#define SMBwritebraw 0x1d /* write a block of data without smb header ohead */
84
#define SMBwritec 0x20 /* secondary write request */
85
#define SMBwriteclose 0x2c /* write a file and then close it */
87
/* DOS Extended Protocol */
89
#define SMBreadBraw 0x1A /* read block raw */
90
#define SMBreadBmpx 0x1B /* read block multiplexed */
91
#define SMBreadBs 0x1C /* read block (secondary response) */
92
#define SMBwriteBraw 0x1D /* write block raw */
93
#define SMBwriteBmpx 0x1E /* write block multiplexed */
94
#define SMBwriteBs 0x1F /* write block (secondary request) */
95
#define SMBwriteC 0x20 /* write complete response */
96
#define SMBsetattrE 0x22 /* set file attributes expanded */
97
#define SMBgetattrE 0x23 /* get file attributes expanded */
98
#define SMBlockingX 0x24 /* lock/unlock byte ranges and X */
99
#define SMBtrans 0x25 /* transaction - name, bytes in/out */
100
#define SMBtranss 0x26 /* transaction (secondary request/response) */
101
#define SMBioctl 0x27 /* IOCTL */
102
#define SMBioctls 0x28 /* IOCTL (secondary request/response) */
103
#define SMBcopy 0x29 /* copy */
104
#define SMBmove 0x2A /* move */
105
#define SMBecho 0x2B /* echo */
106
#define SMBopenX 0x2D /* open and X */
107
#define SMBreadX 0x2E /* read and X */
108
#define SMBwriteX 0x2F /* write and X */
109
#define SMBsesssetupX 0x73 /* Session Set Up & X (including User Logon) */
110
#define SMBtconX 0x75 /* tree connect and X */
111
#define SMBffirst 0x82 /* find first */
112
#define SMBfunique 0x83 /* find unique */
113
#define SMBfclose 0x84 /* find close */
114
#define SMBinvalid 0xFE /* invalid command */
118
#define SMBdatablockID 0x01 /* A data block identifier */
119
#define SMBdialectID 0x02 /* A dialect id */
120
#define SMBpathnameID 0x03 /* A pathname ID */
121
#define SMBasciiID 0x04 /* An ascii string ID */
122
#define SMBvariableblockID 0x05 /* A variable block ID */
124
/* some other defines we need */
126
/* Flags defines ... */
128
#define SMB_FLG2_NON_DOS 0x01 /* We know non dos names */
129
#define SMB_FLG2_EXT_ATR 0x02 /* We know about Extended Attributes */
130
#define SMB_FLG2_LNG_NAM 0x04 /* Long names ? */
132
typedef unsigned short WORD;
133
typedef unsigned short UWORD;
134
typedef unsigned int ULONG;
135
typedef unsigned char BYTE;
136
typedef unsigned char UCHAR;
138
/* Some macros to allow access to actual packet data so that we */
139
/* can change the underlying representation of packets. */
141
/* The current formats vying for attention are a fragment */
142
/* approach where the SMB header is a fragment linked to the */
143
/* data portion with the transport protocol (rfcnb or whatever) */
144
/* being linked on the front. */
146
/* The other approach is where the whole packet is one array */
147
/* of bytes with space allowed on the front for the packet */
150
#define SMB_Hdr(p) (char *)(p -> data)
152
/* SMB Hdr def for File Sharing Protocol? From MS and Intel, */
153
/* Intel PN 138446 Doc Version 2.0, Nov 7, 1988. This def also */
154
/* applies to LANMAN1.0 as well as the Core Protocol */
155
/* The spec states that wct and bcc must be present, even if 0 */
157
/* We define these as offsets into a char SMB[] array for the */
158
/* sake of portability */
160
/* NOTE!. Some of the lenght defines, SMB_<protreq>_len do not include */
161
/* the data that follows in the SMB packet, so the code will have to */
162
/* take that into account. */
164
#define SMB_hdr_idf_offset 0 /* 0xFF,'SMB' 0-3 */
165
#define SMB_hdr_com_offset 4 /* BYTE 4 */
166
#define SMB_hdr_rcls_offset 5 /* BYTE 5 */
167
#define SMB_hdr_reh_offset 6 /* BYTE 6 */
168
#define SMB_hdr_err_offset 7 /* WORD 7 */
169
#define SMB_hdr_reb_offset 9 /* BYTE 9 */
170
#define SMB_hdr_flg_offset 9 /* same as reb ... */
171
#define SMB_hdr_res_offset 10 /* 7 WORDs 10 */
172
#define SMB_hdr_res0_offset 10 /* WORD 10 */
173
#define SMB_hdr_flg2_offset 10 /* WORD */
174
#define SMB_hdr_res1_offset 12 /* WORD 12 */
175
#define SMB_hdr_res2_offset 14
176
#define SMB_hdr_res3_offset 16
177
#define SMB_hdr_res4_offset 18
178
#define SMB_hdr_res5_offset 20
179
#define SMB_hdr_res6_offset 22
180
#define SMB_hdr_tid_offset 24
181
#define SMB_hdr_pid_offset 26
182
#define SMB_hdr_uid_offset 28
183
#define SMB_hdr_mid_offset 30
184
#define SMB_hdr_wct_offset 32
186
#define SMB_hdr_len 33 /* 33 byte header? */
188
#define SMB_hdr_axc_offset 33 /* AndX Command */
189
#define SMB_hdr_axr_offset 34 /* AndX Reserved */
190
#define SMB_hdr_axo_offset 35 /* Offset from start to WCT of AndX cmd */
192
/* Format of the Negotiate Protocol SMB */
194
#define SMB_negp_bcc_offset 33
195
#define SMB_negp_buf_offset 35 /* Where the buffer starts */
196
#define SMB_negp_len 35 /* plus the data */
198
/* Format of the Negotiate Response SMB, for CoreProtocol, LM1.2 and */
199
/* NT LM 0.12. wct will be 1 for CoreProtocol, 13 for LM 1.2, and 17 */
202
#define SMB_negrCP_idx_offset 33 /* Response to the neg req */
203
#define SMB_negrCP_bcc_offset 35
204
#define SMB_negrLM_idx_offset 33 /* dialect index */
205
#define SMB_negrLM_sec_offset 35 /* Security mode */
206
#define SMB_sec_user_mask 0x01 /* 0 = share, 1 = user */
207
#define SMB_sec_encrypt_mask 0x02 /* pick out encrypt */
208
#define SMB_negrLM_mbs_offset 37 /* max buffer size */
209
#define SMB_negrLM_mmc_offset 39 /* max mpx count */
210
#define SMB_negrLM_mnv_offset 41 /* max number of VCs */
211
#define SMB_negrLM_rm_offset 43 /* raw mode support bit vec */
212
#define SMB_read_raw_mask 0x01
213
#define SMB_write_raw_mask 0x02
214
#define SMB_negrLM_sk_offset 45 /* session key, 32 bits */
215
#define SMB_negrLM_st_offset 49 /* Current server time */
216
#define SMB_negrLM_sd_offset 51 /* Current server date */
217
#define SMB_negrLM_stz_offset 53 /* Server Time Zone */
218
#define SMB_negrLM_ekl_offset 55 /* encryption key length */
219
#define SMB_negrLM_res_offset 57 /* reserved */
220
#define SMB_negrLM_bcc_offset 59 /* bcc */
221
#define SMB_negrLM_len 61 /* 61 bytes ? */
222
#define SMB_negrLM_buf_offset 61 /* Where the fun begins */
224
#define SMB_negrNTLM_idx_offset 33 /* Selected protocol */
225
#define SMB_negrNTLM_sec_offset 35 /* Security more */
226
#define SMB_negrNTLM_mmc_offset 36 /* Different format above */
227
#define SMB_negrNTLM_mnv_offset 38 /* Max VCs */
228
#define SMB_negrNTLM_mbs_offset 40 /* MBS now a long */
229
#define SMB_negrNTLM_mrs_offset 44 /* Max raw size */
230
#define SMB_negrNTLM_sk_offset 48 /* Session Key */
231
#define SMB_negrNTLM_cap_offset 52 /* Capabilities */
232
#define SMB_negrNTLM_stl_offset 56 /* Server time low */
233
#define SMB_negrNTLM_sth_offset 60 /* Server time high */
234
#define SMB_negrNTLM_stz_offset 64 /* Server time zone */
235
#define SMB_negrNTLM_ekl_offset 66 /* Encrypt key len */
236
#define SMB_negrNTLM_bcc_offset 67 /* Bcc */
237
#define SMB_negrNTLM_len 69
238
#define SMB_negrNTLM_buf_offset 69
240
/* Offsets related to Tree Connect */
242
#define SMB_tcon_bcc_offset 33
243
#define SMB_tcon_buf_offset 35 /* where the data is for tcon */
244
#define SMB_tcon_len 35 /* plus the data */
246
#define SMB_tconr_mbs_offset 33 /* max buffer size */
247
#define SMB_tconr_tid_offset 35 /* returned tree id */
248
#define SMB_tconr_bcc_offset 37
249
#define SMB_tconr_len 39
251
#define SMB_tconx_axc_offset 33 /* And X Command */
252
#define SMB_tconx_axr_offset 34 /* reserved */
253
#define SMB_tconx_axo_offset 35 /* Next command offset */
254
#define SMB_tconx_flg_offset 37 /* Flags, bit0=1 means disc TID */
255
#define SMB_tconx_pwl_offset 39 /* Password length */
256
#define SMB_tconx_bcc_offset 41 /* bcc */
257
#define SMB_tconx_buf_offset 43 /* buffer */
258
#define SMB_tconx_len 43 /* up to data ... */
260
#define SMB_tconxr_axc_offset 33 /* Where the AndX Command is */
261
#define SMB_tconxr_axr_offset 34 /* Reserved */
262
#define SMB_tconxr_axo_offset 35 /* AndX offset location */
264
/* Offsets related to tree_disconnect */
266
#define SMB_tdis_bcc_offset 33 /* bcc */
267
#define SMB_tdis_len 35 /* total len */
269
#define SMB_tdisr_bcc_offset 33 /* bcc */
270
#define SMB_tdisr_len 35
272
/* Offsets related to Open Request */
274
#define SMB_open_mod_offset 33 /* Mode to open with */
275
#define SMB_open_atr_offset 35 /* Attributes of file */
276
#define SMB_open_bcc_offset 37 /* bcc */
277
#define SMB_open_buf_offset 39 /* File name */
278
#define SMB_open_len 39 /* Plus the file name */
280
#define SMB_openx_axc_offset 33 /* Next command */
281
#define SMB_openx_axr_offset 34 /* Reserved */
282
#define SMB_openx_axo_offset 35 /* offset of next wct */
283
#define SMB_openx_flg_offset 37 /* Flags, bit0 = need more info */
284
/* bit1 = exclusive oplock */
285
/* bit2 = batch oplock */
286
#define SMB_openx_mod_offset 39 /* mode to open with */
287
#define SMB_openx_atr_offset 41 /* search attributes */
288
#define SMB_openx_fat_offset 43 /* File attributes */
289
#define SMB_openx_tim_offset 45 /* time and date of creat */
290
#define SMB_openx_ofn_offset 49 /* Open function */
291
#define SMB_openx_als_offset 51 /* Space to allocate on */
292
#define SMB_openx_res_offset 55 /* reserved */
293
#define SMB_openx_bcc_offset 63 /* bcc */
294
#define SMB_openx_buf_offset 65 /* Where file name goes */
295
#define SMB_openx_len 65
297
#define SMB_openr_fid_offset 33 /* FID returned */
298
#define SMB_openr_atr_offset 35 /* Attributes opened with */
299
#define SMB_openr_tim_offset 37 /* Last mod time of file */
300
#define SMB_openr_fsz_offset 41 /* File size 4 bytes */
301
#define SMB_openr_acc_offset 45 /* Access allowed */
302
#define SMB_openr_bcc_offset 47
303
#define SMB_openr_len 49
305
#define SMB_openxr_axc_offset 33 /* And X command */
306
#define SMB_openxr_axr_offset 34 /* reserved */
307
#define SMB_openxr_axo_offset 35 /* offset to next command */
308
#define SMB_openxr_fid_offset 37 /* FID returned */
309
#define SMB_openxr_fat_offset 39 /* File attributes returned */
310
#define SMB_openxr_tim_offset 41 /* File creation date etc */
311
#define SMB_openxr_fsz_offset 45 /* Size of file */
312
#define SMB_openxr_acc_offset 49 /* Access granted */
314
#define SMB_clos_fid_offset 33 /* FID to close */
315
#define SMB_clos_tim_offset 35 /* Last mod time */
316
#define SMB_clos_bcc_offset 39 /* bcc */
317
#define SMB_clos_len 41
319
/* Offsets related to Write requests */
321
#define SMB_write_fid_offset 33 /* FID to write */
322
#define SMB_write_cnt_offset 35 /* bytes to write */
323
#define SMB_write_ofs_offset 37 /* location to write to */
324
#define SMB_write_clf_offset 41 /* advisory count left */
325
#define SMB_write_bcc_offset 43 /* bcc = data bytes + 3 */
326
#define SMB_write_buf_offset 45 /* Data=0x01, len, data */
327
#define SMB_write_len 45 /* plus the data ... */
329
#define SMB_writr_cnt_offset 33 /* Count of bytes written */
330
#define SMB_writr_bcc_offset 35 /* bcc */
331
#define SMB_writr_len 37
333
/* Offsets related to read requests */
335
#define SMB_read_fid_offset 33 /* FID of file to read */
336
#define SMB_read_cnt_offset 35 /* count of words to read */
337
#define SMB_read_ofs_offset 37 /* Where to read from */
338
#define SMB_read_clf_offset 41 /* Advisory count to go */
339
#define SMB_read_bcc_offset 43
340
#define SMB_read_len 45
342
#define SMB_readr_cnt_offset 33 /* Count of bytes returned */
343
#define SMB_readr_res_offset 35 /* 4 shorts reserved, 8 bytes */
344
#define SMB_readr_bcc_offset 43 /* bcc */
345
#define SMB_readr_bff_offset 45 /* buffer format char = 0x01 */
346
#define SMB_readr_len_offset 46 /* buffer len */
347
#define SMB_readr_len 45 /* length of the readr before data */
349
/* Offsets for Create file */
351
#define SMB_creat_atr_offset 33 /* Attributes of new file ... */
352
#define SMB_creat_tim_offset 35 /* Time of creation */
353
#define SMB_creat_dat_offset 37 /* 4004BCE :-) */
354
#define SMB_creat_bcc_offset 39 /* bcc */
355
#define SMB_creat_buf_offset 41
356
#define SMB_creat_len 41 /* Before the data */
358
#define SMB_creatr_fid_offset 33 /* FID of created file */
360
/* Offsets for Delete file */
362
#define SMB_delet_sat_offset 33 /* search attribites */
363
#define SMB_delet_bcc_offset 35 /* bcc */
364
#define SMB_delet_buf_offset 37
365
#define SMB_delet_len 37
367
/* Offsets for SESSION_SETUP_ANDX for both LM and NT LM protocols */
369
#define SMB_ssetpLM_mbs_offset 37 /* Max buffer Size, allow for AndX */
370
#define SMB_ssetpLM_mmc_offset 39 /* max multiplex count */
371
#define SMB_ssetpLM_vcn_offset 41 /* VC number if new VC */
372
#define SMB_ssetpLM_snk_offset 43 /* Session Key */
373
#define SMB_ssetpLM_pwl_offset 47 /* password length */
374
#define SMB_ssetpLM_res_offset 49 /* reserved */
375
#define SMB_ssetpLM_bcc_offset 53 /* bcc */
376
#define SMB_ssetpLM_len 55 /* before data ... */
377
#define SMB_ssetpLM_buf_offset 55
379
#define SMB_ssetpNTLM_mbs_offset 37 /* Max Buffer Size for NT LM 0.12 */
381
#define SMB_ssetpNTLM_mmc_offset 39 /* Max Multiplex count */
382
#define SMB_ssetpNTLM_vcn_offset 41 /* VC Number */
383
#define SMB_ssetpNTLM_snk_offset 43 /* Session key */
384
#define SMB_ssetpNTLM_cipl_offset 47 /* Case Insensitive PW Len */
385
#define SMB_ssetpNTLM_cspl_offset 49 /* Unicode pw len */
386
#define SMB_ssetpNTLM_res_offset 51 /* reserved */
387
#define SMB_ssetpNTLM_cap_offset 55 /* server capabilities */
388
#define SMB_ssetpNTLM_bcc_offset 59 /* bcc */
389
#define SMB_ssetpNTLM_len 61 /* before data */
390
#define SMB_ssetpNTLM_buf_offset 61
392
#define SMB_ssetpr_axo_offset 35 /* Offset of next response ... */
393
#define SMB_ssetpr_act_offset 37 /* action, bit 0 = 1 => guest */
394
#define SMB_ssetpr_bcc_offset 39 /* bcc */
395
#define SMB_ssetpr_buf_offset 41 /* Native OS etc */
397
/* Offsets for SMB create directory */
399
#define SMB_creatdir_bcc_offset 33 /* only a bcc here */
400
#define SMB_creatdir_buf_offset 35 /* Where things start */
401
#define SMB_creatdir_len 35
403
/* Offsets for SMB delete directory */
405
#define SMB_deletdir_bcc_offset 33 /* only a bcc here */
406
#define SMB_deletdir_buf_offset 35 /* where things start */
407
#define SMB_deletdir_len 35
409
/* Offsets for SMB check directory */
411
#define SMB_checkdir_bcc_offset 33 /* Only a bcc here */
412
#define SMB_checkdir_buf_offset 35 /* where things start */
413
#define SMB_checkdir_len 35
415
/* Offsets for SMB search */
417
#define SMB_search_mdc_offset 33 /* Max Dir ents to return */
418
#define SMB_search_atr_offset 35 /* Search attributes */
419
#define SMB_search_bcc_offset 37 /* bcc */
420
#define SMB_search_buf_offset 39 /* where the action is */
421
#define SMB_search_len 39
423
#define SMB_searchr_dec_offset 33 /* Dir ents returned */
424
#define SMB_searchr_bcc_offset 35 /* bcc */
425
#define SMB_searchr_buf_offset 37 /* Where the action starts */
426
#define SMB_searchr_len 37 /* before the dir ents */
428
#define SMB_searchr_dirent_len 43 /* 53 bytes */
430
/* Defines for SMB transact and transact2 calls */
432
#define SMB_trans_tpc_offset 33 /* Total param count */
433
#define SMB_trans_tdc_offset 35 /* total Data count */
434
#define SMB_trans_mpc_offset 37 /* Max params bytes to return */
435
#define SMB_trans_mdc_offset 39 /* Max data bytes to return */
436
#define SMB_trans_msc_offset 41 /* Max setup words to return */
437
#define SMB_trans_rs1_offset 42 /* Reserved byte */
438
#define SMB_trans_flg_offset 43 /* flags */
439
#define SMB_trans_tmo_offset 45 /* Timeout, long */
440
#define SMB_trans_rs2_offset 49 /* Next reserved */
441
#define SMB_trans_pbc_offset 51 /* Param Byte count in buf */
442
#define SMB_trans_pbo_offset 53 /* Offset to param bytes */
443
#define SMB_trans_dbc_offset 55 /* Data byte count in buf */
444
#define SMB_trans_dbo_offset 57 /* Data byte offset */
445
#define SMB_trans_suc_offset 59 /* Setup count - byte */
446
#define SMB_trans_rs3_offset 60 /* Reserved to pad ... */
447
#define SMB_trans_len 61 /* Up to setup, still need bcc */
449
#define SMB_transr_tpc_offset 33 /* Total param bytes returned */
450
#define SMB_transr_tdc_offset 35
451
#define SMB_transr_rs1_offset 37
452
#define SMB_transr_pbc_offset 39
453
#define SMB_transr_pbo_offset 41
454
#define SMB_transr_pdi_offset 43 /* parameter displacement */
455
#define SMB_transr_dbc_offset 45
456
#define SMB_transr_dbo_offset 47
457
#define SMB_transr_ddi_offset 49
458
#define SMB_transr_suc_offset 51
459
#define SMB_transr_rs2_offset 52
460
#define SMB_transr_len 53
462
/* Bit masks for SMB Capabilities ... */
464
#define SMB_cap_raw_mode 0x0001
465
#define SMB_cap_mpx_mode 0x0002
466
#define SMB_cap_unicode 0x0004
467
#define SMB_cap_large_files 0x0008
468
#define SMB_cap_nt_smbs 0x0010
469
#define SMB_rpc_remote_apis 0x0020
470
#define SMB_cap_nt_status 0x0040
471
#define SMB_cap_level_II_oplocks 0x0080
472
#define SMB_cap_lock_and_read 0x0100
473
#define SMB_cap_nt_find 0x0200
475
/* SMB LANMAN api call defines */
477
#define SMB_LMapi_SetUserInfo 0x0072
478
#define SMB_LMapi_UserPasswordSet 0x0073
480
/* Structures and defines we use in the client interface */
482
/* The protocols we might support. Perhaps a bit ambitious, as only RFCNB */
483
/* has any support so far 0(sometimes called NBT) */
486
SMB_RFCNB, SMB_IPXNB, SMB_NETBEUI, SMB_X25
487
} SMB_Transport_Types;
490
SMB_Con_FShare, SMB_Con_PShare, SMB_Con_IPC
494
SMB_State_NoState, SMB_State_Stopped, SMB_State_Started
497
/* The following two arrays need to be in step! */
498
/* We must make it possible for callers to specify these ... */
501
extern char *SMB_Prots[];
504
* static char *SMB_Prots[] = {"PC NETWORK PROGRAM 1.0",
505
* "MICROSOFT NETWORKS 1.03",
506
* "MICROSOFT NETWORKS 3.0",
518
extern int SMB_Types[];
521
* static int SMB_Types[] = {SMB_P_Core,
537
typedef struct SMB_Status {
541
unsigned char ErrorClass;
542
unsigned char Reserved;
543
unsigned short Error;
545
unsigned int NtStatus;
549
typedef struct SMB_Tree_Structure *SMB_Tree_Handle;
551
typedef struct SMB_Connect_Def *SMB_Handle_Type;
553
struct SMB_Connect_Def {
555
SMB_Handle_Type Next_Con, Prev_Con; /* Next and previous conn */
556
int protocol; /* What is the protocol */
557
int prot_IDX; /* And what is the index */
558
void *Trans_Connect; /* The connection */
560
/* All these strings should be malloc'd */
562
char service[80], username[80], password[80], desthost[80], sock_options[80];
563
char address[80], myname[80];
565
SMB_Tree_Handle first_tree, last_tree; /* List of trees on this server */
567
int gid; /* Group ID, do we need it? */
568
int mid; /* Multiplex ID? We might need one per con */
569
int pid; /* Process ID */
571
int uid; /* Authenticated user id. */
573
/* It is pretty clear that we need to bust some of */
574
/* these out into a per TCon record, as there may */
575
/* be multiple TCon's per server, etc ... later */
577
int port; /* port to use in case not default, this is a TCPism! */
579
int max_xmit; /* Max xmit permitted by server */
580
int Security; /* 0 = share, 1 = user */
581
int Raw_Support; /* bit 0 = 1 = Read Raw supported, 1 = 1 Write raw */
582
BOOL encrypt_passwords; /* FALSE = don't */
583
int MaxMPX, MaxVC, MaxRaw;
584
unsigned int SessionKey, Capabilities;
585
int SvrTZ; /* Server Time Zone */
587
char Encrypt_Key[80], Domain[80], PDomain[80], OSName[80], LMType[40];
588
char Svr_OS[80], Svr_LMType[80], Svr_PDom[80];
592
#ifndef SMBLIB_DEFAULT_DOMAIN
593
#define SMBLIB_DEFAULT_DOMAIN "STAFF"
595
#define SMBLIB_DEFAULT_OSNAME "UNIX of some type"
596
#define SMBLIB_DEFAULT_LMTYPE "SMBlib LM2.1 minus a bit"
597
#define SMBLIB_MAX_XMIT 65535
599
#define SMB_Sec_Mode_Share 0
600
#define SMB_Sec_Mode_User 1
602
/* A Tree_Structure */
604
struct SMB_Tree_Structure {
606
SMB_Tree_Handle next, prev;
609
char device_type[20];
610
int mbs; /* Local MBS */
615
typedef struct SMB_File_Def SMB_File;
617
struct SMB_File_Def {
619
SMB_Tree_Handle tree;
620
char filename[256]; /* We should malloc this ... */
622
unsigned int lastmod;
623
unsigned int size; /* Could blow up if 64bit files supported */
629
/* global Variables for the library */
631
extern SMB_State_Types SMBlib_State;
634
extern int SMBlib_errno;
635
extern int SMBlib_SMB_Error; /* last Error */
638
SMB_Tree_Handle SMB_TreeConnect(SMB_Handle_Type con, SMB_Tree_Handle tree,
639
char *path, char *password, char *dev);
642
void SMB_Get_My_Name(char *name, int len);
643
int SMB_Negotiate(SMB_Handle_Type Con_Handle, char *Prots[]);
644
int SMB_Discon(SMB_Handle_Type Con_Handle, BOOL KeepHandle);
646
int SMB_Logon_Server(SMB_Handle_Type Con_Handle, char *UserName,
647
char *PassWord, char *UserDomain, int precrypted);
649
int SMB_Get_Error_Msg(int msg, char *msgbuf, int len);
651
int SMB_Get_Last_Error();
653
#endif /* __SMBLIB_PRIV_H__ */