s3-includes: remove global include of system/readline.h.
[samba.git] / source3 / 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 3 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, see <http://www.gnu.org/licenses/>.
21 */
22
23 #include "../replace/replace.h"
24
25 #if _SAMBA_BUILD_ == 4
26 # undef _SAMBA_BUILD_
27 # define _SAMBA_BUILD_ 3
28 #endif
29
30 /* make sure we have included the correct config.h */
31 #ifndef NO_CONFIG_H /* for some tests */
32 #ifndef CONFIG_H_IS_FROM_SAMBA
33 #error "make sure you have removed all config.h files from standalone builds!"
34 #error "the included config.h isn't from samba!"
35 #endif
36 #endif /* NO_CONFIG_H */
37
38 /* only do the C++ reserved word check when we compile
39    to include --with-developer since too many systems
40    still have comflicts with their header files (e.g. IRIX 6.4) */
41
42 #if !defined(__cplusplus) && defined(DEVELOPER) && defined(__linux__)
43 #define class #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
44 #define private #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
45 #define public #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
46 #define protected #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
47 #define template #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
48 #define this #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
49 #define new #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
50 #define delete #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
51 #define friend #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
52 #endif
53
54 #include "local.h"
55
56 #ifdef SUNOS4
57 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
58 #undef HAVE_TERMIOS_H
59 #endif
60
61 #ifdef RELIANTUNIX
62 /*
63  * <unistd.h> has to be included before any other to get
64  * large file support on Reliant UNIX. Yes, it's broken :-).
65  */
66 #ifdef HAVE_UNISTD_H
67 #include <unistd.h>
68 #endif
69 #endif /* RELIANTUNIX */
70
71 #include "system/capability.h"
72 #include "system/dir.h"
73 #include "system/filesys.h"
74 #include "system/glob.h"
75 #include "system/iconv.h"
76 #include "system/locale.h"
77 #include "system/network.h"
78 #include "system/passwd.h"
79 #include "system/select.h"
80 #include "system/shmem.h"
81 #include "system/syslog.h"
82 #include "system/terminal.h"
83 #include "system/time.h"
84 #include "system/wait.h"
85
86 #if defined(HAVE_RPC_RPC_H)
87 /*
88  * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h.
89  */
90 #if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT)
91 #undef AUTH_ERROR
92 #endif
93 /*
94  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
95  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
96  * them again without checking if they already exsist.  This generates
97  * two "Redefinition of macro" warnings for every single .c file that is
98  * compiled.
99  */
100 #if defined(HPUX) && defined(TCP_NODELAY)
101 #undef TCP_NODELAY
102 #endif
103 #if defined(HPUX) && defined(TCP_MAXSEG)
104 #undef TCP_MAXSEG
105 #endif
106 #include <rpc/rpc.h>
107 #endif
108
109 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
110 #define HAVE_NETGROUP 1
111 #endif
112
113 #if defined (HAVE_NETGROUP)
114 #if defined(HAVE_RPCSVC_YP_PROT_H)
115 /*
116  * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in <netinet/tcp.h> which
117  * was included above.  However <rpc/rpc.h> includes <sys/xti.h> which defines
118  * them again without checking if they already exsist.  This generates
119  * two "Redefinition of macro" warnings for every single .c file that is
120  * compiled.
121  */
122 #if defined(HPUX) && defined(TCP_NODELAY)
123 #undef TCP_NODELAY
124 #endif
125 #if defined(HPUX) && defined(TCP_MAXSEG)
126 #undef TCP_MAXSEG
127 #endif
128 #include <rpcsvc/yp_prot.h>
129 #endif
130 #if defined(HAVE_RPCSVC_YPCLNT_H)
131 #include <rpcsvc/ypclnt.h>
132 #endif
133 #endif /* HAVE_NETGROUP */
134
135 #ifndef HAVE_KRB5_H
136 #undef HAVE_KRB5
137 #endif
138
139 #if HAVE_LBER_H
140 #include <lber.h>
141 #if defined(HPUX) && !defined(_LBER_TYPES_H)
142 /* Define ber_tag_t and ber_int_t for using
143  * HP LDAP-UX Integration products' LDAP libraries.
144 */
145 #ifndef ber_tag_t
146 typedef unsigned long ber_tag_t;
147 typedef int ber_int_t;
148 #endif
149 #endif /* defined(HPUX) && !defined(_LBER_TYPES_H) */
150 #ifndef LBER_USE_DER
151 #define LBER_USE_DER 0x01
152 #endif
153 #endif
154
155 #if HAVE_LDAP_H
156 #include <ldap.h>
157 #ifndef LDAP_CONST
158 #define LDAP_CONST const
159 #endif
160 #ifndef LDAP_OPT_SUCCESS
161 #define LDAP_OPT_SUCCESS 0
162 #endif
163 /* Solaris 8 and maybe other LDAP implementations spell this "..._INPROGRESS": */
164 #if defined(LDAP_SASL_BIND_INPROGRESS) && !defined(LDAP_SASL_BIND_IN_PROGRESS)
165 #define LDAP_SASL_BIND_IN_PROGRESS LDAP_SASL_BIND_INPROGRESS
166 #endif
167 /* Solaris 8 defines SSL_LDAP_PORT, not LDAPS_PORT and it only does so if
168    LDAP_SSL is defined - but SSL is not working. We just want the
169    port number! Let's just define LDAPS_PORT correct. */
170 #if !defined(LDAPS_PORT)
171 #define LDAPS_PORT 636
172 #endif
173
174 /* function declarations not included in proto.h */
175 LDAP *ldap_open_with_timeout(const char *server, int port, unsigned int to);
176
177 #else
178 #undef HAVE_LDAP
179 #endif
180
181 #if HAVE_GSSAPI_GSSAPI_H
182 #include <gssapi/gssapi.h>
183 #elif HAVE_GSSAPI_GSSAPI_GENERIC_H
184 #include <gssapi/gssapi_generic.h>
185 #elif HAVE_GSSAPI_H
186 #include <gssapi.h>
187 #endif
188
189 #if HAVE_COM_ERR_H
190 #include <com_err.h>
191 #endif
192
193 #if HAVE_SYS_ATTRIBUTES_H
194 #include <sys/attributes.h>
195 #endif
196
197 #ifndef ENOATTR
198 #if defined(ENODATA)
199 #define ENOATTR ENODATA
200 #else
201 #define ENOATTR ENOENT
202 #endif
203 #endif
204
205 /* mutually exclusive (SuSE 8.2) */
206 #if HAVE_ATTR_XATTR_H
207 #include <attr/xattr.h>
208 #elif HAVE_SYS_XATTR_H
209 #include <sys/xattr.h>
210 #endif
211
212 #ifdef HAVE_SYS_EA_H
213 #include <sys/ea.h>
214 #endif
215
216 #ifdef HAVE_SYS_EXTATTR_H
217 #include <sys/extattr.h>
218 #endif
219
220 #ifdef HAVE_SYS_UIO_H
221 #include <sys/uio.h>
222 #endif
223
224 #if HAVE_LANGINFO_H
225 #include <langinfo.h>
226 #endif
227
228 #if HAVE_NETGROUP_H
229 #include <netgroup.h>
230 #endif
231
232 #if defined(HAVE_AIO_H) && defined(WITH_AIO)
233 #include <aio.h>
234 #endif
235
236 #ifdef WITH_MADVISE_PROTECTED
237 #include <sys/mman.h>
238 #endif
239
240 /* Special macros that are no-ops except when run under Valgrind on
241  * x86.  They've moved a little bit from valgrind 1.0.4 to 1.9.4 */
242 #if HAVE_VALGRIND_MEMCHECK_H
243         /* memcheck.h includes valgrind.h */
244 #include <valgrind/memcheck.h>
245 #elif HAVE_VALGRIND_H
246 #include <valgrind.h>
247 #endif
248
249 /* we support ADS if we want it and have krb5 and ldap libs */
250 #if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP)
251 #define HAVE_ADS
252 #endif
253
254 /*
255  * Define additional missing types
256  */
257 #if defined(AIX)
258 typedef sig_atomic_t SIG_ATOMIC_T;
259 #else
260 typedef sig_atomic_t volatile SIG_ATOMIC_T;
261 #endif
262
263 #ifndef uchar
264 #define uchar unsigned char
265 #endif
266
267 /*
268    Samba needs type definitions for int16, int32, uint16 and uint32.
269
270    Normally these are signed and unsigned 16 and 32 bit integers, but
271    they actually only need to be at least 16 and 32 bits
272    respectively. Thus if your word size is 8 bytes just defining them
273    as signed and unsigned int will work.
274 */
275
276 #ifndef uint8
277 #define uint8 uint8_t
278 #endif
279
280 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
281 #  define int16 int16_t
282    /* needed to work around compile issue on HP-UX 11.x */
283 #  define _INT16        1
284 #endif
285
286 /*
287  * Note we duplicate the size tests in the unsigned 
288  * case as int16 may be a typedef from rpc/rpc.h
289  */
290
291
292 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
293 #  define uint16 uint16_t
294 #endif
295
296 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
297 #  define int32 int32_t
298 #  ifndef _INT32
299      /* needed to work around compile issue on HP-UX 11.x */
300 #    define _INT32      1
301 #  endif
302 #endif
303
304 /*
305  * Note we duplicate the size tests in the unsigned 
306  * case as int32 may be a typedef from rpc/rpc.h
307  */
308
309 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
310 #  define uint32 uint32_t
311 #endif
312
313 /*
314  * check for 8 byte long long
315  */
316
317 #if !defined(uint64)
318 #  define uint64 uint64_t
319 #endif
320
321 #if !defined(int64)
322 #  define int64 int64_t
323 #endif
324
325
326 /*
327  * Types for devices, inodes and offsets.
328  */
329
330 #ifndef SMB_DEV_T
331 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)
332 #    define SMB_DEV_T dev64_t
333 #  else
334 #    define SMB_DEV_T dev_t
335 #  endif
336 #endif
337
338 #ifndef LARGE_SMB_DEV_T
339 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)) || (defined(SIZEOF_DEV_T) && (SIZEOF_DEV_T == 8))
340 #    define LARGE_SMB_DEV_T 1
341 #  endif
342 #endif
343
344 #ifdef LARGE_SMB_DEV_T
345 #define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),(v)&0xFFFFFFFF), SIVAL((p),(ofs)+4,(v)>>32))
346 #define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(((uint64_t)(IVAL((p),(ofs))))| (((uint64_t)(IVAL((p),(ofs)+4))) << 32)))
347 #else 
348 #define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),v),SIVAL((p),(ofs)+4,0))
349 #define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(IVAL((p),(ofs))))
350 #endif
351
352 /*
353  * Setup the correctly sized inode type.
354  */
355
356 #ifndef SMB_INO_T
357 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
358 #    define SMB_INO_T ino64_t
359 #  else
360 #    define SMB_INO_T ino_t
361 #  endif
362 #endif
363
364 #ifndef LARGE_SMB_INO_T
365 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
366 #    define LARGE_SMB_INO_T 1
367 #  endif
368 #endif
369
370 #ifdef LARGE_SMB_INO_T
371 #define SINO_T_VAL(p, ofs, v) (SIVAL((p),(ofs),(v)&0xFFFFFFFF), SIVAL((p),(ofs)+4,(v)>>32))
372 #define INO_T_VAL(p, ofs) ((SMB_INO_T)(((uint64_t)(IVAL(p,ofs)))| (((uint64_t)(IVAL(p,(ofs)+4))) << 32)))
373 #else 
374 #define SINO_T_VAL(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
375 #define INO_T_VAL(p, ofs) ((SMB_INO_T)(IVAL((p),(ofs))))
376 #endif
377
378 #ifndef SMB_OFF_T
379 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
380 #    define SMB_OFF_T off64_t
381 #  else
382 #    define SMB_OFF_T off_t
383 #  endif
384 #endif
385
386 #define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
387 #define BIG_UINT(p, ofs) ((((uint64_t) IVAL(p,(ofs)+4))<<32)|IVAL(p,ofs))
388 #define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((uint64_t)(IVAL((buf),(off)))) & ((uint64_t)0xFFFFFFFF)) | \
389                 (( ((uint64_t)(IVAL((buf),(off+4)))) & ((uint64_t)0xFFFFFFFF) ) << 32 ) )
390
391
392 /* this should really be a 64 bit type if possible */
393 typedef uint64_t br_off;
394
395 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
396
397 /*
398  * Set the define that tells us if we can do 64 bit
399  * NT SMB calls.
400  */
401
402 #ifndef LARGE_SMB_OFF_T
403 #  if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
404 #    define LARGE_SMB_OFF_T 1
405 #  endif
406 #endif
407
408 #ifdef LARGE_SMB_OFF_T
409 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
410 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
411 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint64_t)(IVAL((buf),(off)))) & ((uint64_t)0xFFFFFFFF) )))
412 #else 
413 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
414 #define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0))
415 #define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF )))
416 #endif
417
418 #ifndef HAVE_BLKSIZE_T
419 /* This is mainly for HP/UX which defines st_blksize as long */
420 typedef long blksize_t;
421 #endif
422
423 #ifndef HAVE_BLKCNT_T
424 /* This is mainly for HP/UX which doesn't have blkcnt_t */
425 typedef long blkcnt_t;
426 #endif
427
428 #ifndef HAVE_STRUCT_TIMESPEC
429 struct timespec {
430         time_t tv_sec;            /* Seconds.  */
431         long tv_nsec;           /* Nanoseconds.  */
432 };
433 #endif
434
435
436 /*
437  * Type for stat structure.
438  */
439
440 struct stat_ex {
441         dev_t           st_ex_dev;
442         ino_t           st_ex_ino;
443         mode_t          st_ex_mode;
444         nlink_t         st_ex_nlink;
445         uid_t           st_ex_uid;
446         gid_t           st_ex_gid;
447         dev_t           st_ex_rdev;
448         off_t           st_ex_size;
449         struct timespec st_ex_atime;
450         struct timespec st_ex_mtime;
451         struct timespec st_ex_ctime;
452         struct timespec st_ex_btime; /* birthtime */
453         /* Is birthtime real, or was it calculated ? */
454         bool            st_ex_calculated_birthtime;
455         blksize_t       st_ex_blksize;
456         blkcnt_t        st_ex_blocks;
457
458         uint32_t        st_ex_flags;
459         uint32_t        st_ex_mask;
460
461         /*
462          * Add space for VFS internal extensions. The initial user of this
463          * would be the onefs modules, passing the snapid from the stat calls
464          * to the file_id_create call. Maybe we'll have to expand this later,
465          * but the core of Samba should never look at this field.
466          */
467         uint64_t vfs_private;
468 };
469
470 typedef struct stat_ex SMB_STRUCT_STAT;
471
472 /*
473  * Type for dirent structure.
474  */
475
476 #ifndef SMB_STRUCT_DIRENT
477 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
478 #    define SMB_STRUCT_DIRENT struct dirent64
479 #  else
480 #    define SMB_STRUCT_DIRENT struct dirent
481 #  endif
482 #endif
483
484 /*
485  * Type for DIR structure.
486  */
487
488 #ifndef SMB_STRUCT_DIR
489 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIR64)
490 #    define SMB_STRUCT_DIR DIR64
491 #  else
492 #    define SMB_STRUCT_DIR DIR
493 #  endif
494 #endif
495
496 /*
497  * Defines for 64 bit fcntl locks.
498  */
499
500 #ifndef SMB_STRUCT_FLOCK
501 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
502 #    define SMB_STRUCT_FLOCK struct flock64
503 #  else
504 #    define SMB_STRUCT_FLOCK struct flock
505 #  endif
506 #endif
507
508 #ifndef SMB_F_SETLKW
509 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
510 #    define SMB_F_SETLKW F_SETLKW64
511 #  else
512 #    define SMB_F_SETLKW F_SETLKW
513 #  endif
514 #endif
515
516 #ifndef SMB_F_SETLK
517 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
518 #    define SMB_F_SETLK F_SETLK64
519 #  else
520 #    define SMB_F_SETLK F_SETLK
521 #  endif
522 #endif
523
524 #ifndef SMB_F_GETLK
525 #  if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
526 #    define SMB_F_GETLK F_GETLK64
527 #  else
528 #    define SMB_F_GETLK F_GETLK
529 #  endif
530 #endif
531
532 /*
533  * Type for aiocb structure.
534  */
535
536 #ifndef SMB_STRUCT_AIOCB
537 #  if defined(WITH_AIO)
538 #    if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_AIOCB64)
539 #      define SMB_STRUCT_AIOCB struct aiocb64
540 #    else
541 #      define SMB_STRUCT_AIOCB struct aiocb
542 #    endif
543 #  else
544 #    define SMB_STRUCT_AIOCB int /* AIO not being used but we still need the define.... */
545 #  endif
546 #endif
547
548 enum timestamp_set_resolution {
549         TIMESTAMP_SET_SECONDS = 0,
550         TIMESTAMP_SET_MSEC,
551         TIMESTAMP_SET_NT_OR_BETTER
552 };
553
554 /* Our own fstrings */
555
556 /*
557                   --------------
558                  /              \
559                 /      REST      \
560                /        IN        \
561               /       PEACE        \
562              /                      \
563              | The infamous pstring |
564              |                      |
565              |                      |
566              |      7 December      |
567              |                      |
568              |         2007         |
569             *|     *  *  *          | *
570    _________)/\\_//(\/(/\)/\//\/\///|_)_______
571 */
572
573 #ifndef FSTRING_LEN
574 #define FSTRING_LEN 256
575 typedef char fstring[FSTRING_LEN];
576 #endif
577
578 /* Samba 3 doesn't use iconv_convenience: */
579 extern void *cmdline_lp_ctx;
580
581 /* Lists, trees, caching, database... */
582 #include "../lib/util/util.h"
583 #include "../lib/util/util_net.h"
584 #include "../lib/util/xfile.h"
585 #include "../lib/util/memory.h"
586 #include "../lib/util/attr.h"
587 #include "../lib/util/tsort.h"
588 #include "../lib/util/dlinklist.h"
589 #include "tdb.h"
590 #include "util_tdb.h"
591
592 #include "talloc.h"
593
594 #include "event.h"
595 #include "../lib/util/tevent_unix.h"
596 #include "../lib/util/tevent_ntstatus.h"
597 #include "../lib/tsocket/tsocket.h"
598
599 #include "../lib/util/data_blob.h"
600 #include "../lib/util/time.h"
601 #include "../lib/util/asn1.h"
602
603 #include "libads/ads_status.h"
604 #include "interfaces.h"
605 #include "trans2.h"
606 #include "../libcli/util/error.h"
607 #include "ntioctl.h"
608 #include "../lib/util/charset/charset.h"
609 #include "dynconfig.h"
610 #include "debugparse.h"
611 #include "../libcli/security/privileges.h"
612 #include "messages.h"
613 #include "locking.h"
614 #include "smb_perfcount.h"
615 #include "smb.h"
616 #include "nameserv.h"
617 #include "../lib/util/byteorder.h"
618 #include "mapping.h"
619 #include "passdb.h"
620 #include "msdfs.h"
621
622 #include "auth.h"
623 #include "ntdomain.h"
624 #include "librpc/rpc/dcerpc.h"
625 #include "client.h"
626
627 #include "module.h"
628 #include "packet.h"
629 #include "../lib/util/talloc_stack.h"
630 #include "../lib/util/smb_threads.h"
631 #include "../lib/util/smb_threads_internal.h"
632
633 /*
634  * Reasons for cache flush.
635  */
636
637 enum flush_reason_enum {
638     SEEK_FLUSH,
639     READ_FLUSH,
640     WRITE_FLUSH,
641     READRAW_FLUSH,
642     OPLOCK_RELEASE_FLUSH,
643     CLOSE_FLUSH,
644     SYNC_FLUSH,
645     SIZECHANGE_FLUSH,
646     /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
647     NUM_FLUSH_REASONS};
648
649 #include "modules/nfs4_acls.h"
650 #include "nsswitch/libwbclient/wbclient.h"
651
652 /***** prototypes *****/
653 #ifndef NO_PROTO_H
654 #include "proto.h"
655 #endif
656 #include "libcli/security/secace.h"
657 #include "libcli/security/secacl.h"
658 #include "libcli/security/security_descriptor.h"
659 #include "libcli/security/sddl.h"
660
661 #if defined(HAVE_POSIX_ACLS)
662 #include "modules/vfs_posixacl.h"
663 #endif
664
665 #if defined(HAVE_TRU64_ACLS)
666 #include "modules/vfs_tru64acl.h"
667 #endif
668
669 #if defined(HAVE_SOLARIS_ACLS) || defined(HAVE_UNIXWARE_ACLS)
670 #include "modules/vfs_solarisacl.h"
671 #endif
672
673 #if defined(HAVE_HPUX_ACLS)
674 #include "modules/vfs_hpuxacl.h"
675 #endif
676
677 #if defined(HAVE_IRIX_ACLS)
678 #include "modules/vfs_irixacl.h"
679 #endif
680
681 /* We need this after proto.h to reference GetTimeOfDay(). */
682 #include "smbprofile.h"
683
684 /* String routines */
685
686 #include "srvstr.h"
687 #include "safe_string.h"
688
689 /* prototypes from lib/util_transfer_file.c */
690 #include "transfer_file.h"
691
692 #ifndef SIGCLD
693 #define SIGCLD SIGCHLD
694 #endif
695
696 #ifndef SIGRTMIN
697 #define SIGRTMIN NSIG
698 #endif
699
700 #ifndef MAP_FILE
701 #define MAP_FILE 0
702 #endif
703
704 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
705 #define OSF1_ENH_SEC 1
706 #endif
707
708 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
709 #define ULTRIX_AUTH 1
710 #endif
711
712 /* yuck, I'd like a better way of doing this */
713 #define DIRP_SIZE (256 + 32)
714
715 /* default socket options. Dave Miller thinks we should default to TCP_NODELAY
716    given the socket IO pattern that Samba uses */
717 #ifdef TCP_NODELAY
718 #define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
719 #else
720 #define DEFAULT_SOCKET_OPTIONS ""
721 #endif
722
723 /* dmalloc -- free heap debugger (dmalloc.org).  This should be near
724  * the *bottom* of include files so as not to conflict. */
725 #ifdef ENABLE_DMALLOC
726 #  include <dmalloc.h>
727 #endif
728
729
730 #if HAVE_KERNEL_SHARE_MODES
731 #ifndef LOCK_MAND 
732 #define LOCK_MAND       32      /* This is a mandatory flock */
733 #define LOCK_READ       64      /* ... Which allows concurrent read operations */
734 #define LOCK_WRITE      128     /* ... Which allows concurrent write operations */
735 #define LOCK_RW         192     /* ... Which allows concurrent read & write ops */
736 #endif
737 #endif
738
739 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
740
741
742 #ifdef GLIBC_HACK_FCNTL64
743 /* this is a gross hack. 64 bit locking is completely screwed up on
744    i386 Linux in glibc 2.1.95 (which ships with RedHat 7.0). This hack
745    "fixes" the problem with the current 2.4.0test kernels 
746 */
747 #define fcntl fcntl64
748 #undef F_SETLKW 
749 #undef F_SETLK 
750 #define F_SETLK 13
751 #define F_SETLKW 14
752 #endif
753
754
755 /* needed for some systems without iconv. Doesn't really matter
756    what error code we use */
757 #ifndef EILSEQ
758 #define EILSEQ EIO
759 #endif
760
761 /* add varargs prototypes with printf checking */
762 /*PRINTFLIKE2 */
763 int fdprintf(int , const char *, ...) PRINTF_ATTRIBUTE(2,3);
764 /*PRINTFLIKE1 */
765 int d_printf(const char *, ...) PRINTF_ATTRIBUTE(1,2);
766 /*PRINTFLIKE2 */
767 int d_fprintf(FILE *f, const char *, ...) PRINTF_ATTRIBUTE(2,3);
768
769 /* PRINTFLIKE2 */
770 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
771
772 /* PRINTFLIKE2 */
773 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
774
775 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
776
777 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
778
779 int asprintf_strupper_m(char **strp, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
780 char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
781
782 /*
783  * Veritas File System.  Often in addition to native.
784  * Quotas different.
785  */
786 #if defined(HAVE_SYS_FS_VX_QUOTA_H)
787 #define VXFS_QUOTA
788 #endif
789
790 #ifndef XATTR_CREATE
791 #define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
792 #endif
793
794 #ifndef XATTR_REPLACE
795 #define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
796 #endif
797
798 #if defined(HAVE_LINUX_READAHEAD) && ! defined(HAVE_READAHEAD_DECL)
799 ssize_t readahead(int fd, off64_t offset, size_t count);
800 #endif
801
802 #ifdef TRUE
803 #undef TRUE
804 #endif
805 #define TRUE __ERROR__XX__DONT_USE_TRUE
806
807 #ifdef FALSE
808 #undef FALSE
809 #endif
810 #define FALSE __ERROR__XX__DONT_USE_FALSE
811
812 /* If we have blacklisted mmap() try to avoid using it accidentally by
813    undefining the HAVE_MMAP symbol. */
814
815 #ifdef MMAP_BLACKLIST
816 #undef HAVE_MMAP
817 #endif
818
819 #ifndef CONST_DISCARD
820 #define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
821 #endif
822
823 void smb_panic( const char *why ) _NORETURN_;
824 void dump_core(void) _NORETURN_;
825 void exit_server(const char *const reason) _NORETURN_;
826 void exit_server_cleanly(const char *const reason) _NORETURN_;
827 void exit_server_fault(void) _NORETURN_;
828
829 #if defined(HAVE_IPV6)
830 void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
831                                   struct in6_addr ip);
832 #endif
833
834 /* samba3 doesn't use uwrap yet */
835 #define uwrap_enabled() 0
836
837 #define BASE_RID (0x000003E8L)
838
839 #endif /* _INCLUDES_H */