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