s3-server_id: only include server_id where needed.
[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 "session.h"
629 #include "module.h"
630 #include "packet.h"
631 #include "../lib/util/talloc_stack.h"
632 #include "../lib/util/smb_threads.h"
633 #include "../lib/util/smb_threads_internal.h"
634
635 /*
636  * Reasons for cache flush.
637  */
638
639 enum flush_reason_enum {
640     SEEK_FLUSH,
641     READ_FLUSH,
642     WRITE_FLUSH,
643     READRAW_FLUSH,
644     OPLOCK_RELEASE_FLUSH,
645     CLOSE_FLUSH,
646     SYNC_FLUSH,
647     SIZECHANGE_FLUSH,
648     /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
649     NUM_FLUSH_REASONS};
650
651 #include "modules/nfs4_acls.h"
652 #include "nsswitch/libwbclient/wbclient.h"
653
654 /***** prototypes *****/
655 #ifndef NO_PROTO_H
656 #include "proto.h"
657 #endif
658 #include "libcli/security/secace.h"
659 #include "libcli/security/secacl.h"
660 #include "libcli/security/security_descriptor.h"
661 #include "libcli/security/sddl.h"
662
663 #if defined(HAVE_POSIX_ACLS)
664 #include "modules/vfs_posixacl.h"
665 #endif
666
667 #if defined(HAVE_TRU64_ACLS)
668 #include "modules/vfs_tru64acl.h"
669 #endif
670
671 #if defined(HAVE_SOLARIS_ACLS) || defined(HAVE_UNIXWARE_ACLS)
672 #include "modules/vfs_solarisacl.h"
673 #endif
674
675 #if defined(HAVE_HPUX_ACLS)
676 #include "modules/vfs_hpuxacl.h"
677 #endif
678
679 #if defined(HAVE_IRIX_ACLS)
680 #include "modules/vfs_irixacl.h"
681 #endif
682
683 /* We need this after proto.h to reference GetTimeOfDay(). */
684 #include "smbprofile.h"
685
686 /* String routines */
687
688 #include "srvstr.h"
689 #include "safe_string.h"
690
691 /* prototypes from lib/util_transfer_file.c */
692 #include "transfer_file.h"
693
694 #ifndef SIGCLD
695 #define SIGCLD SIGCHLD
696 #endif
697
698 #ifndef SIGRTMIN
699 #define SIGRTMIN NSIG
700 #endif
701
702 #ifndef MAP_FILE
703 #define MAP_FILE 0
704 #endif
705
706 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
707 #define OSF1_ENH_SEC 1
708 #endif
709
710 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
711 #define ULTRIX_AUTH 1
712 #endif
713
714 /* yuck, I'd like a better way of doing this */
715 #define DIRP_SIZE (256 + 32)
716
717 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
718    given the socket IO pattern that Samba uses */
719 #ifdef TCP_NODELAY
720 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
721 #else
722 #define DEFAULT_SOCKET_OPTIONS ""
723 #endif
724
725 /* dmalloc -- free heap debugger (dmalloc.org).  This should be near
726  * the *bottom* of include files so as not to conflict. */
727 #ifdef ENABLE_DMALLOC
728 #  include <dmalloc.h>
729 #endif
730
731
732 #if HAVE_KERNEL_SHARE_MODES
733 #ifndef LOCK_MAND 
734 #define LOCK_MAND       32      /* This is a mandatory flock */
735 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
736 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
737 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
738 #endif
739 #endif
740
741 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
742
743
744 #ifdef GLIBC_HACK_FCNTL64
745 /* this is a gross hack. 64 bit locking is completely screwed up on
746    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
747    "fixes" the problem with the current 2.4.0test kernels 
748 */
749 #define fcntl fcntl64
750 #undef F_SETLKW 
751 #undef F_SETLK 
752 #define F_SETLK 13
753 #define F_SETLKW 14
754 #endif
755
756
757 /* needed for some systems without iconv. Doesn't really matter
758    what error code we use */
759 #ifndef EILSEQ
760 #define EILSEQ EIO
761 #endif
762
763 /* add varargs prototypes with printf checking */
764 /*PRINTFLIKE2 */
765 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
766 /*PRINTFLIKE1 */
767 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
768 /*PRINTFLIKE2 */
769 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
770
771 /* PRINTFLIKE2 */
772 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
773
774 /* PRINTFLIKE2 */
775 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
776
777 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
778
779 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
780
781 int asprintf_strupper_m(char **strp, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
782 char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
783
784 /*
785  * Veritas File System.  Often in addition to native.
786  * Quotas different.
787  */
788 #if defined(HAVE_SYS_FS_VX_QUOTA_H)
789 #define VXFS_QUOTA
790 #endif
791
792 #ifndef XATTR_CREATE
793 #define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
794 #endif
795
796 #ifndef XATTR_REPLACE
797 #define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
798 #endif
799
800 #if defined(HAVE_LINUX_READAHEAD) && ! defined(HAVE_READAHEAD_DECL)
801 ssize_t readahead(int fd, off64_t offset, size_t count);
802 #endif
803
804 #ifdef TRUE
805 #undef TRUE
806 #endif
807 #define TRUE __ERROR__XX__DONT_USE_TRUE
808
809 #ifdef FALSE
810 #undef FALSE
811 #endif
812 #define FALSE __ERROR__XX__DONT_USE_FALSE
813
814 /* If we have blacklisted mmap() try to avoid using it accidentally by
815    undefining the HAVE_MMAP symbol. */
816
817 #ifdef MMAP_BLACKLIST
818 #undef HAVE_MMAP
819 #endif
820
821 #ifndef CONST_DISCARD
822 #define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
823 #endif
824
825 void smb_panic( const char *why ) _NORETURN_;
826 void dump_core(void) _NORETURN_;
827 void exit_server(const char *const reason) _NORETURN_;
828 void exit_server_cleanly(const char *const reason) _NORETURN_;
829 void exit_server_fault(void) _NORETURN_;
830
831 #if defined(HAVE_IPV6)
832 void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
833                                   struct in6_addr ip);
834 #endif
835
836 /* samba3 doesn't use uwrap yet */
837 #define uwrap_enabled() 0
838
839 #define BASE_RID (0x000003E8L)
840
841 #endif /* _INCLUDES_H */