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