1/*
2   Unix SMB/CIFS implementation.
3   SMB parameters and setup, plus a whole lot more.
4
5   Copyright (C) Andrew Tridgell              1992-2000
6   Copyright (C) John H Terpstra              1996-2002
7   Copyright (C) Luke Kenneth Casson Leighton 1996-2000
8   Copyright (C) Paul Ashton                  1998-2000
9   Copyright (C) Simo Sorce                   2001-2002
10   Copyright (C) Martin Pool		      2002
11
12   This program is free software; you can redistribute it and/or modify
13   it under the terms of the GNU General Public License as published by
14   the Free Software Foundation; either version 2 of the License, or
15   (at your option) any later version.
16
17   This program is distributed in the hope that it will be useful,
18   but WITHOUT ANY WARRANTY; without even the implied warranty of
19   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20   GNU General Public License for more details.
21
22   You should have received a copy of the GNU General Public License
23   along with this program; if not, write to the Free Software
24   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25*/
26
27#ifndef _SMB_H
28#define _SMB_H
29
30#if defined(LARGE_SMB_OFF_T)
31#define BUFFER_SIZE (256*1024)
32#else /* no large readwrite possible */
33#define BUFFER_SIZE (256*1024) /* wklin modified, 11/19/2009  */
34/* #define BUFFER_SIZE (0xFFFF) */
35#endif
36
37#define SAFETY_MARGIN 1024
38#define LARGE_WRITEX_HDR_SIZE 65
39
40#define NMB_PORT 137
41#define DGRAM_PORT 138
42#define SMB_PORT1 445
43#define SMB_PORT2 139
44#define SMB_PORTS "445 139"
45
46#define Undefined (-1)
47#define False (0)
48#define True (1)
49#define Auto (2)
50#define Required (3)
51
52#ifndef _BOOL
53typedef int BOOL;
54#define _BOOL       /* So we don't typedef BOOL again in vfs.h */
55#endif
56
57#define SIZEOFWORD 2
58
59#ifndef DEF_CREATE_MASK
60#define DEF_CREATE_MASK (0755)
61#endif
62
63/* string manipulation flags - see clistr.c and srvstr.c */
64#define STR_TERMINATE 1
65#define STR_UPPER 2
66#define STR_ASCII 4
67#define STR_UNICODE 8
68#define STR_NOALIGN 16
69#define STR_TERMINATE_ASCII 128
70
71/* how long to wait for secondary SMB packets (milli-seconds) */
72#define SMB_SECONDARY_WAIT (60*1000)
73
74/* Debugging stuff */
75#include "debug.h"
76
77/* this defines the error codes that receive_smb can put in smb_read_error */
78#define READ_TIMEOUT 1
79#define READ_EOF 2
80#define READ_ERROR 3
81#define WRITE_ERROR 4 /* This error code can go into the client smb_rw_error. */
82#define READ_BAD_SIG 5
83#define DO_NOT_DO_TDIS 6 /* cli_close_connection() check for this when smbfs wants to keep tree connected */
84
85#define DIR_STRUCT_SIZE 43
86
87/* these define the attribute byte as seen by DOS */
88#define aRONLY (1L<<0)		/* 0x01 */
89#define aHIDDEN (1L<<1)		/* 0x02 */
90#define aSYSTEM (1L<<2)		/* 0x04 */
91#define aVOLID (1L<<3)		/* 0x08 */
92#define aDIR (1L<<4)		/* 0x10 */
93#define aARCH (1L<<5)		/* 0x20 */
94
95/* deny modes */
96#define DENY_DOS 0
97#define DENY_ALL 1
98#define DENY_WRITE 2
99#define DENY_READ 3
100#define DENY_NONE 4
101#define DENY_FCB 7
102
103/* open modes */
104#define DOS_OPEN_RDONLY 0
105#define DOS_OPEN_WRONLY 1
106#define DOS_OPEN_RDWR 2
107#define DOS_OPEN_FCB 0xF
108
109/* define shifts and masks for share and open modes. */
110#define OPEN_MODE_MASK 0xF
111#define SHARE_MODE_SHIFT 4
112#define SHARE_MODE_MASK 0x7
113#define GET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK)
114#define SET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK)
115#define GET_DENY_MODE(x) (((x)>>SHARE_MODE_SHIFT) & SHARE_MODE_MASK)
116#define SET_DENY_MODE(x) (((x) & SHARE_MODE_MASK) <<SHARE_MODE_SHIFT)
117
118/* Sync on open file (not sure if used anymore... ?) */
119#define FILE_SYNC_OPENMODE (1<<14)
120#define GET_FILE_SYNC_OPENMODE(x) (((x) & FILE_SYNC_OPENMODE) ? True : False)
121
122/* allow delete on open file mode (used by NT SMB's). */
123#define ALLOW_SHARE_DELETE (1<<15)
124#define GET_ALLOW_SHARE_DELETE(x) (((x) & ALLOW_SHARE_DELETE) ? True : False)
125#define SET_ALLOW_SHARE_DELETE(x) ((x) ? ALLOW_SHARE_DELETE : 0)
126
127/* delete on close flag (used by NT SMB's). */
128#define DELETE_ON_CLOSE_FLAG (1<<16)
129#define GET_DELETE_ON_CLOSE_FLAG(x) (((x) & DELETE_ON_CLOSE_FLAG) ? True : False)
130#define SET_DELETE_ON_CLOSE_FLAG(x) ((x) ? DELETE_ON_CLOSE_FLAG : 0)
131
132/* open disposition values */
133#define FILE_EXISTS_FAIL 0
134#define FILE_EXISTS_OPEN 1
135#define FILE_EXISTS_TRUNCATE 2
136
137/* mask for open disposition. */
138#define FILE_OPEN_MASK 0x3
139
140#define GET_FILE_OPEN_DISPOSITION(x) ((x) & FILE_OPEN_MASK)
141#define SET_FILE_OPEN_DISPOSITION(x) ((x) & FILE_OPEN_MASK)
142
143/* The above can be OR'ed with... */
144#define FILE_CREATE_IF_NOT_EXIST 0x10
145#define FILE_FAIL_IF_NOT_EXIST 0
146
147#define GET_FILE_CREATE_DISPOSITION(x) ((x) & (FILE_CREATE_IF_NOT_EXIST|FILE_FAIL_IF_NOT_EXIST))
148
149/* share types */
150#define STYPE_DISKTREE  0	/* Disk drive */
151#define STYPE_PRINTQ    1	/* Spooler queue */
152#define STYPE_DEVICE    2	/* Serial device */
153#define STYPE_IPC       3	/* Interprocess communication (IPC) */
154#define STYPE_HIDDEN    0x80000000 /* share is a hidden one (ends with $) */
155
156
157/* Foxconn, added by MJ., 2010.03.25, for making a shared memory. */
158#ifdef MAX_USB_ACCESS
159
160#ifndef LINUX26
161#include <linux/spinlock.h>
162#endif
163#include <sys/shm.h>
164#include <sys/stat.h>
165#define MAX_CON_NUM 15
166typedef struct
167{
168    int sem_id;
169    int num;
170    int ftp_num;
171    int wan_ftp_num;
172}CON_STATISTIC;
173
174//int segment_id;
175/* Foxconn, ended by MJ., 2010.03.25, */
176
177/* Foxconn, added by MJ., 2010.03.25, for making a Semaphore. */
178
179#include <sys/ipc.h>
180#include <sys/sem.h>
181#include <sys/types.h>
182#include <sys/wait.h>
183
184/* We must define union semun ourselves for using Semaphore. */
185union semun {
186    int val;
187    struct semid_ds *buf;
188    unsigned short int *array;
189    struct seminfo *__buf;
190};
191
192int binary_semaphore_allocation (key_t key, int sem_flags);
193int binary_semaphore_deallocate (int semid);
194int binary_semaphore_initialize (int semid);
195int binary_semaphore_wait (int semid);
196int binary_semaphore_post (int semid);
197
198
199#endif // End of MAX_USB_ACCESS
200/* Foxconn, ended by MJ., 2010.03.25, */
201
202
203
204#include "doserr.h"
205
206typedef union unid_t {
207	uid_t uid;
208	gid_t gid;
209} unid_t;
210
211/*
212 * SMB UCS2 (16-bit unicode) internal type.
213 */
214
215typedef uint16 smb_ucs2_t;
216
217/* ucs2 string types. */
218typedef smb_ucs2_t wpstring[PSTRING_LEN];
219typedef smb_ucs2_t wfstring[FSTRING_LEN];
220
221#ifdef WORDS_BIGENDIAN
222#define UCS2_SHIFT 8
223#else
224#define UCS2_SHIFT 0
225#endif
226
227/* turn a 7 bit character into a ucs2 character */
228#define UCS2_CHAR(c) ((c) << UCS2_SHIFT)
229
230/* pipe string names */
231#define PIPE_LANMAN   "\\PIPE\\LANMAN"
232#define PIPE_SRVSVC   "\\PIPE\\srvsvc"
233#define PIPE_SAMR     "\\PIPE\\samr"
234#define PIPE_WINREG   "\\PIPE\\winreg"
235#define PIPE_WKSSVC   "\\PIPE\\wkssvc"
236#define PIPE_NETLOGON "\\PIPE\\NETLOGON"
237#define PIPE_NTLSA    "\\PIPE\\ntlsa"
238#define PIPE_NTSVCS   "\\PIPE\\ntsvcs"
239#define PIPE_LSASS    "\\PIPE\\lsass"
240#define PIPE_LSARPC   "\\PIPE\\lsarpc"
241#define PIPE_SPOOLSS  "\\PIPE\\spoolss"
242#define PIPE_NETDFS   "\\PIPE\\netdfs"
243#define PIPE_ECHO     "\\PIPE\\rpcecho"
244#define PIPE_SHUTDOWN "\\PIPE\\initshutdown"
245
246#define PIPE_NETLOGON_PLAIN "\\NETLOGON"
247
248#define PI_LSARPC		0
249#define PI_LSARPC_DS		1
250#define PI_SAMR			2
251#define PI_NETLOGON		3
252#define PI_SRVSVC		4
253#define PI_WKSSVC		5
254#define PI_WINREG		6
255#define PI_SPOOLSS		7
256#define PI_NETDFS		8
257#define PI_ECHO 		9
258#define PI_SHUTDOWN		10
259#define PI_MAX_PIPES		11
260
261/* 64 bit time (100usec) since ????? - cifs6.txt, section 3.5, page 30 */
262typedef struct nttime_info
263{
264  uint32 low;
265  uint32 high;
266} NTTIME;
267
268
269/* Allowable account control bits */
270#define ACB_DISABLED   0x0001  /* 1 = User account disabled */
271#define ACB_HOMDIRREQ  0x0002  /* 1 = Home directory required */
272#define ACB_PWNOTREQ   0x0004  /* 1 = User password not required */
273#define ACB_TEMPDUP    0x0008  /* 1 = Temporary duplicate account */
274#define ACB_NORMAL     0x0010  /* 1 = Normal user account */
275#define ACB_MNS        0x0020  /* 1 = MNS logon user account */
276#define ACB_DOMTRUST   0x0040  /* 1 = Interdomain trust account */
277#define ACB_WSTRUST    0x0080  /* 1 = Workstation trust account */
278#define ACB_SVRTRUST   0x0100  /* 1 = Server trust account (BDC) */
279#define ACB_PWNOEXP    0x0200  /* 1 = User password does not expire */
280#define ACB_AUTOLOCK   0x0400  /* 1 = Account auto locked */
281
282#define MAX_HOURS_LEN 32
283
284/*
285 * window during which we must talk to the PDC to avoid
286 * sam sync delays; expressed in seconds (15 minutes is the
287 * default period for SAM replication under Windows NT 4.0
288 */
289#define SAM_SYNC_WINDOW		900
290
291
292#ifndef MAXSUBAUTHS
293#define MAXSUBAUTHS 15 /* max sub authorities in a SID */
294#endif
295
296#define SID_MAX_SIZE ((size_t)(8+(MAXSUBAUTHS*4)))
297
298/* SID Types */
299enum SID_NAME_USE
300{
301	SID_NAME_USE_NONE = 0,
302	SID_NAME_USER    = 1, /* user */
303	SID_NAME_DOM_GRP,     /* domain group */
304	SID_NAME_DOMAIN,      /* domain sid */
305	SID_NAME_ALIAS,       /* local group */
306	SID_NAME_WKN_GRP,     /* well-known group */
307	SID_NAME_DELETED,     /* deleted account: needed for c2 rating */
308	SID_NAME_INVALID,     /* invalid account */
309	SID_NAME_UNKNOWN,     /* unknown sid type */
310	SID_NAME_COMPUTER     /* sid for a computer */
311};
312
313/**
314 * @brief Security Identifier
315 *
316 * @sa http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/accctrl_38yn.asp
317 **/
318typedef struct sid_info
319{
320  uint8  sid_rev_num;             /**< SID revision number */
321  uint8  num_auths;               /**< Number of sub-authorities */
322  uint8  id_auth[6];              /**< Identifier Authority */
323  /*
324   *  Pointer to sub-authorities.
325   *
326   * @note The values in these uint32's are in *native* byteorder, not
327   * neccessarily little-endian...... JRA.
328   */
329  uint32 sub_auths[MAXSUBAUTHS];
330
331} DOM_SID;
332
333typedef struct sid_list {
334	uint32 count;
335	DOM_SID *list;
336} SID_LIST;
337
338/*
339 * The complete list of SIDS belonging to this user.
340 * Created when a vuid is registered.
341 * The definition of the user_sids array is as follows :
342 *
343 * token->user_sids[0] = primary user SID.
344 * token->user_sids[1] = primary group SID.
345 * token->user_sids[2..num_sids] = supplementary group SIDS.
346 */
347
348#define PRIMARY_USER_SID_INDEX 0
349#define PRIMARY_GROUP_SID_INDEX 1
350
351typedef struct _nt_user_token {
352	size_t num_sids;
353	DOM_SID *user_sids;
354	SE_PRIV privileges;
355} NT_USER_TOKEN;
356
357/*** query a local group, get a list of these: shows who is in that group ***/
358
359/* local group member info */
360typedef struct local_grp_member_info
361{
362	DOM_SID sid    ; /* matches with name */
363	uint8   sid_use; /* usr=1 grp=2 dom=3 alias=4 wkng=5 del=6 inv=7 unk=8 */
364	fstring name   ; /* matches with sid: must be of the form "DOMAIN\account" */
365
366} LOCAL_GRP_MEMBER;
367
368/* enumerate these to get list of local groups */
369
370/* local group info */
371typedef struct local_grp_info
372{
373	fstring name;
374	fstring comment;
375
376} LOCAL_GRP;
377
378/*** enumerate these to get list of domain groups ***/
379
380/* domain group member info */
381typedef struct domain_grp_info
382{
383	fstring name;
384	fstring comment;
385	uint32  rid; /* group rid */
386	uint8   attr; /* attributes forced to be set to 0x7: SE_GROUP_xxx */
387
388} DOMAIN_GRP;
389
390/*** query a domain group, get a list of these: shows who is in that group ***/
391
392/* domain group info */
393typedef struct domain_grp_member_info
394{
395	fstring name;
396	uint8   attr; /* attributes forced to be set to 0x7: SE_GROUP_xxx */
397
398} DOMAIN_GRP_MEMBER;
399
400/* 32 bit time (sec) since 01jan1970 - cifs6.txt, section 3.5, page 30 */
401typedef struct time_info
402{
403  uint32 time;
404} UTIME;
405
406/* Structure used when SMBwritebmpx is active */
407typedef struct
408{
409  size_t wr_total_written; /* So we know when to discard this */
410  int32 wr_timeout;
411  int32 wr_errclass;
412  int32 wr_error; /* Cached errors */
413  BOOL  wr_mode; /* write through mode) */
414  BOOL  wr_discard; /* discard all further data */
415} write_bmpx_struct;
416
417typedef struct write_cache
418{
419    SMB_OFF_T file_size;
420    SMB_OFF_T offset;
421    size_t alloc_size;
422    size_t data_size;
423    char *data;
424} write_cache;
425
426typedef struct
427{
428	smb_ucs2_t *origname;
429	smb_ucs2_t *filename;
430	SMB_STRUCT_STAT *statinfo;
431} smb_filename;
432
433#include "fake_file.h"
434
435typedef struct files_struct {
436	struct files_struct *next, *prev;
437	int fnum;
438	struct connection_struct *conn;
439	int fd;
440	uint16 rap_print_jobid;
441	SMB_DEV_T dev;
442	SMB_INO_T inode;
443	BOOL delete_on_close;
444	SMB_OFF_T pos;
445	SMB_BIG_UINT size;
446	SMB_BIG_UINT initial_allocation_size; /* Faked up initial allocation on disk. */
447	SMB_BIG_UINT position_information;
448	mode_t mode;
449	uint16 file_pid;
450	uint16 vuid;
451	write_bmpx_struct *wbmpx_ptr;
452	write_cache *wcp;
453	struct timeval open_time;
454	int share_mode;
455	uint32 desired_access;
456	BOOL pending_modtime_owner;
457	time_t pending_modtime;
458	time_t last_write_time;
459	int oplock_type;
460	int sent_oplock_break;
461	unsigned long file_id;
462	BOOL can_lock;
463	BOOL can_read;
464	BOOL can_write;
465	BOOL print_file;
466	BOOL modified;
467	BOOL is_directory;
468	BOOL is_stat;
469	BOOL directory_delete_on_close;
470	char *fsp_name;
471 	FAKE_FILE_HANDLE *fake_file_handle;
472} files_struct;
473
474#include "ntquotas.h"
475#include "sysquotas.h"
476
477/* used to hold an arbitrary blob of data */
478typedef struct data_blob
479{
480	uint8 *data;
481	size_t length;
482	void (*free)(struct data_blob *data_blob);
483} DATA_BLOB;
484
485/*
486 * Structure used to keep directory state information around.
487 * Used in NT change-notify code.
488 */
489
490typedef struct
491{
492	time_t modify_time;
493	time_t status_time;
494} dir_status_struct;
495
496struct vuid_cache_entry
497{
498	uint16 vuid;
499	BOOL read_only;
500	BOOL admin_user;
501};
502
503struct vuid_cache
504{
505	unsigned int entries;
506	struct vuid_cache_entry array[VUID_CACHE_SIZE];
507};
508
509typedef struct
510{
511	char *name;
512	BOOL is_wild;
513} name_compare_entry;
514
515/* Include VFS stuff */
516
517#include "smb_acls.h"
518#include "vfs.h"
519
520struct dptr_struct;
521
522typedef struct connection_struct
523{
524	struct connection_struct *next, *prev;
525	TALLOC_CTX *mem_ctx;
526	unsigned cnum; /* an index passed over the wire */
527	int service;
528	BOOL force_user;
529	BOOL force_group;
530	struct vuid_cache vuid_cache;
531	struct dptr_struct *dirptr;
532	BOOL printer;
533	BOOL ipc;
534	BOOL read_only; /* Attributes for the current user of the share. */
535	BOOL admin_user; /* Attributes for the current user of the share. */
536	char *dirpath;
537	char *connectpath;
538	char *origpath;
539
540	struct vfs_ops vfs;                   /* Filesystem operations */
541	struct vfs_ops vfs_opaque;			/* OPAQUE Filesystem operations */
542	struct vfs_handle_struct *vfs_handles;		/* for the new plugins */
543
544	char *user; /* name of user who *opened* this connection */
545	uid_t uid; /* uid of user who *opened* this connection */
546	gid_t gid; /* gid of user who *opened* this connection */
547	char client_address[18]; /* String version of client IP address. */
548
549	uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
550
551	/* following groups stuff added by ih */
552
553	/* This groups info is valid for the user that *opened* the connection */
554	int ngroups;
555	gid_t *groups;
556	NT_USER_TOKEN *nt_user_token;
557
558	time_t lastused;
559	BOOL used;
560	int num_files_open;
561
562	BOOL case_sensitive;
563	BOOL case_preserve;
564	BOOL short_case_preserve;
565
566	name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
567	name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
568	name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */
569
570} connection_struct;
571
572struct current_user
573{
574	connection_struct *conn;
575	uint16 vuid;
576	uid_t uid;
577	gid_t gid;
578	int ngroups;
579	gid_t *groups;
580	NT_USER_TOKEN *nt_user_token;
581};
582
583/* Defines for the sent_oplock_break field above. */
584#define NO_BREAK_SENT 0
585#define EXCLUSIVE_BREAK_SENT 1
586#define LEVEL_II_BREAK_SENT 2
587
588typedef struct {
589	fstring smb_name; /* user name from the client */
590	fstring unix_name; /* unix user name of a validated user */
591	fstring full_name; /* to store full name (such as "Joe Bloggs") from gecos field of password file */
592	fstring domain; /* domain that the client specified */
593} userdom_struct;
594
595/* Extra fields above "LPQ_PRINTING" are used to map extra NT status codes. */
596
597enum {LPQ_QUEUED=0,LPQ_PAUSED,LPQ_SPOOLING,LPQ_PRINTING,LPQ_ERROR,LPQ_DELETING,
598      LPQ_OFFLINE,LPQ_PAPEROUT,LPQ_PRINTED,LPQ_DELETED,LPQ_BLOCKED,LPQ_USER_INTERVENTION};
599
600typedef struct _print_queue_struct
601{
602  int job;		/* normally the UNIX jobid -- see note in
603			   printing.c:traverse_fn_delete() */
604  int size;
605  int page_count;
606  int status;
607  int priority;
608  time_t time;
609  fstring fs_user;
610  fstring fs_file;
611} print_queue_struct;
612
613enum {LPSTAT_OK, LPSTAT_STOPPED, LPSTAT_ERROR};
614
615typedef struct
616{
617  fstring message;
618  int qcount;
619  int status;
620}  print_status_struct;
621
622/* used for server information: client, nameserv and ipc */
623struct server_info_struct
624{
625  fstring name;
626  uint32 type;
627  fstring comment;
628  fstring domain; /* used ONLY in ipc.c NOT namework.c */
629  BOOL server_added; /* used ONLY in ipc.c NOT namework.c */
630};
631
632
633/* used for network interfaces */
634struct interface
635{
636	struct interface *next, *prev;
637	struct in_addr ip;
638	struct in_addr bcast;
639	struct in_addr nmask;
640};
641
642/* struct used by share mode violation error processing */
643typedef struct {
644	pid_t pid;
645	uint16 mid;
646	struct timeval time;
647	SMB_DEV_T dev;
648	SMB_INO_T inode;
649	uint16 port;
650} deferred_open_entry;
651
652/* Internal message queue for deferred opens. */
653struct pending_message_list {
654	struct pending_message_list *next, *prev;
655	struct timeval msg_time; /* The timeout time */
656	DATA_BLOB buf;
657	DATA_BLOB private_data;
658};
659
660/* struct returned by get_share_modes */
661typedef struct {
662	pid_t pid;
663	uint16 op_port;
664	uint16 op_type;
665	int share_mode;
666	uint32 desired_access;
667	struct timeval time;
668	SMB_DEV_T dev;
669	SMB_INO_T inode;
670	unsigned long share_file_id;
671} share_mode_entry;
672
673
674#define SHAREMODE_FN_CAST() \
675	void (*)(share_mode_entry *, char*)
676
677#define SHAREMODE_FN(fn) \
678	void (*fn)(share_mode_entry *, char*)
679
680#define NT_HASH_LEN 16
681#define LM_HASH_LEN 16
682
683/* Password history contants. */
684#define PW_HISTORY_SALT_LEN 16
685#define SALTED_MD5_HASH_LEN 16
686#define PW_HISTORY_ENTRY_LEN (PW_HISTORY_SALT_LEN+SALTED_MD5_HASH_LEN)
687
688/*
689 * Flags for account policy.
690 */
691#define AP_MIN_PASSWORD_LEN 		1
692#define AP_PASSWORD_HISTORY		2
693#define AP_USER_MUST_LOGON_TO_CHG_PASS	3
694#define AP_MAX_PASSWORD_AGE		4
695#define AP_MIN_PASSWORD_AGE		5
696#define AP_LOCK_ACCOUNT_DURATION	6
697#define AP_RESET_COUNT_TIME		7
698#define AP_BAD_ATTEMPT_LOCKOUT		8
699#define AP_TIME_TO_LOGOUT		9
700#define AP_REFUSE_MACHINE_PW_CHANGE	10
701
702/*
703 * Flags for local user manipulation.
704 */
705
706#define LOCAL_ADD_USER 0x1
707#define LOCAL_DELETE_USER 0x2
708#define LOCAL_DISABLE_USER 0x4
709#define LOCAL_ENABLE_USER 0x8
710#define LOCAL_TRUST_ACCOUNT 0x10
711#define LOCAL_SET_NO_PASSWORD 0x20
712#define LOCAL_SET_PASSWORD 0x40
713#define LOCAL_SET_LDAP_ADMIN_PW 0x80
714#define LOCAL_INTERDOM_ACCOUNT 0x100
715#define LOCAL_AM_ROOT 0x200  /* Act as root */
716
717/* key and data in the connections database - used in smbstatus and smbd */
718struct connections_key {
719	pid_t pid;
720	int cnum;
721	fstring name;
722};
723
724struct connections_data {
725	int magic;
726	pid_t pid;
727	int cnum;
728	uid_t uid;
729	gid_t gid;
730	char name[24];
731	char addr[24];
732	char machine[FSTRING_LEN];
733	time_t start;
734	uint32 bcast_msg_flags;
735};
736
737
738/* key and data records in the tdb locking database */
739struct locking_key {
740	SMB_DEV_T dev;
741	SMB_INO_T inode;
742};
743
744/* the following are used by loadparm for option lists */
745typedef enum {
746	P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
747	P_STRING,P_USTRING,P_GSTRING,P_UGSTRING,P_ENUM,P_SEP
748} parm_type;
749
750typedef enum {
751	P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE
752} parm_class;
753
754/* passed to br lock code */
755enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_LOCK};
756
757struct enum_list {
758	int value;
759	const char *name;
760};
761
762#define BRLOCK_FN_CAST() \
763	void (*)(SMB_DEV_T dev, SMB_INO_T ino, int pid, \
764				 enum brl_type lock_type, \
765				 br_off start, br_off size)
766#define BRLOCK_FN(fn) \
767	void (*fn)(SMB_DEV_T dev, SMB_INO_T ino, int pid, \
768				 enum brl_type lock_type, \
769				 br_off start, br_off size)
770struct parm_struct
771{
772	const char *label;
773	parm_type type;
774	parm_class class;
775	void *ptr;
776	BOOL (*special)(int snum, const char *, char **);
777	const struct enum_list *enum_list;
778	unsigned flags;
779	union {
780		BOOL bvalue;
781		int ivalue;
782		char *svalue;
783		char cvalue;
784		char **lvalue;
785	} def;
786};
787
788struct bitmap {
789	uint32 *b;
790	unsigned int n;
791};
792
793/* The following flags are used in SWAT */
794#define FLAG_BASIC 	0x0001 /* Display only in BASIC view */
795#define FLAG_SHARE 	0x0002 /* file sharing options */
796#define FLAG_PRINT 	0x0004 /* printing options */
797#define FLAG_GLOBAL 	0x0008 /* local options that should be globally settable in SWAT */
798#define FLAG_WIZARD 	0x0010 /* Parameters that the wizard will operate on */
799#define FLAG_ADVANCED 	0x0020 /* Parameters that will be visible in advanced view */
800#define FLAG_DEVELOPER 	0x0040 /* No longer used */
801#define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */
802#define FLAG_HIDE  	0x2000 /* options that should be hidden in SWAT */
803#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */
804
805#ifndef LOCKING_VERSION
806#define LOCKING_VERSION 4
807#endif /* LOCKING_VERSION */
808
809
810/* the basic packet size, assuming no words or bytes */
811#define smb_size 39
812
813/* offsets into message for common items */
814#define smb_com 8
815#define smb_rcls 9
816#define smb_reh 10
817#define smb_err 11
818#define smb_flg 13
819#define smb_flg2 14
820#define smb_pidhigh 16
821#define smb_ss_field 18
822#define smb_tid 28
823#define smb_pid 30
824#define smb_uid 32
825#define smb_mid 34
826#define smb_wct 36
827#define smb_vwv 37
828#define smb_vwv0 37
829#define smb_vwv1 39
830#define smb_vwv2 41
831#define smb_vwv3 43
832#define smb_vwv4 45
833#define smb_vwv5 47
834#define smb_vwv6 49
835#define smb_vwv7 51
836#define smb_vwv8 53
837#define smb_vwv9 55
838#define smb_vwv10 57
839#define smb_vwv11 59
840#define smb_vwv12 61
841#define smb_vwv13 63
842#define smb_vwv14 65
843#define smb_vwv15 67
844#define smb_vwv16 69
845#define smb_vwv17 71
846
847/* flag defines. CIFS spec 3.1.1 */
848#define FLAG_SUPPORT_LOCKREAD       0x01
849#define FLAG_CLIENT_BUF_AVAIL       0x02
850#define FLAG_RESERVED               0x04
851#define FLAG_CASELESS_PATHNAMES     0x08
852#define FLAG_CANONICAL_PATHNAMES    0x10
853#define FLAG_REQUEST_OPLOCK         0x20
854#define FLAG_REQUEST_BATCH_OPLOCK   0x40
855#define FLAG_REPLY                  0x80
856
857/* the complete */
858#define SMBmkdir      0x00   /* create directory */
859#define SMBrmdir      0x01   /* delete directory */
860#define SMBopen       0x02   /* open file */
861#define SMBcreate     0x03   /* create file */
862#define SMBclose      0x04   /* close file */
863#define SMBflush      0x05   /* flush file */
864#define SMBunlink     0x06   /* delete file */
865#define SMBmv         0x07   /* rename file */
866#define SMBgetatr     0x08   /* get file attributes */
867#define SMBsetatr     0x09   /* set file attributes */
868#define SMBread       0x0A   /* read from file */
869#define SMBwrite      0x0B   /* write to file */
870#define SMBlock       0x0C   /* lock byte range */
871#define SMBunlock     0x0D   /* unlock byte range */
872#define SMBctemp      0x0E   /* create temporary file */
873#define SMBmknew      0x0F   /* make new file */
874#define SMBchkpth     0x10   /* check directory path */
875#define SMBexit       0x11   /* process exit */
876#define SMBlseek      0x12   /* seek */
877#define SMBtcon       0x70   /* tree connect */
878#define SMBtconX      0x75   /* tree connect and X*/
879#define SMBtdis       0x71   /* tree disconnect */
880#define SMBnegprot    0x72   /* negotiate protocol */
881#define SMBdskattr    0x80   /* get disk attributes */
882#define SMBsearch     0x81   /* search directory */
883#define SMBsplopen    0xC0   /* open print spool file */
884#define SMBsplwr      0xC1   /* write to print spool file */
885#define SMBsplclose   0xC2   /* close print spool file */
886#define SMBsplretq    0xC3   /* return print queue */
887#define SMBsends      0xD0   /* send single block message */
888#define SMBsendb      0xD1   /* send broadcast message */
889#define SMBfwdname    0xD2   /* forward user name */
890#define SMBcancelf    0xD3   /* cancel forward */
891#define SMBgetmac     0xD4   /* get machine name */
892#define SMBsendstrt   0xD5   /* send start of multi-block message */
893#define SMBsendend    0xD6   /* send end of multi-block message */
894#define SMBsendtxt    0xD7   /* send text of multi-block message */
895
896/* Core+ protocol */
897#define SMBlockread	  0x13   /* Lock a range and read */
898#define SMBwriteunlock 0x14 /* Unlock a range then write */
899#define SMBreadbraw   0x1a  /* read a block of data with no smb header */
900#define SMBwritebraw  0x1d  /* write a block of data with no smb header */
901#define SMBwritec     0x20  /* secondary write request */
902#define SMBwriteclose 0x2c  /* write a file then close it */
903
904/* dos extended protocol */
905#define SMBreadBraw      0x1A   /* read block raw */
906#define SMBreadBmpx      0x1B   /* read block multiplexed */
907#define SMBreadBs        0x1C   /* read block (secondary response) */
908#define SMBwriteBraw     0x1D   /* write block raw */
909#define SMBwriteBmpx     0x1E   /* write block multiplexed */
910#define SMBwriteBs       0x1F   /* write block (secondary request) */
911#define SMBwriteC        0x20   /* write complete response */
912#define SMBsetattrE      0x22   /* set file attributes expanded */
913#define SMBgetattrE      0x23   /* get file attributes expanded */
914#define SMBlockingX      0x24   /* lock/unlock byte ranges and X */
915#define SMBtrans         0x25   /* transaction - name, bytes in/out */
916#define SMBtranss        0x26   /* transaction (secondary request/response) */
917#define SMBioctl         0x27   /* IOCTL */
918#define SMBioctls        0x28   /* IOCTL  (secondary request/response) */
919#define SMBcopy          0x29   /* copy */
920#define SMBmove          0x2A   /* move */
921#define SMBecho          0x2B   /* echo */
922#define SMBopenX         0x2D   /* open and X */
923#define SMBreadX         0x2E   /* read and X */
924#define SMBwriteX        0x2F   /* write and X */
925#define SMBsesssetupX    0x73   /* Session Set Up & X (including User Logon) */
926#define SMBffirst        0x82   /* find first */
927#define SMBfunique       0x83   /* find unique */
928#define SMBfclose        0x84   /* find close */
929#define SMBkeepalive     0x85   /* keepalive */
930#define SMBinvalid       0xFE   /* invalid command */
931
932/* Extended 2.0 protocol */
933#define SMBtrans2        0x32   /* TRANS2 protocol set */
934#define SMBtranss2       0x33   /* TRANS2 protocol set, secondary command */
935#define SMBfindclose     0x34   /* Terminate a TRANSACT2_FINDFIRST */
936#define SMBfindnclose    0x35   /* Terminate a TRANSACT2_FINDNOTIFYFIRST */
937#define SMBulogoffX      0x74   /* user logoff */
938
939/* NT SMB extensions. */
940#define SMBnttrans       0xA0   /* NT transact */
941#define SMBnttranss      0xA1   /* NT transact secondary */
942#define SMBntcreateX     0xA2   /* NT create and X */
943#define SMBntcancel      0xA4   /* NT cancel */
944#define SMBntrename      0xA5   /* NT rename */
945
946/* These are the trans subcommands */
947#define TRANSACT_SETNAMEDPIPEHANDLESTATE  0x01
948#define TRANSACT_DCERPCCMD                0x26
949#define TRANSACT_WAITNAMEDPIPEHANDLESTATE 0x53
950
951/* These are the TRANS2 sub commands */
952#define TRANSACT2_OPEN				0x00
953#define TRANSACT2_FINDFIRST			0x01
954#define TRANSACT2_FINDNEXT			0x02
955#define TRANSACT2_QFSINFO			0x03
956#define TRANSACT2_SETFSINFO			0x04
957#define TRANSACT2_QPATHINFO			0x05
958#define TRANSACT2_SETPATHINFO			0x06
959#define TRANSACT2_QFILEINFO			0x07
960#define TRANSACT2_SETFILEINFO			0x08
961#define TRANSACT2_FSCTL				0x09
962#define TRANSACT2_IOCTL				0x0A
963#define TRANSACT2_FINDNOTIFYFIRST		0x0B
964#define TRANSACT2_FINDNOTIFYNEXT		0x0C
965#define TRANSACT2_MKDIR				0x0D
966#define TRANSACT2_SESSION_SETUP			0x0E
967#define TRANSACT2_GET_DFS_REFERRAL		0x10
968#define TRANSACT2_REPORT_DFS_INCONSISTANCY	0x11
969
970/* These are the NT transact sub commands. */
971#define NT_TRANSACT_CREATE                1
972#define NT_TRANSACT_IOCTL                 2
973#define NT_TRANSACT_SET_SECURITY_DESC     3
974#define NT_TRANSACT_NOTIFY_CHANGE         4
975#define NT_TRANSACT_RENAME                5
976#define NT_TRANSACT_QUERY_SECURITY_DESC   6
977#define NT_TRANSACT_GET_USER_QUOTA	  7
978#define NT_TRANSACT_SET_USER_QUOTA	  8
979
980/* These are the NT transact_get_user_quota sub commands */
981#define TRANSACT_GET_USER_QUOTA_LIST_CONTINUE	0x0000
982#define TRANSACT_GET_USER_QUOTA_LIST_START	0x0100
983#define TRANSACT_GET_USER_QUOTA_FOR_SID		0x0101
984
985/* Relevant IOCTL codes */
986#define IOCTL_QUERY_JOB_INFO      0x530060
987
988/* these are the trans2 sub fields for primary requests */
989#define smb_tpscnt smb_vwv0
990#define smb_tdscnt smb_vwv1
991#define smb_mprcnt smb_vwv2
992#define smb_mdrcnt smb_vwv3
993#define smb_msrcnt smb_vwv4
994#define smb_flags smb_vwv5
995#define smb_timeout smb_vwv6
996#define smb_pscnt smb_vwv9
997#define smb_psoff smb_vwv10
998#define smb_dscnt smb_vwv11
999#define smb_dsoff smb_vwv12
1000#define smb_suwcnt smb_vwv13
1001#define smb_setup smb_vwv14
1002#define smb_setup0 smb_setup
1003#define smb_setup1 (smb_setup+2)
1004#define smb_setup2 (smb_setup+4)
1005
1006/* these are for the secondary requests */
1007#define smb_spscnt smb_vwv2
1008#define smb_spsoff smb_vwv3
1009#define smb_spsdisp smb_vwv4
1010#define smb_sdscnt smb_vwv5
1011#define smb_sdsoff smb_vwv6
1012#define smb_sdsdisp smb_vwv7
1013#define smb_sfid smb_vwv8
1014
1015/* and these for responses */
1016#define smb_tprcnt smb_vwv0
1017#define smb_tdrcnt smb_vwv1
1018#define smb_prcnt smb_vwv3
1019#define smb_proff smb_vwv4
1020#define smb_prdisp smb_vwv5
1021#define smb_drcnt smb_vwv6
1022#define smb_droff smb_vwv7
1023#define smb_drdisp smb_vwv8
1024
1025/* these are for the NT trans primary request. */
1026#define smb_nt_MaxSetupCount smb_vwv0
1027#define smb_nt_Flags (smb_vwv0 + 1)
1028#define smb_nt_TotalParameterCount (smb_vwv0 + 3)
1029#define smb_nt_TotalDataCount (smb_vwv0 + 7)
1030#define smb_nt_MaxParameterCount (smb_vwv0 + 11)
1031#define smb_nt_MaxDataCount (smb_vwv0 + 15)
1032#define smb_nt_ParameterCount (smb_vwv0 + 19)
1033#define smb_nt_ParameterOffset (smb_vwv0 + 23)
1034#define smb_nt_DataCount (smb_vwv0 + 27)
1035#define smb_nt_DataOffset (smb_vwv0 + 31)
1036#define smb_nt_SetupCount (smb_vwv0 + 35)
1037#define smb_nt_Function (smb_vwv0 + 36)
1038#define smb_nt_SetupStart (smb_vwv0 + 38)
1039
1040/* these are for the NT trans secondary request. */
1041#define smb_nts_TotalParameterCount (smb_vwv0 + 3)
1042#define smb_nts_TotalDataCount (smb_vwv0 + 7)
1043#define smb_nts_ParameterCount (smb_vwv0 + 11)
1044#define smb_nts_ParameterOffset (smb_vwv0 + 15)
1045#define smb_nts_ParameterDisplacement (smb_vwv0 + 19)
1046#define smb_nts_DataCount (smb_vwv0 + 23)
1047#define smb_nts_DataOffset (smb_vwv0 + 27)
1048#define smb_nts_DataDisplacement (smb_vwv0 + 31)
1049
1050/* these are for the NT trans reply. */
1051#define smb_ntr_TotalParameterCount (smb_vwv0 + 3)
1052#define smb_ntr_TotalDataCount (smb_vwv0 + 7)
1053#define smb_ntr_ParameterCount (smb_vwv0 + 11)
1054#define smb_ntr_ParameterOffset (smb_vwv0 + 15)
1055#define smb_ntr_ParameterDisplacement (smb_vwv0 + 19)
1056#define smb_ntr_DataCount (smb_vwv0 + 23)
1057#define smb_ntr_DataOffset (smb_vwv0 + 27)
1058#define smb_ntr_DataDisplacement (smb_vwv0 + 31)
1059
1060/* these are for the NT create_and_X */
1061#define smb_ntcreate_NameLength (smb_vwv0 + 5)
1062#define smb_ntcreate_Flags (smb_vwv0 + 7)
1063#define smb_ntcreate_RootDirectoryFid (smb_vwv0 + 11)
1064#define smb_ntcreate_DesiredAccess (smb_vwv0 + 15)
1065#define smb_ntcreate_AllocationSize (smb_vwv0 + 19)
1066#define smb_ntcreate_FileAttributes (smb_vwv0 + 27)
1067#define smb_ntcreate_ShareAccess (smb_vwv0 + 31)
1068#define smb_ntcreate_CreateDisposition (smb_vwv0 + 35)
1069#define smb_ntcreate_CreateOptions (smb_vwv0 + 39)
1070#define smb_ntcreate_ImpersonationLevel (smb_vwv0 + 43)
1071#define smb_ntcreate_SecurityFlags (smb_vwv0 + 47)
1072
1073/* this is used on a TConX. I'm not sure the name is very helpful though */
1074#define SMB_SUPPORT_SEARCH_BITS        0x0001
1075#define SMB_SHARE_IN_DFS               0x0002
1076
1077/* Named pipe write mode flags. Used in writeX calls. */
1078#define PIPE_RAW_MODE 0x4
1079#define PIPE_START_MESSAGE 0x8
1080
1081/* File Specific access rights */
1082#define FILE_READ_DATA        0x00000001
1083#define FILE_WRITE_DATA       0x00000002
1084#define FILE_APPEND_DATA      0x00000004
1085#define FILE_READ_EA          0x00000008 /* File and directory */
1086#define FILE_WRITE_EA         0x00000010 /* File and directory */
1087#define FILE_EXECUTE          0x00000020
1088#define FILE_DELETE_CHILD     0x00000040
1089#define FILE_READ_ATTRIBUTES  0x00000080
1090#define FILE_WRITE_ATTRIBUTES 0x00000100
1091
1092#define FILE_ALL_ACCESS       0x000001FF
1093
1094/* Directory specific access rights */
1095#define FILE_LIST_DIRECTORY   0x00000001
1096#define FILE_ADD_FILE         0x00000002
1097#define FILE_ADD_SUBDIRECTORY 0x00000004
1098#define FILE_TRAVERSE         0x00000020
1099#define FILE_DELETE_CHILD     0x00000040
1100
1101/* the desired access to use when opening a pipe */
1102#define DESIRED_ACCESS_PIPE 0x2019f
1103
1104/* Generic access masks & rights. */
1105#define DELETE_ACCESS        (1L<<16) /* 0x00010000 */
1106#define READ_CONTROL_ACCESS  (1L<<17) /* 0x00020000 */
1107#define WRITE_DAC_ACCESS     (1L<<18) /* 0x00040000 */
1108#define WRITE_OWNER_ACCESS   (1L<<19) /* 0x00080000 */
1109#define SYNCHRONIZE_ACCESS   (1L<<20) /* 0x00100000 */
1110
1111#define SYSTEM_SECURITY_ACCESS (1L<<24)           /* 0x01000000 */
1112#define MAXIMUM_ALLOWED_ACCESS (1L<<25)           /* 0x02000000 */
1113#define GENERIC_ALL_ACCESS     (1<<28)            /* 0x10000000 */
1114#define GENERIC_EXECUTE_ACCESS (1<<29)            /* 0x20000000 */
1115#define GENERIC_WRITE_ACCESS   (1<<30)            /* 0x40000000 */
1116#define GENERIC_READ_ACCESS   (((unsigned)1)<<31) /* 0x80000000 */
1117
1118/* Mapping of generic access rights for files to specific rights. */
1119
1120#define FILE_GENERIC_ALL (STANDARD_RIGHTS_REQUIRED_ACCESS| SYNCHRONIZE_ACCESS|FILE_ALL_ACCESS)
1121
1122#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ_ACCESS|FILE_READ_DATA|FILE_READ_ATTRIBUTES|\
1123							FILE_READ_EA|SYNCHRONIZE_ACCESS)
1124
1125#define FILE_GENERIC_WRITE (STD_RIGHT_READ_CONTROL_ACCESS|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|\
1126							FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONIZE_ACCESS)
1127
1128#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE_ACCESS|\
1129								FILE_EXECUTE|SYNCHRONIZE_ACCESS)
1130
1131/* Mapping of access rights to UNIX perms. */
1132#define UNIX_ACCESS_RWX		FILE_GENERIC_ALL
1133#define UNIX_ACCESS_R 		FILE_GENERIC_READ
1134#define UNIX_ACCESS_W		FILE_GENERIC_WRITE
1135#define UNIX_ACCESS_X		FILE_GENERIC_EXECUTE
1136
1137#if 0
1138/*
1139 * This is the old mapping we used to use. To get W2KSP2 profiles
1140 * working we need to map to the canonical file perms.
1141 */
1142#define UNIX_ACCESS_RWX (UNIX_ACCESS_R|UNIX_ACCESS_W|UNIX_ACCESS_X)
1143#define UNIX_ACCESS_R (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\
1144			FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_READ_DATA)
1145#define UNIX_ACCESS_W (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\
1146			FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|\
1147			FILE_APPEND_DATA|FILE_WRITE_DATA)
1148#define UNIX_ACCESS_X (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\
1149			FILE_EXECUTE|FILE_READ_ATTRIBUTES)
1150#endif
1151
1152#define UNIX_ACCESS_NONE (WRITE_OWNER_ACCESS)
1153
1154/* Flags field. */
1155#define REQUEST_OPLOCK 2
1156#define REQUEST_BATCH_OPLOCK 4
1157#define OPEN_DIRECTORY 8
1158#define EXTENDED_RESPONSE_REQUIRED 0x10
1159
1160/* ShareAccess field. */
1161#define FILE_SHARE_NONE 0 /* Cannot be used in bitmask. */
1162#define FILE_SHARE_READ 1
1163#define FILE_SHARE_WRITE 2
1164#define FILE_SHARE_DELETE 4
1165
1166/* FileAttributesField */
1167#define FILE_ATTRIBUTE_READONLY		0x001L
1168#define FILE_ATTRIBUTE_HIDDEN		0x002L
1169#define FILE_ATTRIBUTE_SYSTEM		0x004L
1170#define FILE_ATTRIBUTE_DIRECTORY	0x010L
1171#define FILE_ATTRIBUTE_ARCHIVE		0x020L
1172#define FILE_ATTRIBUTE_NORMAL		0x080L
1173#define FILE_ATTRIBUTE_TEMPORARY	0x100L
1174#define FILE_ATTRIBUTE_SPARSE		0x200L
1175#define FILE_ATTRIBUTE_REPARSE_POINT    0x400L
1176#define FILE_ATTRIBUTE_COMPRESSED	0x800L
1177#define FILE_ATTRIBUTE_OFFLINE          0x1000L
1178#define FILE_ATTRIBUTE_NONINDEXED	0x2000L
1179#define FILE_ATTRIBUTE_ENCRYPTED        0x4000L
1180#define SAMBA_ATTRIBUTES_MASK		0x7F
1181
1182/* Flags - combined with attributes. */
1183#define FILE_FLAG_WRITE_THROUGH    0x80000000L
1184#define FILE_FLAG_NO_BUFFERING     0x20000000L
1185#define FILE_FLAG_RANDOM_ACCESS    0x10000000L
1186#define FILE_FLAG_SEQUENTIAL_SCAN  0x08000000L
1187#define FILE_FLAG_DELETE_ON_CLOSE  0x04000000L
1188#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000L
1189#define FILE_FLAG_POSIX_SEMANTICS  0x01000000L
1190
1191/* CreateDisposition field. */
1192#define FILE_SUPERSEDE 0
1193#define FILE_OPEN 1
1194#define FILE_CREATE 2
1195#define FILE_OPEN_IF 3
1196#define FILE_OVERWRITE 4
1197#define FILE_OVERWRITE_IF 5
1198
1199/* CreateOptions field. */
1200#define FILE_DIRECTORY_FILE       0x0001
1201#define FILE_WRITE_THROUGH        0x0002
1202#define FILE_SEQUENTIAL_ONLY      0x0004
1203#define FILE_NON_DIRECTORY_FILE   0x0040
1204#define FILE_NO_EA_KNOWLEDGE      0x0200
1205#define FILE_EIGHT_DOT_THREE_ONLY 0x0400
1206#define FILE_RANDOM_ACCESS        0x0800
1207#define FILE_DELETE_ON_CLOSE      0x1000
1208#define FILE_OPEN_BY_FILE_ID	  0x2000
1209
1210/* Responses when opening a file. */
1211#define FILE_WAS_SUPERSEDED 0
1212#define FILE_WAS_OPENED 1
1213#define FILE_WAS_CREATED 2
1214#define FILE_WAS_OVERWRITTEN 3
1215
1216/* File type flags */
1217#define FILE_TYPE_DISK  0
1218#define FILE_TYPE_BYTE_MODE_PIPE 1
1219#define FILE_TYPE_MESSAGE_MODE_PIPE 2
1220#define FILE_TYPE_PRINTER 3
1221#define FILE_TYPE_COMM_DEVICE 4
1222#define FILE_TYPE_UNKNOWN 0xFFFF
1223
1224/* Flag for NT transact rename call. */
1225#define RENAME_REPLACE_IF_EXISTS 1
1226
1227/* flags for SMBntrename call (from Samba4) */
1228#define RENAME_FLAG_MOVE_CLUSTER_INFORMATION 0x102 /* ???? */
1229#define RENAME_FLAG_HARD_LINK                0x103
1230#define RENAME_FLAG_RENAME                   0x104
1231#define RENAME_FLAG_COPY                     0x105
1232
1233/* Filesystem Attributes. */
1234#define FILE_CASE_SENSITIVE_SEARCH      0x00000001
1235#define FILE_CASE_PRESERVED_NAMES       0x00000002
1236#define FILE_UNICODE_ON_DISK            0x00000004
1237/* According to cifs9f, this is 4, not 8 */
1238/* Acconding to testing, this actually sets the security attribute! */
1239#define FILE_PERSISTENT_ACLS            0x00000008
1240#define FILE_FILE_COMPRESSION           0x00000010
1241#define FILE_VOLUME_QUOTAS              0x00000020
1242#define FILE_SUPPORTS_SPARSE_FILES      0x00000040
1243#define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
1244#define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
1245#define FS_LFN_APIS                     0x00004000
1246#define FILE_VOLUME_IS_COMPRESSED       0x00008000
1247#define FILE_SUPPORTS_OBJECT_IDS        0x00010000
1248#define FILE_SUPPORTS_ENCRYPTION        0x00020000
1249#define FILE_NAMED_STREAMS              0x00040000
1250#define FILE_READ_ONLY_VOLUME           0x00080000
1251
1252/* ChangeNotify flags. */
1253#define FILE_NOTIFY_CHANGE_FILE        0x001
1254#define FILE_NOTIFY_CHANGE_DIR_NAME    0x002
1255#define FILE_NOTIFY_CHANGE_ATTRIBUTES  0x004
1256#define FILE_NOTIFY_CHANGE_SIZE        0x008
1257#define FILE_NOTIFY_CHANGE_LAST_WRITE  0x010
1258#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x020
1259#define FILE_NOTIFY_CHANGE_CREATION    0x040
1260#define FILE_NOTIFY_CHANGE_EA          0x080
1261#define FILE_NOTIFY_CHANGE_SECURITY    0x100
1262#define FILE_NOTIFY_CHANGE_FILE_NAME   0x200
1263
1264/* where to find the base of the SMB packet proper */
1265#define smb_base(buf) (((char *)(buf))+4)
1266
1267/* we don't allow server strings to be longer than 48 characters as
1268   otherwise NT will not honour the announce packets */
1269#define MAX_SERVER_STRING_LENGTH 48
1270
1271
1272#define SMB_SUCCESS 0  /* The request was successful. */
1273
1274#ifdef WITH_DFS
1275void dfs_unlogin(void);
1276extern int dcelogin_atmost_once;
1277#endif
1278
1279#ifdef NOSTRDUP
1280char *strdup(char *s);
1281#endif
1282
1283#ifndef SIGNAL_CAST
1284#define SIGNAL_CAST (RETSIGTYPE (*)(int))
1285#endif
1286
1287#ifndef SELECT_CAST
1288#define SELECT_CAST
1289#endif
1290
1291/* these are used in NetServerEnum to choose what to receive */
1292#define SV_TYPE_WORKSTATION         0x00000001
1293#define SV_TYPE_SERVER              0x00000002
1294#define SV_TYPE_SQLSERVER           0x00000004
1295#define SV_TYPE_DOMAIN_CTRL         0x00000008
1296#define SV_TYPE_DOMAIN_BAKCTRL      0x00000010
1297#define SV_TYPE_TIME_SOURCE         0x00000020
1298#define SV_TYPE_AFP                 0x00000040
1299#define SV_TYPE_NOVELL              0x00000080
1300#define SV_TYPE_DOMAIN_MEMBER       0x00000100
1301#define SV_TYPE_PRINTQ_SERVER       0x00000200
1302#define SV_TYPE_DIALIN_SERVER       0x00000400
1303#define SV_TYPE_SERVER_UNIX         0x00000800
1304#define SV_TYPE_NT                  0x00001000
1305#define SV_TYPE_WFW                 0x00002000
1306#define SV_TYPE_SERVER_MFPN         0x00004000
1307#define SV_TYPE_SERVER_NT           0x00008000
1308#define SV_TYPE_POTENTIAL_BROWSER   0x00010000
1309#define SV_TYPE_BACKUP_BROWSER      0x00020000
1310#define SV_TYPE_MASTER_BROWSER      0x00040000
1311#define SV_TYPE_DOMAIN_MASTER       0x00080000
1312#define SV_TYPE_SERVER_OSF          0x00100000
1313#define SV_TYPE_SERVER_VMS          0x00200000
1314#define SV_TYPE_WIN95_PLUS          0x00400000
1315#define SV_TYPE_DFS_SERVER	    0x00800000
1316#define SV_TYPE_ALTERNATE_XPORT     0x20000000
1317#define SV_TYPE_LOCAL_LIST_ONLY     0x40000000
1318#define SV_TYPE_DOMAIN_ENUM         0x80000000
1319#define SV_TYPE_ALL                 0xFFFFFFFF
1320
1321/* This was set by JHT in liaison with Jeremy Allison early 1997
1322 * History:
1323 * Version 4.0 - never made public
1324 * Version 4.10 - New to 1.9.16p2, lost in space 1.9.16p3 to 1.9.16p9
1325 *              - Reappeared in 1.9.16p11 with fixed smbd services
1326 * Version 4.20 - To indicate that nmbd and browsing now works better
1327 * Version 4.50 - Set at release of samba-2.2.0 by JHT
1328 *
1329 *  Note: In the presence of NT4.X do not set above 4.9
1330 *        Setting this above 4.9 can have undesired side-effects.
1331 *        This may change again in Samba-3.0 after further testing. JHT
1332 */
1333
1334#define DEFAULT_MAJOR_VERSION 0x04
1335#define DEFAULT_MINOR_VERSION 0x09
1336
1337/* Browser Election Values */
1338#define BROWSER_ELECTION_VERSION	0x010f
1339#define BROWSER_CONSTANT	0xaa55
1340
1341/* Sercurity mode bits. */
1342#define NEGOTIATE_SECURITY_USER_LEVEL		0x01
1343#define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE	0x02
1344#define NEGOTIATE_SECURITY_SIGNATURES_ENABLED	0x04
1345#define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED	0x08
1346
1347/* NT Flags2 bits - cifs6.txt section 3.1.2 */
1348
1349#define FLAGS2_LONG_PATH_COMPONENTS    0x0001
1350#define FLAGS2_EXTENDED_ATTRIBUTES     0x0002
1351#define FLAGS2_SMB_SECURITY_SIGNATURES 0x0004
1352#define FLAGS2_IS_LONG_NAME            0x0040
1353#define FLAGS2_EXTENDED_SECURITY       0x0800
1354#define FLAGS2_DFS_PATHNAMES           0x1000
1355#define FLAGS2_READ_PERMIT_NO_EXECUTE  0x2000
1356#define FLAGS2_32_BIT_ERROR_CODES      0x4000
1357#define FLAGS2_UNICODE_STRINGS         0x8000
1358
1359#define FLAGS2_WIN2K_SIGNATURE         0xC852 /* Hack alert ! For now... JRA. */
1360
1361/* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
1362
1363#define CAP_RAW_MODE         0x0001
1364#define CAP_MPX_MODE         0x0002
1365#define CAP_UNICODE          0x0004
1366#define CAP_LARGE_FILES      0x0008
1367#define CAP_NT_SMBS          0x0010
1368#define CAP_RPC_REMOTE_APIS  0x0020
1369#define CAP_STATUS32         0x0040
1370#define CAP_LEVEL_II_OPLOCKS 0x0080
1371#define CAP_LOCK_AND_READ    0x0100
1372#define CAP_NT_FIND          0x0200
1373#define CAP_DFS              0x1000
1374#define CAP_W2K_SMBS         0x2000
1375#define CAP_LARGE_READX      0x4000
1376#define CAP_LARGE_WRITEX     0x8000
1377#define CAP_UNIX             0x800000 /* Capabilities for UNIX extensions. Created by HP. */
1378#define CAP_EXTENDED_SECURITY 0x80000000
1379
1380/* protocol types. It assumes that higher protocols include lower protocols
1381   as subsets */
1382enum protocol_types {PROTOCOL_NONE,PROTOCOL_CORE,PROTOCOL_COREPLUS,PROTOCOL_LANMAN1,PROTOCOL_LANMAN2,PROTOCOL_NT1};
1383
1384/* security levels */
1385enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN,SEC_ADS};
1386
1387/* server roles */
1388enum server_types
1389{
1390	ROLE_STANDALONE,
1391	ROLE_DOMAIN_MEMBER,
1392	ROLE_DOMAIN_BDC,
1393	ROLE_DOMAIN_PDC
1394};
1395
1396/* printing types */
1397enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
1398		     PRINT_QNX,PRINT_PLP,PRINT_LPRNG,PRINT_SOFTQ,
1399		     PRINT_CUPS,PRINT_LPRNT,PRINT_LPROS2
1400#ifdef DEVELOPER
1401,PRINT_TEST,PRINT_VLP
1402#endif /* DEVELOPER */
1403};
1404
1405/* LDAP schema types */
1406enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA};
1407
1408/* LDAP SSL options */
1409enum ldap_ssl_types {LDAP_SSL_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS};
1410
1411/* LDAP PASSWD SYNC methods */
1412enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY};
1413
1414/* Remote architectures we know about. */
1415enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT,
1416			RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_SAMBA, RA_CIFSFS};
1417
1418/* case handling */
1419enum case_handling {CASE_LOWER,CASE_UPPER};
1420
1421/*
1422 * Global value meaing that the smb_uid field should be
1423 * ingored (in share level security and protocol level == CORE)
1424 */
1425
1426#define UID_FIELD_INVALID 0
1427#define VUID_OFFSET 100 /* Amount to bias returned vuid numbers */
1428
1429/*
1430 * Size of buffer to use when moving files across filesystems.
1431 */
1432#define COPYBUF_SIZE (8*1024)
1433
1434/*
1435 * Values used to override error codes.
1436 */
1437extern int unix_ERR_class;
1438extern int unix_ERR_code;
1439extern NTSTATUS unix_ERR_ntstatus;
1440
1441/*
1442 * Used in chaining code.
1443 */
1444extern int chain_size;
1445
1446/*
1447 * Map the Core and Extended Oplock requesst bits down
1448 * to common bits (EXCLUSIVE_OPLOCK & BATCH_OPLOCK).
1449 */
1450
1451/*
1452 * Core protocol.
1453 */
1454#define CORE_OPLOCK_REQUEST(inbuf) \
1455    ((CVAL(inbuf,smb_flg)&(FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK))>>5)
1456
1457/*
1458 * Extended protocol.
1459 */
1460#define EXTENDED_OPLOCK_REQUEST(inbuf) ((SVAL(inbuf,smb_vwv2)&((1<<1)|(1<<2)))>>1)
1461
1462/* Lock types. */
1463#define LOCKING_ANDX_SHARED_LOCK 0x1
1464#define LOCKING_ANDX_OPLOCK_RELEASE 0x2
1465#define LOCKING_ANDX_CHANGE_LOCKTYPE 0x4
1466#define LOCKING_ANDX_CANCEL_LOCK 0x8
1467#define LOCKING_ANDX_LARGE_FILES 0x10
1468
1469/* Oplock levels */
1470#define OPLOCKLEVEL_NONE 0
1471#define OPLOCKLEVEL_II 1
1472
1473/*
1474 * Bits we test with.
1475 */
1476
1477#define NO_OPLOCK 0
1478#define EXCLUSIVE_OPLOCK 1
1479#define BATCH_OPLOCK 2
1480#define LEVEL_II_OPLOCK 4
1481#define INTERNAL_OPEN_ONLY 8
1482
1483#define EXCLUSIVE_OPLOCK_TYPE(lck) ((lck) & (EXCLUSIVE_OPLOCK|BATCH_OPLOCK))
1484#define BATCH_OPLOCK_TYPE(lck) ((lck) & BATCH_OPLOCK)
1485#define LEVEL_II_OPLOCK_TYPE(lck) ((lck) & LEVEL_II_OPLOCK)
1486
1487#define CORE_OPLOCK_GRANTED (1<<5)
1488#define EXTENDED_OPLOCK_GRANTED (1<<15)
1489
1490/*
1491 * Return values for oplock types.
1492 */
1493
1494#define NO_OPLOCK_RETURN 0
1495#define EXCLUSIVE_OPLOCK_RETURN 1
1496#define BATCH_OPLOCK_RETURN 2
1497#define LEVEL_II_OPLOCK_RETURN 3
1498
1499/*
1500 * Loopback command offsets.
1501 */
1502
1503#define OPBRK_CMD_LEN_OFFSET 0
1504#define OPBRK_CMD_PORT_OFFSET 4
1505#define OPBRK_CMD_HEADER_LEN 6
1506
1507#define OPBRK_MESSAGE_CMD_OFFSET 0
1508
1509/*
1510 * Oplock break command code to send over the udp socket.
1511 * The same message is sent for both exlusive and level II breaks.
1512 *
1513 * The form of this is :
1514 *
1515 *  0     2       2+pid   2+pid+dev 2+pid+dev+ino
1516 *  +----+--------+-------+--------+---------+
1517 *  | cmd| pid    | dev   |  inode | fileid  |
1518 *  +----+--------+-------+--------+---------+
1519 */
1520
1521#define OPLOCK_BREAK_PID_OFFSET 2
1522#define OPLOCK_BREAK_DEV_OFFSET (OPLOCK_BREAK_PID_OFFSET + sizeof(pid_t))
1523#define OPLOCK_BREAK_INODE_OFFSET (OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T))
1524#define OPLOCK_BREAK_FILEID_OFFSET (OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
1525#define OPLOCK_BREAK_MSG_LEN (OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long))
1526
1527/* Message types */
1528#define OPLOCK_BREAK_CMD 0x1
1529#define KERNEL_OPLOCK_BREAK_CMD 0x2
1530#define LEVEL_II_OPLOCK_BREAK_CMD 0x3
1531#define ASYNC_LEVEL_II_OPLOCK_BREAK_CMD 0x4
1532
1533/* Add the "deferred open" message. */
1534#define RETRY_DEFERRED_OPEN_CMD 0x5
1535
1536/*
1537 * And the message format for it. Keep the same message length.
1538 *
1539 *  0     2       2+pid   2+pid+dev 2+pid+dev+ino
1540 *  +----+--------+-------+--------+---------+
1541 *  | cmd| pid    | dev   |  inode | mid     |
1542 *  +----+--------+-------+--------+---------+
1543 */
1544
1545#define DEFERRED_OPEN_CMD_OFFSET 0
1546#define DEFERRED_OPEN_PID_OFFSET 2 /* pid we're *sending* from. */
1547#define DEFERRED_OPEN_DEV_OFFSET (DEFERRED_OPEN_PID_OFFSET + sizeof(pid_t))
1548#define DEFERRED_OPEN_INODE_OFFSET (DEFERRED_OPEN_DEV_OFFSET + sizeof(SMB_DEV_T))
1549#define DEFERRED_OPEN_MID_OFFSET (DEFERRED_OPEN_INODE_OFFSET + sizeof(SMB_INO_T))
1550#define DEFERRED_OPEN_MSG_LEN OPLOCK_BREAK_MSG_LEN
1551
1552/*
1553 * Capabilities abstracted for different systems.
1554 */
1555
1556#define KERNEL_OPLOCK_CAPABILITY 0x1
1557
1558/*
1559 * Oplock break command code sent via the kernel interface (if it exists).
1560 *
1561 * Form of this is :
1562 *
1563 *  0     2       2+devsize 2+devsize+inodesize
1564 *  +----+--------+--------+----------+
1565 *  | cmd| dev    |  inode |  fileid  |
1566 *  +----+--------+--------+----------+
1567 */
1568#define KERNEL_OPLOCK_BREAK_DEV_OFFSET 2
1569#define KERNEL_OPLOCK_BREAK_INODE_OFFSET (KERNEL_OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T))
1570#define KERNEL_OPLOCK_BREAK_FILEID_OFFSET (KERNEL_OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
1571#define KERNEL_OPLOCK_BREAK_MSG_LEN (KERNEL_OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long))
1572
1573
1574/* if a kernel does support oplocks then a structure of the following
1575   typee is used to describe how to interact with the kernel */
1576struct kernel_oplocks {
1577	BOOL (*receive_message)(fd_set *fds, char *buffer, int buffer_len);
1578	BOOL (*set_oplock)(files_struct *fsp, int oplock_type);
1579	void (*release_oplock)(files_struct *fsp);
1580	BOOL (*parse_message)(char *msg_start, int msg_len, SMB_INO_T *inode, SMB_DEV_T *dev, unsigned long *file_id);
1581	BOOL (*msg_waiting)(fd_set *fds);
1582	int notification_fd;
1583};
1584
1585
1586#define CMD_REPLY 0x8000
1587
1588/* this structure defines the functions for doing change notify in
1589   various implementations */
1590struct cnotify_fns {
1591	void * (*register_notify)(connection_struct *conn, char *path, uint32 flags);
1592	BOOL (*check_notify)(connection_struct *conn, uint16 vuid, char *path, uint32 flags, void *data, time_t t);
1593	void (*remove_notify)(void *data);
1594	int select_time;
1595};
1596
1597
1598
1599#include "smb_macros.h"
1600
1601#define MAX_NETBIOSNAME_LEN 16
1602/* DOS character, NetBIOS namestring. Type used on the wire. */
1603typedef char nstring[MAX_NETBIOSNAME_LEN];
1604/* Unix character, NetBIOS namestring. Type used to manipulate name in nmbd. */
1605typedef char unstring[MAX_NETBIOSNAME_LEN*4];
1606
1607/* A netbios name structure. */
1608struct nmb_name {
1609	nstring      name;
1610	char         scope[64];
1611	unsigned int name_type;
1612};
1613
1614
1615/* A netbios node status array element. */
1616struct node_status {
1617	nstring name;
1618	unsigned char type;
1619	unsigned char flags;
1620};
1621
1622/* The extra info from a NetBIOS node status query */
1623struct node_status_extra {
1624	unsigned char mac_addr[6];
1625	/* There really is more here ... */
1626};
1627
1628struct pwd_info
1629{
1630	BOOL null_pwd;
1631	BOOL cleartext;
1632
1633	fstring password;
1634
1635};
1636
1637typedef struct user_struct
1638{
1639	struct user_struct *next, *prev;
1640	uint16 vuid; /* Tag for this entry. */
1641	uid_t uid; /* uid of a validated user */
1642	gid_t gid; /* gid of a validated user */
1643
1644	userdom_struct user;
1645	char *homedir;
1646	char *unix_homedir;
1647	char *logon_script;
1648
1649	BOOL guest;
1650
1651	/* following groups stuff added by ih */
1652	/* This groups info is needed for when we become_user() for this uid */
1653	int n_groups;
1654	gid_t *groups;
1655
1656	NT_USER_TOKEN *nt_user_token;
1657
1658	DATA_BLOB session_key;
1659
1660	char *session_keystr; /* used by utmp and pam session code.
1661				 TDB key string */
1662	int homes_snum;
1663
1664	struct auth_serversupplied_info *server_info;
1665
1666} user_struct;
1667
1668
1669struct unix_error_map {
1670	int unix_error;
1671	int dos_class;
1672	int dos_code;
1673	NTSTATUS nt_error;
1674};
1675
1676/*
1677#include "ntdomain.h"
1678
1679#include "client.h"
1680*/
1681
1682/*
1683 * Size of new password account encoding string.  This is enough space to
1684 * hold 11 ACB characters, plus the surrounding [] and a terminating null.
1685 * Do not change unless you are adding new ACB bits!
1686 */
1687
1688#define NEW_PW_FORMAT_SPACE_PADDED_LEN 14
1689
1690/*
1691   Do you want session setups at user level security with a invalid
1692   password to be rejected or allowed in as guest? WinNT rejects them
1693   but it can be a pain as it means "net view" needs to use a password
1694
1695   You have 3 choices in the setting of map_to_guest:
1696
1697   "NEVER_MAP_TO_GUEST" means session setups with an invalid password
1698   are rejected. This is the default.
1699
1700   "MAP_TO_GUEST_ON_BAD_USER" means session setups with an invalid password
1701   are rejected, unless the username does not exist, in which case it
1702   is treated as a guest login
1703
1704   "MAP_TO_GUEST_ON_BAD_PASSWORD" means session setups with an invalid password
1705   are treated as a guest login
1706
1707   Note that map_to_guest only has an effect in user or server
1708   level security.
1709*/
1710
1711#define NEVER_MAP_TO_GUEST 0
1712#define MAP_TO_GUEST_ON_BAD_USER 1
1713#define MAP_TO_GUEST_ON_BAD_PASSWORD 2
1714
1715#define SAFE_NETBIOS_CHARS ". -_"
1716
1717/* generic iconv conversion structure */
1718typedef struct _smb_iconv_t {
1719	size_t (*direct)(void *cd, const char **inbuf, size_t *inbytesleft,
1720			 char **outbuf, size_t *outbytesleft);
1721	size_t (*pull)(void *cd, const char **inbuf, size_t *inbytesleft,
1722		       char **outbuf, size_t *outbytesleft);
1723	size_t (*push)(void *cd, const char **inbuf, size_t *inbytesleft,
1724		       char **outbuf, size_t *outbytesleft);
1725	void *cd_direct, *cd_pull, *cd_push;
1726	char *from_name, *to_name;
1727} *smb_iconv_t;
1728
1729/* The maximum length of a trust account password.
1730   Used when we randomly create it, 15 char passwords
1731   exceed NT4's max password length */
1732
1733#define DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH 14
1734
1735#include "popt_common.h"
1736
1737#define PORT_NONE	0
1738#ifndef LDAP_PORT
1739#define LDAP_PORT	389
1740#endif
1741
1742/* used by the IP comparison function */
1743struct ip_service {
1744	struct in_addr ip;
1745	unsigned port;
1746};
1747
1748/* Used by the SMB signing functions. */
1749
1750typedef struct smb_sign_info {
1751	void (*sign_outgoing_message)(char *outbuf, struct smb_sign_info *si);
1752	BOOL (*check_incoming_message)(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok);
1753	void (*free_signing_context)(struct smb_sign_info *si);
1754	void *signing_context;
1755
1756	BOOL negotiated_smb_signing;
1757	BOOL allow_smb_signing;
1758	BOOL doing_signing;
1759	BOOL mandatory_signing;
1760	BOOL seen_valid; /* Have I ever seen a validly signed packet? */
1761} smb_sign_info;
1762
1763struct ea_struct {
1764	uint8 flags;
1765	char *name;
1766	DATA_BLOB value;
1767};
1768
1769/* EA names used internally in Samba. KEEP UP TO DATE with prohibited_ea_names in trans2.c !. */
1770#define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI"
1771/* EA to use for DOS attributes */
1772#define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB"
1773
1774#endif /* _SMB_H */
1775