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