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