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