#ifndef _INCLUDES_H #define _INCLUDES_H /* Unix SMB/Netbios implementation. Version 1.9. Machine customisation and include handling Copyright (C) Andrew Tridgell 1994-1997 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This file does all the #includes's. This makes it easier to port to a new unix. Hopefully a port will only have to edit the Makefile and add a section for the new unix below. */ /* the first OS dependent section is to setup what includes will be used. the main OS dependent section comes later on */ #ifdef ALTOS #define NO_UTIMEH #endif #ifdef MIPS #define POSIX_H #define NO_UTIMEH #endif #ifdef sun386 #define NO_UTIMEH #endif #ifdef NEXT2 #define NO_UTIMEH #endif #ifdef NEXT3_0 #define NO_UTIMEH #define NO_UNISTDH #endif #ifdef APOLLO #define NO_UTIMEH #define NO_SYSMOUNTH #define NO_UNISTDH #endif #ifdef AIX #define NO_SYSMOUNTH #endif #ifdef M88K_R3 #define SVR3H #define NO_RESOURCEH #endif #ifdef DNIX #define NO_SYSMOUNTH #define NO_NETIFH #define NO_RESOURCEH #define PRIME_NMBD 0 #define NO_SETGROUPS #endif #ifdef ISC #define SYSSTREAMH #define NO_RESOURCEH #endif #ifdef QNX #define NO_RESOURCEH #define NO_SYSMOUNTH #define USE_MMAP 1 #ifdef __386__ #define __i386__ #endif #endif #ifdef NEWS42 #define NO_UTIMEH #define NO_STRFTIME #define NO_UTIMBUF #define REPLACE_MKTIME #define NO_TM_NAME #endif #ifdef OS2 #define NO_SYSMOUNTH #define NO_NETIFH #endif #ifdef LYNX #define NO_SYSMOUNTH #endif #if (defined(SHADOW_PWD)||defined(OSF1_ENH_SEC)||defined(SecureWare)||defined(PWDAUTH)) #define PASSWORD_LENGTH 16 #endif /* here is the general includes section - with some ifdefs generated by the previous section */ #include "local.h" #include #ifdef POSIX_STDLIBH #include #else #include #endif #include #include #ifndef NO_UTIMEH #include #endif #include #ifdef SVR3H #include #include #include #include #include #endif #include #ifdef AXPROC #include #endif #include #include #ifdef POSIX_H #include #include #include #else #include #include #endif #include #include #include #include #include #include #include #ifndef NO_RESOURCEH #include #endif #ifndef NO_SYSMOUNTH #include #endif #include #ifdef __STDC__ #include #else #include #endif #ifndef NO_UNISTDH #include #endif #include #ifdef SYSSTREAMH #include #endif #ifndef NO_NETIFH #ifdef POSIX_H #include #else #include #endif #endif #if defined(GETPWANAM) #include #include #include #include #endif #if defined(SHADOW_PWD) && !defined(NETBSD) && !defined(FreeBSD) && !defined(CONVEX) #include #endif #ifdef SYSLOG #include #endif /*************************************************************************** Here come some platform specific sections ***************************************************************************/ #ifdef LINUX #include #include #include #include #include #ifndef NO_ASMSIGNALH #include #endif #ifdef GLIBC2 #define _LINUX_C_LIB_VERSION_MAJOR 6 #include #include #include #include #include #endif #define SIGNAL_CAST (__sighandler_t) #define USE_GETCWD #define USE_SETSID #define HAVE_BZERO #define HAVE_MEMMOVE #define USE_SIGPROCMASK #define USE_WAITPID #if 0 /* SETFS disabled until we can check on some bug reports */ #if _LINUX_C_LIB_VERSION_MAJOR >= 5 #define USE_SETFS #endif #endif #ifdef SHADOW_PWD #if _LINUX_C_LIB_VERSION_MAJOR < 5 #ifndef crypt #define crypt pw_encrypt #endif #endif #endif #endif #ifdef SUNOS4 #define SIGNAL_CAST (void (*)(int)) #include #include #include #include #include #include #include #include /* #include */ #ifdef sun386 #define NO_STRFTIME #define NO_UTIMBUF #define mktime timelocal typedef unsigned short mode_t; #else #include #define NO_STRERROR #endif #ifndef REPLACE_GETPASS #define REPLACE_GETPASS #endif #ifndef BSD_TERMIO #define BSD_TERMIO #endif #ifndef USE_SIGPROCMASK #define USE_SIGPROCMASK #endif #ifndef USE_WAITPID #define USE_WAITPID #endif /* SunOS doesn't have POSIX atexit */ #define atexit on_exit #endif #ifdef SUNOS5 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef USE_LIBDES #include #endif /* USE_LIBDES */ extern int gettimeofday (struct timeval *, void *); extern int gethostname (char *name, int namelen); extern int innetgr (const char *, const char *, const char *, const char *); #define USE_SETVBUF #define SIGNAL_CAST (void (*)(int)) #ifndef SYSV #define SYSV #endif #define USE_WAITPID #define REPLACE_STRLEN #define USE_STATVFS #define USE_GETCWD #define USE_SETSID #ifndef REPLACE_GETPASS #define REPLACE_GETPASS #endif /* REPLACE_GETPASS */ #define USE_SIGPROCMASK #endif #ifdef ULTRIX #include #include #include #include #ifdef ULTRIX_AUTH #include #endif char *getwd(char *); #define NOSTRDUP #ifdef __STDC__ #define SIGNAL_CAST (void(*)(int)) #endif #define USE_DIRECT #define USE_WAITPID #endif #ifdef SGI4 #include #include #include #include #ifndef SYSV #define SYSV #endif #define SIGNAL_CAST (void (*)()) #define STATFS4 #define USE_WAITPID #define USE_DIRECT #define USE_SETSID #endif #if defined(SGI5) || defined(SGI6) #include #include #include #include #include #include #include #include #define USE_WAITPID #define NETGROUP #ifndef SYSV #define SYSV #endif #define SIGNAL_CAST (void (*)()) #define USE_STATVFS #define USE_WAITPID #define USE_SETSID #endif #ifdef MIPS #include #include #include #include #include #include #include #define SIGNAL_CAST (void (*)()) typedef int mode_t; extern struct group *getgrnam(); extern struct passwd *getpwnam(); #define STATFS4 #define NO_STRERROR #define REPLACE_STRSTR #endif /* MIPS */ #ifdef DGUX #include #include #include #include #include #include #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) #define STATFS4 #define USE_GETCWD #endif #ifdef SVR4 #include #include #include #include #include #include #include #include #include #include #include #include #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) #define USE_STATVFS #define USE_GETCWD #define USE_SETSID #endif #ifdef OSF1 #include #include #include char *getwd(char *); char *mktemp(char *); /* No standard include */ #include #include /* both for inet_ntoa */ #define SIGNAL_CAST ( void (*) (int) ) #define STATFS3 #define USE_F_FSIZE #define USE_SETSID #include #ifdef OSF1_ENH_SEC #include #include #include #include #include #define PASSWORD_LENGTH 16 #define NEED_AUTH_PARAMETERS #endif /* OSF1_ENH_SEC */ #endif #ifdef CLIX #include #define SIGNAL_CAST (void (*)()) #include #include #include #define NO_EID #define USE_WAITPID #define STATFS4 #define NO_FSYNC #define USE_GETCWD #define USE_SETSID #ifndef REPLACE_GETPASS #define REPLACE_GETPASS #endif /* REPLACE_GETPASS */ #define NO_GETRLIMIT #endif /* CLIX */ #ifdef BSDI #include #include #define SIGNAL_CAST (void (*)()) #define USE_DIRECT #endif #ifdef NETBSD #include #include /* you may not need this */ #define NO_GETSPNAM #define SIGNAL_CAST (void (*)()) #define USE_DIRECT #define REPLACE_INNETGR #endif #ifdef FreeBSD #include #include #include #include #include #define SIGNAL_CAST (void (*)()) #define USE_SETVBUF #define USE_SETSID #define USE_GETCWD #define USE_WAITPID #define USE_DIRECT #define HAVE_MEMMOVE #define HAVE_BZERO #define HAVE_GETTIMEOFDAY #define HAVE_PATHCONF #define HAVE_GETGRNAM 1 #endif #ifdef AIX #include #include #include #include #include #include #include #include #include #include #define SYSV #define USE_WAITPID #define USE_SIGBLOCK #define SIGNAL_CAST (void (*)()) #define DEFAULT_PRINTING PRINT_AIX /* we undef this because sys/param.h is broken in aix. uggh. */ #undef MAXHOSTNAMELEN #endif #ifdef HPUX #include #include #include #include #include #include #include #ifdef HPUX_10_TRUSTED #include #include #define NEED_AUTH_PARAMETERS #endif #define SIGNAL_CAST (void (*)(__harg)) #ifndef HPUX10 /* This is only needed for HPUX 9.x */ #define SELECT_CAST (int *) #endif /* HPUX10 */ #define SYSV #define USE_WAITPID #define WAIT3_CAST2 (int *) #define USE_GETCWD #define USE_SETSID #define USE_SETRES #define DEFAULT_PRINTING PRINT_HPUX /* Ken Weiss tells us that SIGCLD_IGNORE is not good for HPUX */ /* #define SIGCLD_IGNORE */ #endif /* HPUX */ #ifdef SEQUENT #include #include #include #include #include #include #include #include #include #include #define SIGNAL_CAST (void (*)(int)) #define USE_WAITPID #define USE_GETCWD #define NO_EID #define STATFS4 #define USE_DIRECT #ifdef PTX4 #undef USE_DIRECT #endif #endif #ifdef SEQUENT_PTX4 #include #include #include #include #include #include #include #include #include #include #include #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) #define USE_STATVFS #define USE_GETCWD #ifndef seteuid #define seteuid(uid) setreuid(-1,uid) #endif #ifndef setegid #define setegid(gid) setregid(-1,gid) #endif #endif #ifdef NEXT2 #include #include #include #include #define bzero(b,len) memset(b,0,len) #define mode_t int #define NO_UTIMBUF #include #define NOSTRDUP #define USE_DIRECT #define USE_WAITPID #endif #ifdef NEXT3_0 #include #include #include #define bzero(b,len) memset(b,0,len) #define NO_UTIMBUF #include #define NOSTRDUP #define USE_DIRECT #define mode_t int #define GID_TYPE int #define gid_t int #define pid_t int #define SIGNAL_CAST (void (*)(int)) #define WAIT3_CAST1 (union wait *) #define HAVE_GMTOFF #endif #ifdef APOLLO #include #include #include #define NO_UTIMBUF #define USE_DIRECT #define USE_GETCWD #define SIGNAL_CAST (void (*)()) #define HAVE_FCNTL_LOCK 0 #define HAVE_GETTIMEOFDAY #define STATFS4 #endif #ifdef SCO #include #include #include #include #include #include #include #include #include #include #ifdef EVEREST #include #endif /* EVEREST */ #ifdef NETGROUP #include #endif /* NETGROUP */ #ifdef SecureWare #include #include #include #define crypt bigcrypt #endif /* SecureWare */ #define SIGNAL_CAST (void (*)(int)) #define USE_WAITPID #define USE_GETCWD #define USE_SETSID #ifdef SCO3_2_2 #define setuid(u) setreuid(u,-1) #define seteuid(u) setreuid(-1,u) #else /* SCO3_2_2 */ #ifndef EVEREST #define ftruncate(f,l) syscall(0x0a28,f,l) #define USE_IFREQ #define NO_INITGROUPS #endif /* EVEREST */ #endif /* SCO3_2_2 */ #define STATFS4 #define NO_FSYNC #define HAVE_PATHCONF #define NO_GETRLIMIT #endif /* SCO */ /* Definitions for RiscIX */ #ifdef RiscIX #define SIGNAL_CAST (void (*)(int)) #include #include #include #include #include #include #define HAVE_GETTIMEOFDAY #define NOSTRCASECMP #define NOSTRDUP #endif #ifdef ISC #include #include #include #include #include #include #include #include #include #include #define FIONREAD FIORDCHK #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) #define USE_GETCWD #define USE_SETSID #define USE_IFREQ #define NO_FTRUNCATE #define STATFS4 #define NO_FSYNC #endif #ifdef AUX #include #include #include #include #include #include #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) char *strdup (char *); #define USE_GETCWD #endif #ifdef M88K_R3 #include #include #include #include #define STATFS4 #define SYSV #define USE_WAITPID #define SIGNAL_CAST (void (*)(int)) char *strdup (char *); #define USE_GETCWD #define NO_FSYNC #define NO_EID #endif #ifdef DNIX #include #include #include #include #include #define NO_GET_BROADCAST #define USE_WAITPID #define USE_GETCWD #define USE_SETSID #define STATFS4 #define NO_EID #define PF_INET AF_INET #define NO_STRERROR #define ftruncate(f,l) chsize(f,l) #endif /* DNIX */ #ifdef CONVEX #include #include #include #include #include #include #define DONT_REINSTALL_SIG #define USE_SIGBLOCK #define USE_WAITPID #define SIGNAL_CAST (_SigFunc_Ptr_t) #define NO_GETSPNAM #define HAVE_MEMMOVE extern char *mktemp(char *); extern int fsync(int); extern int seteuid(uid_t); extern int setgroups(int, int *); extern int initgroups(char *, int); extern int statfs(char *, struct statfs *); extern int setegid(gid_t); extern int getopt(int, char *const *, const char *); extern int chroot(char *); extern int gettimeofday(struct timeval *, struct timezone *); extern int gethostname(char *, int); extern char *crypt(char *, char *); extern char *getpass(char *); #endif #ifdef CRAY #define MAXPATHLEN 1024 #include #include #include #include #define SIGNAL_CAST (void (*)(int)) #define SIGCLD_IGNORE #define HAVE_FCNTL_LOCK 1 #define USE_SETSID #define STATFS4 #endif #ifdef ALTOS #include #include #include #include #include #define const #define uid_t int #define gid_t int #define mode_t int #define ptrdiff_t int #define HAVE_GETGRNAM 0 #define NO_EID #define NO_FSYNC #define NO_FTRUNCATE #define NO_GETRLIMIT #define NO_INITGROUPS #define NO_SELECT #define NO_SETGROUPS #define NO_STRERROR #define NO_STRFTIME #define NO_TM_NAME #define NO_UTIMEH #define NOSTRCASECMP #define REPLACE_MKTIME #define REPLACE_RENAME #define REPLACE_STRSTR #define STATFS4 #define USE_GETCWD #endif #ifdef QNX #define STATFS4 #include #include #include #include #define SIGNAL_CAST (void (*)()) #define USE_WAITPID #define NO_INITGROUPS #define NO_SETGROUPS #define HAVE_TIMEZONE #define USE_GETCWD #define USE_SETSID #define HAVE_FCNTL_LOCK 1 #define DEFAULT_PRINTING PRINT_QNX #endif #ifdef NEWS42 #include #include #include #include typedef int mode_t; #endif #ifdef OS2 #include #include #include #include #define SIGNAL_CAST (void (*)()) #define HAVE_FCNTL_LOCK 0 #define USE_WAITPID #define NO_GET_BROADCAST #define NO_EID #define NO_SETGROUPS #define NO_INITGROUPS #define NO_CRYPT #define NO_STATFS #define NO_CHROOT #define NO_CHOWN #define strcasecmp stricmp #define strncasecmp strnicmp #endif #ifdef LYNX #define SIGNAL_CAST (void (*)()) #define WAIT3_CAST1 (union wait *) #define STATFS4 #include #include #include #include #include #include #define USE_GETCWD #define USE_GETSID #endif #ifdef BOS #define SIGNAL_CAST (void (*)(int)) #include #include #include #include #include #include #include #include #endif #ifdef AMIGA #include #include #include #include #include #include #include #include #include #include #include #include #include #define SIGNAL_CAST (void (*)(int)) #define USE_GETCWD #define HAVE_BZERO #define HAVE_MEMMOVE #define USE_SIGPROCMASK #define USE_WAITPID #define USE_DIRECT #define USE_F_FSIZE #define HAVE_FCNTL_LOCK 0 #define HAVE_GETTIMEOFDAY #define HAVE_PATHCONF #define HAVE_NO_PROC #define NO_FORK_DEBUG #define HAVE_FORK 0 #define HAVE_VFORK 1 #endif /* For UnixWare 2.x's ia_uinfo routines. (tangent@cyberport.com) */ #ifdef IA_UINFO #include #include #endif /******************************************************************* end of the platform specific sections ********************************************************************/ #if defined(USE_MMAP) || defined(FAST_SHARE_MODES) #include #endif #ifdef SecureWare #define NEED_AUTH_PARAMETERS #endif #ifdef REPLACE_GETPASS extern char *getsmbpass(char *); #define getpass(s) getsmbpass(s) #endif #ifdef REPLACE_INNETGR #define innetgr(group,host,user,dom) InNetGr(group,host,user,dom) #endif #ifndef FD_SETSIZE #define FD_SETSIZE 255 #endif #ifndef __STDC__ #define const #endif /* Now for some other grungy stuff */ #ifdef NO_GETSPNAM struct spwd { /* fake shadow password structure */ char *sp_pwdp; }; #endif #ifndef HAVE_BZERO #ifndef bzero #define bzero(p,s) memset(p,0,s) #endif #endif #ifndef HAVE_MEMMOVE #ifndef memmove #define memmove(d,s,n) MemMove(d,s,n) #endif #endif #ifdef USE_DIRECT #include #endif /* some unixes have ENOTTY instead of TIOCNOTTY */ #ifndef TIOCNOTTY #ifdef ENOTTY #define TIOCNOTTY ENOTTY #endif #endif #ifndef SIGHUP #define SIGHUP 1 #endif /* if undefined then use bsd or sysv printing */ #ifndef DEFAULT_PRINTING #ifdef SYSV #define DEFAULT_PRINTING PRINT_SYSV #else #define DEFAULT_PRINTING PRINT_BSD #endif #endif #ifdef AFS_AUTH #include #include #endif #ifdef DFS_AUTH #include #include #endif #ifdef KRB5_AUTH #include #endif #ifdef NO_UTIMBUF struct utimbuf { time_t actime; time_t modtime; }; #endif #ifdef NO_STRERROR #ifndef strerror extern char *sys_errlist[]; #define strerror(i) sys_errlist[i] #endif #endif #ifndef perror #define perror(m) printf("%s: %s\n",m,strerror(errno)) #endif #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 255 #endif #include "version.h" #include "smb.h" #include "nameserv.h" #include "proto.h" #include "byteorder.h" #include "kanji.h" #include "charset.h" #ifndef S_IFREG #define S_IFREG 0100000 #endif #ifndef S_ISREG #define S_ISREG(x) ((S_IFREG & (x))!=0) #endif #ifndef S_ISDIR #define S_ISDIR(x) ((S_IFDIR & (x))!=0) #endif #if !defined(S_ISLNK) && defined(S_IFLNK) #define S_ISLNK(x) ((S_IFLNK & (x))!=0) #endif #ifdef UFC_CRYPT #define crypt ufc_crypt #endif #ifdef REPLACE_STRLEN #define strlen(s) Strlen(s) #endif #ifdef REPLACE_STRSTR #define strstr(s,p) Strstr(s,p) #endif #ifdef REPLACE_MKTIME #define mktime(t) Mktime(t) #endif #ifndef NGROUPS_MAX #define NGROUPS_MAX 128 #endif #ifndef EDQUOT #define EDQUOT ENOSPC #endif #ifndef HAVE_GETGRNAM #define HAVE_GETGRNAM 1 #endif #ifndef SOL_TCP #define SOL_TCP 6 #endif /* default to using ftruncate workaround as this is safer than assuming it works and getting lots of bug reports */ #ifndef FTRUNCATE_CAN_EXTEND #define FTRUNCATE_CAN_EXTEND 0 #endif /* maybe this unix doesn't separate RD and WR locks? */ #ifndef F_RDLCK #define F_RDLCK F_WRLCK #endif #ifndef ENOTSOCK #define ENOTSOCK EINVAL #endif #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifndef MAP_FILE #define MAP_FILE 0 #endif #ifndef HAVE_FCNTL_LOCK #define HAVE_FCNTL_LOCK 1 #endif #ifndef WAIT3_CAST2 #define WAIT3_CAST2 (struct rusage *) #endif #ifndef WAIT3_CAST1 #define WAIT3_CAST1 (int *) #endif #ifndef QSORT_CAST #define QSORT_CAST (int (*)()) #endif #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK 0x7f000001 #endif /* INADDR_LOOPBACK */ /* this is a rough check to see if this machine has a lstat() call. it is not guaranteed to work */ #if !defined(S_ISLNK) #define lstat stat #endif /* Not all systems declare ERRNO in errno.h... and some systems #define it! */ #ifndef errno extern int errno; #endif #ifdef NO_EID #define geteuid() getuid() #define getegid() getgid() #define seteuid(x) setuid(x) #define setegid(x) setgid(x) #endif #if (HAVE_FCNTL_LOCK == 0) /* since there is no locking available, system includes */ /* for DomainOS 10.4 do not contain any of the following */ /* #define's. So, to satisfy the compiler, add these */ /* #define's, although they arn't really necessary. */ #define F_GETLK 0 #define F_SETLK 0 #define F_WRLCK 0 #define F_UNLCK 0 #endif /* HAVE_FCNTL_LOCK == 0 */ #ifdef NOSTRCASECMP #define strcasecmp(s1,s2) StrCaseCmp(s1,s2) #define strncasecmp(s1,s2,n) StrnCaseCmp(s1,s2,n) #endif #ifndef strcpy #define strcpy(dest,src) StrCpy(dest,src) #endif /* possibly wrap the malloc calls */ #if WRAP_MALLOC /* undo the old malloc def if necessary */ #ifdef malloc #define xx_old_malloc malloc #undef malloc #endif #define malloc(size) malloc_wrapped(size,__FILE__,__LINE__) /* undo the old realloc def if necessary */ #ifdef realloc #define xx_old_realloc realloc #undef realloc #endif #define realloc(ptr,size) realloc_wrapped(ptr,size,__FILE__,__LINE__) /* undo the old free def if necessary */ #ifdef free #define xx_old_free free #undef free #endif #define free(ptr) free_wrapped(ptr,__FILE__,__LINE__) /* and the malloc prototypes */ void *malloc_wrapped(int,char *,int); void *realloc_wrapped(void *,int,char *,int); void free_wrapped(void *,char *,int); #endif #if WRAP_MEMCPY /* undo the old memcpy def if necessary */ #ifdef memcpy #define xx_old_memcpy memcpy #undef memcpy #endif #define memcpy(d,s,l) memcpy_wrapped(d,s,l,__FILE__,__LINE__) void *memcpy_wrapped(void *d,void *s,int l,char *fname,int line); #endif #endif