the beginnings of kerberos support in smbd. It doesn't work yet, but
[import/samba-cvsimport.git] / source / 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_UNIXSOCKET
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_SYS_FS_S5PARAM_H 
282 #include <sys/fs/s5param.h>
283 #endif
284
285 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
286 #include <sys/filsys.h> 
287 #endif
288
289 #ifdef HAVE_SYS_STATFS_H
290 # include <sys/statfs.h>
291 #endif
292
293 #ifdef HAVE_DUSTAT_H              
294 #include <sys/dustat.h>
295 #endif
296
297 #ifdef HAVE_SYS_STATVFS_H          
298 #include <sys/statvfs.h>
299 #endif
300
301 #ifdef HAVE_SHADOW_H
302 #include <shadow.h>
303 #endif
304
305 #ifdef HAVE_GETPWANAM
306 #include <sys/label.h>
307 #include <sys/audit.h>
308 #include <pwdadj.h>
309 #endif
310
311 #ifdef HAVE_SYS_SECURITY_H
312 #include <sys/security.h>
313 #include <prot.h>
314 #define PASSWORD_LENGTH 16
315 #endif  /* HAVE_SYS_SECURITY_H */
316
317 #ifdef HAVE_COMPAT_H
318 #include <compat.h>
319 #endif
320
321 #ifdef HAVE_STROPTS_H
322 #include <stropts.h>
323 #endif
324
325 #ifdef HAVE_POLL_H
326 #include <poll.h>
327 #endif
328
329 #ifdef HAVE_SYS_CAPABILITY_H
330 #include <sys/capability.h>
331 #endif
332
333 #if defined(HAVE_RPC_RPC_H)
334 /*
335  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
336  */
337 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
338 #undef AUTH_ERROR
339 #endif
340 #include <rpc/rpc.h>
341 #endif
342
343 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
344 #define HAVE_NETGROUP 1
345 #endif
346
347 #if defined (HAVE_NETGROUP)
348 #if defined(HAVE_RPCSVC_YP_PROT_H)
349 #include <rpcsvc/yp_prot.h>
350 #endif
351 #if defined(HAVE_RPCSVC_YPCLNT_H)
352 #include <rpcsvc/ypclnt.h>
353 #endif
354 #endif /* HAVE_NETGROUP */
355
356 #if defined(HAVE_SYS_IPC_H)
357 #include <sys/ipc.h>
358 #endif /* HAVE_SYS_IPC_H */
359
360 #if defined(HAVE_SYS_SHM_H)
361 #include <sys/shm.h>
362 #endif /* HAVE_SYS_SHM_H */
363
364 #ifdef HAVE_NATIVE_ICONV
365 #include <iconv.h>
366 #endif
367
368 #if HAVE_KRB5
369 #include <krb5.h>
370 #endif
371
372 /*
373  * Define VOLATILE if needed.
374  */
375
376 #if defined(HAVE_VOLATILE)
377 #define VOLATILE volatile
378 #else
379 #define VOLATILE
380 #endif
381
382 /*
383  * Define additional missing types
384  */
385 #ifndef HAVE_SIG_ATOMIC_T_TYPE
386 typedef int sig_atomic_t;
387 #endif
388
389 #ifndef HAVE_SOCKLEN_T_TYPE
390 typedef int socklen_t;
391 #endif
392
393
394 #ifndef uchar
395 #define uchar unsigned char
396 #endif
397
398 #ifdef HAVE_UNSIGNED_CHAR
399 #define schar signed char
400 #else
401 #define schar char
402 #endif
403
404 /*
405    Samba needs type definitions for int16, int32, uint16 and uint32.
406
407    Normally these are signed and unsigned 16 and 32 bit integers, but
408    they actually only need to be at least 16 and 32 bits
409    respectively. Thus if your word size is 8 bytes just defining them
410    as signed and unsigned int will work.
411 */
412
413 #ifndef uint8
414 #define uint8 unsigned char
415 #endif
416
417 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
418 #if (SIZEOF_SHORT == 4)
419 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
420 #else /* SIZEOF_SHORT != 4 */
421 #define int16 short
422 #endif /* SIZEOF_SHORT != 4 */
423 #endif
424
425 /*
426  * Note we duplicate the size tests in the unsigned 
427  * case as int16 may be a typedef from rpc/rpc.h
428  */
429
430 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
431 #if (SIZEOF_SHORT == 4)
432 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
433 #else /* SIZEOF_SHORT != 4 */
434 #define uint16 unsigned short
435 #endif /* SIZEOF_SHORT != 4 */
436 #endif
437
438 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
439 #if (SIZEOF_INT == 4)
440 #define int32 int
441 #elif (SIZEOF_LONG == 4)
442 #define int32 long
443 #elif (SIZEOF_SHORT == 4)
444 #define int32 short
445 #else
446 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
447 #define uint32 int
448 #endif
449 #endif
450
451 /*
452  * Note we duplicate the size tests in the unsigned 
453  * case as int32 may be a typedef from rpc/rpc.h
454  */
455
456 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
457 #if (SIZEOF_INT == 4)
458 #define uint32 unsigned int
459 #elif (SIZEOF_LONG == 4)
460 #define uint32 unsigned long
461 #elif (SIZEOF_SHORT == 4)
462 #define uint32 unsigned short
463 #else
464 /* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
465 #define uint32 unsigned
466 #endif
467 #endif
468
469 /*
470  * Types for devices, inodes and offsets.
471  */
472
473 #ifndef SMB_DEV_T
474 #define SMB_DEV_T dev_t
475 #endif
476
477 /*
478  * Setup the correctly sized inode type.
479  */
480
481 #ifndef SMB_INO_T
482 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
483 #    define SMB_INO_T ino64_t
484 #  else
485 #    define SMB_INO_T ino_t
486 #  endif
487 #endif
488
489 #ifndef LARGE_SMB_INO_T
490 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
491 #    define LARGE_SMB_INO_T 1
492 #  endif
493 #endif
494
495 #ifdef LARGE_SMB_INO_T
496 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
497 #else 
498 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
499 #endif
500
501 #ifndef SMB_OFF_T
502 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
503 #    define SMB_OFF_T off64_t
504 #  else
505 #    define SMB_OFF_T off_t
506 #  endif
507 #endif
508
509 /* this should really be a 64 bit type if possible */
510 #define br_off SMB_BIG_UINT
511
512 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
513
514 /*
515  * Set the define that tells us if we can do 64 bit
516  * NT SMB calls.
517  */
518
519 #ifndef LARGE_SMB_OFF_T
520 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
521 #    define LARGE_SMB_OFF_T 1
522 #  endif
523 #endif
524
525 #ifdef LARGE_SMB_OFF_T
526 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
527 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
528 #else 
529 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
530 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
531 #endif
532
533 /*
534  * Type for stat structure.
535  */
536
537 #ifndef SMB_STRUCT_STAT
538 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
539 #    define SMB_STRUCT_STAT struct stat64
540 #  else
541 #    define SMB_STRUCT_STAT struct stat
542 #  endif
543 #endif
544
545 /*
546  * Type for dirent structure.
547  */
548
549 #ifndef SMB_STRUCT_DIRENT
550 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
551 #    define SMB_STRUCT_DIRENT struct dirent64
552 #  else
553 #    define SMB_STRUCT_DIRENT struct dirent
554 #  endif
555 #endif
556
557 /*
558  * Defines for 64 bit fcntl locks.
559  */
560
561 #ifndef SMB_STRUCT_FLOCK
562 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
563 #    define SMB_STRUCT_FLOCK struct flock64
564 #  else
565 #    define SMB_STRUCT_FLOCK struct flock
566 #  endif
567 #endif
568
569 #ifndef SMB_F_SETLKW
570 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
571 #    define SMB_F_SETLKW F_SETLKW64
572 #  else
573 #    define SMB_F_SETLKW F_SETLKW
574 #  endif
575 #endif
576
577 #ifndef SMB_F_SETLK
578 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
579 #    define SMB_F_SETLK F_SETLK64
580 #  else
581 #    define SMB_F_SETLK F_SETLK
582 #  endif
583 #endif
584
585 #ifndef SMB_F_GETLK
586 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
587 #    define SMB_F_GETLK F_GETLK64
588 #  else
589 #    define SMB_F_GETLK F_GETLK
590 #  endif
591 #endif
592
593 #if defined(HAVE_LONGLONG)
594 #define SMB_BIG_UINT unsigned long long
595 #define SMB_BIG_INT long long
596 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
597 #else
598 #define SMB_BIG_UINT unsigned long
599 #define SMB_BIG_INT long
600 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
601 #endif
602
603 #define SMB_BIG_UINT_BITS (sizeof(SMB_BIG_UINT)*8)
604
605 #ifndef MIN
606 #define MIN(a,b) ((a)<(b)?(a):(b))
607 #endif
608
609 #ifndef MAX
610 #define MAX(a,b) ((a)>(b)?(a):(b))
611 #endif
612
613 #ifndef HAVE_STRERROR
614 extern char *sys_errlist[];
615 #define strerror(i) sys_errlist[i]
616 #endif
617
618 #ifndef HAVE_ERRNO_DECL
619 extern int errno;
620 #endif
621
622 #ifdef HAVE_BROKEN_GETGROUPS
623 #define GID_T int
624 #else
625 #define GID_T gid_t
626 #endif
627
628 #ifndef NGROUPS_MAX
629 #define NGROUPS_MAX 32 /* Guess... */
630 #endif
631
632 /* Lists, trees, caching, database... */
633 #include "xfile.h"
634 #include "intl.h"
635 #include "ubi_sLinkList.h"
636 #include "ubi_dLinkList.h"
637 #include "dlinklist.h"
638 #include "../tdb/tdb.h"
639 #include "../tdb/spinlock.h"
640 #include "talloc.h"
641 #include "interfaces.h"
642 #include "hash.h"
643 #include "trans2.h"
644 #include "nterr.h"
645 #include "secrets.h"
646 #include "messages.h"
647 #include "util_list.h"
648 #include "charset.h"
649
650 #include "util_getent.h"
651
652 #ifndef UBI_BINTREE_H
653 #include "ubi_Cache.h"
654 #endif /* UBI_BINTREE_H */
655
656 #include "debugparse.h"
657
658 #include "version.h"
659 #include "smb.h"
660 #include "smbw.h"
661 #include "nameserv.h"
662
663 #include "byteorder.h"
664
665 #include "ntdomain.h"
666
667 #include "msdfs.h"
668
669 #include "smbprofile.h"
670
671 #include "mapping.h"
672
673 #include "md5.h"
674 #include "hmacmd5.h"
675
676 #include "auth.h"
677
678 #include "session.h"
679
680 #include "asn1.h"
681
682 #ifndef MAXCODEPAGELINES
683 #define MAXCODEPAGELINES 256
684 #endif
685
686 /*
687  * Type for wide character dirent structure.
688  * Only d_name is defined by POSIX.
689  */
690
691 typedef struct smb_wdirent {
692         wpstring        d_name;
693 } SMB_STRUCT_WDIRENT;
694
695 /*
696  * Type for wide character passwd structure.
697  */
698
699 typedef struct smb_wpasswd {
700         wfstring       pw_name;
701         char           *pw_passwd;
702         uid_t          pw_uid;
703         gid_t          pw_gid;
704         wpstring       pw_gecos;
705         wpstring       pw_dir;
706         wpstring       pw_shell;
707 } SMB_STRUCT_WPASSWD;
708
709 /* Defines for wisXXX functions. */
710 #define UNI_UPPER    0x1
711 #define UNI_LOWER    0x2
712 #define UNI_DIGIT    0x4
713 #define UNI_XDIGIT   0x8
714 #define UNI_SPACE    0x10
715
716 #include "nsswitch/nss.h"
717
718 /***** automatically generated prototypes *****/
719 #include "proto.h"
720
721 /* String routines */
722
723 #include "safe_string.h"
724
725 #ifdef __COMPAR_FN_T
726 #define QSORT_CAST (__compar_fn_t)
727 #endif
728
729 #ifndef QSORT_CAST
730 #define QSORT_CAST (int (*)(const void *, const void *))
731 #endif
732
733 /* this guess needs to be improved (tridge) */
734 #if (defined(STAT_STATVFS) || defined(STAT_STATVFS64)) && !defined(SYSV)
735 #define SYSV 1
736 #endif
737
738 #ifndef DEFAULT_PRINTING
739 #ifdef HAVE_CUPS
740 #define DEFAULT_PRINTING PRINT_CUPS
741 #define PRINTCAP_NAME "cups"
742 #elif defined(SYSV)
743 #define DEFAULT_PRINTING PRINT_SYSV
744 #define PRINTCAP_NAME "lpstat"
745 #else
746 #define DEFAULT_PRINTING PRINT_BSD
747 #define PRINTCAP_NAME "/etc/printcap"
748 #endif
749 #endif
750
751 #ifndef PRINTCAP_NAME
752 #define PRINTCAP_NAME "/etc/printcap"
753 #endif
754
755 #ifndef SIGCLD
756 #define SIGCLD SIGCHLD
757 #endif
758
759 #ifndef MAP_FILE
760 #define MAP_FILE 0
761 #endif
762
763 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP) && !defined(WITH_TDBSAM))
764 #define USE_SMBPASS_DB 1
765 #endif
766
767 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
768 #define OSF1_ENH_SEC 1
769 #endif
770
771 #ifndef ALLOW_CHANGE_PASSWORD
772 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
773 #define ALLOW_CHANGE_PASSWORD 1
774 #endif
775 #endif
776
777 /* what is the longest significant password available on your system? 
778  Knowing this speeds up password searches a lot */
779 #ifndef PASSWORD_LENGTH
780 #define PASSWORD_LENGTH 8
781 #endif
782
783 #ifdef REPLACE_INET_NTOA
784 #define inet_ntoa rep_inet_ntoa
785 #endif
786
787 #ifndef HAVE_PIPE
788 #define SYNC_DNS 1
789 #endif
790
791 #ifndef MAXPATHLEN
792 #define MAXPATHLEN 256
793 #endif
794
795 #ifndef SEEK_SET
796 #define SEEK_SET 0
797 #endif
798
799 #ifndef INADDR_LOOPBACK
800 #define INADDR_LOOPBACK 0x7f000001
801 #endif
802
803 #ifndef INADDR_NONE
804 #define INADDR_NONE 0xffffffff
805 #endif
806
807 #ifndef HAVE_CRYPT
808 #define crypt ufc_crypt
809 #endif
810
811 #ifndef O_ACCMODE
812 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
813 #endif
814
815 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
816 #define ULTRIX_AUTH 1
817 #endif
818
819 #ifdef HAVE_LIBREADLINE
820 #  ifdef HAVE_READLINE_READLINE_H
821 #    include <readline/readline.h>
822 #    ifdef HAVE_READLINE_HISTORY_H
823 #      include <readline/history.h>
824 #    endif
825 #  else
826 #    ifdef HAVE_READLINE_H
827 #      include <readline.h>
828 #      ifdef HAVE_HISTORY_H
829 #        include <history.h>
830 #      endif
831 #    else
832 #      undef HAVE_LIBREADLINE
833 #    endif
834 #  endif
835 #endif
836
837 #ifndef HAVE_STRDUP
838 char *strdup(const char *s);
839 #endif
840
841 #ifndef HAVE_MEMMOVE
842 void *memmove(void *dest,const void *src,int size);
843 #endif
844
845 #ifndef HAVE_INITGROUPS
846 int initgroups(char *name,gid_t id);
847 #endif
848
849 #ifndef HAVE_RENAME
850 int rename(const char *zfrom, const char *zto);
851 #endif
852
853 #ifndef HAVE_MKTIME
854 time_t mktime(struct tm *t);
855 #endif
856
857 #ifndef HAVE_FTRUNCATE
858 int ftruncate(int f,long l);
859 #endif
860
861 #ifndef HAVE_STRTOUL
862 unsigned long strtoul(const char *nptr, char **endptr, int base);
863 #endif
864
865 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
866 /* stupid glibc */
867 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
868 #endif
869 #if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
870 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
871 #endif
872 #ifndef HAVE_VASPRINTF_DECL
873 int vasprintf(char **ptr, const char *format, va_list ap);
874 #endif
875
876 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
877 #define bzero(a,b) memset((a),'\0',(b))
878 #endif
879
880 #ifdef REPLACE_GETPASS
881 #define getpass(prompt) getsmbpass((prompt))
882 #endif
883
884 /*
885  * Some older systems seem not to have MAXHOSTNAMELEN
886  * defined.
887  */
888 #ifndef MAXHOSTNAMELEN
889 #define MAXHOSTNAMELEN 254
890 #endif
891
892 /* yuck, I'd like a better way of doing this */
893 #define DIRP_SIZE (256 + 32)
894
895 /*
896  * glibc on linux doesn't seem to have MSG_WAITALL
897  * defined. I think the kernel has it though..
898  */
899
900 #ifndef MSG_WAITALL
901 #define MSG_WAITALL 0
902 #endif
903
904 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
905    given the socket IO pattern that Samba uses */
906 #ifdef TCP_NODELAY
907 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
908 #else
909 #define DEFAULT_SOCKET_OPTIONS ""
910 #endif
911
912 /* Load header file for libdl stuff */
913
914 #ifdef HAVE_LIBDL
915 #include <dlfcn.h>
916 #endif
917
918 /* Some POSIX definitions for those without */
919  
920 #ifndef S_IFDIR
921 #define S_IFDIR         0x4000
922 #endif
923 #ifndef S_ISDIR
924 #define S_ISDIR(mode)   ((mode & 0xF000) == S_IFDIR)
925 #endif
926 #ifndef S_IRWXU
927 #define S_IRWXU 00700           /* read, write, execute: owner */
928 #endif
929 #ifndef S_IRUSR
930 #define S_IRUSR 00400           /* read permission: owner */
931 #endif
932 #ifndef S_IWUSR
933 #define S_IWUSR 00200           /* write permission: owner */
934 #endif
935 #ifndef S_IXUSR
936 #define S_IXUSR 00100           /* execute permission: owner */
937 #endif
938 #ifndef S_IRWXG
939 #define S_IRWXG 00070           /* read, write, execute: group */
940 #endif
941 #ifndef S_IRGRP
942 #define S_IRGRP 00040           /* read permission: group */
943 #endif
944 #ifndef S_IWGRP
945 #define S_IWGRP 00020           /* write permission: group */
946 #endif
947 #ifndef S_IXGRP
948 #define S_IXGRP 00010           /* execute permission: group */
949 #endif
950 #ifndef S_IRWXO
951 #define S_IRWXO 00007           /* read, write, execute: other */
952 #endif
953 #ifndef S_IROTH
954 #define S_IROTH 00004           /* read permission: other */
955 #endif
956 #ifndef S_IWOTH
957 #define S_IWOTH 00002           /* write permission: other */
958 #endif
959 #ifndef S_IXOTH
960 #define S_IXOTH 00001           /* execute permission: other */
961 #endif
962
963 /* NetBSD doesn't have these */
964 #ifndef SHM_R
965 #define SHM_R 0400
966 #endif
967
968 #ifndef SHM_W
969 #define SHM_W 0200
970 #endif
971
972 #if HAVE_KERNEL_SHARE_MODES
973 #ifndef LOCK_MAND 
974 #define LOCK_MAND       32      /* This is a mandatory flock */
975 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
976 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
977 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
978 #endif
979 #endif
980
981 extern int DEBUGLEVEL;
982
983 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
984
985
986 #ifdef GLIBC_HACK_FCNTL64
987 /* this is a gross hack. 64 bit locking is completely screwed up on
988    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
989    "fixes" the problem with the current 2.4.0test kernels 
990 */
991 #define fcntl fcntl64
992 #undef F_SETLKW 
993 #undef F_SETLK 
994 #define F_SETLK 13
995 #define F_SETLKW 14
996 #endif
997
998
999 /* Needed for sys_dlopen/sys_dlsym/sys_dlclose */
1000 #ifndef RTLD_GLOBAL
1001 #define RTLD_GLOBAL 0
1002 #endif
1003
1004 #ifndef RTLD_LAZY
1005 #define RTLD_LAZY 0
1006 #endif
1007
1008 #ifndef RTLD_NOW
1009 #define RTLD_NOW 0
1010 #endif
1011
1012 /* needed for some systems without iconv. Doesn't really matter
1013    what error code we use */
1014 #ifndef EILSEQ
1015 #define EILSEQ EIO
1016 #endif
1017
1018 /* add varargs prototypes with printf checking */
1019 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
1020 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
1021 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
1022 #ifndef HAVE_SNPRINTF_DECL
1023 int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
1024 #endif
1025 #ifndef HAVE_ASPRINTF_DECL
1026 int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
1027 #endif
1028
1029 /* we used to use these fns, but now we have good replacements
1030    for snprintf and vsnprintf */
1031 #define slprintf snprintf
1032 #define vslprintf vsnprintf
1033
1034 #endif /* _INCLUDES_H */
1035