fixed asprintf declaration
[samba.git] / source3 / include / includes.h
1 #ifndef _INCLUDES_H
2 #define _INCLUDES_H
3 /* 
4    Unix SMB/Netbios implementation.
5    Version 1.9.
6    Machine customisation and include handling
7    Copyright (C) Andrew Tridgell 1994-1998
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 #ifdef LINUX
49 #ifndef DEFAULT_PRINTING
50 #define DEFAULT_PRINTING PRINT_BSD
51 #endif
52 #ifndef PRINTCAP_NAME
53 #define PRINTCAP_NAME "/etc/printcap"
54 #endif
55 #endif
56
57 /* use gcc attribute to check printf fns */
58 #ifdef __GNUC__
59 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
60 #else
61 #define PRINTF_ATTRIBUTE(a1, a2)
62 #endif
63
64 #ifdef RELIANTUNIX
65 /*
66  * <unistd.h> has to be included before any other to get
67  * large file support on Reliant UNIX. Yes, it's broken :-).
68  */
69 #ifdef HAVE_UNISTD_H
70 #include <unistd.h>
71 #endif
72 #endif /* RELIANTUNIX */
73
74 #include <sys/types.h>
75
76 #ifdef TIME_WITH_SYS_TIME
77 #include <sys/time.h>
78 #include <time.h>
79 #else
80 #ifdef HAVE_SYS_TIME_H
81 #include <sys/time.h>
82 #else
83 #include <time.h>
84 #endif
85 #endif
86
87 #ifdef HAVE_SYS_RESOURCE_H
88 #include <sys/resource.h>
89 #endif
90
91 #ifdef HAVE_UNISTD_H
92 #include <unistd.h>
93 #endif
94
95 #include <stdio.h>
96 #include <stddef.h>
97
98 #ifdef HAVE_SYS_PARAM_H
99 #include <sys/param.h>
100 #endif
101
102 #ifdef HAVE_STDLIB_H
103 #include <stdlib.h>
104 #endif
105
106 #ifdef HAVE_SYS_SOCKET_H
107 #include <sys/socket.h>
108 #endif
109
110 #ifdef HAVE_SYS_UN_H
111 #include <sys/un.h>
112 #endif
113
114 #ifdef HAVE_SYS_SYSCALL_H
115 #include <sys/syscall.h>
116 #elif HAVE_SYSCALL_H
117 #include <syscall.h>
118 #endif
119
120 #ifdef HAVE_STRING_H
121 #include <string.h>
122 #endif
123
124 #ifdef HAVE_STRINGS_H
125 #include <strings.h>
126 #endif
127
128 #ifdef HAVE_MEMORY_H
129 #include <memory.h>
130 #endif
131
132 #ifdef HAVE_MALLOC_H
133 #include <malloc.h>
134 #endif
135
136 #ifdef HAVE_FCNTL_H
137 #include <fcntl.h>
138 #else
139 #ifdef HAVE_SYS_FCNTL_H
140 #include <sys/fcntl.h>
141 #endif
142 #endif
143
144 #include <sys/stat.h>
145
146 #ifdef HAVE_LIMITS_H
147 #include <limits.h>
148 #endif
149
150 #ifdef HAVE_SYS_IOCTL_H
151 #include <sys/ioctl.h>
152 #endif
153
154 #ifdef HAVE_SYS_FILIO_H
155 #include <sys/filio.h>
156 #endif
157
158 #include <signal.h>
159
160 #ifdef HAVE_SYS_WAIT_H
161 #include <sys/wait.h>
162 #endif
163 #ifdef HAVE_CTYPE_H
164 #include <ctype.h>
165 #endif
166 #ifdef HAVE_GRP_H
167 #include <grp.h>
168 #endif
169 #ifdef HAVE_SYS_PRIV_H
170 #include <sys/priv.h>
171 #endif
172 #ifdef HAVE_SYS_ID_H
173 #include <sys/id.h>
174 #endif
175
176 #include <errno.h>
177
178 #ifdef HAVE_UTIME_H
179 #include <utime.h>
180 #endif
181
182 #ifdef HAVE_SYS_SELECT_H
183 #include <sys/select.h>
184 #endif
185
186 #ifdef HAVE_SYS_MODE_H
187 /* apparently AIX needs this for S_ISLNK */
188 #ifndef S_ISLNK
189 #include <sys/mode.h>
190 #endif
191 #endif
192
193 #ifdef HAVE_GLOB_H
194 #include <glob.h>
195 #endif
196
197 #include <pwd.h>
198
199 #ifdef HAVE_STDARG_H
200 #include <stdarg.h>
201 #else
202 #include <varargs.h>
203 #endif
204
205 #include <netinet/in.h>
206 #include <arpa/inet.h>
207 #include <netdb.h>
208 #include <syslog.h>
209 #include <sys/file.h>
210
211 #ifdef HAVE_NETINET_TCP_H
212 #include <netinet/tcp.h>
213 #endif
214
215 /*
216  * The next three defines are needed to access the IPTOS_* options
217  * on some systems.
218  */
219
220 #ifdef HAVE_NETINET_IN_SYSTM_H
221 #include <netinet/in_systm.h>
222 #endif
223
224 #ifdef HAVE_NETINET_IN_IP_H
225 #include <netinet/in_ip.h>
226 #endif
227
228 #ifdef HAVE_NETINET_IP_H
229 #include <netinet/ip.h>
230 #endif
231
232 #if defined(HAVE_TERMIOS_H)
233 /* POSIX terminal handling. */
234 #include <termios.h>
235 #elif defined(HAVE_TERMIO_H)
236 /* Older SYSV terminal handling - don't use if we can avoid it. */
237 #include <termio.h>
238 #elif defined(HAVE_SYS_TERMIO_H)
239 /* Older SYSV terminal handling - don't use if we can avoid it. */
240 #include <sys/termio.h>
241 #endif
242
243 #if HAVE_DIRENT_H
244 # include <dirent.h>
245 # define NAMLEN(dirent) strlen((dirent)->d_name)
246 #else
247 # define dirent direct
248 # define NAMLEN(dirent) (dirent)->d_namlen
249 # if HAVE_SYS_NDIR_H
250 #  include <sys/ndir.h>
251 # endif
252 # if HAVE_SYS_DIR_H
253 #  include <sys/dir.h>
254 # endif
255 # if HAVE_NDIR_H
256 #  include <ndir.h>
257 # endif
258 #endif
259
260 #ifdef HAVE_SYS_MMAN_H
261 #include <sys/mman.h>
262 #endif
263
264 #ifdef HAVE_NET_IF_H
265 #include <net/if.h>
266 #endif
267
268
269 #ifdef HAVE_SYS_MOUNT_H
270 #include <sys/mount.h>
271 #endif
272
273 #ifdef HAVE_SYS_VFS_H
274 #include <sys/vfs.h>
275 #endif
276
277 #ifdef HAVE_SYS_ACL_H
278 #include <sys/acl.h>
279 #endif
280
281 #ifdef HAVE_XFS_ACLS
282 #include <acl/acl.h>
283 #endif
284
285 #ifdef HAVE_SYS_FS_S5PARAM_H 
286 #include <sys/fs/s5param.h>
287 #endif
288
289 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
290 #include <sys/filsys.h> 
291 #endif
292
293 #ifdef HAVE_SYS_STATFS_H
294 # include <sys/statfs.h>
295 #endif
296
297 #ifdef HAVE_DUSTAT_H              
298 #include <sys/dustat.h>
299 #endif
300
301 #ifdef HAVE_SYS_STATVFS_H          
302 #include <sys/statvfs.h>
303 #endif
304
305 #ifdef HAVE_SHADOW_H
306 #include <shadow.h>
307 #endif
308
309 #ifdef HAVE_GETPWANAM
310 #include <sys/label.h>
311 #include <sys/audit.h>
312 #include <pwdadj.h>
313 #endif
314
315 #ifdef HAVE_SYS_SECURITY_H
316 #include <sys/security.h>
317 #include <prot.h>
318 #define PASSWORD_LENGTH 16
319 #endif  /* HAVE_SYS_SECURITY_H */
320
321 #ifdef HAVE_COMPAT_H
322 #include <compat.h>
323 #endif
324
325 #ifdef HAVE_STROPTS_H
326 #include <stropts.h>
327 #endif
328
329 #ifdef HAVE_POLL_H
330 #include <poll.h>
331 #endif
332
333 #ifdef HAVE_SYS_CAPABILITY_H
334 #include <sys/capability.h>
335 #endif
336
337 #if defined(HAVE_RPC_RPC_H)
338 /*
339  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
340  */
341 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
342 #undef AUTH_ERROR
343 #endif
344 #include <rpc/rpc.h>
345 #endif
346
347 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
348 #define HAVE_NETGROUP 1
349 #endif
350
351 #if defined (HAVE_NETGROUP)
352 #if defined(HAVE_RPCSVC_YP_PROT_H)
353 #include <rpcsvc/yp_prot.h>
354 #endif
355 #if defined(HAVE_RPCSVC_YPCLNT_H)
356 #include <rpcsvc/ypclnt.h>
357 #endif
358 #endif /* HAVE_NETGROUP */
359
360 #if defined(HAVE_SYS_IPC_H)
361 #include <sys/ipc.h>
362 #endif /* HAVE_SYS_IPC_H */
363
364 #if defined(HAVE_SYS_SHM_H)
365 #include <sys/shm.h>
366 #endif /* HAVE_SYS_SHM_H */
367
368 /*
369  * Define VOLATILE if needed.
370  */
371
372 #if defined(HAVE_VOLATILE)
373 #define VOLATILE volatile
374 #else
375 #define VOLATILE
376 #endif
377
378 /*
379  * Define SIG_ATOMIC_T if needed.
380  */
381
382 #if defined(HAVE_SIG_ATOMIC_T_TYPE)
383 #define SIG_ATOMIC_T sig_atomic_t
384 #else
385 #define SIG_ATOMIC_T int
386 #endif
387
388 #ifndef uchar
389 #define uchar unsigned char
390 #endif
391
392 #ifdef HAVE_UNSIGNED_CHAR
393 #define schar signed char
394 #else
395 #define schar char
396 #endif
397
398 /*
399    Samba needs type definitions for int16, int32, uint16 and uint32.
400
401    Normally these are signed and unsigned 16 and 32 bit integers, but
402    they actually only need to be at least 16 and 32 bits
403    respectively. Thus if your word size is 8 bytes just defining them
404    as signed and unsigned int will work.
405 */
406
407 #ifndef uint8
408 #define uint8 unsigned char
409 #endif
410
411 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
412 #if (SIZEOF_SHORT == 4)
413 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
414 #else /* SIZEOF_SHORT != 4 */
415 #define int16 short
416 #endif /* SIZEOF_SHORT != 4 */
417 #endif
418
419 /*
420  * Note we duplicate the size tests in the unsigned 
421  * case as int16 may be a typedef from rpc/rpc.h
422  */
423
424 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
425 #if (SIZEOF_SHORT == 4)
426 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
427 #else /* SIZEOF_SHORT != 4 */
428 #define uint16 unsigned short
429 #endif /* SIZEOF_SHORT != 4 */
430 #endif
431
432 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
433 #if (SIZEOF_INT == 4)
434 #define int32 int
435 #elif (SIZEOF_LONG == 4)
436 #define int32 long
437 #elif (SIZEOF_SHORT == 4)
438 #define int32 short
439 #endif
440 #endif
441
442 /*
443  * Note we duplicate the size tests in the unsigned 
444  * case as int32 may be a typedef from rpc/rpc.h
445  */
446
447 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
448 #if (SIZEOF_INT == 4)
449 #define uint32 unsigned int
450 #elif (SIZEOF_LONG == 4)
451 #define uint32 unsigned long
452 #elif (SIZEOF_SHORT == 4)
453 #define uint32 unsigned short
454 #endif
455 #endif
456
457 /*
458  * Types for devices, inodes and offsets.
459  */
460
461 #ifndef SMB_DEV_T
462 #define SMB_DEV_T dev_t
463 #endif
464
465 /*
466  * Setup the correctly sized inode type.
467  */
468
469 #ifndef SMB_INO_T
470 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
471 #    define SMB_INO_T ino64_t
472 #  else
473 #    define SMB_INO_T ino_t
474 #  endif
475 #endif
476
477 #ifndef LARGE_SMB_INO_T
478 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
479 #    define LARGE_SMB_INO_T 1
480 #  endif
481 #endif
482
483 #ifdef LARGE_SMB_INO_T
484 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
485 #else 
486 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
487 #endif
488
489 #ifndef SMB_OFF_T
490 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
491 #    define SMB_OFF_T off64_t
492 #  else
493 #    define SMB_OFF_T off_t
494 #  endif
495 #endif
496
497 /* this should really be a 64 bit type if possible */
498 #define br_off SMB_BIG_UINT
499
500 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
501
502 /*
503  * Set the define that tells us if we can do 64 bit
504  * NT SMB calls.
505  */
506
507 #ifndef LARGE_SMB_OFF_T
508 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
509 #    define LARGE_SMB_OFF_T 1
510 #  endif
511 #endif
512
513 #ifdef LARGE_SMB_OFF_T
514 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
515 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
516 #else 
517 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
518 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
519 #endif
520
521 /*
522  * Type for stat structure.
523  */
524
525 #ifndef SMB_STRUCT_STAT
526 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
527 #    define SMB_STRUCT_STAT struct stat64
528 #  else
529 #    define SMB_STRUCT_STAT struct stat
530 #  endif
531 #endif
532
533 /*
534  * Type for dirent structure.
535  */
536
537 #ifndef SMB_STRUCT_DIRENT
538 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
539 #    define SMB_STRUCT_DIRENT struct dirent64
540 #  else
541 #    define SMB_STRUCT_DIRENT struct dirent
542 #  endif
543 #endif
544
545 /*
546  * Defines for 64 bit fcntl locks.
547  */
548
549 #ifndef SMB_STRUCT_FLOCK
550 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
551 #    define SMB_STRUCT_FLOCK struct flock64
552 #  else
553 #    define SMB_STRUCT_FLOCK struct flock
554 #  endif
555 #endif
556
557 #ifndef SMB_F_SETLKW
558 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
559 #    define SMB_F_SETLKW F_SETLKW64
560 #  else
561 #    define SMB_F_SETLKW F_SETLKW
562 #  endif
563 #endif
564
565 #ifndef SMB_F_SETLK
566 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
567 #    define SMB_F_SETLK F_SETLK64
568 #  else
569 #    define SMB_F_SETLK F_SETLK
570 #  endif
571 #endif
572
573 #ifndef SMB_F_GETLK
574 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
575 #    define SMB_F_GETLK F_GETLK64
576 #  else
577 #    define SMB_F_GETLK F_GETLK
578 #  endif
579 #endif
580
581 #if defined(HAVE_LONGLONG)
582 #define SMB_BIG_UINT unsigned long long
583 #define SMB_BIG_INT long long
584 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
585 #else
586 #define SMB_BIG_UINT unsigned long
587 #define SMB_BIG_INT long
588 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
589 #endif
590
591 #define SMB_BIG_UINT_BITS (sizeof(SMB_BIG_UINT)*8)
592
593 #ifndef MIN
594 #define MIN(a,b) ((a)<(b)?(a):(b))
595 #endif
596
597 #ifndef MAX
598 #define MAX(a,b) ((a)>(b)?(a):(b))
599 #endif
600
601 #ifndef HAVE_STRERROR
602 extern char *sys_errlist[];
603 #define strerror(i) sys_errlist[i]
604 #endif
605
606 #ifndef HAVE_STRCHR
607 # define strchr                 index
608 # define strrchr                rindex
609 #endif
610
611 #ifndef HAVE_ERRNO_DECL
612 extern int errno;
613 #endif
614
615 #ifdef HAVE_BROKEN_GETGROUPS
616 #define GID_T int
617 #else
618 #define GID_T gid_t
619 #endif
620
621 #ifndef NGROUPS_MAX
622 #define NGROUPS_MAX 32 /* Guess... */
623 #endif
624
625 /* Lists, trees, caching, database... */
626 #include "ubi_sLinkList.h"
627 #include "ubi_dLinkList.h"
628 #include "dlinklist.h"
629 #include "../tdb/tdb.h"
630 #include "../tdb/spinlock.h"
631 #include "talloc.h"
632 #include "interfaces.h"
633 #include "hash.h"
634 #include "trans2.h"
635 #include "nterr.h"
636 #include "secrets.h"
637 #include "messages.h"
638 #include "util_list.h"
639
640 #include "util_getent.h"
641
642 #ifndef UBI_BINTREE_H
643 #include "ubi_Cache.h"
644 #endif /* UBI_BINTREE_H */
645
646 #include "debugparse.h"
647
648 #include "version.h"
649 #include "smb.h"
650 #include "smbw.h"
651 #include "nameserv.h"
652
653 #include "byteorder.h"
654
655 #include "kanji.h"
656 #include "charset.h"
657
658 #include "ntdomain.h"
659
660 #include "msdfs.h"
661
662 #include "profile.h"
663
664 #include "mapping.h"
665
666 #ifndef MAXCODEPAGELINES
667 #define MAXCODEPAGELINES 256
668 #endif
669
670 /*
671  * Type for wide character dirent structure.
672  * Only d_name is defined by POSIX.
673  */
674
675 typedef struct smb_wdirent {
676         wpstring        d_name;
677 } SMB_STRUCT_WDIRENT;
678
679 /*
680  * Type for wide character passwd structure.
681  */
682
683 typedef struct smb_wpasswd {
684         wfstring       pw_name;
685         char           *pw_passwd;
686         uid_t          pw_uid;
687         gid_t          pw_gid;
688         wpstring       pw_gecos;
689         wpstring       pw_dir;
690         wpstring       pw_shell;
691 } SMB_STRUCT_WPASSWD;
692
693 /* Defines for wisXXX functions. */
694 #define UNI_UPPER    0x1
695 #define UNI_LOWER    0x2
696 #define UNI_DIGIT    0x4
697 #define UNI_XDIGIT   0x8
698 #define UNI_SPACE    0x10
699
700 #ifdef HAVE_NSS_H
701 #include <nss.h>
702 #else
703
704 /* Minimal needed to compile.. */
705
706 enum nss_status {
707         NSS_STATUS_SUCCESS,
708         NSS_STATUS_NOTFOUND,
709         NSS_STATUS_UNAVAIL
710 };
711
712 #endif
713
714 /***** automatically generated prototypes *****/
715 #include "proto.h"
716
717 /* String routines */
718
719 #include "safe_string.h"
720
721 #ifdef __COMPAR_FN_T
722 #define QSORT_CAST (__compar_fn_t)
723 #endif
724
725 #ifndef QSORT_CAST
726 #define QSORT_CAST (int (*)(const void *, const void *))
727 #endif
728
729 /* this guess needs to be improved (tridge) */
730 #if (defined(STAT_STATVFS) || defined(STAT_STATVFS64)) && !defined(SYSV)
731 #define SYSV 1
732 #endif
733
734 #ifndef DEFAULT_PRINTING
735 #ifdef HAVE_LIBCUPS
736 #define DEFAULT_PRINTING PRINT_CUPS
737 #define PRINTCAP_NAME "cups"
738 #elif defined(SYSV)
739 #define DEFAULT_PRINTING PRINT_SYSV
740 #define PRINTCAP_NAME "lpstat"
741 #else
742 #define DEFAULT_PRINTING PRINT_BSD
743 #define PRINTCAP_NAME "/etc/printcap"
744 #endif
745 #endif
746
747 #ifndef PRINTCAP_NAME
748 #define PRINTCAP_NAME "/etc/printcap"
749 #endif
750
751 #ifndef SIGCLD
752 #define SIGCLD SIGCHLD
753 #endif
754
755 #ifndef MAP_FILE
756 #define MAP_FILE 0
757 #endif
758
759 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP) && !defined(WITH_TDBPWD))
760 #define USE_SMBPASS_DB 1
761 #endif
762
763 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
764 #define OSF1_ENH_SEC 1
765 #endif
766
767 #ifndef ALLOW_CHANGE_PASSWORD
768 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
769 #define ALLOW_CHANGE_PASSWORD 1
770 #endif
771 #endif
772
773 /* what is the longest significant password available on your system? 
774  Knowing this speeds up password searches a lot */
775 #ifndef PASSWORD_LENGTH
776 #define PASSWORD_LENGTH 8
777 #endif
778
779 #ifdef REPLACE_INET_NTOA
780 #define inet_ntoa rep_inet_ntoa
781 #endif
782
783 #ifndef HAVE_PIPE
784 #define SYNC_DNS 1
785 #endif
786
787 #ifndef MAXPATHLEN
788 #define MAXPATHLEN 256
789 #endif
790
791 #ifndef SEEK_SET
792 #define SEEK_SET 0
793 #endif
794
795 #ifndef INADDR_LOOPBACK
796 #define INADDR_LOOPBACK 0x7f000001
797 #endif
798
799 #ifndef INADDR_NONE
800 #define INADDR_NONE 0xffffffff
801 #endif
802
803 #ifndef HAVE_CRYPT
804 #define crypt ufc_crypt
805 #endif
806
807 #ifndef O_ACCMODE
808 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
809 #endif
810
811 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
812 #define ULTRIX_AUTH 1
813 #endif
814
815 #ifdef HAVE_LIBREADLINE
816 #  ifdef HAVE_READLINE_READLINE_H
817 #    include <readline/readline.h>
818 #    ifdef HAVE_READLINE_HISTORY_H
819 #      include <readline/history.h>
820 #    endif
821 #  else
822 #    ifdef HAVE_READLINE_H
823 #      include <readline.h>
824 #      ifdef HAVE_HISTORY_H
825 #        include <history.h>
826 #      endif
827 #    else
828 #      undef HAVE_LIBREADLINE
829 #    endif
830 #  endif
831 #endif
832
833 #ifndef HAVE_STRDUP
834 char *strdup(const char *s);
835 #endif
836
837 #ifndef HAVE_MEMMOVE
838 void *memmove(void *dest,const void *src,int size);
839 #endif
840
841 #ifndef HAVE_INITGROUPS
842 int initgroups(char *name,gid_t id);
843 #endif
844
845 #ifndef HAVE_RENAME
846 int rename(const char *zfrom, const char *zto);
847 #endif
848
849 #ifndef HAVE_MKTIME
850 time_t mktime(struct tm *t);
851 #endif
852
853 #ifndef HAVE_FTRUNCATE
854 int ftruncate(int f,long l);
855 #endif
856
857 #ifndef HAVE_STRTOUL
858 unsigned long strtoul(const char *nptr, char **endptr, int base);
859 #endif
860
861 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
862 /* stupid glibc */
863 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
864 #endif
865 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
866 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
867 #endif
868 #ifndef HAVE_VASPRINTF_DECL
869 int vasprintf(char **ptr, const char *format, va_list ap);
870 #endif
871
872 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
873 #define bzero(a,b) memset((a),'\0',(b))
874 #endif
875
876 #ifdef REPLACE_GETPASS
877 #define getpass(prompt) getsmbpass((prompt))
878 #endif
879
880 /*
881  * Some older systems seem not to have MAXHOSTNAMELEN
882  * defined.
883  */
884 #ifndef MAXHOSTNAMELEN
885 #define MAXHOSTNAMELEN 254
886 #endif
887
888 /* yuck, I'd like a better way of doing this */
889 #define DIRP_SIZE (256 + 32)
890
891 /*
892  * glibc on linux doesn't seem to have MSG_WAITALL
893  * defined. I think the kernel has it though..
894  */
895
896 #ifndef MSG_WAITALL
897 #define MSG_WAITALL 0
898 #endif
899
900 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
901    given the socket IO pattern that Samba uses */
902 #ifdef TCP_NODELAY
903 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
904 #else
905 #define DEFAULT_SOCKET_OPTIONS ""
906 #endif
907
908 /* Load header file for libdl stuff */
909
910 #ifdef HAVE_LIBDL
911 #include <dlfcn.h>
912 #endif
913
914 /* Some POSIX definitions for those without */
915  
916 #ifndef S_IFDIR
917 #define S_IFDIR         0x4000
918 #endif
919 #ifndef S_ISDIR
920 #define S_ISDIR(mode)   ((mode & 0xF000) == S_IFDIR)
921 #endif
922 #ifndef S_IRWXU
923 #define S_IRWXU 00700           /* read, write, execute: owner */
924 #endif
925 #ifndef S_IRUSR
926 #define S_IRUSR 00400           /* read permission: owner */
927 #endif
928 #ifndef S_IWUSR
929 #define S_IWUSR 00200           /* write permission: owner */
930 #endif
931 #ifndef S_IXUSR
932 #define S_IXUSR 00100           /* execute permission: owner */
933 #endif
934 #ifndef S_IRWXG
935 #define S_IRWXG 00070           /* read, write, execute: group */
936 #endif
937 #ifndef S_IRGRP
938 #define S_IRGRP 00040           /* read permission: group */
939 #endif
940 #ifndef S_IWGRP
941 #define S_IWGRP 00020           /* write permission: group */
942 #endif
943 #ifndef S_IXGRP
944 #define S_IXGRP 00010           /* execute permission: group */
945 #endif
946 #ifndef S_IRWXO
947 #define S_IRWXO 00007           /* read, write, execute: other */
948 #endif
949 #ifndef S_IROTH
950 #define S_IROTH 00004           /* read permission: other */
951 #endif
952 #ifndef S_IWOTH
953 #define S_IWOTH 00002           /* write permission: other */
954 #endif
955 #ifndef S_IXOTH
956 #define S_IXOTH 00001           /* execute permission: other */
957 #endif
958
959 /* NetBSD doesn't have these */
960 #ifndef SHM_R
961 #define SHM_R 0400
962 #endif
963
964 #ifndef SHM_W
965 #define SHM_W 0200
966 #endif
967
968 #if HAVE_KERNEL_SHARE_MODES
969 #ifndef LOCK_MAND 
970 #define LOCK_MAND       32      /* This is a mandatory flock */
971 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
972 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
973 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
974 #endif
975 #endif
976
977 extern int DEBUGLEVEL;
978
979 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
980
981
982 #ifdef GLIBC_HACK_FCNTL64
983 /* this is a gross hack. 64 bit locking is completely screwed up on
984    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
985    "fixes" the problem with the current 2.4.0test kernels 
986 */
987 #define fcntl fcntl64
988 #undef F_SETLKW 
989 #undef F_SETLK 
990 #define F_SETLK 13
991 #define F_SETLKW 14
992 #endif
993
994 /* Needed for sys_dlopen/sys_dlsym/sys_dlclose */
995 #ifndef RTLD_GLOBAL
996 #define RTLD_GLOBAL 0
997 #endif
998
999 #ifndef RTLD_LAZY
1000 #define RTLD_LAZY 0
1001 #endif
1002
1003 #ifndef RTLD_NOW
1004 #define RTLD_NOW 0
1005 #endif
1006
1007 /* add varargs prototypes with printf checking */
1008 int fdprintf(int , char *, ...) PRINTF_ATTRIBUTE(2,3);
1009 #ifndef HAVE_SNPRINTF_DECL
1010 int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
1011 #endif
1012 #ifndef HAVE_ASPRINTF_DECL
1013 int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
1014 #endif
1015
1016 /* we used to use these fns, but now we have good replacements
1017    for snprintf and vsnprintf */
1018 #define slprintf snprintf
1019 #define vslprintf vsnprintf
1020
1021 #endif /* _INCLUDES_H */
1022