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