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