1cc1ffde2600ff44f790f4ed2d0fcfacd5bfaab7
[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
49 #include <sys/types.h>
50
51 #ifdef TIME_WITH_SYS_TIME
52 #include <sys/time.h>
53 #include <time.h>
54 #else
55 #ifdef HAVE_SYS_TIME_H
56 #include <sys/time.h>
57 #else
58 #include <time.h>
59 #endif
60 #endif
61
62 #ifdef HAVE_SYS_RESOURCE_H
63 #include <sys/resource.h>
64 #endif
65
66 #ifdef HAVE_UNISTD_H
67 #include <unistd.h>
68 #endif
69
70 #include <stdio.h>
71 #include <stddef.h>
72
73 #ifdef HAVE_SYS_PARAM_H
74 #include <sys/param.h>
75 #endif
76
77 #ifdef HAVE_STDLIB_H
78 #include <stdlib.h>
79 #endif
80
81 #ifdef HAVE_SYS_SOCKET_H
82 #include <sys/socket.h>
83 #endif
84
85 #ifdef HAVE_SYS_SYSCALL_H
86 #include <sys/syscall.h>
87 #elif HAVE_SYSCALL_H
88 #include <syscall.h>
89 #endif
90
91 #ifdef HAVE_STRING_H
92 #include <string.h>
93 #endif
94
95 #ifdef HAVE_STRINGS_H
96 #include <strings.h>
97 #endif
98
99 #ifdef HAVE_MEMORY_H
100 #include <memory.h>
101 #endif
102
103 #ifdef MEM_MAN
104 #include "../mem_man/mem_man.h"
105 #else
106 #ifdef HAVE_MALLOC_H
107 #include <malloc.h>
108 #endif
109 #endif
110
111 #ifdef HAVE_FCNTL_H
112 #include <fcntl.h>
113 #else
114 #ifdef HAVE_SYS_FCNTL_H
115 #include <sys/fcntl.h>
116 #endif
117 #endif
118
119 #include <sys/stat.h>
120
121 #ifdef HAVE_LIMITS_H
122 #include <limits.h>
123 #endif
124
125 #ifdef HAVE_SYS_IOCTL_H
126 #include <sys/ioctl.h>
127 #endif
128
129 #ifdef HAVE_SYS_FILIO_H
130 #include <sys/filio.h>
131 #endif
132
133 #include <signal.h>
134
135 #ifdef HAVE_SYS_WAIT_H
136 #include <sys/wait.h>
137 #endif
138 #ifdef HAVE_CTYPE_H
139 #include <ctype.h>
140 #endif
141 #ifdef HAVE_GRP_H
142 #include <grp.h>
143 #endif
144 #ifdef HAVE_SYS_ID_H
145 #include <sys/id.h>
146 #endif
147
148 #include <errno.h>
149
150 #ifdef HAVE_UTIME_H
151 #include <utime.h>
152 #endif
153
154 #ifdef HAVE_SYS_SELECT_H
155 #include <sys/select.h>
156 #endif
157
158 #ifdef HAVE_SYS_MODE_H
159 /* apparently AIX needs this for S_ISLNK */
160 #ifndef S_ISLNK
161 #include <sys/mode.h>
162 #endif
163 #endif
164
165 #ifdef HAVE_GLOB_H
166 #include <glob.h>
167 #endif
168
169 #include <pwd.h>
170 #include <grp.h>
171
172 #ifdef HAVE_STDARG_H
173 #include <stdarg.h>
174 #else
175 #include <varargs.h>
176 #endif
177
178 #include <netinet/in.h>
179 #include <arpa/inet.h>
180 #include <netdb.h>
181 #include <syslog.h>
182 #include <sys/file.h>
183
184 #ifdef HAVE_NETINET_TCP_H
185 #include <netinet/tcp.h>
186 #endif
187
188 #ifdef HAVE_TERMIOS_H
189 #include <termios.h>
190 #endif
191
192 #if HAVE_DIRENT_H
193 # include <dirent.h>
194 # define NAMLEN(dirent) strlen((dirent)->d_name)
195 #else
196 # define dirent direct
197 # define NAMLEN(dirent) (dirent)->d_namlen
198 # if HAVE_SYS_NDIR_H
199 #  include <sys/ndir.h>
200 # endif
201 # if HAVE_SYS_DIR_H
202 #  include <sys/dir.h>
203 # endif
204 # if HAVE_NDIR_H
205 #  include <ndir.h>
206 # endif
207 #endif
208
209 #ifdef HAVE_SHARED_MMAP
210 #include <sys/mman.h>
211 #endif
212
213 #ifdef HAVE_SYSV_IPC
214 #include <sys/ipc.h>
215 #include <sys/shm.h>
216 #include <sys/sem.h>
217 #endif
218
219 /*
220  * Seems to be needed by some OS's that complain
221  * about struct rtentry not being defined.
222  */
223  
224 #ifdef HAVE_NET_ROUTE_H
225 #include <net/route.h>
226 #endif
227
228 #ifdef HAVE_NET_IF_H
229 #include <net/if.h>
230 #endif
231
232
233 #ifdef HAVE_SYS_MOUNT_H
234 #include <sys/mount.h>
235 #endif
236
237 #ifdef HAVE_SYS_VFS_H
238 #include <sys/vfs.h>
239 #endif
240
241 #ifdef HAVE_SYS_ACL_H
242 #include <sys/acl.h>
243 #endif
244
245 #ifdef HAVE_SYS_FS_S5PARAM_H 
246 #include <sys/fs/s5param.h>
247 #endif
248
249 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
250 #include <sys/filsys.h> 
251 #endif
252
253 #ifdef HAVE_SYS_STATFS_H
254 # include <sys/statfs.h>
255 #endif
256
257 #ifdef HAVE_DUSTAT_H              
258 #include <sys/dustat.h>
259 #endif
260
261 #ifdef HAVE_SYS_STATVFS_H          
262 #include <sys/statvfs.h>
263 #endif
264
265 #ifdef HAVE_SHADOW_H
266 #include <shadow.h>
267 #endif
268
269 #ifdef HAVE_GETPWANAM
270 #include <sys/label.h>
271 #include <sys/audit.h>
272 #include <pwdadj.h>
273 #endif
274
275 #ifdef HAVE_SYS_SECURITY_H
276 #include <sys/security.h>
277 #include <prot.h>
278 #define PASSWORD_LENGTH 16
279 #endif  /* HAVE_SYS_SECURITY_H */
280
281 #ifdef HAVE_COMPAT_H
282 #include <compat.h>
283 #endif
284
285 #ifdef HAVE_STROPTS_H
286 #include <stropts.h>
287 #endif
288
289 #ifdef HAVE_POLL_H
290 #include <poll.h>
291 #endif
292
293 #ifdef HAVE_SYS_CAPABILITY_H
294 #include <sys/capability.h>
295 #endif
296
297 #if defined(HAVE_RPC_RPC_H)
298 #include <rpc/rpc.h>
299 #endif
300
301 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
302 #define HAVE_NETGROUP 1
303 #endif
304
305 #if defined (HAVE_NETGROUP)
306 #if defined(HAVE_RPCSVC_YP_PROT_H)
307 #include <rpcsvc/yp_prot.h>
308 #endif
309 #if defined(HAVE_RPCSVC_YPCLNT_H)
310 #include <rpcsvc/ypclnt.h>
311 #endif
312 #endif /* HAVE_NETGROUP */
313
314 #ifndef uchar
315 #define uchar unsigned char
316 #endif
317
318 #ifdef HAVE_UNSIGNED_CHAR
319 #define schar signed char
320 #else
321 #define schar char
322 #endif
323
324 /*
325    Samba needs type definitions for int16, int32, uint16 and uint32.
326
327    Normally these are signed and unsigned 16 and 32 bit integers, but
328    they actually only need to be at least 16 and 32 bits
329    respectively. Thus if your word size is 8 bytes just defining them
330    as signed and unsigned int will work.
331 */
332
333 #ifndef uint8
334 #define uint8 unsigned char
335 #endif
336
337 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
338 #if (SIZEOF_SHORT == 4)
339 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
340 #else /* SIZEOF_SHORT != 4 */
341 #define int16 short
342 #endif /* SIZEOF_SHORT != 4 */
343 #endif
344
345 /*
346  * Note we duplicate the size tests in the unsigned 
347  * case as int16 may be a typedef from rpc/rpc.h
348  */
349
350 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
351 #if (SIZEOF_SHORT == 4)
352 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
353 #else /* SIZEOF_SHORT != 4 */
354 #define uint16 unsigned short
355 #endif /* SIZEOF_SHORT != 4 */
356 #endif
357
358 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
359 #if (SIZEOF_INT == 4)
360 #define int32 int
361 #elif (SIZEOF_LONG == 4)
362 #define int32 long
363 #elif (SIZEOF_SHORT == 4)
364 #define int32 short
365 #endif
366 #endif
367
368 /*
369  * Note we duplicate the size tests in the unsigned 
370  * case as int32 may be a typedef from rpc/rpc.h
371  */
372
373 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
374 #if (SIZEOF_INT == 4)
375 #define uint32 unsigned int
376 #elif (SIZEOF_LONG == 4)
377 #define uint32 unsigned long
378 #elif (SIZEOF_SHORT == 4)
379 #define uint32 unsigned short
380 #endif
381 #endif
382
383 /*
384  * Types for devices, inodes and offsets.
385  */
386
387 #ifndef SMB_DEV_T
388 #define SMB_DEV_T dev_t
389 #endif
390
391 /*
392  * Setup the correctly sized inode type.
393  */
394
395 #ifndef SMB_INO_T
396 #  ifdef HAVE_INO64_T
397 #    define SMB_INO_T ino64_t
398 #  else
399 #    define SMB_INO_T ino_t
400 #  endif
401 #endif
402
403 #ifndef LARGE_SMB_INO_T
404 #  if defined(HAVE_INO64_T) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
405 #    define LARGE_SMB_INO_T 1
406 #  endif
407 #endif
408
409 #ifdef LARGE_SMB_INO_T
410 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
411 #else 
412 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
413 #endif
414
415 #ifndef SMB_OFF_T
416 #  ifdef HAVE_OFF64_T
417 #    define SMB_OFF_T off64_t
418 #  else
419 #    define SMB_OFF_T off_t
420 #  endif
421 #endif
422
423 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
424
425 /*
426  * Set the define that tells us if we can do 64 bit
427  * NT SMB calls.
428  */
429
430 #ifndef LARGE_SMB_OFF_T
431 #  if defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
432 #    define LARGE_SMB_OFF_T 1
433 #  endif
434 #endif
435
436 #ifdef LARGE_SMB_OFF_T
437 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
438 #else 
439 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
440 #endif
441
442 /*
443  * Type for stat structure.
444  */
445
446 #ifndef SMB_STRUCT_STAT
447 #  if defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
448 #    define SMB_STRUCT_STAT struct stat64
449 #  else
450 #    define SMB_STRUCT_STAT struct stat
451 #  endif
452 #endif
453
454 /*
455  * Defines for 64 bit fcntl locks.
456  */
457
458 #ifndef SMB_STRUCT_FLOCK
459 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
460 #    define SMB_STRUCT_FLOCK struct flock64
461 #  else
462 #    define SMB_STRUCT_FLOCK struct flock
463 #  endif
464 #endif
465
466 #ifndef SMB_F_SETLKW
467 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
468 #    define SMB_F_SETLKW F_SETLKW64
469 #  else
470 #    define SMB_F_SETLKW F_SETLKW
471 #  endif
472 #endif
473
474 #ifndef SMB_F_SETLK
475 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
476 #    define SMB_F_SETLK F_SETLK64
477 #  else
478 #    define SMB_F_SETLK F_SETLK
479 #  endif
480 #endif
481
482 #ifndef SMB_F_GETLK
483 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
484 #    define SMB_F_GETLK F_GETLK64
485 #  else
486 #    define SMB_F_GETLK F_GETLK
487 #  endif
488 #endif
489
490 #if defined(HAVE_LONGLONG)
491 #define SMB_BIG_UINT unsigned long long
492 #define SMB_BIG_INT long long
493 #else
494 #define SMB_BIG_UINT unsigned long
495 #define SMB_BIG_INT long
496 #endif
497
498 #ifndef MIN
499 #define MIN(a,b) ((a)<(b)?(a):(b))
500 #endif
501
502 #ifndef MAX
503 #define MAX(a,b) ((a)>(b)?(a):(b))
504 #endif
505
506 #ifndef HAVE_STRERROR
507 extern char *sys_errlist[];
508 #define strerror(i) sys_errlist[i]
509 #endif
510
511 #ifndef HAVE_STRCHR
512 # define strchr                 index
513 # define strrchr                rindex
514 #endif
515
516 #ifndef HAVE_ERRNO_DECL
517 extern int errno;
518 #endif
519
520 #ifdef HAVE_BROKEN_GETGROUPS
521 #define GID_T int
522 #else
523 #define GID_T gid_t
524 #endif
525
526
527 /* Lists, trees, caching, datbase... */
528 #include "ubi_sLinkList.h"
529 #include "ubi_dLinkList.h"
530 #include "dlinklist.h"
531
532 #ifndef UBI_BINTREE_H
533 #include "ubi_Cache.h"
534 #endif /* UBI_BINTREE_H */
535
536 #include "debugparse.h"
537
538 #include "version.h"
539 #include "smb.h"
540 #include "smbw.h"
541 #include "nameserv.h"
542
543 #include "byteorder.h"
544
545 #include "kanji.h"
546 #include "charset.h"
547
548 #include "nterr.h"
549
550 #ifndef MAXCODEPAGELINES
551 #define MAXCODEPAGELINES 256
552 #endif
553
554 /***** automatically generated prototypes *****/
555 #include "proto.h"
556
557 #ifdef strcpy
558 #undef strcpy
559 #endif /* strcpy */
560 #define strcpy(dest,src) __ERROR__XX__NEVER_USE_STRCPY___;
561
562 #ifdef strcat
563 #undef strcat
564 #endif /* strcat */
565 #define strcat(dest,src) __ERROR__XX__NEVER_USE_STRCAT___;
566
567 #ifdef sprintf
568 #undef sprintf
569 #endif /* sprintf */
570 #define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
571
572 #define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1)
573 #define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1)
574 #define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
575 #define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
576
577 #ifdef __COMPAR_FN_T
578 #define QSORT_CAST (__compar_fn_t)
579 #endif
580
581 #ifndef QSORT_CAST
582 #define QSORT_CAST (int (*)(const void *, const void *))
583 #endif
584
585 /* this guess needs to be improved (tridge) */
586 #if defined(STAT_STATVFS) && !defined(SYSV)
587 #define SYSV 1
588 #endif
589
590 #ifndef DEFAULT_PRINTING
591 #ifdef SYSV
592 #define DEFAULT_PRINTING PRINT_SYSV
593 #define PRINTCAP_NAME "lpstat"
594 #else
595 #define DEFAULT_PRINTING PRINT_BSD
596 #define PRINTCAP_NAME "/etc/printcap"
597 #endif
598 #endif
599
600 #ifndef SIGCLD
601 #define SIGCLD SIGCHLD
602 #endif
603
604 #if (defined(HAVE_SYSV_IPC) || defined(HAVE_SHARED_MMAP))
605 #define FAST_SHARE_MODES 1
606 #endif
607
608 #ifndef MAP_FILE
609 #define MAP_FILE 0
610 #endif
611
612 #ifdef HAVE_SYSV_IPC
613 #ifndef HAVE_UNION_SEMUN
614 union semun {
615         int val;
616         struct semid_ds *buf;
617         unsigned short *array;
618 };
619 #endif
620 #endif
621
622 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP))
623 #define USE_SMBPASS_DB 1
624 #define USE_SMBUNIX_DB 1
625 #endif
626
627 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
628 #define OSF1_ENH_SEC 1
629 #endif
630
631 #if defined(HAVE_PAM_AUTHENTICATE) && defined(HAVE_SECURITY_PAM_APPL_H)
632 #define HAVE_PAM 1
633 #endif
634
635 #ifndef ALLOW_CHANGE_PASSWORD
636 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
637 #define ALLOW_CHANGE_PASSWORD 1
638 #endif
639 #endif
640
641 /* what is the longest significant password available on your system? 
642  Knowing this speeds up password searches a lot */
643 #ifndef PASSWORD_LENGTH
644 #define PASSWORD_LENGTH 8
645 #endif
646
647 #ifdef REPLACE_INET_NTOA
648 #define inet_ntoa rep_inet_ntoa
649 #endif
650
651 #ifndef HAVE_PIPE
652 #define SYNC_DNS 1
653 #endif
654
655 #ifndef MAXPATHLEN
656 #define MAXPATHLEN 256
657 #endif
658
659 #ifndef SEEK_SET
660 #define SEEK_SET 0
661 #endif
662
663 #ifndef INADDR_LOOPBACK
664 #define INADDR_LOOPBACK 0x7f000001
665 #endif
666
667 #ifndef INADDR_NONE
668 #define INADDR_NONE 0xffffffff
669 #endif
670
671 #ifndef HAVE_CRYPT
672 #define crypt ufc_crypt
673 #endif
674
675 #ifndef O_ACCMODE
676 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
677 #endif
678
679 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
680 #define ULTRIX_AUTH 1
681 #endif
682
683 #ifdef HAVE_LIBREADLINE
684 #  ifdef HAVE_READLINE_READLINE_H
685 #    include <readline/readline.h>
686 #    ifdef HAVE_READLINE_HISTORY_H
687 #      include <readline/history.h>
688 #    endif
689 #  else
690 #    ifdef HAVE_READLINE_H
691 #      include <readline.h>
692 #      ifdef HAVE_HISTORY_H
693 #        include <history.h>
694 #      endif
695 #    else
696 #      undef HAVE_LIBREADLINE
697 #    endif
698 #  endif
699 #endif
700
701 #ifndef HAVE_STRDUP
702 char *strdup(const char *s);
703 #endif
704
705 #ifndef HAVE_MEMMOVE
706 void *memmove(void *dest,const void *src,int size);
707 #endif
708
709 #ifndef HAVE_INITGROUPS
710 int initgroups(char *name,gid_t id);
711 #endif
712
713 #ifndef HAVE_RENAME
714 int rename(const char *zfrom, const char *zto);
715 #endif
716
717 #ifndef HAVE_MKTIME
718 time_t mktime(struct tm *t);
719 #endif
720
721 #ifndef HAVE_FTRUNCATE
722 int ftruncate(int f,long l);
723 #endif
724
725 #if (defined(HAVE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
726 /* stupid glibc */
727 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
728 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
729 #endif
730
731 #if (defined(HAVE_CRYPT) && !defined(HAVE_CRYPT_DECL) && !defined(KRB4_AUTH))
732 /* stupid glibc */
733 int crypt(const char *key, const char *salt);
734 #endif
735
736 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
737 #define bzero(a,b) memset((a),'\0',(b))
738 #endif
739
740 #ifdef REPLACE_GETPASS
741 #define getpass(prompt) getsmbpass((prompt))
742 #endif
743
744 /* yuck, I'd like a better way of doing this */
745 #define DIRP_SIZE (256 + 32)
746
747 #endif /* _INCLUDES_H */