1#ifndef _INCLUDES_H 2#define _INCLUDES_H 3/* 4 Unix SMB/Netbios implementation. 5 Version 1.9. 6 Machine customisation and include handling 7 Copyright (C) Andrew Tridgell 1994-1998 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22*/ 23 24#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#ifdef LINUX 49#define DEFAULT_PRINTING PRINT_BSD 50#define PRINTCAP_NAME "/etc/printcap" 51#endif 52 53#ifdef RELIANTUNIX 54/* 55 * <unistd.h> has to be included before any other to get 56 * large file support on Reliant UNIX 57 */ 58#ifdef HAVE_UNISTD_H 59#include <unistd.h> 60#endif 61#endif /* RELIANTUNIX */ 62 63#ifdef HAVE_SYSV_IPC 64#define USE_SYSV_IPC 65#endif 66 67#ifdef HAVE_SHARED_MMAP 68#define USE_SHARED_MMAP 69#endif 70 71 72/* if we have both SYSV IPC and shared mmap then we need to choose */ 73#if (defined(USE_SYSV_IPC) && defined(USE_SHARED_MMAP)) 74# undef USE_SHARED_MMAP 75#endif 76 77#include <sys/types.h> 78 79#ifdef TIME_WITH_SYS_TIME 80#include <sys/time.h> 81#include <time.h> 82#else 83#ifdef HAVE_SYS_TIME_H 84#include <sys/time.h> 85#else 86#include <time.h> 87#endif 88#endif 89 90#ifdef HAVE_SYS_RESOURCE_H 91#include <sys/resource.h> 92#endif 93 94#ifdef HAVE_UNISTD_H 95#include <unistd.h> 96#endif 97 98#include <stdio.h> 99#include <stddef.h> 100 101#ifdef HAVE_SYS_PARAM_H 102#include <sys/param.h> 103#endif 104 105#ifdef HAVE_STDLIB_H 106#include <stdlib.h> 107#endif 108 109#ifdef HAVE_SYS_SOCKET_H 110#include <sys/socket.h> 111#endif 112 113#ifdef HAVE_SYS_SYSCALL_H 114#include <sys/syscall.h> 115#elif HAVE_SYSCALL_H 116#include <syscall.h> 117#endif 118 119#ifdef HAVE_STRING_H 120#include <string.h> 121#endif 122 123#ifdef HAVE_STRINGS_H 124#include <strings.h> 125#endif 126 127#ifdef HAVE_MEMORY_H 128#include <memory.h> 129#endif 130 131#ifdef MEM_MAN 132#include "../mem_man/mem_man.h" 133#else 134#ifdef HAVE_MALLOC_H 135#include <malloc.h> 136#endif 137#endif 138 139#ifdef HAVE_FCNTL_H 140#include <fcntl.h> 141#else 142#ifdef HAVE_SYS_FCNTL_H 143#include <sys/fcntl.h> 144#endif 145#endif 146 147#include <sys/stat.h> 148 149#ifdef HAVE_LIMITS_H 150#include <limits.h> 151#endif 152 153#ifdef HAVE_SYS_IOCTL_H 154#include <sys/ioctl.h> 155#endif 156 157#ifdef HAVE_SYS_FILIO_H 158#include <sys/filio.h> 159#endif 160 161#include <signal.h> 162 163#ifdef HAVE_SYS_WAIT_H 164#include <sys/wait.h> 165#endif 166#ifdef HAVE_CTYPE_H 167#include <ctype.h> 168#endif 169#ifdef HAVE_GRP_H 170#include <grp.h> 171#endif 172#ifdef HAVE_SYS_PRIV_H 173#include <sys/priv.h> 174#endif 175#ifdef HAVE_SYS_ID_H 176#include <sys/id.h> 177#endif 178 179#include <errno.h> 180 181#ifdef HAVE_UTIME_H 182#include <utime.h> 183#endif 184 185#ifdef HAVE_SYS_SELECT_H 186#include <sys/select.h> 187#endif 188 189#ifdef HAVE_SYS_MODE_H 190/* apparently AIX needs this for S_ISLNK */ 191#ifndef S_ISLNK 192#include <sys/mode.h> 193#endif 194#endif 195 196#ifdef HAVE_GLOB_H 197#include <glob.h> 198#endif 199 200#include <pwd.h> 201 202#ifdef HAVE_STDARG_H 203#include <stdarg.h> 204#else 205#include <varargs.h> 206#endif 207 208#include <netinet/in.h> 209#include <arpa/inet.h> 210#include <netdb.h> 211#include <syslog.h> 212#include <sys/file.h> 213 214#ifdef HAVE_NETINET_TCP_H 215#include <netinet/tcp.h> 216#endif 217 218/* 219 * The next three defines are needed to access the IPTOS_* options 220 * on some systems. 221 */ 222 223#ifdef HAVE_NETINET_IN_SYSTM_H 224#include <netinet/in_systm.h> 225#endif 226 227#ifdef HAVE_NETINET_IN_IP_H 228#include <netinet/in_ip.h> 229#endif 230 231#ifdef HAVE_NETINET_IP_H 232#include <netinet/ip.h> 233#endif 234 235#if defined(HAVE_TERMIOS_H) 236/* POSIX terminal handling. */ 237#include <termios.h> 238#elif defined(HAVE_TERMIO_H) 239/* Older SYSV terminal handling - don't use if we can avoid it. */ 240#include <termio.h> 241#elif defined(HAVE_SYS_TERMIO_H) 242/* Older SYSV terminal handling - don't use if we can avoid it. */ 243#include <sys/termio.h> 244#endif 245 246#if HAVE_DIRENT_H 247# include <dirent.h> 248# define NAMLEN(dirent) strlen((dirent)->d_name) 249#else 250# define dirent direct 251# define NAMLEN(dirent) (dirent)->d_namlen 252# if HAVE_SYS_NDIR_H 253# include <sys/ndir.h> 254# endif 255# if HAVE_SYS_DIR_H 256# include <sys/dir.h> 257# endif 258# if HAVE_NDIR_H 259# include <ndir.h> 260# endif 261#endif 262 263#ifdef HAVE_SYS_MMAN_H 264#include <sys/mman.h> 265#endif 266 267#ifdef HAVE_SYSV_IPC 268#include <sys/ipc.h> 269#include <sys/shm.h> 270#include <sys/sem.h> 271 272/* 273 * The following is needed if compiling 274 * with gcc on SGI IRIX 6.5.x systems as 275 * the structure packing for system calls is 276 * different between IRIX cc and gcc. 277 */ 278 279#ifdef NEED_SGI_SEMUN_HACK 280union semun_hack { 281 int val; 282 struct semid_ds *buf; 283 unsigned short *array; 284 char __dummy[5]; 285}; 286#define semun semun_hack 287#endif /* NEED_SGI_SEMUN_HACK */ 288#endif /* HAVE_SYSV_IPC */ 289 290#ifdef HAVE_NET_IF_H 291#include <net/if.h> 292#endif 293 294 295#ifdef HAVE_SYS_MOUNT_H 296#include <sys/mount.h> 297#endif 298 299#ifdef HAVE_SYS_VFS_H 300#include <sys/vfs.h> 301#endif 302 303#ifdef HAVE_SYS_ACL_H 304#include <sys/acl.h> 305#endif 306 307#ifdef HAVE_SYS_FS_S5PARAM_H 308#include <sys/fs/s5param.h> 309#endif 310 311#if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY) 312#include <sys/filsys.h> 313#endif 314 315#ifdef HAVE_SYS_STATFS_H 316# include <sys/statfs.h> 317#endif 318 319#ifdef HAVE_DUSTAT_H 320#include <sys/dustat.h> 321#endif 322 323#ifdef HAVE_SYS_STATVFS_H 324#include <sys/statvfs.h> 325#endif 326 327#ifdef HAVE_SHADOW_H 328#include <shadow.h> 329#endif 330 331#ifdef HAVE_GETPWANAM 332#include <sys/label.h> 333#include <sys/audit.h> 334#include <pwdadj.h> 335#endif 336 337#ifdef HAVE_SYS_SECURITY_H 338#include <sys/security.h> 339#include <prot.h> 340#define PASSWORD_LENGTH 16 341#endif /* HAVE_SYS_SECURITY_H */ 342 343#ifdef HAVE_COMPAT_H 344#include <compat.h> 345#endif 346 347#ifdef HAVE_STROPTS_H 348#include <stropts.h> 349#endif 350 351#ifdef HAVE_POLL_H 352#include <poll.h> 353#endif 354 355#ifdef HAVE_SYS_CAPABILITY_H 356#include <sys/capability.h> 357#endif 358 359#if defined(HAVE_RPC_RPC_H) 360/* 361 * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h. 362 */ 363#if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT) 364#undef AUTH_ERROR 365#endif 366#include <rpc/rpc.h> 367#endif 368 369#if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT) 370#define HAVE_NETGROUP 1 371#endif 372 373#if defined (HAVE_NETGROUP) 374#if defined(HAVE_RPCSVC_YP_PROT_H) 375#include <rpcsvc/yp_prot.h> 376#endif 377#if defined(HAVE_RPCSVC_YPCLNT_H) 378#include <rpcsvc/ypclnt.h> 379#endif 380#endif /* HAVE_NETGROUP */ 381 382/* 383 * Define VOLATILE if needed. 384 */ 385 386#if defined(HAVE_VOLATILE) 387#define VOLATILE volatile 388#else 389#define VOLATILE 390#endif 391 392/* 393 * Define SIG_ATOMIC_T if needed. 394 */ 395 396#if defined(HAVE_SIG_ATOMIC_T_TYPE) 397#define SIG_ATOMIC_T sig_atomic_t 398#else 399#define SIG_ATOMIC_T int 400#endif 401 402#ifndef uchar 403#define uchar unsigned char 404#endif 405 406#ifdef HAVE_UNSIGNED_CHAR 407#define schar signed char 408#else 409#define schar char 410#endif 411 412/* 413 Samba needs type definitions for int16, int32, uint16 and uint32. 414 415 Normally these are signed and unsigned 16 and 32 bit integers, but 416 they actually only need to be at least 16 and 32 bits 417 respectively. Thus if your word size is 8 bytes just defining them 418 as signed and unsigned int will work. 419*/ 420 421#ifndef uint8 422#define uint8 unsigned char 423#endif 424 425#if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H) 426#if (SIZEOF_SHORT == 4) 427#define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16; 428#else /* SIZEOF_SHORT != 4 */ 429#define int16 short 430#endif /* SIZEOF_SHORT != 4 */ 431#endif 432 433/* 434 * Note we duplicate the size tests in the unsigned 435 * case as int16 may be a typedef from rpc/rpc.h 436 */ 437 438#if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H) 439#if (SIZEOF_SHORT == 4) 440#define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16; 441#else /* SIZEOF_SHORT != 4 */ 442#define uint16 unsigned short 443#endif /* SIZEOF_SHORT != 4 */ 444#endif 445 446#if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H) 447#if (SIZEOF_INT == 4) 448#define int32 int 449#elif (SIZEOF_LONG == 4) 450#define int32 long 451#elif (SIZEOF_SHORT == 4) 452#define int32 short 453#endif 454#endif 455 456/* 457 * Note we duplicate the size tests in the unsigned 458 * case as int32 may be a typedef from rpc/rpc.h 459 */ 460 461#if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H) 462#if (SIZEOF_INT == 4) 463#define uint32 unsigned int 464#elif (SIZEOF_LONG == 4) 465#define uint32 unsigned long 466#elif (SIZEOF_SHORT == 4) 467#define uint32 unsigned short 468#endif 469#endif 470 471/* 472 * Types for devices, inodes and offsets. 473 */ 474 475#ifndef SMB_DEV_T 476#define SMB_DEV_T dev_t 477#endif 478 479/* 480 * Setup the correctly sized inode type. 481 */ 482 483#ifndef SMB_INO_T 484# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T) 485# define SMB_INO_T ino64_t 486# else 487# define SMB_INO_T ino_t 488# endif 489#endif 490 491#ifndef LARGE_SMB_INO_T 492# if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8)) 493# define LARGE_SMB_INO_T 1 494# endif 495#endif 496 497#ifdef LARGE_SMB_INO_T 498#define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) 499#else 500#define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0)) 501#endif 502 503#ifndef SMB_OFF_T 504# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) 505# define SMB_OFF_T off64_t 506# else 507# define SMB_OFF_T off_t 508# endif 509#endif 510 511#define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8) 512 513/* 514 * Set the define that tells us if we can do 64 bit 515 * NT SMB calls. 516 */ 517 518#ifndef LARGE_SMB_OFF_T 519# if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)) 520# define LARGE_SMB_OFF_T 1 521# endif 522#endif 523 524#ifdef LARGE_SMB_OFF_T 525#define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) 526#else 527#define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0)) 528#endif 529 530/* 531 * Type for stat structure. 532 */ 533 534#ifndef SMB_STRUCT_STAT 535# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T) 536# define SMB_STRUCT_STAT struct stat64 537# else 538# define SMB_STRUCT_STAT struct stat 539# endif 540#endif 541 542/* 543 * Type for dirent structure. 544 */ 545 546#ifndef SMB_STRUCT_DIRENT 547# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64) 548# define SMB_STRUCT_DIRENT struct dirent64 549# else 550# define SMB_STRUCT_DIRENT struct dirent 551# endif 552#endif 553 554/* 555 * Defines for 64 bit fcntl locks. 556 */ 557 558#ifndef SMB_STRUCT_FLOCK 559# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T) 560# define SMB_STRUCT_FLOCK struct flock64 561# else 562# define SMB_STRUCT_FLOCK struct flock 563# endif 564#endif 565 566#ifndef SMB_F_SETLKW 567# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T) 568# define SMB_F_SETLKW F_SETLKW64 569# else 570# define SMB_F_SETLKW F_SETLKW 571# endif 572#endif 573 574#ifndef SMB_F_SETLK 575# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T) 576# define SMB_F_SETLK F_SETLK64 577# else 578# define SMB_F_SETLK F_SETLK 579# endif 580#endif 581 582#ifndef SMB_F_GETLK 583# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T) 584# define SMB_F_GETLK F_GETLK64 585# else 586# define SMB_F_GETLK F_GETLK 587# endif 588#endif 589 590#if defined(HAVE_LONGLONG) 591#define SMB_BIG_UINT unsigned long long 592#define SMB_BIG_INT long long 593#define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) 594#else 595#define SMB_BIG_UINT unsigned long 596#define SMB_BIG_INT long 597#define SBIG_UINT(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0)) 598#endif 599 600#ifndef MIN 601#define MIN(a,b) ((a)<(b)?(a):(b)) 602#endif 603 604#ifndef MAX 605#define MAX(a,b) ((a)>(b)?(a):(b)) 606#endif 607 608#ifndef HAVE_STRERROR 609extern char *sys_errlist[]; 610#define strerror(i) sys_errlist[i] 611#endif 612 613#ifndef HAVE_STRCHR 614# define strchr index 615# define strrchr rindex 616#endif 617 618#ifndef HAVE_ERRNO_DECL 619extern int errno; 620#endif 621 622#ifdef HAVE_BROKEN_GETGROUPS 623#define GID_T int 624#else 625#define GID_T gid_t 626#endif 627 628#ifndef NGROUPS_MAX 629#define NGROUPS_MAX 32 /* Guess... */ 630#endif 631 632/* Lists, trees, caching, datbase... */ 633#include "ubi_sLinkList.h" 634#include "ubi_dLinkList.h" 635#include "dlinklist.h" 636#include "talloc.h" 637#include "interfaces.h" 638#include "hash.h" 639 640#ifdef HAVE_FNMATCH 641#include <fnmatch.h> 642#else 643#include "fnmatch.h" 644#endif 645 646#ifndef UBI_BINTREE_H 647#include "ubi_Cache.h" 648#endif /* UBI_BINTREE_H */ 649 650#include "debugparse.h" 651 652#include "version.h" 653#include "smb.h" 654#include "smbw.h" 655#include "nameserv.h" 656 657#include "byteorder.h" 658 659#include "kanji.h" 660#include "charset.h" 661 662#include "nterr.h" 663 664#ifdef WITH_PROFILE 665#include "profile.h" 666#endif 667 668#ifndef MAXCODEPAGELINES 669#define MAXCODEPAGELINES 256 670#endif 671 672/***** automatically generated prototypes *****/ 673#include "proto.h" 674 675#ifdef strcpy 676#undef strcpy 677#endif /* strcpy */ 678#define strcpy(dest,src) __ERROR__XX__NEVER_USE_STRCPY___; 679 680#ifdef strcat 681#undef strcat 682#endif /* strcat */ 683#define strcat(dest,src) __ERROR__XX__NEVER_USE_STRCAT___; 684 685#ifdef sprintf 686#undef sprintf 687#endif /* sprintf */ 688#define sprintf __ERROR__XX__NEVER_USE_SPRINTF__; 689 690#define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1) 691#define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1) 692#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1) 693#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1) 694 695#ifdef __COMPAR_FN_T 696#define QSORT_CAST (__compar_fn_t) 697#endif 698 699#ifndef QSORT_CAST 700#define QSORT_CAST (int (*)(const void *, const void *)) 701#endif 702 703/* this guess needs to be improved (tridge) */ 704#if (defined(STAT_STATVFS) || defined(STAT_STATVFS64)) && !defined(SYSV) 705#define SYSV 1 706#endif 707 708/* 709 * Veritas File System. Often in addition to native. 710 * Quotas different. 711 */ 712#if defined(HAVE_SYS_FS_VX_QUOTA_H) 713#define VXFS_QUOTA 714#endif 715 716#ifndef DEFAULT_PRINTING 717#ifdef HAVE_LIBCUPS 718#define DEFAULT_PRINTING PRINT_CUPS 719#define PRINTCAP_NAME "cups" 720#elif defined(SYSV) 721#define DEFAULT_PRINTING PRINT_SYSV 722#define PRINTCAP_NAME "lpstat" 723#else 724#define DEFAULT_PRINTING PRINT_BSD 725#define PRINTCAP_NAME "/etc/printcap" 726#endif 727#endif 728 729#ifndef PRINTCAP_NAME 730#define PRINTCAP_NAME "/etc/printcap" 731#endif 732 733#ifndef SIGCLD 734#define SIGCLD SIGCHLD 735#endif 736 737#if (defined(HAVE_SYSV_IPC) || defined(HAVE_SHARED_MMAP)) 738#define FAST_SHARE_MODES 1 739#endif 740 741#ifndef MAP_FILE 742#define MAP_FILE 0 743#endif 744 745#ifdef HAVE_SYSV_IPC 746#ifndef HAVE_UNION_SEMUN 747union semun { 748 int val; 749 struct semid_ds *buf; 750 unsigned short *array; 751}; 752#endif 753#endif 754 755#if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP)) 756#define USE_SMBPASS_DB 1 757#endif 758 759#if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS) 760#define OSF1_ENH_SEC 1 761#endif 762 763#ifndef ALLOW_CHANGE_PASSWORD 764#if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID)) 765#define ALLOW_CHANGE_PASSWORD 1 766#endif 767#endif 768 769/* what is the longest significant password available on your system? 770 Knowing this speeds up password searches a lot */ 771#ifndef PASSWORD_LENGTH 772#define PASSWORD_LENGTH 8 773#endif 774 775#ifdef REPLACE_INET_NTOA 776#define inet_ntoa rep_inet_ntoa 777#endif 778 779#ifndef HAVE_PIPE 780#define SYNC_DNS 1 781#endif 782 783#ifndef MAXPATHLEN 784#define MAXPATHLEN 256 785#endif 786 787#ifndef SEEK_SET 788#define SEEK_SET 0 789#endif 790 791#ifndef INADDR_LOOPBACK 792#define INADDR_LOOPBACK 0x7f000001 793#endif 794 795#ifndef INADDR_NONE 796#define INADDR_NONE 0xffffffff 797#endif 798 799#ifndef HAVE_CRYPT 800#define crypt ufc_crypt 801#endif 802 803#ifndef O_ACCMODE 804#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR) 805#endif 806 807#if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID) 808#define ULTRIX_AUTH 1 809#endif 810 811#ifdef HAVE_LIBREADLINE 812# ifdef HAVE_READLINE_READLINE_H 813# include <readline/readline.h> 814# ifdef HAVE_READLINE_HISTORY_H 815# include <readline/history.h> 816# endif 817# else 818# ifdef HAVE_READLINE_H 819# include <readline.h> 820# ifdef HAVE_HISTORY_H 821# include <history.h> 822# endif 823# else 824# undef HAVE_LIBREADLINE 825# endif 826# endif 827#endif 828 829#ifndef HAVE_STRDUP 830char *strdup(const char *s); 831#endif 832 833#ifndef HAVE_MEMMOVE 834void *memmove(void *dest,const void *src,int size); 835#endif 836 837#ifndef HAVE_INITGROUPS 838int initgroups(char *name,gid_t id); 839#endif 840 841#ifndef HAVE_RENAME 842int rename(const char *zfrom, const char *zto); 843#endif 844 845#ifndef HAVE_MKTIME 846time_t mktime(struct tm *t); 847#endif 848 849#ifndef HAVE_FTRUNCATE 850int ftruncate(int f,long l); 851#endif 852 853#ifndef HAVE_STRTOUL 854unsigned long strtoul(const char *nptr, char **endptr, int base); 855#endif 856 857#if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL)) 858/* stupid glibc */ 859int setresuid(uid_t ruid, uid_t euid, uid_t suid); 860#endif 861#if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL)) 862int setresgid(gid_t rgid, gid_t egid, gid_t sgid); 863#endif 864 865#if !defined(HAVE_BZERO) && defined(HAVE_MEMSET) 866#define bzero(a,b) memset((a),'\0',(b)) 867#endif 868 869#ifdef REPLACE_GETPASS 870#define getpass(prompt) getsmbpass((prompt)) 871#endif 872 873/* 874 * Some older systems seem not to have MAXHOSTNAMELEN 875 * defined. 876 */ 877#ifndef MAXHOSTNAMELEN 878#define MAXHOSTNAMELEN 254 879#endif 880 881/* yuck, I'd like a better way of doing this */ 882#define DIRP_SIZE (256 + 32) 883 884/* 885 * glibc on linux doesn't seem to have MSG_WAITALL 886 * defined. I think the kernel has it though.. 887 */ 888 889#ifndef MSG_WAITALL 890#define MSG_WAITALL 0 891#endif 892 893/* default socket options. Dave Miller thinks we should default to TCP_NODELAY 894 given the socket IO pattern that Samba uses */ 895#ifdef TCP_NODELAY 896#define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY" 897#else 898#define DEFAULT_SOCKET_OPTIONS "" 899#endif 900 901#endif /* _INCLUDES_H */ 902