Added hash-based stat cache code from Ying Chen.
[kai/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 #define DEFAULT_PRINTING PRINT_BSD
50 #define PRINTCAP_NAME "/etc/printcap"
51 #endif
52
53 #ifdef RELIANTUNIX
54 /*
55  * <unistd.h> has to be included before any other to get
56  * large file support on Reliant UNIX
57  */
58 #ifdef HAVE_UNISTD_H
59 #include <unistd.h>
60 #endif
61 #endif /* RELIANTUNIX */
62
63 #ifdef HAVE_SYSV_IPC
64 #define USE_SYSV_IPC
65 #endif
66
67 #ifdef HAVE_SHARED_MMAP
68 #define USE_SHARED_MMAP
69 #endif
70
71
72 /* if we have both SYSV IPC and shared mmap then we need to choose */
73 #if (defined(USE_SYSV_IPC) && defined(USE_SHARED_MMAP))
74 #  undef USE_SHARED_MMAP
75 #endif
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_SYS_UN_H
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 #include <syslog.h>
212 #include <sys/file.h>
213
214 #ifdef HAVE_NETINET_TCP_H
215 #include <netinet/tcp.h>
216 #endif
217
218 /*
219  * The next three defines are needed to access the IPTOS_* options
220  * on some systems.
221  */
222
223 #ifdef HAVE_NETINET_IN_SYSTM_H
224 #include <netinet/in_systm.h>
225 #endif
226
227 #ifdef HAVE_NETINET_IN_IP_H
228 #include <netinet/in_ip.h>
229 #endif
230
231 #ifdef HAVE_NETINET_IP_H
232 #include <netinet/ip.h>
233 #endif
234
235 #if defined(HAVE_TERMIOS_H)
236 /* POSIX terminal handling. */
237 #include <termios.h>
238 #elif defined(HAVE_TERMIO_H)
239 /* Older SYSV terminal handling - don't use if we can avoid it. */
240 #include <termio.h>
241 #elif defined(HAVE_SYS_TERMIO_H)
242 /* Older SYSV terminal handling - don't use if we can avoid it. */
243 #include <sys/termio.h>
244 #endif
245
246 #if HAVE_DIRENT_H
247 # include <dirent.h>
248 # define NAMLEN(dirent) strlen((dirent)->d_name)
249 #else
250 # define dirent direct
251 # define NAMLEN(dirent) (dirent)->d_namlen
252 # if HAVE_SYS_NDIR_H
253 #  include <sys/ndir.h>
254 # endif
255 # if HAVE_SYS_DIR_H
256 #  include <sys/dir.h>
257 # endif
258 # if HAVE_NDIR_H
259 #  include <ndir.h>
260 # endif
261 #endif
262
263 #ifdef HAVE_SYS_MMAN_H
264 #include <sys/mman.h>
265 #endif
266
267 #ifdef HAVE_SYSV_IPC
268 #include <sys/ipc.h>
269 #include <sys/shm.h>
270 #include <sys/sem.h>
271 #endif
272
273 #ifdef HAVE_NET_IF_H
274 #include <net/if.h>
275 #endif
276
277
278 #ifdef HAVE_SYS_MOUNT_H
279 #include <sys/mount.h>
280 #endif
281
282 #ifdef HAVE_SYS_VFS_H
283 #include <sys/vfs.h>
284 #endif
285
286 #ifdef HAVE_SYS_ACL_H
287 #include <sys/acl.h>
288 #endif
289
290 #ifdef HAVE_SYS_FS_S5PARAM_H 
291 #include <sys/fs/s5param.h>
292 #endif
293
294 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
295 #include <sys/filsys.h> 
296 #endif
297
298 #ifdef HAVE_SYS_STATFS_H
299 # include <sys/statfs.h>
300 #endif
301
302 #ifdef HAVE_DUSTAT_H              
303 #include <sys/dustat.h>
304 #endif
305
306 #ifdef HAVE_SYS_STATVFS_H          
307 #include <sys/statvfs.h>
308 #endif
309
310 #ifdef HAVE_SHADOW_H
311 #include <shadow.h>
312 #endif
313
314 #ifdef HAVE_GETPWANAM
315 #include <sys/label.h>
316 #include <sys/audit.h>
317 #include <pwdadj.h>
318 #endif
319
320 #ifdef HAVE_SYS_SECURITY_H
321 #include <sys/security.h>
322 #include <prot.h>
323 #define PASSWORD_LENGTH 16
324 #endif  /* HAVE_SYS_SECURITY_H */
325
326 #ifdef HAVE_COMPAT_H
327 #include <compat.h>
328 #endif
329
330 #ifdef HAVE_STROPTS_H
331 #include <stropts.h>
332 #endif
333
334 #ifdef HAVE_POLL_H
335 #include <poll.h>
336 #endif
337
338 #ifdef HAVE_SYS_CAPABILITY_H
339 #include <sys/capability.h>
340 #endif
341
342 #if defined(HAVE_RPC_RPC_H)
343 /*
344  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
345  */
346 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
347 #undef AUTH_ERROR
348 #endif
349 #include <rpc/rpc.h>
350 #endif
351
352 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
353 #define HAVE_NETGROUP 1
354 #endif
355
356 #if defined (HAVE_NETGROUP)
357 #if defined(HAVE_RPCSVC_YP_PROT_H)
358 #include <rpcsvc/yp_prot.h>
359 #endif
360 #if defined(HAVE_RPCSVC_YPCLNT_H)
361 #include <rpcsvc/ypclnt.h>
362 #endif
363 #endif /* HAVE_NETGROUP */
364
365 /*
366  * Define VOLATILE if needed.
367  */
368
369 #if defined(HAVE_VOLATILE)
370 #define VOLATILE volatile
371 #else
372 #define VOLATILE
373 #endif
374
375 /*
376  * Define SIG_ATOMIC_T if needed.
377  */
378
379 #if defined(HAVE_SIG_ATOMIC_T_TYPE)
380 #define SIG_ATOMIC_T sig_atomic_t
381 #else
382 #define SIG_ATOMIC_T int
383 #endif
384
385 #ifndef uchar
386 #define uchar unsigned char
387 #endif
388
389 #ifdef HAVE_UNSIGNED_CHAR
390 #define schar signed char
391 #else
392 #define schar char
393 #endif
394
395 /*
396    Samba needs type definitions for int16, int32, uint16 and uint32.
397
398    Normally these are signed and unsigned 16 and 32 bit integers, but
399    they actually only need to be at least 16 and 32 bits
400    respectively. Thus if your word size is 8 bytes just defining them
401    as signed and unsigned int will work.
402 */
403
404 #ifndef uint8
405 #define uint8 unsigned char
406 #endif
407
408 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
409 #if (SIZEOF_SHORT == 4)
410 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
411 #else /* SIZEOF_SHORT != 4 */
412 #define int16 short
413 #endif /* SIZEOF_SHORT != 4 */
414 #endif
415
416 /*
417  * Note we duplicate the size tests in the unsigned 
418  * case as int16 may be a typedef from rpc/rpc.h
419  */
420
421 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
422 #if (SIZEOF_SHORT == 4)
423 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
424 #else /* SIZEOF_SHORT != 4 */
425 #define uint16 unsigned short
426 #endif /* SIZEOF_SHORT != 4 */
427 #endif
428
429 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
430 #if (SIZEOF_INT == 4)
431 #define int32 int
432 #elif (SIZEOF_LONG == 4)
433 #define int32 long
434 #elif (SIZEOF_SHORT == 4)
435 #define int32 short
436 #endif
437 #endif
438
439 /*
440  * Note we duplicate the size tests in the unsigned 
441  * case as int32 may be a typedef from rpc/rpc.h
442  */
443
444 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
445 #if (SIZEOF_INT == 4)
446 #define uint32 unsigned int
447 #elif (SIZEOF_LONG == 4)
448 #define uint32 unsigned long
449 #elif (SIZEOF_SHORT == 4)
450 #define uint32 unsigned short
451 #endif
452 #endif
453
454 /*
455  * Types for devices, inodes and offsets.
456  */
457
458 #ifndef SMB_DEV_T
459 #define SMB_DEV_T dev_t
460 #endif
461
462 /*
463  * Setup the correctly sized inode type.
464  */
465
466 #ifndef SMB_INO_T
467 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
468 #    define SMB_INO_T ino64_t
469 #  else
470 #    define SMB_INO_T ino_t
471 #  endif
472 #endif
473
474 #ifndef LARGE_SMB_INO_T
475 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
476 #    define LARGE_SMB_INO_T 1
477 #  endif
478 #endif
479
480 #ifdef LARGE_SMB_INO_T
481 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
482 #else 
483 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
484 #endif
485
486 #ifndef SMB_OFF_T
487 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
488 #    define SMB_OFF_T off64_t
489 #  else
490 #    define SMB_OFF_T off_t
491 #  endif
492 #endif
493
494 /* this should really be a 64 bit type if possible */
495 #define br_off SMB_BIG_UINT
496
497 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
498
499 /*
500  * Set the define that tells us if we can do 64 bit
501  * NT SMB calls.
502  */
503
504 #ifndef LARGE_SMB_OFF_T
505 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
506 #    define LARGE_SMB_OFF_T 1
507 #  endif
508 #endif
509
510 #ifdef LARGE_SMB_OFF_T
511 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
512 #else 
513 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
514 #endif
515
516 /*
517  * Type for stat structure.
518  */
519
520 #ifndef SMB_STRUCT_STAT
521 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
522 #    define SMB_STRUCT_STAT struct stat64
523 #  else
524 #    define SMB_STRUCT_STAT struct stat
525 #  endif
526 #endif
527
528 /*
529  * Type for dirent structure.
530  */
531
532 #ifndef SMB_STRUCT_DIRENT
533 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
534 #    define SMB_STRUCT_DIRENT struct dirent64
535 #  else
536 #    define SMB_STRUCT_DIRENT struct dirent
537 #  endif
538 #endif
539
540 /*
541  * Defines for 64 bit fcntl locks.
542  */
543
544 #ifndef SMB_STRUCT_FLOCK
545 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
546 #    define SMB_STRUCT_FLOCK struct flock64
547 #  else
548 #    define SMB_STRUCT_FLOCK struct flock
549 #  endif
550 #endif
551
552 #ifndef SMB_F_SETLKW
553 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
554 #    define SMB_F_SETLKW F_SETLKW64
555 #  else
556 #    define SMB_F_SETLKW F_SETLKW
557 #  endif
558 #endif
559
560 #ifndef SMB_F_SETLK
561 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
562 #    define SMB_F_SETLK F_SETLK64
563 #  else
564 #    define SMB_F_SETLK F_SETLK
565 #  endif
566 #endif
567
568 #ifndef SMB_F_GETLK
569 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
570 #    define SMB_F_GETLK F_GETLK64
571 #  else
572 #    define SMB_F_GETLK F_GETLK
573 #  endif
574 #endif
575
576 #if defined(HAVE_LONGLONG)
577 #define SMB_BIG_UINT unsigned long long
578 #define SMB_BIG_INT long long
579 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
580 #else
581 #define SMB_BIG_UINT unsigned long
582 #define SMB_BIG_INT long
583 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
584 #endif
585
586 #ifndef MIN
587 #define MIN(a,b) ((a)<(b)?(a):(b))
588 #endif
589
590 #ifndef MAX
591 #define MAX(a,b) ((a)>(b)?(a):(b))
592 #endif
593
594 #ifndef HAVE_STRERROR
595 extern char *sys_errlist[];
596 #define strerror(i) sys_errlist[i]
597 #endif
598
599 #ifndef HAVE_STRCHR
600 # define strchr                 index
601 # define strrchr                rindex
602 #endif
603
604 #ifndef HAVE_ERRNO_DECL
605 extern int errno;
606 #endif
607
608 #ifdef HAVE_BROKEN_GETGROUPS
609 #define GID_T int
610 #else
611 #define GID_T gid_t
612 #endif
613
614
615 /* Lists, trees, caching, datbase... */
616 #include "ubi_sLinkList.h"
617 #include "ubi_dLinkList.h"
618 #include "dlinklist.h"
619 #include "../tdb/tdb.h"
620 #include "talloc.h"
621 #include "interfaces.h"
622 #include "hash.h"
623
624 #ifdef HAVE_FNMATCH
625 #include <fnmatch.h>
626 #else
627 #include "fnmatch.h"
628 #endif
629
630 #ifndef UBI_BINTREE_H
631 #include "ubi_Cache.h"
632 #endif /* UBI_BINTREE_H */
633
634 #include "debugparse.h"
635
636 #include "version.h"
637 #include "smb.h"
638 #include "smbw.h"
639 #include "nameserv.h"
640
641 #include "byteorder.h"
642
643 #include "kanji.h"
644 #include "charset.h"
645
646 #include "nterr.h"
647
648 #ifdef WITH_PROFILE
649 #include "profile.h"
650 #endif
651
652 #ifndef MAXCODEPAGELINES
653 #define MAXCODEPAGELINES 256
654 #endif
655
656 /*
657  * Type for wide character dirent structure.
658  * Only d_name is defined by POSIX.
659  */
660
661 typedef struct smb_wdirent {
662         wpstring        d_name;
663 } SMB_STRUCT_WDIRENT;
664
665 /*
666  * Type for wide character passwd structure.
667  */
668
669 typedef struct smb_wpasswd {
670         wfstring       pw_name;
671         char           *pw_passwd;
672         uid_t          pw_uid;
673         gid_t          pw_gid;
674         wpstring       pw_gecos;
675         wpstring       pw_dir;
676         wpstring       pw_shell;
677 } SMB_STRUCT_WPASSWD;
678
679 /* Defines for wisXXX functions. */
680 #define UNI_UPPER    0x1
681 #define UNI_LOWER    0x2
682 #define UNI_DIGIT    0x4
683 #define UNI_XDIGIT   0x8
684 #define UNI_SPACE    0x10
685
686 /***** automatically generated prototypes *****/
687 #include "proto.h"
688
689 #ifdef strcpy
690 #undef strcpy
691 #endif /* strcpy */
692 #define strcpy(dest,src) __ERROR__XX__NEVER_USE_STRCPY___;
693
694 #ifdef strcat
695 #undef strcat
696 #endif /* strcat */
697 #define strcat(dest,src) __ERROR__XX__NEVER_USE_STRCAT___;
698
699 #ifdef sprintf
700 #undef sprintf
701 #endif /* sprintf */
702 #define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
703
704 #define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1)
705 #define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1)
706 #define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
707 #define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
708
709 /* smb_ucs2_t versions of the above. */
710 #define wpstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wpstring))
711 #define wpstrcat(d,s) safe_strcat_w((d),(s),sizeof(wpstring))
712 #define wfstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wfstring))
713 #define wfstrcat(d,s) safe_strcat_w((d),(s),sizeof(wfstring))
714
715 #ifdef __COMPAR_FN_T
716 #define QSORT_CAST (__compar_fn_t)
717 #endif
718
719 #ifndef QSORT_CAST
720 #define QSORT_CAST (int (*)(const void *, const void *))
721 #endif
722
723 /* this guess needs to be improved (tridge) */
724 #if (defined(STAT_STATVFS) || defined(STAT_STATVFS64)) && !defined(SYSV)
725 #define SYSV 1
726 #endif
727
728 #ifndef DEFAULT_PRINTING
729 #ifdef HAVE_LIBCUPS
730 #define DEFAULT_PRINTING PRINT_CUPS
731 #define PRINTCAP_NAME "cups"
732 #elif defined(SYSV)
733 #define DEFAULT_PRINTING PRINT_SYSV
734 #define PRINTCAP_NAME "lpstat"
735 #else
736 #define DEFAULT_PRINTING PRINT_BSD
737 #define PRINTCAP_NAME "/etc/printcap"
738 #endif
739 #endif
740
741 #ifndef PRINTCAP_NAME
742 #define PRINTCAP_NAME "/etc/printcap"
743 #endif
744
745 #ifndef SIGCLD
746 #define SIGCLD SIGCHLD
747 #endif
748
749 #if (defined(HAVE_SYSV_IPC) || defined(HAVE_SHARED_MMAP))
750 #define FAST_SHARE_MODES 1
751 #endif
752
753 #ifndef MAP_FILE
754 #define MAP_FILE 0
755 #endif
756
757 #ifdef HAVE_SYSV_IPC
758 #ifndef HAVE_UNION_SEMUN
759 union semun {
760         int val;
761         struct semid_ds *buf;
762         unsigned short *array;
763 };
764 #endif
765 #endif
766
767 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP))
768 #define USE_SMBPASS_DB 1
769 #endif
770
771 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
772 #define OSF1_ENH_SEC 1
773 #endif
774
775 #ifndef ALLOW_CHANGE_PASSWORD
776 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
777 #define ALLOW_CHANGE_PASSWORD 1
778 #endif
779 #endif
780
781 /* what is the longest significant password available on your system? 
782  Knowing this speeds up password searches a lot */
783 #ifndef PASSWORD_LENGTH
784 #define PASSWORD_LENGTH 8
785 #endif
786
787 #ifdef REPLACE_INET_NTOA
788 #define inet_ntoa rep_inet_ntoa
789 #endif
790
791 #ifndef HAVE_PIPE
792 #define SYNC_DNS 1
793 #endif
794
795 #ifndef MAXPATHLEN
796 #define MAXPATHLEN 256
797 #endif
798
799 #ifndef SEEK_SET
800 #define SEEK_SET 0
801 #endif
802
803 #ifndef INADDR_LOOPBACK
804 #define INADDR_LOOPBACK 0x7f000001
805 #endif
806
807 #ifndef INADDR_NONE
808 #define INADDR_NONE 0xffffffff
809 #endif
810
811 #ifndef HAVE_CRYPT
812 #define crypt ufc_crypt
813 #endif
814
815 #ifndef O_ACCMODE
816 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
817 #endif
818
819 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
820 #define ULTRIX_AUTH 1
821 #endif
822
823 #ifdef HAVE_LIBREADLINE
824 #  ifdef HAVE_READLINE_READLINE_H
825 #    include <readline/readline.h>
826 #    ifdef HAVE_READLINE_HISTORY_H
827 #      include <readline/history.h>
828 #    endif
829 #  else
830 #    ifdef HAVE_READLINE_H
831 #      include <readline.h>
832 #      ifdef HAVE_HISTORY_H
833 #        include <history.h>
834 #      endif
835 #    else
836 #      undef HAVE_LIBREADLINE
837 #    endif
838 #  endif
839 #endif
840
841 #ifndef HAVE_STRDUP
842 char *strdup(const char *s);
843 #endif
844
845 #ifndef HAVE_MEMMOVE
846 void *memmove(void *dest,const void *src,int size);
847 #endif
848
849 #ifndef HAVE_INITGROUPS
850 int initgroups(char *name,gid_t id);
851 #endif
852
853 #ifndef HAVE_RENAME
854 int rename(const char *zfrom, const char *zto);
855 #endif
856
857 #ifndef HAVE_MKTIME
858 time_t mktime(struct tm *t);
859 #endif
860
861 #ifndef HAVE_FTRUNCATE
862 int ftruncate(int f,long l);
863 #endif
864
865 #ifndef HAVE_STRTOUL
866 unsigned long strtoul(const char *nptr, char **endptr, int base);
867 #endif
868
869 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
870 /* stupid glibc */
871 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
872 #endif
873 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
874 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
875 #endif
876
877 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
878 #define bzero(a,b) memset((a),'\0',(b))
879 #endif
880
881 #ifdef REPLACE_GETPASS
882 #define getpass(prompt) getsmbpass((prompt))
883 #endif
884
885 /*
886  * Some older systems seem not to have MAXHOSTNAMELEN
887  * defined.
888  */
889 #ifndef MAXHOSTNAMELEN
890 #define MAXHOSTNAMELEN 254
891 #endif
892
893 /* yuck, I'd like a better way of doing this */
894 #define DIRP_SIZE (256 + 32)
895
896 /*
897  * glibc on linux doesn't seem to have MSG_WAITALL
898  * defined. I think the kernel has it though..
899  */
900
901 #ifndef MSG_WAITALL
902 #define MSG_WAITALL 0
903 #endif
904
905 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
906    given the socket IO pattern that Samba uses */
907 #ifdef TCP_NODELAY
908 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
909 #else
910 #define DEFAULT_SOCKET_OPTIONS ""
911 #endif
912
913 #endif /* _INCLUDES_H */