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