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