r141: A number of changes to get things working on FreeBSD and reduce the breakage
[Samba.git] / source4 / include / includes.h
blob79fca5f7b497f75a559d397ce453981cf1feb83f
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>
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.
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.
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.
24 #ifndef NO_CONFIG_H /* for some tests */
25 #include "config.h"
26 #endif
28 #include "local.h"
30 #ifdef AIX
31 #define DEFAULT_PRINTING PRINT_AIX
32 #define PRINTCAP_NAME "/etc/qconfig"
33 #endif
35 #ifdef HPUX
36 #define DEFAULT_PRINTING PRINT_HPUX
37 #endif
39 #ifdef QNX
40 #define DEFAULT_PRINTING PRINT_QNX
41 #endif
43 #ifdef SUNOS4
44 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
45 #undef HAVE_TERMIOS_H
46 #endif
48 #ifndef DEFAULT_PRINTING
49 #define DEFAULT_PRINTING PRINT_BSD
50 #endif
51 #ifndef PRINTCAP_NAME
52 #define PRINTCAP_NAME "/etc/printcap"
53 #endif
55 #ifdef __GNUC__
56 /** Use gcc attribute to check printf fns. a1 is the 1-based index of
57 * the parameter containing the format, and a2 the index of the first
58 * argument. **/
59 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
60 #else
61 #define PRINTF_ATTRIBUTE(a1, a2)
62 #endif
64 #ifdef __GNUC__
65 /** gcc attribute used on function parameters so that it does not emit
66 * warnings about them being unused. **/
67 # define UNUSED(param) param __attribute__ ((unused))
68 #else
69 # define UNUSED(param) param
70 /** Feel free to add definitions for other compilers here. */
71 #endif
73 #ifdef RELIANTUNIX
75 * <unistd.h> has to be included before any other to get
76 * large file support on Reliant UNIX. Yes, it's broken :-).
78 #ifdef HAVE_UNISTD_H
79 #include <unistd.h>
80 #endif
81 #endif /* RELIANTUNIX */
83 #include <sys/types.h>
85 #ifdef TIME_WITH_SYS_TIME
86 #include <sys/time.h>
87 #include <time.h>
88 #else
89 #ifdef HAVE_SYS_TIME_H
90 #include <sys/time.h>
91 #else
92 #include <time.h>
93 #endif
94 #endif
96 #ifdef HAVE_SYS_RESOURCE_H
97 #include <sys/resource.h>
98 #endif
100 #ifdef HAVE_UNISTD_H
101 #include <unistd.h>
102 #endif
104 #include <stdio.h>
105 #include <stddef.h>
107 #ifdef HAVE_SYS_PARAM_H
108 #include <sys/param.h>
109 #endif
111 #ifdef HAVE_STDLIB_H
112 #include <stdlib.h>
113 #endif
115 #ifdef HAVE_SYS_SOCKET_H
116 #include <sys/socket.h>
117 #endif
119 #ifdef HAVE_UNIXSOCKET
120 #include <sys/un.h>
121 #endif
123 #ifdef HAVE_SYS_SYSCALL_H
124 #include <sys/syscall.h>
125 #elif HAVE_SYSCALL_H
126 #include <syscall.h>
127 #endif
129 #ifdef HAVE_STRING_H
130 #include <string.h>
131 #endif
133 #ifdef HAVE_STRINGS_H
134 #include <strings.h>
135 #endif
137 #ifdef HAVE_MEMORY_H
138 #include <memory.h>
139 #endif
141 #ifdef HAVE_MALLOC_H
142 #include <malloc.h>
143 #endif
145 #ifdef HAVE_FCNTL_H
146 #include <fcntl.h>
147 #else
148 #ifdef HAVE_SYS_FCNTL_H
149 #include <sys/fcntl.h>
150 #endif
151 #endif
153 #include <sys/stat.h>
155 #ifdef HAVE_LIMITS_H
156 #include <limits.h>
157 #endif
159 #ifdef HAVE_SYS_IOCTL_H
160 #include <sys/ioctl.h>
161 #endif
163 #ifdef HAVE_SYS_FILIO_H
164 #include <sys/filio.h>
165 #endif
167 #include <signal.h>
169 #ifdef HAVE_SYS_WAIT_H
170 #include <sys/wait.h>
171 #endif
172 #ifdef HAVE_CTYPE_H
173 #include <ctype.h>
174 #endif
175 #ifdef HAVE_GRP_H
176 #include <grp.h>
177 #endif
178 #ifdef HAVE_SYS_PRIV_H
179 #include <sys/priv.h>
180 #endif
181 #ifdef HAVE_SYS_ID_H
182 #include <sys/id.h>
183 #endif
185 #include <errno.h>
187 #ifdef HAVE_UTIME_H
188 #include <utime.h>
189 #endif
191 #ifdef HAVE_SYS_SELECT_H
192 #include <sys/select.h>
193 #endif
195 #ifdef HAVE_SYS_MODE_H
196 /* apparently AIX needs this for S_ISLNK */
197 #ifndef S_ISLNK
198 #include <sys/mode.h>
199 #endif
200 #endif
202 #ifdef HAVE_GLOB_H
203 #include <glob.h>
204 #endif
206 #include <pwd.h>
208 #ifdef HAVE_STDARG_H
209 #include <stdarg.h>
210 #else
211 #include <varargs.h>
212 #endif
214 #include <netinet/in.h>
215 #include <arpa/inet.h>
216 #include <netdb.h>
218 #ifdef HAVE_SYSLOG_H
219 #include <syslog.h>
220 #else
221 #ifdef HAVE_SYS_SYSLOG_H
222 #include <sys/syslog.h>
223 #endif
224 #endif
226 #include <sys/file.h>
228 #ifdef HAVE_NETINET_TCP_H
229 #include <netinet/tcp.h>
230 #endif
233 * The next three defines are needed to access the IPTOS_* options
234 * on some systems.
237 #ifdef HAVE_NETINET_IN_SYSTM_H
238 #include <netinet/in_systm.h>
239 #endif
241 #ifdef HAVE_NETINET_IN_IP_H
242 #include <netinet/in_ip.h>
243 #endif
245 #ifdef HAVE_NETINET_IP_H
246 #include <netinet/ip.h>
247 #endif
249 #if defined(HAVE_TERMIOS_H)
250 /* POSIX terminal handling. */
251 #include <termios.h>
252 #elif defined(HAVE_TERMIO_H)
253 /* Older SYSV terminal handling - don't use if we can avoid it. */
254 #include <termio.h>
255 #elif defined(HAVE_SYS_TERMIO_H)
256 /* Older SYSV terminal handling - don't use if we can avoid it. */
257 #include <sys/termio.h>
258 #endif
260 #if HAVE_DIRENT_H
261 # include <dirent.h>
262 # define NAMLEN(dirent) strlen((dirent)->d_name)
263 #else
264 # define dirent direct
265 # define NAMLEN(dirent) (dirent)->d_namlen
266 # if HAVE_SYS_NDIR_H
267 # include <sys/ndir.h>
268 # endif
269 # if HAVE_SYS_DIR_H
270 # include <sys/dir.h>
271 # endif
272 # if HAVE_NDIR_H
273 # include <ndir.h>
274 # endif
275 #endif
277 #ifdef HAVE_SYS_MMAN_H
278 #include <sys/mman.h>
279 #endif
281 #ifdef HAVE_NET_IF_H
282 #include <net/if.h>
283 #endif
286 #ifdef HAVE_SYS_MOUNT_H
287 #include <sys/mount.h>
288 #endif
290 #ifdef HAVE_SYS_VFS_H
291 #include <sys/vfs.h>
292 #endif
294 #ifdef HAVE_SYS_ACL_H
295 #include <sys/acl.h>
296 #endif
298 #ifdef HAVE_SYS_FS_S5PARAM_H
299 #include <sys/fs/s5param.h>
300 #endif
302 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
303 #include <sys/filsys.h>
304 #endif
306 #ifdef HAVE_SYS_STATFS_H
307 # include <sys/statfs.h>
308 #endif
310 #ifdef HAVE_DUSTAT_H
311 #include <sys/dustat.h>
312 #endif
314 #ifdef HAVE_SYS_STATVFS_H
315 #include <sys/statvfs.h>
316 #endif
318 #ifdef HAVE_SHADOW_H
319 #include <shadow.h>
320 #endif
322 #ifdef HAVE_GETPWANAM
323 #include <sys/label.h>
324 #include <sys/audit.h>
325 #include <pwdadj.h>
326 #endif
328 #ifdef HAVE_SYS_SECURITY_H
329 #include <sys/security.h>
330 #include <prot.h>
331 #define PASSWORD_LENGTH 16
332 #endif /* HAVE_SYS_SECURITY_H */
334 #ifdef HAVE_COMPAT_H
335 #include <compat.h>
336 #endif
338 #ifdef HAVE_STROPTS_H
339 #include <stropts.h>
340 #endif
342 #ifdef HAVE_SYS_CAPABILITY_H
344 #if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H)
345 #define _I386_STATFS_H
346 #define BROKEN_REDHAT_7_STATFS_WORKAROUND
347 #endif
349 #include <sys/capability.h>
351 #ifdef BROKEN_REDHAT_7_STATFS_WORKAROUND
352 #undef _I386_STATFS_H
353 #undef BROKEN_REDHAT_7_STATFS_WORKAROUND
354 #endif
356 #endif
358 #if defined(HAVE_SYS_IPC_H)
359 #include <sys/ipc.h>
360 #endif /* HAVE_SYS_IPC_H */
362 #if defined(HAVE_SYS_SHM_H)
363 #include <sys/shm.h>
364 #endif /* HAVE_SYS_SHM_H */
366 #ifdef HAVE_NATIVE_ICONV
367 #ifdef HAVE_ICONV
368 #include <iconv.h>
369 #endif
370 #ifdef HAVE_GICONV
371 #include <giconv.h>
372 #endif
373 #endif
375 #if HAVE_KRB5_H
376 #include <krb5.h>
377 #else
378 #undef HAVE_KRB5
379 #endif
381 #if HAVE_LBER_H
382 #include <lber.h>
383 #endif
385 #if HAVE_LDAP_H
386 #include <ldap.h>
387 #else
388 #undef HAVE_LDAP
389 #endif
391 #if HAVE_GSSAPI_H
392 #include <gssapi.h>
393 #endif
395 #if HAVE_GSSAPI_GSSAPI_H
396 #include <gssapi/gssapi.h>
397 #endif
399 #if HAVE_GSSAPI_GSSAPI_GENERIC_H
400 #include <gssapi/gssapi_generic.h>
401 #endif
403 #if HAVE_COM_ERR_H
404 #include <com_err.h>
405 #endif
407 /* we support ADS if we want it and have krb5 and ldap libs */
408 #if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP)
409 #define HAVE_ADS
410 #endif
413 * Define VOLATILE if needed.
416 #if defined(HAVE_VOLATILE)
417 #define VOLATILE volatile
418 #else
419 #define VOLATILE
420 #endif
423 * Define additional missing types
425 #ifndef HAVE_SIG_ATOMIC_T_TYPE
426 typedef int sig_atomic_t;
427 #endif
429 #ifndef HAVE_SOCKLEN_T_TYPE
430 typedef int socklen_t;
431 #endif
434 #ifndef uchar
435 #define uchar unsigned char
436 #endif
438 #ifdef HAVE_UNSIGNED_CHAR
439 #define schar signed char
440 #else
441 #define schar char
442 #endif
445 Samba needs type definitions for int16, int32, uint16 and uint32.
447 Normally these are signed and unsigned 16 and 32 bit integers, but
448 they actually only need to be at least 16 and 32 bits
449 respectively. Thus if your word size is 8 bytes just defining them
450 as signed and unsigned int will work.
453 #ifndef uint8
454 #define uint8 unsigned char
455 #endif
457 #if !defined(int16)
458 #if (SIZEOF_SHORT == 4)
459 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
460 #else /* SIZEOF_SHORT != 4 */
461 #define int16 short
462 #endif /* SIZEOF_SHORT != 4 */
463 #endif
466 #if !defined(uint16)
467 #if (SIZEOF_SHORT == 4)
468 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
469 #else /* SIZEOF_SHORT != 4 */
470 #define uint16 unsigned short
471 #endif /* SIZEOF_SHORT != 4 */
472 #endif
474 #if !defined(int32)
475 #if (SIZEOF_INT == 4)
476 #define int32 int
477 #elif (SIZEOF_LONG == 4)
478 #define int32 long
479 #elif (SIZEOF_SHORT == 4)
480 #define int32 short
481 #else
482 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
483 #define int32 int
484 #endif
485 #endif
488 #if !defined(uint32)
489 #if (SIZEOF_INT == 4)
490 #define uint32 unsigned int
491 #elif (SIZEOF_LONG == 4)
492 #define uint32 unsigned long
493 #elif (SIZEOF_SHORT == 4)
494 #define uint32 unsigned short
495 #else
496 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
497 #define uint32 unsigned
498 #endif
499 #endif
502 * Types for devices, inodes and offsets.
505 #ifndef SMB_DEV_T
506 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)
507 # define SMB_DEV_T dev64_t
508 # else
509 # define SMB_DEV_T dev_t
510 # endif
511 #endif
514 * Setup the correctly sized inode type.
517 #ifndef SMB_INO_T
518 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
519 # define SMB_INO_T ino64_t
520 # else
521 # define SMB_INO_T ino_t
522 # endif
523 #endif
525 #ifndef LARGE_SMB_INO_T
526 # if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
527 # define LARGE_SMB_INO_T 1
528 # endif
529 #endif
531 #ifdef LARGE_SMB_INO_T
532 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
533 #else
534 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
535 #endif
537 #ifndef SMB_OFF_T
538 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
539 # define SMB_OFF_T off64_t
540 # else
541 # define SMB_OFF_T off_t
542 # endif
543 #endif
545 /* this should really be a 64 bit type if possible */
546 #define br_off SMB_BIG_UINT
548 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
551 * Set the define that tells us if we can do 64 bit
552 * NT SMB calls.
555 #ifndef LARGE_SMB_OFF_T
556 # if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
557 # define LARGE_SMB_OFF_T 1
558 # endif
559 #endif
561 #ifdef LARGE_SMB_OFF_T
562 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
563 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
564 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF) )))
565 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
566 (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
567 #else
568 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
569 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
570 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF )))
571 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \
572 (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) )
573 #endif
576 * Type for stat structure.
579 #ifndef SMB_STRUCT_STAT
580 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
581 # define SMB_STRUCT_STAT struct stat64
582 # else
583 # define SMB_STRUCT_STAT struct stat
584 # endif
585 #endif
588 * Type for dirent structure.
591 #ifndef SMB_STRUCT_DIRENT
592 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
593 # define smb_dirent dirent64
594 # else
595 # define smb_dirent dirent
596 # endif
597 #endif
600 * Defines for 64 bit fcntl locks.
603 #ifndef SMB_STRUCT_FLOCK
604 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
605 # define SMB_STRUCT_FLOCK struct flock64
606 # else
607 # define SMB_STRUCT_FLOCK struct flock
608 # endif
609 #endif
611 #ifndef SMB_F_SETLKW
612 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
613 # define SMB_F_SETLKW F_SETLKW64
614 # else
615 # define SMB_F_SETLKW F_SETLKW
616 # endif
617 #endif
619 #ifndef SMB_F_SETLK
620 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
621 # define SMB_F_SETLK F_SETLK64
622 # else
623 # define SMB_F_SETLK F_SETLK
624 # endif
625 #endif
627 #ifndef SMB_F_GETLK
628 # if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
629 # define SMB_F_GETLK F_GETLK64
630 # else
631 # define SMB_F_GETLK F_GETLK
632 # endif
633 #endif
635 #if defined(HAVE_LONGLONG)
636 #define SMB_BIG_UINT unsigned long long
637 #define SMB_BIG_INT long long
638 #define SBVAL(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
639 #define BVAL(p, ofs) (IVAL(p,ofs) | (((SMB_BIG_UINT)IVAL(p,(ofs)+4)) << 32))
640 #else
641 #define SMB_BIG_UINT unsigned long
642 #define SMB_BIG_INT long
643 #define SBVAL(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
644 #define BVAL(p, ofs) IVAL(p,ofs)
645 #endif
647 #define SMB_BIG_UINT_BITS (sizeof(SMB_BIG_UINT)*8)
649 #ifndef MIN
650 #define MIN(a,b) ((a)<(b)?(a):(b))
651 #endif
653 #ifndef MAX
654 #define MAX(a,b) ((a)>(b)?(a):(b))
655 #endif
657 #ifndef HAVE_STRERROR
658 extern char *sys_errlist[];
659 #define strerror(i) sys_errlist[i]
660 #endif
662 #ifndef HAVE_ERRNO_DECL
663 extern int errno;
664 #endif
666 #ifdef HAVE_BROKEN_GETGROUPS
667 #define GID_T int
668 #else
669 #define GID_T gid_t
670 #endif
672 #ifndef NGROUPS_MAX
673 #define NGROUPS_MAX 32 /* Guess... */
674 #endif
676 /* Our own pstrings and fstrings */
677 #include "pstring.h"
679 /* Lists, trees, caching, database... */
680 #include "xfile.h"
681 #include "dlinklist.h"
682 #include "lib/ldb/include/ldb.h"
683 #include "lib/tdb/tdb.h"
684 #include "lib/tdb/spinlock.h"
685 #include "lib/tdb/tdbutil.h"
686 #include "talloc.h"
687 #include "nt_status.h"
688 #include "interfaces.h"
689 #include "trans2.h"
690 #include "ioctl.h"
691 #include "nterr.h"
692 #include "messages.h"
693 #include "charset.h"
694 #include "dynconfig.h"
696 #include "util_getent.h"
698 #include "version.h"
699 #include "smb.h"
700 #include "ads.h"
701 #include "nameserv.h"
702 #include "secrets.h"
704 #include "byteorder.h"
706 #include "msdfs.h"
708 #include "md5.h"
709 #include "hmacmd5.h"
711 #include "libcli/auth/ntlmssp.h"
712 #include "libcli/auth/schannel.h"
714 #include "auth/auth.h"
715 #include "passdb/passdb.h"
717 #include "module.h"
719 #include "asn_1.h"
721 #include "popt.h"
723 #include "mangle.h"
725 #include "nsswitch/winbind_client.h"
727 #include "mutex.h"
729 #include "librpc/rpc/dcerpc.h"
731 #include "rpc_server/dcerpc_server.h"
732 #include "context.h"
733 #include "ntvfs/ntvfs.h"
734 #include "cli_context.h"
735 #include "registry.h"
738 /* used in net.c */
739 struct functable {
740 const char *funcname;
741 int (*fn)(int argc, const char **argv);
744 #define malloc_p(type) (type *)malloc(sizeof(type))
745 #define malloc_array_p(type, count) (type *)realloc_array(NULL, sizeof(type), count)
746 #define realloc_p(p, type, count) (type *)realloc_array(p, sizeof(type), count)
748 #ifndef HAVE_COMPARISON_FN_T
749 typedef int (*comparison_fn_t)(const void *, const void *);
750 #endif
752 #include "lib/ldb/include/ldb_parse.h"
754 #include "nsswitch/nss.h"
756 /***** automatically generated prototypes *****/
757 #include "proto.h"
759 /* String routines */
761 #include "safe_string.h"
763 #ifdef __COMPAR_FN_T
764 #define QSORT_CAST (__compar_fn_t)
765 #endif
767 #ifndef QSORT_CAST
768 #define QSORT_CAST (int (*)(const void *, const void *))
769 #endif
771 #ifndef SIGCLD
772 #define SIGCLD SIGCHLD
773 #endif
775 #ifndef MAP_FILE
776 #define MAP_FILE 0
777 #endif
779 #if (!defined(WITH_LDAP) && !defined(WITH_TDB_SAM))
780 #define USE_SMBPASS_DB 1
781 #endif
783 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
784 #define OSF1_ENH_SEC 1
785 #endif
787 #ifndef ALLOW_CHANGE_PASSWORD
788 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
789 #define ALLOW_CHANGE_PASSWORD 1
790 #endif
791 #endif
793 /* what is the longest significant password available on your system?
794 Knowing this speeds up password searches a lot */
795 #ifndef PASSWORD_LENGTH
796 #define PASSWORD_LENGTH 8
797 #endif
799 #ifdef REPLACE_INET_NTOA
800 #define inet_ntoa rep_inet_ntoa
801 #endif
803 #ifndef HAVE_PIPE
804 #define SYNC_DNS 1
805 #endif
807 #ifndef MAXPATHLEN
808 #define MAXPATHLEN 256
809 #endif
811 #ifndef SEEK_SET
812 #define SEEK_SET 0
813 #endif
815 #ifndef INADDR_LOOPBACK
816 #define INADDR_LOOPBACK 0x7f000001
817 #endif
819 #ifndef INADDR_NONE
820 #define INADDR_NONE 0xffffffff
821 #endif
823 #ifndef HAVE_CRYPT
824 #define crypt ufc_crypt
825 #endif
827 #ifndef O_ACCMODE
828 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
829 #endif
831 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
832 #define ULTRIX_AUTH 1
833 #endif
835 #ifndef HAVE_STRDUP
836 char *strdup(const char *s);
837 #endif
839 #ifndef HAVE_MEMMOVE
840 void *memmove(void *dest,const void *src,int size);
841 #endif
843 #ifndef HAVE_INITGROUPS
844 int initgroups(char *name,gid_t id);
845 #endif
847 #ifndef HAVE_RENAME
848 int rename(const char *zfrom, const char *zto);
849 #endif
851 #ifndef HAVE_MKTIME
852 time_t mktime(struct tm *t);
853 #endif
855 #ifndef HAVE_STRLCPY
856 size_t strlcpy(char *d, const char *s, size_t bufsize);
857 #endif
859 #ifndef HAVE_STRLCAT
860 size_t strlcat(char *d, const char *s, size_t bufsize);
861 #endif
863 #ifndef HAVE_FTRUNCATE
864 int ftruncate(int f,long l);
865 #endif
867 #ifndef HAVE_STRNDUP
868 char *strndup(const char *s, size_t n);
869 #endif
871 #ifndef HAVE_STRNLEN
872 size_t strnlen(const char *s, size_t n);
873 #endif
875 #ifndef HAVE_STRTOUL
876 unsigned long strtoul(const char *nptr, char **endptr, int base);
877 #endif
879 #ifndef HAVE_SETENV
880 int setenv(const char *name, const char *value, int overwrite);
881 #endif
883 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
884 /* stupid glibc */
885 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
886 #endif
887 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
888 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
889 #endif
890 #ifndef HAVE_VASPRINTF_DECL
891 int vasprintf(char **ptr, const char *format, va_list ap);
892 #endif
894 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
895 #define bzero(a,b) memset((a),'\0',(b))
896 #endif
898 #ifdef REPLACE_GETPASS
899 #define getpass(prompt) getsmbpass((prompt))
900 #endif
903 * Some older systems seem not to have MAXHOSTNAMELEN
904 * defined.
906 #ifndef MAXHOSTNAMELEN
907 #define MAXHOSTNAMELEN 254
908 #endif
910 /* yuck, I'd like a better way of doing this */
911 #define DIRP_SIZE (256 + 32)
914 * glibc on linux doesn't seem to have MSG_WAITALL
915 * defined. I think the kernel has it though..
918 #ifndef MSG_WAITALL
919 #define MSG_WAITALL 0
920 #endif
922 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
923 given the socket IO pattern that Samba uses */
924 #ifdef TCP_NODELAY
925 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
926 #else
927 #define DEFAULT_SOCKET_OPTIONS ""
928 #endif
930 /* Load header file for dynamic linking stuff */
932 #ifdef HAVE_DLFCN_H
933 #include <dlfcn.h>
934 #endif
936 /* dmalloc -- free heap debugger (dmalloc.org). This should be near
937 * the *bottom* of include files so as not to conflict. */
938 #ifdef ENABLE_DMALLOC
939 # include <dmalloc.h>
940 #endif
943 /* Some POSIX definitions for those without */
945 #ifndef S_IFDIR
946 #define S_IFDIR 0x4000
947 #endif
948 #ifndef S_ISDIR
949 #define S_ISDIR(mode) ((mode & 0xF000) == S_IFDIR)
950 #endif
951 #ifndef S_IRWXU
952 #define S_IRWXU 00700 /* read, write, execute: owner */
953 #endif
954 #ifndef S_IRUSR
955 #define S_IRUSR 00400 /* read permission: owner */
956 #endif
957 #ifndef S_IWUSR
958 #define S_IWUSR 00200 /* write permission: owner */
959 #endif
960 #ifndef S_IXUSR
961 #define S_IXUSR 00100 /* execute permission: owner */
962 #endif
963 #ifndef S_IRWXG
964 #define S_IRWXG 00070 /* read, write, execute: group */
965 #endif
966 #ifndef S_IRGRP
967 #define S_IRGRP 00040 /* read permission: group */
968 #endif
969 #ifndef S_IWGRP
970 #define S_IWGRP 00020 /* write permission: group */
971 #endif
972 #ifndef S_IXGRP
973 #define S_IXGRP 00010 /* execute permission: group */
974 #endif
975 #ifndef S_IRWXO
976 #define S_IRWXO 00007 /* read, write, execute: other */
977 #endif
978 #ifndef S_IROTH
979 #define S_IROTH 00004 /* read permission: other */
980 #endif
981 #ifndef S_IWOTH
982 #define S_IWOTH 00002 /* write permission: other */
983 #endif
984 #ifndef S_IXOTH
985 #define S_IXOTH 00001 /* execute permission: other */
986 #endif
988 /* For sys_adminlog(). */
989 #ifndef LOG_EMERG
990 #define LOG_EMERG 0 /* system is unusable */
991 #endif
993 #ifndef LOG_ALERT
994 #define LOG_ALERT 1 /* action must be taken immediately */
995 #endif
997 #ifndef LOG_CRIT
998 #define LOG_CRIT 2 /* critical conditions */
999 #endif
1001 #ifndef LOG_ERR
1002 #define LOG_ERR 3 /* error conditions */
1003 #endif
1005 #ifndef LOG_WARNING
1006 #define LOG_WARNING 4 /* warning conditions */
1007 #endif
1009 #ifndef LOG_NOTICE
1010 #define LOG_NOTICE 5 /* normal but significant condition */
1011 #endif
1013 #ifndef LOG_INFO
1014 #define LOG_INFO 6 /* informational */
1015 #endif
1017 #ifndef LOG_DEBUG
1018 #define LOG_DEBUG 7 /* debug-level messages */
1019 #endif
1021 /* NetBSD doesn't have these */
1022 #ifndef SHM_R
1023 #define SHM_R 0400
1024 #endif
1026 #ifndef SHM_W
1027 #define SHM_W 0200
1028 #endif
1030 #if HAVE_KERNEL_SHARE_MODES
1031 #ifndef LOCK_MAND
1032 #define LOCK_MAND 32 /* This is a mandatory flock */
1033 #define LOCK_READ 64 /* ... Which allows concurrent read operations */
1034 #define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
1035 #define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
1036 #endif
1037 #endif
1039 extern int DEBUGLEVEL;
1041 #define MAX_SEC_CTX_DEPTH 8 /* Maximum number of security contexts */
1044 #ifdef GLIBC_HACK_FCNTL64
1045 /* this is a gross hack. 64 bit locking is completely screwed up on
1046 i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
1047 "fixes" the problem with the current 2.4.0test kernels
1049 #define fcntl fcntl64
1050 #undef F_SETLKW
1051 #undef F_SETLK
1052 #define F_SETLK 13
1053 #define F_SETLKW 14
1054 #endif
1057 /* Needed for sys_dlopen/sys_dlsym/sys_dlclose */
1058 #ifndef RTLD_GLOBAL
1059 #define RTLD_GLOBAL 0
1060 #endif
1062 #ifndef RTLD_LAZY
1063 #define RTLD_LAZY 0
1064 #endif
1066 #ifndef RTLD_NOW
1067 #define RTLD_NOW 0
1068 #endif
1070 /* needed for some systems without iconv. Doesn't really matter
1071 what error code we use */
1072 #ifndef EILSEQ
1073 #define EILSEQ EIO
1074 #endif
1076 /* add varargs prototypes with printf checking */
1077 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
1078 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
1079 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
1080 #ifndef HAVE_SNPRINTF_DECL
1081 int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
1082 #endif
1083 #ifndef HAVE_ASPRINTF_DECL
1084 int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
1085 #endif
1087 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
1089 int pstr_sprintf(pstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
1090 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
1092 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
1094 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
1096 /* we used to use these fns, but now we have good replacements
1097 for snprintf and vsnprintf */
1098 #define slprintf snprintf
1099 #define vslprintf vsnprintf
1102 /* we need to use __va_copy() on some platforms */
1103 #ifdef HAVE_VA_COPY
1104 #define VA_COPY(dest, src) __va_copy(dest, src)
1105 #else
1106 #define VA_COPY(dest, src) (dest) = (src)
1107 #endif
1109 #ifndef HAVE_TIMEGM
1110 time_t timegm(struct tm *tm);
1111 #endif
1113 #if defined(VALGRIND)
1114 #define strlen(x) valgrind_strlen(x)
1115 #endif
1118 * Veritas File System. Often in addition to native.
1119 * Quotas different.
1121 #if defined(HAVE_SYS_FS_VX_QUOTA_H)
1122 #define VXFS_QUOTA
1123 #endif
1125 #endif /* _INCLUDES_H */