s3-sessionid: avoid global include of sessionid.h
[samba.git] / source3 / include / includes.h
1 #ifndef _INCLUDES_H
2 #define _INCLUDES_H
3 /* 
4    Unix SMB/CIFS implementation.
5    Machine customisation and include handling
6    Copyright (C) Andrew Tridgell 1994-1998
7    Copyright (C) 2002 by Martin Pool <mbp@samba.org>
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21 */
22
23 #include "../replace/replace.h"
24
25 #if _SAMBA_BUILD_ == 4
26 # undef _SAMBA_BUILD_
27 # define _SAMBA_BUILD_ 3
28 #endif
29
30 /* make sure we have included the correct config.h */
31 #ifndef NO_CONFIG_H /* for some tests */
32 #ifndef CONFIG_H_IS_FROM_SAMBA
33 #error "make sure you have removed all config.h files from standalone builds!"
34 #error "the included config.h isn't from samba!"
35 #endif
36 #endif /* NO_CONFIG_H */
37
38 /* only do the C++ reserved word check when we compile
39    to include --with-developer since too many systems
40    still have comflicts with their header files (e.g. IRIX 6.4) */
41
42 #if !defined(__cplusplus) && defined(DEVELOPER) && defined(__linux__)
43 #define class #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
44 #define private #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
45 #define public #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
46 #define protected #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
47 #define template #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
48 #define this #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
49 #define new #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
50 #define delete #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
51 #define friend #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
52 #endif
53
54 #include "local.h"
55
56 #ifdef SUNOS4
57 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
58 #undef HAVE_TERMIOS_H
59 #endif
60
61 #ifdef RELIANTUNIX
62 /*
63  * <unistd.h> has to be included before any other to get
64  * large file support on Reliant UNIX. Yes, it's broken :-).
65  */
66 #ifdef HAVE_UNISTD_H
67 #include <unistd.h>
68 #endif
69 #endif /* RELIANTUNIX */
70
71 #include "system/capability.h"
72 #include "system/dir.h"
73 #include "system/filesys.h"
74 #include "system/glob.h"
75 #include "system/iconv.h"
76 #include "system/locale.h"
77 #include "system/network.h"
78 #include "system/passwd.h"
79 #include "system/readline.h"
80 #include "system/select.h"
81 #include "system/shmem.h"
82 #include "system/syslog.h"
83 #include "system/terminal.h"
84 #include "system/time.h"
85 #include "system/wait.h"
86
87 #if defined(HAVE_RPC_RPC_H)
88 /*
89  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
90  */
91 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
92 #undef AUTH_ERROR
93 #endif
94 /*
95  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
96  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
97  * them again without checking if they already exsist.  This generates
98  * two "Redefinition of macro" warnings for every single .c file that is
99  * compiled.
100  */
101 #if defined(HPUX) && defined(TCP_NODELAY)
102 #undef TCP_NODELAY
103 #endif
104 #if defined(HPUX) && defined(TCP_MAXSEG)
105 #undef TCP_MAXSEG
106 #endif
107 #include <rpc/rpc.h>
108 #endif
109
110 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
111 #define HAVE_NETGROUP 1
112 #endif
113
114 #if defined (HAVE_NETGROUP)
115 #if defined(HAVE_RPCSVC_YP_PROT_H)
116 /*
117  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
118  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
119  * them again without checking if they already exsist.  This generates
120  * two "Redefinition of macro" warnings for every single .c file that is
121  * compiled.
122  */
123 #if defined(HPUX) && defined(TCP_NODELAY)
124 #undef TCP_NODELAY
125 #endif
126 #if defined(HPUX) && defined(TCP_MAXSEG)
127 #undef TCP_MAXSEG
128 #endif
129 #include <rpcsvc/yp_prot.h>
130 #endif
131 #if defined(HAVE_RPCSVC_YPCLNT_H)
132 #include <rpcsvc/ypclnt.h>
133 #endif
134 #endif /* HAVE_NETGROUP */
135
136 #ifndef HAVE_KRB5_H
137 #undef HAVE_KRB5
138 #endif
139
140 #if HAVE_LBER_H
141 #include <lber.h>
142 #if defined(HPUX) && !defined(_LBER_TYPES_H)
143 /* Define ber_tag_t and ber_int_t for using
144  * HP LDAP-UX Integration products' LDAP libraries.
145 */
146 #ifndef ber_tag_t
147 typedef unsigned long ber_tag_t;
148 typedef int ber_int_t;
149 #endif
150 #endif /* defined(HPUX) && !defined(_LBER_TYPES_H) */
151 #ifndef LBER_USE_DER
152 #define LBER_USE_DER 0x01
153 #endif
154 #endif
155
156 #if HAVE_LDAP_H
157 #include <ldap.h>
158 #ifndef LDAP_CONST
159 #define LDAP_CONST const
160 #endif
161 #ifndef LDAP_OPT_SUCCESS
162 #define LDAP_OPT_SUCCESS 0
163 #endif
164 /* Solaris 8 and maybe other LDAP implementations spell this "..._INPROGRESS": */
165 #if defined(LDAP_SASL_BIND_INPROGRESS) && !defined(LDAP_SASL_BIND_IN_PROGRESS)
166 #define LDAP_SASL_BIND_IN_PROGRESS LDAP_SASL_BIND_INPROGRESS
167 #endif
168 /* Solaris 8 defines SSL_LDAP_PORT, not LDAPS_PORT and it only does so if
169    LDAP_SSL is defined - but SSL is not working. We just want the
170    port number! Let's just define LDAPS_PORT correct. */
171 #if !defined(LDAPS_PORT)
172 #define LDAPS_PORT 636
173 #endif
174
175 /* function declarations not included in proto.h */
176 LDAP *ldap_open_with_timeout(const char *server, int port, unsigned int to);
177
178 #else
179 #undef HAVE_LDAP
180 #endif
181
182 #if HAVE_GSSAPI_GSSAPI_H
183 #include <gssapi/gssapi.h>
184 #elif HAVE_GSSAPI_GSSAPI_GENERIC_H
185 #include <gssapi/gssapi_generic.h>
186 #elif HAVE_GSSAPI_H
187 #include <gssapi.h>
188 #endif
189
190 #if HAVE_COM_ERR_H
191 #include <com_err.h>
192 #endif
193
194 #if HAVE_SYS_ATTRIBUTES_H
195 #include <sys/attributes.h>
196 #endif
197
198 #ifndef ENOATTR
199 #if defined(ENODATA)
200 #define ENOATTR ENODATA
201 #else
202 #define ENOATTR ENOENT
203 #endif
204 #endif
205
206 /* mutually exclusive (SuSE 8.2) */
207 #if HAVE_ATTR_XATTR_H
208 #include <attr/xattr.h>
209 #elif HAVE_SYS_XATTR_H
210 #include <sys/xattr.h>
211 #endif
212
213 #ifdef HAVE_SYS_EA_H
214 #include <sys/ea.h>
215 #endif
216
217 #ifdef HAVE_SYS_EXTATTR_H
218 #include <sys/extattr.h>
219 #endif
220
221 #ifdef HAVE_SYS_UIO_H
222 #include <sys/uio.h>
223 #endif
224
225 #if HAVE_LANGINFO_H
226 #include <langinfo.h>
227 #endif
228
229 #if HAVE_NETGROUP_H
230 #include <netgroup.h>
231 #endif
232
233 #if defined(HAVE_AIO_H) && defined(WITH_AIO)
234 #include <aio.h>
235 #endif
236
237 #ifdef WITH_MADVISE_PROTECTED
238 #include <sys/mman.h>
239 #endif
240
241 /* Special macros that are no-ops except when run under Valgrind on
242  * x86.  They've moved a little bit from valgrind 1.0.4 to 1.9.4 */
243 #if HAVE_VALGRIND_MEMCHECK_H
244         /* memcheck.h includes valgrind.h */
245 #include <valgrind/memcheck.h>
246 #elif HAVE_VALGRIND_H
247 #include <valgrind.h>
248 #endif
249
250 /* we support ADS if we want it and have krb5 and ldap libs */
251 #if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP)
252 #define HAVE_ADS
253 #endif
254
255 /*
256  * Define additional missing types
257  */
258 #if defined(AIX)
259 typedef sig_atomic_t SIG_ATOMIC_T;
260 #else
261 typedef sig_atomic_t volatile SIG_ATOMIC_T;
262 #endif
263
264 #ifndef uchar
265 #define uchar unsigned char
266 #endif
267
268 /*
269    Samba needs type definitions for int16, int32, uint16 and uint32.
270
271    Normally these are signed and unsigned 16 and 32 bit integers, but
272    they actually only need to be at least 16 and 32 bits
273    respectively. Thus if your word size is 8 bytes just defining them
274    as signed and unsigned int will work.
275 */
276
277 #ifndef uint8
278 #define uint8 uint8_t
279 #endif
280
281 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
282 #  define int16 int16_t
283    /* needed to work around compile issue on HP-UX 11.x */
284 #  define _INT16        1
285 #endif
286
287 /*
288  * Note we duplicate the size tests in the unsigned 
289  * case as int16 may be a typedef from rpc/rpc.h
290  */
291
292
293 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
294 #  define uint16 uint16_t
295 #endif
296
297 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
298 #  define int32 int32_t
299 #  ifndef _INT32
300      /* needed to work around compile issue on HP-UX 11.x */
301 #    define _INT32      1
302 #  endif
303 #endif
304
305 /*
306  * Note we duplicate the size tests in the unsigned 
307  * case as int32 may be a typedef from rpc/rpc.h
308  */
309
310 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
311 #  define uint32 uint32_t
312 #endif
313
314 /*
315  * check for 8 byte long long
316  */
317
318 #if !defined(uint64)
319 #  define uint64 uint64_t
320 #endif
321
322 #if !defined(int64)
323 #  define int64 int64_t
324 #endif
325
326
327 /*
328  * Types for devices, inodes and offsets.
329  */
330
331 #ifndef SMB_DEV_T
332 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)
333 #    define SMB_DEV_T dev64_t
334 #  else
335 #    define SMB_DEV_T dev_t
336 #  endif
337 #endif
338
339 #ifndef LARGE_SMB_DEV_T
340 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)) || (defined(SIZEOF_DEV_T) && (SIZEOF_DEV_T == 8))
341 #    define LARGE_SMB_DEV_T 1
342 #  endif
343 #endif
344
345 #ifdef LARGE_SMB_DEV_T
346 #define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),(v)&0xFFFFFFFF), SIVAL((p),(ofs)+4,(v)>>32))
347 #define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(((uint64_t)(IVAL((p),(ofs))))| (((uint64_t)(IVAL((p),(ofs)+4))) << 32)))
348 #else 
349 #define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),v),SIVAL((p),(ofs)+4,0))
350 #define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(IVAL((p),(ofs))))
351 #endif
352
353 /*
354  * Setup the correctly sized inode type.
355  */
356
357 #ifndef SMB_INO_T
358 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
359 #    define SMB_INO_T ino64_t
360 #  else
361 #    define SMB_INO_T ino_t
362 #  endif
363 #endif
364
365 #ifndef LARGE_SMB_INO_T
366 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
367 #    define LARGE_SMB_INO_T 1
368 #  endif
369 #endif
370
371 #ifdef LARGE_SMB_INO_T
372 #define SINO_T_VAL(p, ofs, v) (SIVAL((p),(ofs),(v)&0xFFFFFFFF), SIVAL((p),(ofs)+4,(v)>>32))
373 #define INO_T_VAL(p, ofs) ((SMB_INO_T)(((uint64_t)(IVAL(p,ofs)))| (((uint64_t)(IVAL(p,(ofs)+4))) << 32)))
374 #else 
375 #define SINO_T_VAL(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
376 #define INO_T_VAL(p, ofs) ((SMB_INO_T)(IVAL((p),(ofs))))
377 #endif
378
379 #ifndef SMB_OFF_T
380 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
381 #    define SMB_OFF_T off64_t
382 #  else
383 #    define SMB_OFF_T off_t
384 #  endif
385 #endif
386
387 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
388 #define BIG_UINT(p, ofs) ((((uint64_t) IVAL(p,(ofs)+4))<<32)|IVAL(p,ofs))
389 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((uint64_t)(IVAL((buf),(off)))) & ((uint64_t)0xFFFFFFFF)) | \
390                 (( ((uint64_t)(IVAL((buf),(off+4)))) & ((uint64_t)0xFFFFFFFF) ) << 32 ) )
391
392
393 /* this should really be a 64 bit type if possible */
394 typedef uint64_t br_off;
395
396 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
397
398 /*
399  * Set the define that tells us if we can do 64 bit
400  * NT SMB calls.
401  */
402
403 #ifndef LARGE_SMB_OFF_T
404 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
405 #    define LARGE_SMB_OFF_T 1
406 #  endif
407 #endif
408
409 #ifdef LARGE_SMB_OFF_T
410 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
411 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
412 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint64_t)(IVAL((buf),(off)))) & ((uint64_t)0xFFFFFFFF) )))
413 #else 
414 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
415 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
416 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF )))
417 #endif
418
419 #ifndef HAVE_BLKSIZE_T
420 /* This is mainly for HP/UX which defines st_blksize as long */
421 typedef long blksize_t;
422 #endif
423
424 #ifndef HAVE_BLKCNT_T
425 /* This is mainly for HP/UX which doesn't have blkcnt_t */
426 typedef long blkcnt_t;
427 #endif
428
429 #ifndef HAVE_STRUCT_TIMESPEC
430 struct timespec {
431         time_t tv_sec;            /* Seconds.  */
432         long tv_nsec;           /* Nanoseconds.  */
433 };
434 #endif
435
436
437 /*
438  * Type for stat structure.
439  */
440
441 struct stat_ex {
442         dev_t           st_ex_dev;
443         ino_t           st_ex_ino;
444         mode_t          st_ex_mode;
445         nlink_t         st_ex_nlink;
446         uid_t           st_ex_uid;
447         gid_t           st_ex_gid;
448         dev_t           st_ex_rdev;
449         off_t           st_ex_size;
450         struct timespec st_ex_atime;
451         struct timespec st_ex_mtime;
452         struct timespec st_ex_ctime;
453         struct timespec st_ex_btime; /* birthtime */
454         /* Is birthtime real, or was it calculated ? */
455         bool            st_ex_calculated_birthtime;
456         blksize_t       st_ex_blksize;
457         blkcnt_t        st_ex_blocks;
458
459         uint32_t        st_ex_flags;
460         uint32_t        st_ex_mask;
461
462         /*
463          * Add space for VFS internal extensions. The initial user of this
464          * would be the onefs modules, passing the snapid from the stat calls
465          * to the file_id_create call. Maybe we'll have to expand this later,
466          * but the core of Samba should never look at this field.
467          */
468         uint64_t vfs_private;
469 };
470
471 typedef struct stat_ex SMB_STRUCT_STAT;
472
473 /*
474  * Type for dirent structure.
475  */
476
477 #ifndef SMB_STRUCT_DIRENT
478 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
479 #    define SMB_STRUCT_DIRENT struct dirent64
480 #  else
481 #    define SMB_STRUCT_DIRENT struct dirent
482 #  endif
483 #endif
484
485 /*
486  * Type for DIR structure.
487  */
488
489 #ifndef SMB_STRUCT_DIR
490 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIR64)
491 #    define SMB_STRUCT_DIR DIR64
492 #  else
493 #    define SMB_STRUCT_DIR DIR
494 #  endif
495 #endif
496
497 /*
498  * Defines for 64 bit fcntl locks.
499  */
500
501 #ifndef SMB_STRUCT_FLOCK
502 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
503 #    define SMB_STRUCT_FLOCK struct flock64
504 #  else
505 #    define SMB_STRUCT_FLOCK struct flock
506 #  endif
507 #endif
508
509 #ifndef SMB_F_SETLKW
510 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
511 #    define SMB_F_SETLKW F_SETLKW64
512 #  else
513 #    define SMB_F_SETLKW F_SETLKW
514 #  endif
515 #endif
516
517 #ifndef SMB_F_SETLK
518 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
519 #    define SMB_F_SETLK F_SETLK64
520 #  else
521 #    define SMB_F_SETLK F_SETLK
522 #  endif
523 #endif
524
525 #ifndef SMB_F_GETLK
526 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
527 #    define SMB_F_GETLK F_GETLK64
528 #  else
529 #    define SMB_F_GETLK F_GETLK
530 #  endif
531 #endif
532
533 /*
534  * Type for aiocb structure.
535  */
536
537 #ifndef SMB_STRUCT_AIOCB
538 #  if defined(WITH_AIO)
539 #    if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_AIOCB64)
540 #      define SMB_STRUCT_AIOCB struct aiocb64
541 #    else
542 #      define SMB_STRUCT_AIOCB struct aiocb
543 #    endif
544 #  else
545 #    define SMB_STRUCT_AIOCB int /* AIO not being used but we still need the define.... */
546 #  endif
547 #endif
548
549 enum timestamp_set_resolution {
550         TIMESTAMP_SET_SECONDS = 0,
551         TIMESTAMP_SET_MSEC,
552         TIMESTAMP_SET_NT_OR_BETTER
553 };
554
555 /* Our own fstrings */
556
557 /*
558                   --------------
559                  /              \
560                 /      REST      \
561                /        IN        \
562               /       PEACE        \
563              /                      \
564              | The infamous pstring |
565              |                      |
566              |                      |
567              |      7 December      |
568              |                      |
569              |         2007         |
570             *|     *  *  *          | *
571    _________)/\\_//(\/(/\)/\//\/\///|_)_______
572 */
573
574 #ifndef FSTRING_LEN
575 #define FSTRING_LEN 256
576 typedef char fstring[FSTRING_LEN];
577 #endif
578
579 /* Samba 3 doesn't use iconv_convenience: */
580 extern void *cmdline_lp_ctx;
581
582 /* Lists, trees, caching, database... */
583 #include "../lib/util/util.h"
584 #include "../lib/util/util_net.h"
585 #include "../lib/util/xfile.h"
586 #include "../lib/util/memory.h"
587 #include "../lib/util/attr.h"
588 #include "../lib/util/tsort.h"
589 #include "../lib/util/dlinklist.h"
590 #include "tdb.h"
591 #include "util_tdb.h"
592
593 #include "talloc.h"
594
595 #include "event.h"
596 #include "../lib/util/tevent_unix.h"
597 #include "../lib/util/tevent_ntstatus.h"
598 #include "../lib/tsocket/tsocket.h"
599
600 #include "../lib/util/data_blob.h"
601 #include "../lib/util/time.h"
602 #include "../lib/util/asn1.h"
603
604 #include "libads/ads_status.h"
605 #include "interfaces.h"
606 #include "trans2.h"
607 #include "../libcli/util/error.h"
608 #include "ntioctl.h"
609 #include "../lib/util/charset/charset.h"
610 #include "dynconfig.h"
611 #include "debugparse.h"
612 #include "../libcli/security/privileges.h"
613 #include "messages.h"
614 #include "locking.h"
615 #include "smb_perfcount.h"
616 #include "smb.h"
617 #include "nameserv.h"
618 #include "../lib/util/byteorder.h"
619 #include "mapping.h"
620 #include "passdb.h"
621 #include "msdfs.h"
622
623 #include "auth.h"
624 #include "ntdomain.h"
625 #include "librpc/rpc/dcerpc.h"
626 #include "client.h"
627
628 #include "module.h"
629 #include "packet.h"
630 #include "../lib/util/talloc_stack.h"
631 #include "../lib/util/smb_threads.h"
632 #include "../lib/util/smb_threads_internal.h"
633
634 /*
635  * Reasons for cache flush.
636  */
637
638 enum flush_reason_enum {
639     SEEK_FLUSH,
640     READ_FLUSH,
641     WRITE_FLUSH,
642     READRAW_FLUSH,
643     OPLOCK_RELEASE_FLUSH,
644     CLOSE_FLUSH,
645     SYNC_FLUSH,
646     SIZECHANGE_FLUSH,
647     /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
648     NUM_FLUSH_REASONS};
649
650 #include "modules/nfs4_acls.h"
651 #include "nsswitch/libwbclient/wbclient.h"
652
653 /***** prototypes *****/
654 #ifndef NO_PROTO_H
655 #include "proto.h"
656 #endif
657 #include "libcli/security/secace.h"
658 #include "libcli/security/secacl.h"
659 #include "libcli/security/security_descriptor.h"
660 #include "libcli/security/sddl.h"
661
662 #if defined(HAVE_POSIX_ACLS)
663 #include "modules/vfs_posixacl.h"
664 #endif
665
666 #if defined(HAVE_TRU64_ACLS)
667 #include "modules/vfs_tru64acl.h"
668 #endif
669
670 #if defined(HAVE_SOLARIS_ACLS) || defined(HAVE_UNIXWARE_ACLS)
671 #include "modules/vfs_solarisacl.h"
672 #endif
673
674 #if defined(HAVE_HPUX_ACLS)
675 #include "modules/vfs_hpuxacl.h"
676 #endif
677
678 #if defined(HAVE_IRIX_ACLS)
679 #include "modules/vfs_irixacl.h"
680 #endif
681
682 /* We need this after proto.h to reference GetTimeOfDay(). */
683 #include "smbprofile.h"
684
685 /* String routines */
686
687 #include "srvstr.h"
688 #include "safe_string.h"
689
690 /* prototypes from lib/util_transfer_file.c */
691 #include "transfer_file.h"
692
693 #ifndef SIGCLD
694 #define SIGCLD SIGCHLD
695 #endif
696
697 #ifndef SIGRTMIN
698 #define SIGRTMIN NSIG
699 #endif
700
701 #ifndef MAP_FILE
702 #define MAP_FILE 0
703 #endif
704
705 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
706 #define OSF1_ENH_SEC 1
707 #endif
708
709 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
710 #define ULTRIX_AUTH 1
711 #endif
712
713 /* yuck, I'd like a better way of doing this */
714 #define DIRP_SIZE (256 + 32)
715
716 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
717    given the socket IO pattern that Samba uses */
718 #ifdef TCP_NODELAY
719 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
720 #else
721 #define DEFAULT_SOCKET_OPTIONS ""
722 #endif
723
724 /* dmalloc -- free heap debugger (dmalloc.org).  This should be near
725  * the *bottom* of include files so as not to conflict. */
726 #ifdef ENABLE_DMALLOC
727 #  include <dmalloc.h>
728 #endif
729
730
731 #if HAVE_KERNEL_SHARE_MODES
732 #ifndef LOCK_MAND 
733 #define LOCK_MAND       32      /* This is a mandatory flock */
734 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
735 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
736 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
737 #endif
738 #endif
739
740 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
741
742
743 #ifdef GLIBC_HACK_FCNTL64
744 /* this is a gross hack. 64 bit locking is completely screwed up on
745    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
746    "fixes" the problem with the current 2.4.0test kernels 
747 */
748 #define fcntl fcntl64
749 #undef F_SETLKW 
750 #undef F_SETLK 
751 #define F_SETLK 13
752 #define F_SETLKW 14
753 #endif
754
755
756 /* needed for some systems without iconv. Doesn't really matter
757    what error code we use */
758 #ifndef EILSEQ
759 #define EILSEQ EIO
760 #endif
761
762 /* add varargs prototypes with printf checking */
763 /*PRINTFLIKE2 */
764 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
765 /*PRINTFLIKE1 */
766 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
767 /*PRINTFLIKE2 */
768 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
769
770 /* PRINTFLIKE2 */
771 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
772
773 /* PRINTFLIKE2 */
774 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
775
776 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
777
778 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
779
780 int asprintf_strupper_m(char **strp, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
781 char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
782
783 /*
784  * Veritas File System.  Often in addition to native.
785  * Quotas different.
786  */
787 #if defined(HAVE_SYS_FS_VX_QUOTA_H)
788 #define VXFS_QUOTA
789 #endif
790
791 #ifndef XATTR_CREATE
792 #define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
793 #endif
794
795 #ifndef XATTR_REPLACE
796 #define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
797 #endif
798
799 #if defined(HAVE_LINUX_READAHEAD) && ! defined(HAVE_READAHEAD_DECL)
800 ssize_t readahead(int fd, off64_t offset, size_t count);
801 #endif
802
803 #ifdef TRUE
804 #undef TRUE
805 #endif
806 #define TRUE __ERROR__XX__DONT_USE_TRUE
807
808 #ifdef FALSE
809 #undef FALSE
810 #endif
811 #define FALSE __ERROR__XX__DONT_USE_FALSE
812
813 /* If we have blacklisted mmap() try to avoid using it accidentally by
814    undefining the HAVE_MMAP symbol. */
815
816 #ifdef MMAP_BLACKLIST
817 #undef HAVE_MMAP
818 #endif
819
820 #ifndef CONST_DISCARD
821 #define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
822 #endif
823
824 void smb_panic( const char *why ) _NORETURN_;
825 void dump_core(void) _NORETURN_;
826 void exit_server(const char *const reason) _NORETURN_;
827 void exit_server_cleanly(const char *const reason) _NORETURN_;
828 void exit_server_fault(void) _NORETURN_;
829
830 #if defined(HAVE_IPV6)
831 void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
832                                   struct in6_addr ip);
833 #endif
834
835 /* samba3 doesn't use uwrap yet */
836 #define uwrap_enabled() 0
837
838 #define BASE_RID (0x000003E8L)
839
840 #endif /* _INCLUDES_H */