r6570: Add socket_wrapper library to 3.0. Can be enabled by passing
[tprouty/samba.git] / source / 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 2 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, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #ifndef NO_CONFIG_H /* for some tests */
25 #include "config.h"
26 #endif
27
28 #include "local.h"
29
30 #ifdef AIX
31 #define DEFAULT_PRINTING PRINT_AIX
32 #define PRINTCAP_NAME "/etc/qconfig"
33 #endif
34
35 #ifdef HPUX
36 #define DEFAULT_PRINTING PRINT_HPUX
37 #endif
38
39 #ifdef QNX
40 #define DEFAULT_PRINTING PRINT_QNX
41 #endif
42
43 #ifdef SUNOS4
44 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
45 #undef HAVE_TERMIOS_H
46 #endif
47
48 #if (__GNUC__ >= 3 ) && (__GNUC_MINOR__ >= 1 )
49 /** Use gcc attribute to check printf fns.  a1 is the 1-based index of
50  * the parameter containing the format, and a2 the index of the first
51  * argument. Note that some gcc 2.x versions don't handle this
52  * properly **/
53 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
54 #else
55 #define PRINTF_ATTRIBUTE(a1, a2)
56 #endif
57
58 #ifdef __GNUC__
59 /** gcc attribute used on function parameters so that it does not emit
60  * warnings about them being unused. **/
61 #  define UNUSED(param) param __attribute__ ((unused))
62 #else
63 #  define UNUSED(param) param
64 /** Feel free to add definitions for other compilers here. */
65 #endif
66
67 #ifdef RELIANTUNIX
68 /*
69  * <unistd.h> has to be included before any other to get
70  * large file support on Reliant UNIX. Yes, it's broken :-).
71  */
72 #ifdef HAVE_UNISTD_H
73 #include <unistd.h>
74 #endif
75 #endif /* RELIANTUNIX */
76
77 #include <sys/types.h>
78
79 #ifdef TIME_WITH_SYS_TIME
80 #include <sys/time.h>
81 #include <time.h>
82 #else
83 #ifdef HAVE_SYS_TIME_H
84 #include <sys/time.h>
85 #else
86 #include <time.h>
87 #endif
88 #endif
89
90 #ifdef HAVE_SYS_RESOURCE_H
91 #include <sys/resource.h>
92 #endif
93
94 #ifdef HAVE_UNISTD_H
95 #include <unistd.h>
96 #endif
97
98 #include <stdio.h>
99 #include <stddef.h>
100
101 #ifdef HAVE_SYS_PARAM_H
102 #include <sys/param.h>
103 #endif
104
105 #ifdef HAVE_STDLIB_H
106 #include <stdlib.h>
107 #endif
108
109 #ifdef HAVE_SYS_SOCKET_H
110 #include <sys/socket.h>
111 #endif
112
113 #ifdef HAVE_UNIXSOCKET
114 #include <sys/un.h>
115 #endif
116
117 #ifdef HAVE_SYS_SYSCALL_H
118 #include <sys/syscall.h>
119 #elif HAVE_SYSCALL_H
120 #include <syscall.h>
121 #endif
122
123 #ifdef HAVE_STRING_H
124 #include <string.h>
125 #endif
126
127 #ifdef HAVE_STRINGS_H
128 #include <strings.h>
129 #endif
130
131 #ifdef HAVE_MEMORY_H
132 #include <memory.h>
133 #endif
134
135 #ifdef HAVE_MALLOC_H
136 #include <malloc.h>
137 #endif
138
139 #ifdef HAVE_FCNTL_H
140 #include <fcntl.h>
141 #else
142 #ifdef HAVE_SYS_FCNTL_H
143 #include <sys/fcntl.h>
144 #endif
145 #endif
146
147 #include <sys/stat.h>
148
149 #ifdef HAVE_LIMITS_H
150 #include <limits.h>
151 #endif
152
153 #ifdef HAVE_SYS_IOCTL_H
154 #include <sys/ioctl.h>
155 #endif
156
157 #ifdef HAVE_SYS_FILIO_H
158 #include <sys/filio.h>
159 #endif
160
161 #include <signal.h>
162
163 #ifdef HAVE_SYS_WAIT_H
164 #include <sys/wait.h>
165 #endif
166 #ifdef HAVE_CTYPE_H
167 #include <ctype.h>
168 #endif
169 #ifdef HAVE_GRP_H
170 #include <grp.h>
171 #endif
172 #ifdef HAVE_SYS_PRIV_H
173 #include <sys/priv.h>
174 #endif
175 #ifdef HAVE_SYS_ID_H
176 #include <sys/id.h>
177 #endif
178
179 #include <errno.h>
180
181 #ifdef HAVE_UTIME_H
182 #include <utime.h>
183 #endif
184
185 #ifdef HAVE_SYS_SELECT_H
186 #include <sys/select.h>
187 #endif
188
189 #ifdef HAVE_SYS_MODE_H
190 /* apparently AIX needs this for S_ISLNK */
191 #ifndef S_ISLNK
192 #include <sys/mode.h>
193 #endif
194 #endif
195
196 #ifdef HAVE_GLOB_H
197 #include <glob.h>
198 #endif
199
200 #include <pwd.h>
201
202 #ifdef HAVE_STDARG_H
203 #include <stdarg.h>
204 #else
205 #include <varargs.h>
206 #endif
207
208 #include <netinet/in.h>
209 #include <arpa/inet.h>
210 #include <netdb.h>
211
212 #ifdef HAVE_SYSLOG_H
213 #include <syslog.h>
214 #else
215 #ifdef HAVE_SYS_SYSLOG_H
216 #include <sys/syslog.h>
217 #endif
218 #endif
219
220 #include <sys/file.h>
221
222 #ifdef HAVE_NETINET_TCP_H
223 #include <netinet/tcp.h>
224 #endif
225
226 /*
227  * The next three defines are needed to access the IPTOS_* options
228  * on some systems.
229  */
230
231 #ifdef HAVE_NETINET_IN_SYSTM_H
232 #include <netinet/in_systm.h>
233 #endif
234
235 #ifdef HAVE_NETINET_IN_IP_H
236 #include <netinet/in_ip.h>
237 #endif
238
239 #ifdef HAVE_NETINET_IP_H
240 #include <netinet/ip.h>
241 #endif
242
243 #if defined(HAVE_TERMIOS_H)
244 /* POSIX terminal handling. */
245 #include <termios.h>
246 #elif defined(HAVE_TERMIO_H)
247 /* Older SYSV terminal handling - don't use if we can avoid it. */
248 #include <termio.h>
249 #elif defined(HAVE_SYS_TERMIO_H)
250 /* Older SYSV terminal handling - don't use if we can avoid it. */
251 #include <sys/termio.h>
252 #endif
253
254 #if HAVE_DIRENT_H
255 # include <dirent.h>
256 # define NAMLEN(dirent) strlen((dirent)->d_name)
257 #else
258 # define dirent direct
259 # define NAMLEN(dirent) (dirent)->d_namlen
260 # if HAVE_SYS_NDIR_H
261 #  include <sys/ndir.h>
262 # endif
263 # if HAVE_SYS_DIR_H
264 #  include <sys/dir.h>
265 # endif
266 # if HAVE_NDIR_H
267 #  include <ndir.h>
268 # endif
269 #endif
270
271 #ifdef HAVE_SYS_MMAN_H
272 #include <sys/mman.h>
273 #endif
274
275 #ifdef HAVE_NET_IF_H
276 #include <net/if.h>
277 #endif
278
279 #ifdef HAVE_SYS_MOUNT_H
280 #include <sys/mount.h>
281 #endif
282
283 #ifdef HAVE_SYS_VFS_H
284 #include <sys/vfs.h>
285 #endif
286
287 #ifdef HAVE_SYS_ACL_H
288 #include <sys/acl.h>
289 #endif
290
291 #ifdef HAVE_SYS_FS_S5PARAM_H 
292 #include <sys/fs/s5param.h>
293 #endif
294
295 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
296 #include <sys/filsys.h> 
297 #endif
298
299 #ifdef HAVE_SYS_STATFS_H
300 # include <sys/statfs.h>
301 #endif
302
303 #ifdef HAVE_DUSTAT_H              
304 #include <sys/dustat.h>
305 #endif
306
307 #ifdef HAVE_SYS_STATVFS_H          
308 #include <sys/statvfs.h>
309 #endif
310
311 #ifdef HAVE_SHADOW_H
312 /*
313  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
314  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
315  * them again without checking if they already exsist.  This generates
316  * two "Redefinition of macro" warnings for every single .c file that is
317  * compiled.
318  */
319 #if defined(HPUX) && defined(TCP_NODELAY)
320 #undef TCP_NODELAY
321 #endif
322 #if defined(HPUX) && defined(TCP_MAXSEG)
323 #undef TCP_MAXSEG
324 #endif
325 #include <shadow.h>
326 #endif
327
328 #ifdef HAVE_GETPWANAM
329 #include <sys/label.h>
330 #include <sys/audit.h>
331 #include <pwdadj.h>
332 #endif
333
334 #ifdef HAVE_SYS_SECURITY_H
335 #include <sys/security.h>
336 #include <prot.h>
337 #define PASSWORD_LENGTH 16
338 #endif  /* HAVE_SYS_SECURITY_H */
339
340 #ifdef HAVE_STROPTS_H
341 #include <stropts.h>
342 #endif
343
344 #ifdef HAVE_POLL_H
345 #include <poll.h>
346 #endif
347
348 #ifdef HAVE_EXECINFO_H
349 #include <execinfo.h>
350 #endif
351
352 #ifdef HAVE_SYS_CAPABILITY_H
353
354 #if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H) && !defined(_PPC_STATFS_H)
355 #define _I386_STATFS_H
356 #define _PPC_STATFS_H
357 #define BROKEN_REDHAT_7_STATFS_WORKAROUND
358 #endif
359
360 #include <sys/capability.h>
361
362 #ifdef BROKEN_REDHAT_7_STATFS_WORKAROUND
363 #undef _I386_STATFS_H
364 #undef _PPC_STATFS_H
365 #undef BROKEN_REDHAT_7_STATFS_WORKAROUND
366 #endif
367
368 #endif
369
370 #if defined(HAVE_RPC_RPC_H)
371 /*
372  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
373  */
374 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
375 #undef AUTH_ERROR
376 #endif
377 /*
378  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
379  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
380  * them again without checking if they already exsist.  This generates
381  * two "Redefinition of macro" warnings for every single .c file that is
382  * compiled.
383  */
384 #if defined(HPUX) && defined(TCP_NODELAY)
385 #undef TCP_NODELAY
386 #endif
387 #if defined(HPUX) && defined(TCP_MAXSEG)
388 #undef TCP_MAXSEG
389 #endif
390 #include <rpc/rpc.h>
391 #endif
392
393 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
394 #define HAVE_NETGROUP 1
395 #endif
396
397 #if defined (HAVE_NETGROUP)
398 #if defined(HAVE_RPCSVC_YP_PROT_H)
399 /*
400  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
401  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
402  * them again without checking if they already exsist.  This generates
403  * two "Redefinition of macro" warnings for every single .c file that is
404  * compiled.
405  */
406 #if defined(HPUX) && defined(TCP_NODELAY)
407 #undef TCP_NODELAY
408 #endif
409 #if defined(HPUX) && defined(TCP_MAXSEG)
410 #undef TCP_MAXSEG
411 #endif
412 #include <rpcsvc/yp_prot.h>
413 #endif
414 #if defined(HAVE_RPCSVC_YPCLNT_H)
415 #include <rpcsvc/ypclnt.h>
416 #endif
417 #endif /* HAVE_NETGROUP */
418
419 #if defined(HAVE_SYS_IPC_H)
420 #include <sys/ipc.h>
421 #endif /* HAVE_SYS_IPC_H */
422
423 #if defined(HAVE_SYS_SHM_H)
424 #include <sys/shm.h>
425 #endif /* HAVE_SYS_SHM_H */
426
427 #ifdef HAVE_NATIVE_ICONV
428 #ifdef HAVE_ICONV
429 #include <iconv.h>
430 #endif
431 #ifdef HAVE_GICONV
432 #include <giconv.h>
433 #endif
434 #ifdef HAVE_BICONV
435 #include <biconv.h>
436 #endif
437 #endif
438
439 #if HAVE_KRB5_H
440 #include <krb5.h>
441 #else
442 #undef HAVE_KRB5
443 #endif
444
445 #if HAVE_LBER_H
446 #include <lber.h>
447 #endif
448
449 #if HAVE_LDAP_H
450 #include <ldap.h>
451 #else
452 #undef HAVE_LDAP
453 #endif
454
455 #if HAVE_GSSAPI_H
456 #include <gssapi.h>
457 #elif HAVE_GSSAPI_GSSAPI_H
458 #include <gssapi/gssapi.h>
459 #elif HAVE_GSSAPI_GSSAPI_GENERIC_H
460 #include <gssapi/gssapi_generic.h>
461 #endif
462
463 #if HAVE_COM_ERR_H
464 #include <com_err.h>
465 #endif
466
467 #if HAVE_SYS_ATTRIBUTES_H
468 #include <sys/attributes.h>
469 #endif
470
471 /* mutually exclusive (SuSE 8.2) */
472 #if HAVE_ATTR_XATTR_H
473 #include <attr/xattr.h>
474 #elif HAVE_SYS_XATTR_H
475 #include <sys/xattr.h>
476 #endif
477
478 #ifdef HAVE_SYS_EXTATTR_H
479 #include <sys/extattr.h>
480 #endif
481
482 #ifdef HAVE_SYS_UIO_H
483 #include <sys/uio.h>
484 #endif
485
486 #if HAVE_LOCALE_H
487 #include <locale.h>
488 #endif
489
490 #if HAVE_LANGINFO_H
491 #include <langinfo.h>
492 #endif
493
494 /* Special macros that are no-ops except when run under Valgrind on
495  * x86.  They've moved a little bit from valgrind 1.0.4 to 1.9.4 */
496 #if HAVE_VALGRIND_MEMCHECK_H
497         /* memcheck.h includes valgrind.h */
498 #include <valgrind/memcheck.h>
499 #elif HAVE_VALGRIND_H
500 #include <valgrind.h>
501 #endif
502
503 /* If we have --enable-developer and the valgrind header is present,
504  * then we're OK to use it.  Set a macro so this logic can be done only
505  * once. */
506 #if defined(DEVELOPER) && (HAVE_VALGRIND_H || HAVE_VALGRIND_VALGRIND_H)
507 #define VALGRIND
508 #endif
509
510
511 /* we support ADS if we want it and have krb5 and ldap libs */
512 #if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP)
513 #define HAVE_ADS
514 #endif
515
516 /*
517  * Define VOLATILE if needed.
518  */
519
520 #if defined(HAVE_VOLATILE)
521 #define VOLATILE volatile
522 #else
523 #define VOLATILE
524 #endif
525
526 /*
527  * Define additional missing types
528  */
529 #if defined(HAVE_SIG_ATOMIC_T_TYPE) && defined(AIX)
530 typedef sig_atomic_t SIG_ATOMIC_T;
531 #elif defined(HAVE_SIG_ATOMIC_T_TYPE) && !defined(AIX)
532 typedef sig_atomic_t VOLATILE SIG_ATOMIC_T;
533 #else
534 typedef int VOLATILE SIG_ATOMIC_T;
535 #endif
536
537 #ifndef HAVE_SOCKLEN_T_TYPE
538 typedef int socklen_t;
539 #endif
540
541
542 #ifndef uchar
543 #define uchar unsigned char
544 #endif
545
546 #ifdef HAVE_UNSIGNED_CHAR
547 #define schar signed char
548 #else
549 #define schar char
550 #endif
551
552 /*
553    Samba needs type definitions for int16, int32, uint16 and uint32.
554
555    Normally these are signed and unsigned 16 and 32 bit integers, but
556    they actually only need to be at least 16 and 32 bits
557    respectively. Thus if your word size is 8 bytes just defining them
558    as signed and unsigned int will work.
559 */
560
561 #ifndef uint8
562 #define uint8 unsigned char
563 #endif
564
565 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
566 #if (SIZEOF_SHORT == 4)
567 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
568 #else /* SIZEOF_SHORT != 4 */
569 #define int16 short
570 #endif /* SIZEOF_SHORT != 4 */
571 #endif
572
573 /*
574  * Note we duplicate the size tests in the unsigned 
575  * case as int16 may be a typedef from rpc/rpc.h
576  */
577
578 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
579 #if (SIZEOF_SHORT == 4)
580 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
581 #else /* SIZEOF_SHORT != 4 */
582 #define uint16 unsigned short
583 #endif /* SIZEOF_SHORT != 4 */
584 #endif
585
586 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
587 #if (SIZEOF_INT == 4)
588 #define int32 int
589 #elif (SIZEOF_LONG == 4)
590 #define int32 long
591 #elif (SIZEOF_SHORT == 4)
592 #define int32 short
593 #else
594 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
595 #define int32 int
596 #endif
597 #endif
598
599 /*
600  * Note we duplicate the size tests in the unsigned 
601  * case as int32 may be a typedef from rpc/rpc.h
602  */
603
604 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
605 #if (SIZEOF_INT == 4)
606 #define uint32 unsigned int
607 #elif (SIZEOF_LONG == 4)
608 #define uint32 unsigned long
609 #elif (SIZEOF_SHORT == 4)
610 #define uint32 unsigned short
611 #else
612 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
613 #define uint32 unsigned
614 #endif
615 #endif
616
617 /*
618  * Types for devices, inodes and offsets.
619  */
620
621 #ifndef SMB_DEV_T
622 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)
623 #    define SMB_DEV_T dev64_t
624 #  else
625 #    define SMB_DEV_T dev_t
626 #  endif
627 #endif
628
629 /*
630  * Setup the correctly sized inode type.
631  */
632
633 #ifndef SMB_INO_T
634 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
635 #    define SMB_INO_T ino64_t
636 #  else
637 #    define SMB_INO_T ino_t
638 #  endif
639 #endif
640
641 #ifndef LARGE_SMB_INO_T
642 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
643 #    define LARGE_SMB_INO_T 1
644 #  endif
645 #endif
646
647 #ifdef LARGE_SMB_INO_T
648 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
649 #else 
650 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
651 #endif
652
653 #ifndef SMB_OFF_T
654 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
655 #    define SMB_OFF_T off64_t
656 #  else
657 #    define SMB_OFF_T off_t
658 #  endif
659 #endif
660
661 #if defined(HAVE_LONGLONG)
662 #define SMB_BIG_UINT unsigned long long
663 #define SMB_BIG_INT long long
664 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
665 #else
666 #define SMB_BIG_UINT unsigned long
667 #define SMB_BIG_INT long
668 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
669 #endif
670
671 #define SMB_BIG_UINT_BITS (sizeof(SMB_BIG_UINT)*8)
672
673 /* this should really be a 64 bit type if possible */
674 #define br_off SMB_BIG_UINT
675
676 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
677
678 /*
679  * Set the define that tells us if we can do 64 bit
680  * NT SMB calls.
681  */
682
683 #ifndef LARGE_SMB_OFF_T
684 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
685 #    define LARGE_SMB_OFF_T 1
686 #  endif
687 #endif
688
689 #ifdef LARGE_SMB_OFF_T
690 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
691 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
692 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF) )))
693 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
694                 (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
695 #else 
696 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
697 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
698 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF )))
699 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
700                                 (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
701 #endif
702
703 /*
704  * Type for stat structure.
705  */
706
707 #ifndef SMB_STRUCT_STAT
708 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
709 #    define SMB_STRUCT_STAT struct stat64
710 #  else
711 #    define SMB_STRUCT_STAT struct stat
712 #  endif
713 #endif
714
715 /*
716  * Type for dirent structure.
717  */
718
719 #ifndef SMB_STRUCT_DIRENT
720 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
721 #    define SMB_STRUCT_DIRENT struct dirent64
722 #  else
723 #    define SMB_STRUCT_DIRENT struct dirent
724 #  endif
725 #endif
726
727 /*
728  * Defines for 64 bit fcntl locks.
729  */
730
731 #ifndef SMB_STRUCT_FLOCK
732 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
733 #    define SMB_STRUCT_FLOCK struct flock64
734 #  else
735 #    define SMB_STRUCT_FLOCK struct flock
736 #  endif
737 #endif
738
739 #ifndef SMB_F_SETLKW
740 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
741 #    define SMB_F_SETLKW F_SETLKW64
742 #  else
743 #    define SMB_F_SETLKW F_SETLKW
744 #  endif
745 #endif
746
747 #ifndef SMB_F_SETLK
748 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
749 #    define SMB_F_SETLK F_SETLK64
750 #  else
751 #    define SMB_F_SETLK F_SETLK
752 #  endif
753 #endif
754
755 #ifndef SMB_F_GETLK
756 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
757 #    define SMB_F_GETLK F_GETLK64
758 #  else
759 #    define SMB_F_GETLK F_GETLK
760 #  endif
761 #endif
762
763 #ifndef MIN
764 #define MIN(a,b) ((a)<(b)?(a):(b))
765 #endif
766
767 #ifndef MAX
768 #define MAX(a,b) ((a)>(b)?(a):(b))
769 #endif
770
771 #ifndef HAVE_STRERROR
772 extern char *sys_errlist[];
773 #define strerror(i) sys_errlist[i]
774 #endif
775
776 #ifndef HAVE_ERRNO_DECL
777 extern int errno;
778 #endif
779
780 #ifdef HAVE_BROKEN_GETGROUPS
781 #define GID_T int
782 #else
783 #define GID_T gid_t
784 #endif
785
786 #ifndef NGROUPS_MAX
787 #define NGROUPS_MAX 32 /* Guess... */
788 #endif
789
790 #ifdef SOCKET_WRAPPER
791 #define SOCKET_WRAPPER_REPLACE
792 #include "include/socket_wrapper.h"
793 #endif
794
795 /* Our own pstrings and fstrings */
796 #include "pstring.h"
797
798 /* Lists, trees, caching, database... */
799 #include "xfile.h"
800 #include "intl.h"
801 #include "ubi_sLinkList.h"
802 #include "ubi_dLinkList.h"
803 #include "dlinklist.h"
804 #include "tdb/tdb.h"
805 #include "tdb/spinlock.h"
806 #include "tdb/tdbutil.h"
807 #include "talloc.h"
808 #include "nt_status.h"
809 #include "ads.h"
810 #include "interfaces.h"
811 #include "trans2.h"
812 #include "nterr.h"
813 #include "ntioctl.h"
814 #include "messages.h"
815 #include "charset.h"
816 #include "dynconfig.h"
817
818 #include "util_getent.h"
819
820 #ifndef UBI_BINTREE_H
821 #include "ubi_Cache.h"
822 #endif /* UBI_BINTREE_H */
823
824 #include "debugparse.h"
825
826 #include "version.h"
827
828 #include "privileges.h"
829
830 #include "smb.h"
831
832 #include "nameserv.h"
833
834 #include "secrets.h"
835
836 #include "byteorder.h"
837
838 #include "privileges.h"
839
840 #include "rpc_creds.h"
841
842 #include "mapping.h"
843
844 #include "passdb.h"
845
846 #include "ntdomain.h"
847
848 #include "rpc_misc.h"
849
850 #include "rpc_secdes.h"
851
852 #include "nt_printing.h"
853
854 #include "msdfs.h"
855
856 #include "smbprofile.h"
857
858 #include "rap.h"
859
860 #include "md5.h"
861 #include "hmacmd5.h"
862
863 #include "ntlmssp.h"
864
865 #include "auth.h"
866
867 #include "idmap.h"
868
869 #include "client.h"
870
871 #ifdef WITH_SMBWRAPPER
872 #include "smbw.h"
873 #endif
874
875 #include "session.h"
876
877 #include "asn_1.h"
878
879 #include "popt.h"
880
881 #include "mangle.h"
882
883 #include "module.h"
884
885 #include "nsswitch/winbind_client.h"
886
887 #include "spnego.h"
888
889 /*
890  * Type for wide character dirent structure.
891  * Only d_name is defined by POSIX.
892  */
893
894 typedef struct smb_wdirent {
895         wpstring        d_name;
896 } SMB_STRUCT_WDIRENT;
897
898 /*
899  * Type for wide character passwd structure.
900  */
901
902 typedef struct smb_wpasswd {
903         wfstring       pw_name;
904         char           *pw_passwd;
905         uid_t          pw_uid;
906         gid_t          pw_gid;
907         wpstring       pw_gecos;
908         wpstring       pw_dir;
909         wpstring       pw_shell;
910 } SMB_STRUCT_WPASSWD;
911
912 /* used in net.c */
913 struct functable {
914         const char *funcname;
915         int (*fn)(int argc, const char **argv);
916 };
917
918
919 /* Defines for wisXXX functions. */
920 #define UNI_UPPER    0x1
921 #define UNI_LOWER    0x2
922 #define UNI_DIGIT    0x4
923 #define UNI_XDIGIT   0x8
924 #define UNI_SPACE    0x10
925
926 #include "nsswitch/winbind_nss.h"
927
928 /* forward declaration from printing.h to get around 
929    header file dependencies */
930
931 struct printjob;
932
933 struct smb_ldap_privates;
934
935 /* forward declarations from smbldap.c */
936
937 #include "smbldap.h"
938
939 /***** automatically generated prototypes *****/
940 #ifndef NO_PROTO_H
941 #include "proto.h"
942 #endif
943
944 /* String routines */
945
946 #include "srvstr.h"
947 #include "safe_string.h"
948
949 #ifdef __COMPAR_FN_T
950 #define QSORT_CAST (__compar_fn_t)
951 #endif
952
953 #ifndef QSORT_CAST
954 #define QSORT_CAST (int (*)(const void *, const void *))
955 #endif
956
957 #ifndef DEFAULT_PRINTING
958 #ifdef HAVE_CUPS
959 #define DEFAULT_PRINTING PRINT_CUPS
960 #define PRINTCAP_NAME "cups"
961 #elif defined(SYSV)
962 #define DEFAULT_PRINTING PRINT_SYSV
963 #define PRINTCAP_NAME "lpstat"
964 #else
965 #define DEFAULT_PRINTING PRINT_BSD
966 #define PRINTCAP_NAME "/etc/printcap"
967 #endif
968 #endif
969
970 #ifndef PRINTCAP_NAME
971 #define PRINTCAP_NAME "/etc/printcap"
972 #endif
973
974 #ifndef SIGCLD
975 #define SIGCLD SIGCHLD
976 #endif
977
978 #ifndef SIGRTMIN
979 #define SIGRTMIN 32
980 #endif
981
982 #ifndef MAP_FILE
983 #define MAP_FILE 0
984 #endif
985
986 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
987 #define OSF1_ENH_SEC 1
988 #endif
989
990 #ifndef ALLOW_CHANGE_PASSWORD
991 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
992 #define ALLOW_CHANGE_PASSWORD 1
993 #endif
994 #endif
995
996 /* what is the longest significant password available on your system? 
997  Knowing this speeds up password searches a lot */
998 #ifndef PASSWORD_LENGTH
999 #define PASSWORD_LENGTH 8
1000 #endif
1001
1002 #ifdef REPLACE_INET_NTOA
1003 #define inet_ntoa rep_inet_ntoa
1004 #endif
1005
1006 #ifndef HAVE_PIPE
1007 #define SYNC_DNS 1
1008 #endif
1009
1010 #ifndef SEEK_SET
1011 #define SEEK_SET 0
1012 #endif
1013
1014 #ifndef INADDR_LOOPBACK
1015 #define INADDR_LOOPBACK 0x7f000001
1016 #endif
1017
1018 #ifndef INADDR_NONE
1019 #define INADDR_NONE 0xffffffff
1020 #endif
1021
1022 #ifndef HAVE_CRYPT
1023 #define crypt ufc_crypt
1024 #endif
1025
1026 #ifndef O_ACCMODE
1027 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
1028 #endif
1029
1030 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
1031 #define ULTRIX_AUTH 1
1032 #endif
1033
1034 #ifndef HAVE_STRDUP
1035 char *strdup(const char *s);
1036 #endif
1037
1038 #ifndef HAVE_STRNDUP
1039 char *strndup(const char *s, size_t size);
1040 #endif
1041
1042 #ifndef HAVE_MEMMOVE
1043 void *memmove(void *dest,const void *src,int size);
1044 #endif
1045
1046 #ifndef HAVE_INITGROUPS
1047 int initgroups(char *name,gid_t id);
1048 #endif
1049
1050 #ifndef HAVE_RENAME
1051 int rename(const char *zfrom, const char *zto);
1052 #endif
1053
1054 #ifndef HAVE_MKTIME
1055 time_t mktime(struct tm *t);
1056 #endif
1057
1058 #ifndef HAVE_STRLCPY
1059 size_t strlcpy(char *d, const char *s, size_t bufsize);
1060 #endif
1061
1062 #ifndef HAVE_STRLCAT
1063 size_t strlcat(char *d, const char *s, size_t bufsize);
1064 #endif
1065
1066 #ifndef HAVE_FTRUNCATE
1067 int ftruncate(int f,long l);
1068 #endif
1069
1070 #ifndef HAVE_STRNDUP
1071 char *strndup(const char *s, size_t n);
1072 #endif
1073
1074 #ifndef HAVE_STRNLEN
1075 size_t strnlen(const char *s, size_t n);
1076 #endif
1077
1078 #ifndef HAVE_STRTOUL
1079 unsigned long strtoul(const char *nptr, char **endptr, int base);
1080 #endif
1081
1082 #ifndef HAVE_SETENV
1083 int setenv(const char *name, const char *value, int overwrite); 
1084 #endif
1085
1086 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
1087 /* stupid glibc */
1088 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
1089 #endif
1090 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
1091 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
1092 #endif
1093 #ifndef HAVE_VASPRINTF_DECL
1094 int vasprintf(char **ptr, const char *format, va_list ap);
1095 #endif
1096
1097 #ifdef REPLACE_GETPASS
1098 #define getpass(prompt) getsmbpass((prompt))
1099 #endif
1100
1101 /*
1102  * Some older systems seem not to have MAXHOSTNAMELEN
1103  * defined.
1104  */
1105 #ifndef MAXHOSTNAMELEN
1106 #define MAXHOSTNAMELEN 254
1107 #endif
1108
1109 /* yuck, I'd like a better way of doing this */
1110 #define DIRP_SIZE (256 + 32)
1111
1112 /*
1113  * glibc on linux doesn't seem to have MSG_WAITALL
1114  * defined. I think the kernel has it though..
1115  */
1116
1117 #ifndef MSG_WAITALL
1118 #define MSG_WAITALL 0
1119 #endif
1120
1121 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
1122    given the socket IO pattern that Samba uses */
1123 #ifdef TCP_NODELAY
1124 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
1125 #else
1126 #define DEFAULT_SOCKET_OPTIONS ""
1127 #endif
1128
1129 /* Load header file for dynamic linking stuff */
1130
1131 #ifdef HAVE_DLFCN_H
1132 #include <dlfcn.h>
1133 #endif
1134
1135 /* dmalloc -- free heap debugger (dmalloc.org).  This should be near
1136  * the *bottom* of include files so as not to conflict. */
1137 #ifdef ENABLE_DMALLOC
1138 #  include <dmalloc.h>
1139 #endif
1140
1141
1142 /* Some POSIX definitions for those without */
1143  
1144 #ifndef S_IFDIR
1145 #define S_IFDIR         0x4000
1146 #endif
1147 #ifndef S_ISDIR
1148 #define S_ISDIR(mode)   ((mode & 0xF000) == S_IFDIR)
1149 #endif
1150 #ifndef S_IRWXU
1151 #define S_IRWXU 00700           /* read, write, execute: owner */
1152 #endif
1153 #ifndef S_IRUSR
1154 #define S_IRUSR 00400           /* read permission: owner */
1155 #endif
1156 #ifndef S_IWUSR
1157 #define S_IWUSR 00200           /* write permission: owner */
1158 #endif
1159 #ifndef S_IXUSR
1160 #define S_IXUSR 00100           /* execute permission: owner */
1161 #endif
1162 #ifndef S_IRWXG
1163 #define S_IRWXG 00070           /* read, write, execute: group */
1164 #endif
1165 #ifndef S_IRGRP
1166 #define S_IRGRP 00040           /* read permission: group */
1167 #endif
1168 #ifndef S_IWGRP
1169 #define S_IWGRP 00020           /* write permission: group */
1170 #endif
1171 #ifndef S_IXGRP
1172 #define S_IXGRP 00010           /* execute permission: group */
1173 #endif
1174 #ifndef S_IRWXO
1175 #define S_IRWXO 00007           /* read, write, execute: other */
1176 #endif
1177 #ifndef S_IROTH
1178 #define S_IROTH 00004           /* read permission: other */
1179 #endif
1180 #ifndef S_IWOTH
1181 #define S_IWOTH 00002           /* write permission: other */
1182 #endif
1183 #ifndef S_IXOTH
1184 #define S_IXOTH 00001           /* execute permission: other */
1185 #endif
1186
1187 /* For sys_adminlog(). */
1188 #ifndef LOG_EMERG
1189 #define LOG_EMERG       0       /* system is unusable */
1190 #endif
1191
1192 #ifndef LOG_ALERT
1193 #define LOG_ALERT       1       /* action must be taken immediately */
1194 #endif
1195
1196 #ifndef LOG_CRIT
1197 #define LOG_CRIT        2       /* critical conditions */
1198 #endif
1199
1200 #ifndef LOG_ERR
1201 #define LOG_ERR         3       /* error conditions */
1202 #endif
1203
1204 #ifndef LOG_WARNING
1205 #define LOG_WARNING     4       /* warning conditions */
1206 #endif
1207
1208 #ifndef LOG_NOTICE
1209 #define LOG_NOTICE      5       /* normal but significant condition */
1210 #endif
1211
1212 #ifndef LOG_INFO
1213 #define LOG_INFO        6       /* informational */
1214 #endif
1215
1216 #ifndef LOG_DEBUG
1217 #define LOG_DEBUG       7       /* debug-level messages */
1218 #endif
1219
1220 #if HAVE_KERNEL_SHARE_MODES
1221 #ifndef LOCK_MAND 
1222 #define LOCK_MAND       32      /* This is a mandatory flock */
1223 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
1224 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
1225 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
1226 #endif
1227 #endif
1228
1229 extern int DEBUGLEVEL;
1230
1231 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
1232
1233
1234 #ifdef GLIBC_HACK_FCNTL64
1235 /* this is a gross hack. 64 bit locking is completely screwed up on
1236    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
1237    "fixes" the problem with the current 2.4.0test kernels 
1238 */
1239 #define fcntl fcntl64
1240 #undef F_SETLKW 
1241 #undef F_SETLK 
1242 #define F_SETLK 13
1243 #define F_SETLKW 14
1244 #endif
1245
1246
1247 /* Needed for sys_dlopen/sys_dlsym/sys_dlclose */
1248 #ifndef RTLD_GLOBAL
1249 #define RTLD_GLOBAL 0
1250 #endif
1251
1252 #ifndef RTLD_LAZY
1253 #define RTLD_LAZY 0
1254 #endif
1255
1256 #ifndef RTLD_NOW
1257 #define RTLD_NOW 0
1258 #endif
1259
1260 /* needed for some systems without iconv. Doesn't really matter
1261    what error code we use */
1262 #ifndef EILSEQ
1263 #define EILSEQ EIO
1264 #endif
1265
1266 /* add varargs prototypes with printf checking */
1267 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
1268 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
1269 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
1270 #ifndef HAVE_SNPRINTF_DECL
1271 int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
1272 #endif
1273 #ifndef HAVE_ASPRINTF_DECL
1274 int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
1275 #endif
1276
1277 /* Fix prototype problem with non-C99 compliant snprintf implementations, esp
1278    HPUX 11.  Don't change the sense of this #if statement.  Read the comments
1279    in lib/snprint.c if you think you need to.  See also bugzilla bug 174. */
1280
1281 #if !defined(HAVE_SNPRINTF) || !defined(HAVE_C99_VSNPRINTF)
1282 #define snprintf smb_snprintf
1283 #define vsnprintf smb_vsnprintf
1284 #endif
1285
1286 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
1287
1288 int pstr_sprintf(pstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
1289 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
1290
1291 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
1292
1293 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
1294
1295 /* we used to use these fns, but now we have good replacements
1296    for snprintf and vsnprintf */
1297 #define slprintf snprintf
1298 #define vslprintf vsnprintf
1299
1300
1301 /* we need to use __va_copy() on some platforms */
1302 #ifdef HAVE_VA_COPY
1303 #define VA_COPY(dest, src) va_copy(dest, src)
1304 #else
1305 #ifdef HAVE___VA_COPY
1306 #define VA_COPY(dest, src) __va_copy(dest, src)
1307 #else
1308 #define VA_COPY(dest, src) (dest) = (src)
1309 #endif
1310 #endif
1311
1312 #ifndef HAVE_TIMEGM
1313 time_t timegm(struct tm *tm);
1314 #endif
1315
1316 /*
1317  * Veritas File System.  Often in addition to native.
1318  * Quotas different.
1319  */
1320 #if defined(HAVE_SYS_FS_VX_QUOTA_H)
1321 #define VXFS_QUOTA
1322 #endif
1323
1324 #if defined(HAVE_KRB5)
1325
1326 #ifndef HAVE_KRB5_SET_REAL_TIME
1327 krb5_error_code krb5_set_real_time(krb5_context context, int32_t seconds, int32_t microseconds);
1328 #endif
1329
1330 #ifndef HAVE_KRB5_SET_DEFAULT_TGS_KTYPES
1331 krb5_error_code krb5_set_default_tgs_ktypes(krb5_context ctx, const krb5_enctype *enc);
1332 #endif
1333
1334 #if defined(HAVE_KRB5_AUTH_CON_SETKEY) && !defined(HAVE_KRB5_AUTH_CON_SETUSERUSERKEY)
1335 krb5_error_code krb5_auth_con_setuseruserkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock *keyblock);
1336 #endif
1337
1338 #ifndef HAVE_KRB5_FREE_UNPARSED_NAME
1339 void krb5_free_unparsed_name(krb5_context ctx, char *val);
1340 #endif
1341
1342 /* Samba wrapper function for krb5 functionality. */
1343 void setup_kaddr( krb5_address *pkaddr, struct sockaddr *paddr);
1344 int create_kerberos_key_from_string(krb5_context context, krb5_principal host_princ, krb5_data *password, krb5_keyblock *key, krb5_enctype enctype);
1345 int create_kerberos_key_from_string_direct(krb5_context context, krb5_principal host_princ, krb5_data *password, krb5_keyblock *key, krb5_enctype enctype);
1346 void get_auth_data_from_tkt(DATA_BLOB *auth_data, krb5_ticket *tkt);
1347 krb5_const_principal get_principal_from_tkt(krb5_ticket *tkt);
1348 krb5_error_code krb5_locate_kdc(krb5_context ctx, const krb5_data *realm, struct sockaddr **addr_pp, int *naddrs, int get_masters);
1349 krb5_error_code get_kerberos_allowed_etypes(krb5_context context, krb5_enctype **enctypes);
1350 void free_kerberos_etypes(krb5_context context, krb5_enctype *enctypes);
1351 BOOL get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, BOOL remote);
1352 krb5_error_code smb_krb5_kt_free_entry(krb5_context context, krb5_keytab_entry *kt_entry);
1353 krb5_principal kerberos_fetch_salt_princ_for_host_princ(krb5_context context, krb5_principal host_princ, int enctype);
1354 void kerberos_set_creds_enctype(krb5_creds *pcreds, int enctype);
1355 BOOL kerberos_compatible_enctypes(krb5_context context, krb5_enctype enctype1, krb5_enctype enctype2);
1356 void kerberos_free_data_contents(krb5_context context, krb5_data *pdata);
1357 #endif /* HAVE_KRB5 */
1358
1359
1360 #ifdef HAVE_LDAP
1361
1362 /* function declarations not included in proto.h */
1363 LDAP *ldap_open_with_timeout(const char *server, int port, unsigned int to);
1364
1365 #endif  /* HAVE_LDAP */
1366
1367
1368 /* TRUE and FALSE are part of the C99 standard and gcc, but
1369    unfortunately many vendor compilers don't support them.  Use True
1370    and False instead. */
1371
1372 #ifdef TRUE
1373 #undef TRUE
1374 #endif
1375 #define TRUE __ERROR__XX__DONT_USE_TRUE
1376
1377 #ifdef FALSE
1378 #undef FALSE
1379 #endif
1380 #define FALSE __ERROR__XX__DONT_USE_FALSE
1381
1382 /* If we have blacklisted mmap() try to avoid using it accidentally by
1383    undefining the HAVE_MMAP symbol. */
1384
1385 #ifdef MMAP_BLACKLIST
1386 #undef HAVE_MMAP
1387 #endif
1388
1389 #define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
1390 #define CONST_ADD(type, ptr)          ((type) ((const void *) (ptr)))
1391
1392 #endif /* _INCLUDES_H */