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