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