0f0bbdd89b99ae323920e515e6cdaba851511606
[tprouty/samba.git] / source / include / includes.h
1 #ifndef _INCLUDES_H
2 #define _INCLUDES_H
3 /* 
4    Unix SMB/Netbios implementation.
5    Version 1.9.
6    Machine customisation and include handling
7    Copyright (C) Andrew Tridgell 1994-1998
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #include "config.h"
25 #include "local.h"
26
27 #ifdef AIX
28 #define DEFAULT_PRINTING PRINT_AIX
29 #endif
30
31 #ifdef HPUX
32 #define DEFAULT_PRINTING PRINT_HPUX
33 #endif
34
35 #ifdef QNX
36 #define DEFAULT_PRINTING PRINT_QNX
37 #endif
38
39 #ifdef SUNOS4
40 #define REPLACE_GETPASS
41 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
42 #undef HAVE_TERMIOS_H
43 #endif
44
45 #ifdef SUNOS5
46 #define REPLACE_GETPASS
47 #endif
48
49
50 #include <sys/types.h>
51
52 #ifdef TIME_WITH_SYS_TIME
53 #include <sys/time.h>
54 #include <time.h>
55 #else
56 #ifdef HAVE_SYS_TIME_H
57 #include <sys/time.h>
58 #else
59 #include <time.h>
60 #endif
61 #endif
62
63 #ifdef HAVE_SYS_RESOURCE_H
64 #include <sys/resource.h>
65 #endif
66
67 #ifdef HAVE_UNISTD_H
68 #include <unistd.h>
69 #endif
70
71 #include <stdio.h>
72 #include <stddef.h>
73
74 #ifdef HAVE_SYS_PARAM_H
75 #include <sys/param.h>
76 #endif
77
78 #ifdef HAVE_STDLIB_H
79 #include <stdlib.h>
80 #endif
81
82 #ifdef HAVE_SYS_SOCKET_H
83 #include <sys/socket.h>
84 #endif
85
86 #ifdef HAVE_STRING_H
87 #include <string.h>
88 #endif
89
90 #ifdef HAVE_STRINGS_H
91 #include <strings.h>
92 #endif
93
94 #ifdef HAVE_MEMORY_H
95 #include <memory.h>
96 #endif
97
98 #ifdef HAVE_MALLOC_H
99 #include <malloc.h>
100 #endif
101
102 #ifdef HAVE_FCNTL_H
103 #include <fcntl.h>
104 #else
105 #ifdef HAVE_SYS_FCNTL_H
106 #include <sys/fcntl.h>
107 #endif
108 #endif
109
110 #include <sys/stat.h>
111
112 #ifdef HAVE_LIMITS_H
113 #include <limits.h>
114 #endif
115
116 #ifdef HAVE_SYS_IOCTL_H
117 #include <sys/ioctl.h>
118 #endif
119
120 #ifdef HAVE_SYS_FILIO_H
121 #include <sys/filio.h>
122 #endif
123
124 #include <signal.h>
125
126 #ifdef HAVE_SYS_WAIT_H
127 #include <sys/wait.h>
128 #endif
129 #ifdef HAVE_CTYPE_H
130 #include <ctype.h>
131 #endif
132 #ifdef HAVE_GRP_H
133 #include <grp.h>
134 #endif
135 #ifdef HAVE_SYS_ID_H
136 #include <sys/id.h>
137 #endif
138
139 #include <errno.h>
140
141 #ifdef HAVE_UTIME_H
142 #include <utime.h>
143 #endif
144
145 #ifdef HAVE_SYS_SELECT_H
146 #include <sys/select.h>
147 #endif
148
149 #ifdef HAVE_SYS_MODE_H
150 /* apparently AIX needs this for S_ISLNK */
151 #ifndef S_ISLNK
152 #include <sys/mode.h>
153 #endif
154 #endif
155
156 #ifdef HAVE_GLOB
157 #include <glob.h>
158 #endif
159
160 #include <pwd.h>
161 #include <grp.h>
162
163 #ifdef HAVE_STDARG_H
164 #include <stdarg.h>
165 #else
166 #include <varargs.h>
167 #endif
168
169 #include <netinet/in.h>
170 #include <arpa/inet.h>
171 #include <netdb.h>
172 #include <syslog.h>
173 #include <sys/file.h>
174
175 #ifdef HAVE_NETINET_TCP_H
176 #include <netinet/tcp.h>
177 #endif
178
179 #ifdef HAVE_TERMIOS_H
180 #include <termios.h>
181 #endif
182
183 #if HAVE_DIRENT_H
184 # include <dirent.h>
185 # define NAMLEN(dirent) strlen((dirent)->d_name)
186 #else
187 # define dirent direct
188 # define NAMLEN(dirent) (dirent)->d_namlen
189 # if HAVE_SYS_NDIR_H
190 #  include <sys/ndir.h>
191 # endif
192 # if HAVE_SYS_DIR_H
193 #  include <sys/dir.h>
194 # endif
195 # if HAVE_NDIR_H
196 #  include <ndir.h>
197 # endif
198 #endif
199
200 #ifdef HAVE_SHARED_MMAP
201 #include <sys/mman.h>
202 #endif
203
204 #ifdef HAVE_SYSV_IPC
205 #include <sys/ipc.h>
206 #include <sys/shm.h>
207 #include <sys/sem.h>
208 #endif
209
210 #ifdef HAVE_NET_IF_H
211 #include <net/if.h>
212 #endif
213
214
215 #ifdef HAVE_SYS_MOUNT_H
216 #include <sys/mount.h>
217 #endif
218
219 #ifdef HAVE_SYS_VFS_H
220 #include <sys/vfs.h>
221 #endif
222
223 #ifdef HAVE_SYS_FS_S5PARAM_H 
224 #include <sys/fs/s5param.h>
225 #endif
226
227 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
228 #include <sys/filsys.h> 
229 #endif
230
231 #ifdef HAVE_SYS_STATFS_H
232 # include <sys/statfs.h>
233 #endif
234
235 #ifdef HAVE_DUSTAT_H              
236 #include <sys/dustat.h>
237 #endif
238
239 #ifdef HAVE_SYS_STATVFS_H          
240 #include <sys/statvfs.h>
241 #endif
242
243 #ifdef HAVE_SHADOW_H
244 #include <shadow.h>
245 #endif
246
247 #ifdef HAVE_GETPWANAM
248 #include <sys/label.h>
249 #include <sys/audit.h>
250 #include <pwdadj.h>
251 #endif
252
253 #ifdef HAVE_SYS_SECURITY_H
254 #include <sys/security.h>
255 #include <prot.h>
256 #define PASSWORD_LENGTH 16
257 #endif  /* HAVE_SYS_SECURITY_H */
258
259 #ifdef HAVE_COMPAT_H
260 #include <compat.h>
261 #endif
262
263 #ifdef HAVE_STROPTS_H
264 #include <stropts.h>
265 #endif
266
267 #ifdef HAVE_POLL_H
268 #include <poll.h>
269 #endif
270
271 #ifndef uchar
272 #define uchar unsigned char
273 #endif
274
275 #ifdef HAVE_UNSIGNED_CHAR
276 #define schar signed char
277 #else
278 #define schar char
279 #endif
280
281 /*
282    Samba needs type definitions for int16, int32, uint16 and uint32.
283
284    Normally these are signed and unsigned 16 and 32 bit integers, but
285    they actually only need to be at least 16 and 32 bits
286    respectively. Thus if your word size is 8 bytes just defining them
287    as signed and unsigned int will work.
288 */
289
290 #ifndef uint8
291 #define uint8 unsigned char
292 #endif
293
294 #ifndef int16
295 #if (SIZEOF_SHORT == 4)
296 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
297 #else /* SIZEOF_SHORT != 4 */
298 #define int16 short
299 #endif /* SIZEOF_SHORT != 4 */
300 #endif
301
302 #ifndef uint16
303 #define uint16 unsigned int16
304 #endif
305
306 #ifndef int32
307 #if (SIZEOF_INT == 4)
308 #define int32 int
309 #elif (SIZEOF_LONG == 4)
310 #define int32 long
311 #elif (SIZEOF_SHORT == 4)
312 #define int32 short
313 #endif
314 #endif
315
316 #ifndef uint32
317 #define uint32 unsigned int32
318 #endif
319
320 /*
321  * Types for devices, inodes and offsets.
322  */
323
324 #ifndef SMB_DEV_T
325 #define SMB_DEV_T dev_t
326 #endif
327
328 /*
329  * Setup the correctly sized inode type.
330  */
331
332 #ifndef SMB_INO_T
333 #  ifdef HAVE_INO64_T
334 #    define SMB_INO_T ino64_t
335 #  else
336 #    define SMB_INO_T ino_t
337 #  endif
338 #endif
339
340 #ifndef LARGE_SMB_INO_T
341 #  if defined(HAVE_INO64_T) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
342 #    define LARGE_SMB_INO_T 1
343 #  endif
344 #endif
345
346 #ifndef SMB_OFF_T
347 #  ifdef HAVE_OFF64_T
348 #    define SMB_OFF_T off64_t
349 #  else
350 #    define SMB_OFF_T off_t
351 #  endif
352 #endif
353
354 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
355
356 /*
357  * Set the define that tells us if we can do 64 bit
358  * NT SMB calls.
359  */
360
361 #ifndef LARGE_SMB_OFF_T
362 #  if defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
363 #    define LARGE_SMB_OFF_T 1
364 #  endif
365 #endif
366
367 /*
368  * Type for stat structure.
369  */
370
371 #ifndef SMB_STRUCT_STAT
372 #  if defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
373 #    define SMB_STRUCT_STAT struct stat64
374 #  else
375 #    define SMB_STRUCT_STAT struct stat
376 #  endif
377 #endif
378
379 /*
380  * Type for statvfs structure.
381  * Unfortunately, due to the make proto structure
382  * we still need to define this as void * for platforms
383  * that don't have either statvfs or statvfs64. JRA.
384  */
385
386 #ifndef SMB_STRUCT_STATVFS
387 #  if defined(STAT_STATVFS64)
388 #    define SMB_STRUCT_STATVFS struct statvfs64
389 #  elif defined(STAT_STATVFS)
390 #    define SMB_STRUCT_STATVFS struct statvfs
391 #  else
392 #    define SMB_STRUCT_STATVFS void *
393 #  endif
394 #endif
395
396 /*
397  * Defines for 64 bit fcntl locks.
398  */
399
400 #ifndef SMB_STRUCT_FLOCK
401 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
402 #    define SMB_STRUCT_FLOCK struct flock64
403 #  else
404 #    define SMB_STRUCT_FLOCK struct flock
405 #  endif
406 #endif
407
408 #ifndef SMB_F_SETLKW
409 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
410 #    define SMB_F_SETLKW F_SETLKW64
411 #  else
412 #    define SMB_F_SETLKW F_SETLKW
413 #  endif
414 #endif
415
416 #ifndef SMB_F_SETLK
417 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
418 #    define SMB_F_SETLK F_SETLK64
419 #  else
420 #    define SMB_F_SETLK F_SETLK
421 #  endif
422 #endif
423
424 #ifndef SMB_F_GETLK
425 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
426 #    define SMB_F_GETLK F_GETLK64
427 #  else
428 #    define SMB_F_GETLK F_GETLK
429 #  endif
430 #endif
431
432 #if defined(HAVE_LONGLONG)
433 #define SMB_BIG_UINT unsigned long long
434 #define SMB_BIG_INT long long
435 #else
436 #define SMB_BIG_UINT unsigned long
437 #define SMB_BIG_INT long
438 #endif
439
440 #ifndef MIN
441 #define MIN(a,b) ((a)<(b)?(a):(b))
442 #endif
443
444 #ifndef MAX
445 #define MAX(a,b) ((a)>(b)?(a):(b))
446 #endif
447
448 #ifndef HAVE_STRERROR
449 extern char *sys_errlist[];
450 #define strerror(i) sys_errlist[i]
451 #endif
452
453 #ifndef HAVE_STRCHR
454 # define strchr                 index
455 # define strrchr                rindex
456 #endif
457
458 #ifndef HAVE_ERRNO_DECL
459 extern int errno;
460 #endif
461
462 #ifdef HAVE_BROKEN_GETGROUPS
463 #define GID_T int
464 #else
465 #define GID_T gid_t
466 #endif
467
468
469 /* Lists, trees, caching, datbase... */
470 #include "ubi_sLinkList.h"
471 #include "ubi_dLinkList.h"
472 #include "dlinklist.h"
473
474 #ifndef UBI_BINTREE_H
475 #include "ubi_Cache.h"
476 #endif /* UBI_BINTREE_H */
477
478 #include "version.h"
479 #include "smb.h"
480 #include "nameserv.h"
481
482 #include "byteorder.h"
483
484 #include "kanji.h"
485 #include "charset.h"
486
487 #include "nterr.h"
488
489 #ifndef MAXCODEPAGELINES
490 #define MAXCODEPAGELINES 256
491 #endif
492
493 /***** automatically generated prototypes *****/
494 #include "proto.h"
495
496 #ifdef strcpy
497 #undef strcpy
498 #endif /* strcpy */
499 #define strcpy(dest,src) __ERROR__XX__NEVER_USE_STRCPY___;
500
501 #ifdef strcat
502 #undef strcat
503 #endif /* strcat */
504 #define strcat(dest,src) __ERROR__XX__NEVER_USE_STRCAT___;
505
506 #ifdef sprintf
507 #undef sprintf
508 #endif /* sprintf */
509 #define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
510
511 #define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1)
512 #define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1)
513 #define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
514 #define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
515
516 #ifdef __COMPAR_FN_T
517 #define QSORT_CAST (__compar_fn_t)
518 #endif
519
520 #ifndef QSORT_CAST
521 #define QSORT_CAST (int (*)(const void *, const void *))
522 #endif
523
524 /* this guess needs to be improved (tridge) */
525 #if defined(STAT_STATVFS) && !defined(SYSV)
526 #define SYSV 1
527 #endif
528
529 #ifndef DEFAULT_PRINTING
530 #ifdef SYSV
531 #define DEFAULT_PRINTING PRINT_SYSV
532 #else
533 #define DEFAULT_PRINTING PRINT_BSD
534 #endif
535 #endif
536
537 #ifndef SIGCLD
538 #define SIGCLD SIGCHLD
539 #endif
540
541 #if (defined(HAVE_SYSV_IPC) || defined(HAVE_SHARED_MMAP))
542 #define FAST_SHARE_MODES 1
543 #endif
544
545 #ifndef MAP_FILE
546 #define MAP_FILE 0
547 #endif
548
549 #ifdef HAVE_SYSV_IPC
550 #ifndef HAVE_UNION_SEMUN
551 union semun {
552         int val;
553         struct semid_ds *buf;
554         unsigned short *array;
555 };
556 #endif
557 #endif
558
559 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP))
560 #define USE_SMBPASS_DB 1
561 #endif
562
563 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
564 #define OSF1_ENH_SEC 1
565 #endif
566
567 #if defined(HAVE_PAM_AUTHENTICATE) && defined(HAVE_SECURITY_PAM_APPL_H)
568 #define HAVE_PAM 1
569 #endif
570
571 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN)
572 #define HAVE_NETGROUP 1
573 #endif
574
575 #if defined (HAVE_NETGROUP) && defined(HAVE_RPCSVC_YPCLNT_H)
576 #include "rpcsvc/ypclnt.h"
577 #endif
578
579 #ifndef ALLOW_CHANGE_PASSWORD
580 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
581 #define ALLOW_CHANGE_PASSWORD 1
582 #endif
583 #endif
584
585 /* what is the longest significant password available on your system? 
586  Knowing this speeds up password searches a lot */
587 #ifndef PASSWORD_LENGTH
588 #define PASSWORD_LENGTH 8
589 #endif
590
591 #ifdef REPLACE_INET_NTOA
592 #define inet_ntoa rep_inet_ntoa
593 #endif
594
595 #ifndef HAVE_PIPE
596 #define SYNC_DNS 1
597 #endif
598
599 #ifndef MAXPATHLEN
600 #define MAXPATHLEN 256
601 #endif
602
603 #ifndef SEEK_SET
604 #define SEEK_SET 0
605 #endif
606
607 #ifndef INADDR_LOOPBACK
608 #define INADDR_LOOPBACK 0x7f000001
609 #endif
610
611 #ifndef INADDR_NONE
612 #define INADDR_NONE 0xffffffff
613 #endif
614
615 #ifndef HAVE_CRYPT
616 #define crypt ufc_crypt
617 #endif
618
619 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
620 #define ULTRIX_AUTH 1
621 #endif
622
623 #ifndef HAVE_STRDUP
624 char *strdup(const char *s);
625 #endif
626
627 #ifndef HAVE_MEMMOVE
628 void *memmove(void *dest,const void *src,int size);
629 #endif
630
631 #ifndef HAVE_INITGROUPS
632 int initgroups(char *name,gid_t id);
633 #endif
634
635 #ifndef HAVE_RENAME
636 int rename(const char *zfrom, const char *zto);
637 #endif
638
639 #ifndef HAVE_MKTIME
640 time_t mktime(struct tm *t);
641 #endif
642
643 #ifndef HAVE_FTRUNCATE
644 int ftruncate(int f,long l);
645 #endif
646
647 #if (defined(HAVE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
648 /* stupid glibc */
649 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
650 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
651 #endif
652
653 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
654 #define bzero(a,b) memset((a),'\0',(b))
655 #endif
656
657 #endif /* _INCLUDES_H */