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