2003-08-13 05:53:07 +04:00
# ifndef _INCLUDES_H
# define _INCLUDES_H
/*
Unix SMB / CIFS implementation .
Machine customisation and include handling
Copyright ( C ) Andrew Tridgell 1994 - 1998
Copyright ( C ) 2002 by Martin Pool < mbp @ samba . org >
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 0213 9 , USA .
*/
# ifndef NO_CONFIG_H /* for some tests */
# include "config.h"
2004-05-13 14:20:53 +04:00
# include "smb_build.h"
2003-08-13 05:53:07 +04:00
# endif
# include "local.h"
# ifdef AIX
# define DEFAULT_PRINTING PRINT_AIX
# define PRINTCAP_NAME " / etc / qconfig"
# endif
# ifdef HPUX
# define DEFAULT_PRINTING PRINT_HPUX
# endif
# ifdef QNX
# define DEFAULT_PRINTING PRINT_QNX
# endif
# ifdef SUNOS4
/* on SUNOS4 termios.h conflicts with sys/ioctl.h */
# undef HAVE_TERMIOS_H
# endif
# ifndef DEFAULT_PRINTING
# define DEFAULT_PRINTING PRINT_BSD
# endif
# ifndef PRINTCAP_NAME
# define PRINTCAP_NAME " / etc / printcap"
# endif
# ifdef __GNUC__
/** Use gcc attribute to check printf fns. a1 is the 1-based index of
* the parameter containing the format , and a2 the index of the first
* argument . * */
# define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
# else
# define PRINTF_ATTRIBUTE(a1, a2)
# endif
# ifdef __GNUC__
/** gcc attribute used on function parameters so that it does not emit
* warnings about them being unused . * */
# define UNUSED(param) param __attribute__ ((unused))
# else
# define UNUSED(param) param
/** Feel free to add definitions for other compilers here. */
# endif
# ifdef RELIANTUNIX
/*
* < unistd . h > has to be included before any other to get
* large file support on Reliant UNIX . Yes , it ' s broken : - ) .
*/
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
# endif /* RELIANTUNIX */
# include <sys/types.h>
# ifdef TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
# else
# ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
# endif
# ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
# endif
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
# include <stdio.h>
# include <stddef.h>
# ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
# endif
# ifdef HAVE_STDLIB_H
# include <stdlib.h>
# endif
# ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
# endif
# ifdef HAVE_UNIXSOCKET
# include <sys/un.h>
# endif
# ifdef HAVE_SYS_SYSCALL_H
# include <sys/syscall.h>
# elif HAVE_SYSCALL_H
# include <syscall.h>
# endif
# ifdef HAVE_STRING_H
# include <string.h>
# endif
# ifdef HAVE_STRINGS_H
# include <strings.h>
# endif
# ifdef HAVE_MEMORY_H
# include <memory.h>
# endif
# ifdef HAVE_MALLOC_H
# include <malloc.h>
# endif
# ifdef HAVE_FCNTL_H
# include <fcntl.h>
# else
# ifdef HAVE_SYS_FCNTL_H
# include <sys/fcntl.h>
# endif
# endif
# include <sys/stat.h>
# ifdef HAVE_LIMITS_H
# include <limits.h>
# endif
# ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
# ifdef HAVE_SYS_FILIO_H
# include <sys/filio.h>
# endif
# include <signal.h>
# ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
# endif
# ifdef HAVE_CTYPE_H
# include <ctype.h>
# endif
# ifdef HAVE_GRP_H
# include <grp.h>
# endif
# ifdef HAVE_SYS_PRIV_H
# include <sys/priv.h>
# endif
# ifdef HAVE_SYS_ID_H
# include <sys/id.h>
# endif
# include <errno.h>
# ifdef HAVE_UTIME_H
# include <utime.h>
# endif
# ifdef HAVE_SYS_SELECT_H
# include <sys/select.h>
# endif
# ifdef HAVE_SYS_MODE_H
/* apparently AIX needs this for S_ISLNK */
# ifndef S_ISLNK
# include <sys/mode.h>
# endif
# endif
# ifdef HAVE_GLOB_H
# include <glob.h>
# endif
# include <pwd.h>
# ifdef HAVE_STDARG_H
# include <stdarg.h>
# else
# include <varargs.h>
# endif
# include <netinet/in.h>
# include <arpa/inet.h>
# include <netdb.h>
# ifdef HAVE_SYSLOG_H
# include <syslog.h>
# else
# ifdef HAVE_SYS_SYSLOG_H
# include <sys/syslog.h>
# endif
# endif
# include <sys/file.h>
# ifdef HAVE_NETINET_TCP_H
# include <netinet/tcp.h>
# endif
/*
* The next three defines are needed to access the IPTOS_ * options
* on some systems .
*/
# ifdef HAVE_NETINET_IN_SYSTM_H
# include <netinet/in_systm.h>
# endif
# ifdef HAVE_NETINET_IN_IP_H
# include <netinet/in_ip.h>
# endif
# ifdef HAVE_NETINET_IP_H
# include <netinet/ip.h>
# endif
# if defined(HAVE_TERMIOS_H)
/* POSIX terminal handling. */
# include <termios.h>
# elif defined(HAVE_TERMIO_H)
/* Older SYSV terminal handling - don't use if we can avoid it. */
# include <termio.h>
# elif defined(HAVE_SYS_TERMIO_H)
/* Older SYSV terminal handling - don't use if we can avoid it. */
# include <sys/termio.h>
# endif
# if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
# else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
# if HAVE_SYS_NDIR_H
# include <sys / ndir.h>
# endif
# if HAVE_SYS_DIR_H
# include <sys / dir.h>
# endif
# if HAVE_NDIR_H
# include <ndir.h>
# endif
# endif
# ifdef HAVE_SYS_MMAN_H
# include <sys/mman.h>
# endif
# ifdef HAVE_NET_IF_H
# include <net/if.h>
# endif
# ifdef HAVE_SYS_MOUNT_H
# include <sys/mount.h>
# endif
# ifdef HAVE_SYS_VFS_H
# include <sys/vfs.h>
# endif
# ifdef HAVE_SYS_ACL_H
# include <sys/acl.h>
# endif
# ifdef HAVE_SYS_FS_S5PARAM_H
# include <sys/fs/s5param.h>
# endif
# if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
# include <sys/filsys.h>
# endif
# ifdef HAVE_SYS_STATFS_H
# include <sys / statfs.h>
# endif
# ifdef HAVE_DUSTAT_H
# include <sys/dustat.h>
# endif
# ifdef HAVE_SYS_STATVFS_H
# include <sys/statvfs.h>
# endif
# ifdef HAVE_SHADOW_H
# include <shadow.h>
# endif
# ifdef HAVE_GETPWANAM
# include <sys/label.h>
# include <sys/audit.h>
# include <pwdadj.h>
# endif
# ifdef HAVE_SYS_SECURITY_H
# include <sys/security.h>
# include <prot.h>
# define PASSWORD_LENGTH 16
# endif /* HAVE_SYS_SECURITY_H */
# ifdef HAVE_COMPAT_H
# include <compat.h>
# endif
# ifdef HAVE_STROPTS_H
# include <stropts.h>
# endif
# ifdef HAVE_SYS_CAPABILITY_H
# if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H)
# define _I386_STATFS_H
# define BROKEN_REDHAT_7_STATFS_WORKAROUND
# endif
# include <sys/capability.h>
# ifdef BROKEN_REDHAT_7_STATFS_WORKAROUND
# undef _I386_STATFS_H
# undef BROKEN_REDHAT_7_STATFS_WORKAROUND
# endif
# endif
# if defined(HAVE_SYS_IPC_H)
# include <sys/ipc.h>
# endif /* HAVE_SYS_IPC_H */
# if defined(HAVE_SYS_SHM_H)
# include <sys/shm.h>
# endif /* HAVE_SYS_SHM_H */
# ifdef HAVE_NATIVE_ICONV
# ifdef HAVE_ICONV
# include <iconv.h>
# endif
# ifdef HAVE_GICONV
# include <giconv.h>
# endif
# endif
# if HAVE_KRB5_H
# include <krb5.h>
# else
# undef HAVE_KRB5
# endif
# if HAVE_GSSAPI_H
# include <gssapi.h>
# endif
# if HAVE_GSSAPI_GSSAPI_H
# include <gssapi/gssapi.h>
# endif
# if HAVE_GSSAPI_GSSAPI_GENERIC_H
# include <gssapi/gssapi_generic.h>
# endif
# if HAVE_COM_ERR_H
# include <com_err.h>
# endif
/* we support ADS if we want it and have krb5 and ldap libs */
# if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP)
# define HAVE_ADS
# endif
/*
* Define VOLATILE if needed .
*/
# if defined(HAVE_VOLATILE)
# define VOLATILE volatile
# else
# define VOLATILE
# endif
/*
* Define additional missing types
*/
2004-03-28 05:57:28 +04:00
# ifndef HAVE_SIG_ATOMIC_T_TYPE
typedef int sig_atomic_t ;
2003-08-13 05:53:07 +04:00
# endif
# ifndef HAVE_SOCKLEN_T_TYPE
typedef int socklen_t ;
# endif
/*
2004-05-25 21:24:24 +04:00
Samba needs type definitions for
int8_t , int16_t , int32_t , int64_t
uint8_t , uint16_t , uint32_t and uint64_t .
2003-08-13 05:53:07 +04:00
2004-05-25 21:24:24 +04:00
Normally these are signed and unsigned 8 , 16 , 32 and 64 bit integers , but
they actually only need to be at least 8 , 16 , 32 and 64 bits
2003-08-13 05:53:07 +04:00
respectively . Thus if your word size is 8 bytes just defining them
as signed and unsigned int will work .
*/
2004-05-25 21:50:17 +04:00
# if !defined(int8)
# define int8 int8_t
# endif
# if !defined(uint8)
# define uint8 uint8_t
2003-08-13 05:53:07 +04:00
# endif
2004-02-18 18:31:25 +03:00
# if !defined(int16)
2004-05-25 21:24:24 +04:00
# define int16 int16_t
2003-08-13 05:53:07 +04:00
# endif
2004-02-18 18:31:25 +03:00
# if !defined(uint16)
2004-05-25 21:24:24 +04:00
# define uint16 uint16_t
2003-08-13 05:53:07 +04:00
# endif
2004-02-18 18:31:25 +03:00
# if !defined(int32)
2004-05-25 20:24:13 +04:00
# define int32 int32_t
2003-08-13 05:53:07 +04:00
# endif
2004-02-18 18:31:25 +03:00
# if !defined(uint32)
2004-05-25 20:24:13 +04:00
# define uint32 uint32_t
2003-08-13 05:53:07 +04:00
# endif
2004-05-25 20:24:13 +04:00
# if !defined(int64)
# define int64 int64_t
2003-08-13 05:53:07 +04:00
# endif
2004-05-25 17:57:39 +04:00
# if !defined(uint64)
# define uint64 uint64_t
# endif
2003-08-13 05:53:07 +04:00
/*
* Types for devices , inodes and offsets .
*/
# ifndef SMB_DEV_T
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_DEV64_T)
# define SMB_DEV_T dev64_t
# else
# define SMB_DEV_T dev_t
# endif
# endif
/*
* Setup the correctly sized inode type .
*/
# ifndef SMB_INO_T
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)
# define SMB_INO_T ino64_t
# else
# define SMB_INO_T ino_t
# endif
# endif
# ifndef LARGE_SMB_INO_T
# if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_INO64_T)) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
# define LARGE_SMB_INO_T 1
# endif
# endif
# ifdef LARGE_SMB_INO_T
# define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
# else
# define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
# endif
# ifndef SMB_OFF_T
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)
# define SMB_OFF_T off64_t
# else
# define SMB_OFF_T off_t
# endif
# endif
/*
* Set the define that tells us if we can do 64 bit
* NT SMB calls .
*/
# ifndef LARGE_SMB_OFF_T
# if (defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T)) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
# define LARGE_SMB_OFF_T 1
# endif
# endif
/*
* Type for stat structure .
*/
# ifndef SMB_STRUCT_STAT
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
# define SMB_STRUCT_STAT struct stat64
# else
# define SMB_STRUCT_STAT struct stat
# endif
# endif
/*
* Type for dirent structure .
*/
# ifndef SMB_STRUCT_DIRENT
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_DIRENT64)
2003-11-23 04:53:54 +03:00
# define smb_dirent dirent64
2003-08-13 05:53:07 +04:00
# else
2003-11-23 04:53:54 +03:00
# define smb_dirent dirent
2003-08-13 05:53:07 +04:00
# endif
# endif
/*
* Defines for 64 bit fcntl locks .
*/
# ifndef SMB_STRUCT_FLOCK
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
# define SMB_STRUCT_FLOCK struct flock64
# else
# define SMB_STRUCT_FLOCK struct flock
# endif
# endif
# ifndef SMB_F_SETLKW
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
# define SMB_F_SETLKW F_SETLKW64
# else
# define SMB_F_SETLKW F_SETLKW
# endif
# endif
# ifndef SMB_F_SETLK
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
# define SMB_F_SETLK F_SETLK64
# else
# define SMB_F_SETLK F_SETLK
# endif
# endif
# ifndef SMB_F_GETLK
# if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
# define SMB_F_GETLK F_GETLK64
# else
# define SMB_F_GETLK F_GETLK
# endif
# endif
# ifndef MIN
# define MIN(a,b) ((a)<(b)?(a):(b))
# endif
# ifndef MAX
# define MAX(a,b) ((a)>(b)?(a):(b))
# endif
# ifndef HAVE_STRERROR
extern char * sys_errlist [ ] ;
# define strerror(i) sys_errlist[i]
# endif
# ifndef HAVE_ERRNO_DECL
extern int errno ;
# endif
# ifdef HAVE_BROKEN_GETGROUPS
# define GID_T int
# else
# define GID_T gid_t
# endif
# ifndef NGROUPS_MAX
# define NGROUPS_MAX 32 /* Guess... */
# endif
/* Our own pstrings and fstrings */
# include "pstring.h"
/* Lists, trees, caching, database... */
# include "xfile.h"
# include "dlinklist.h"
2004-04-09 12:06:39 +04:00
# include "lib/ldb/include/ldb.h"
2004-05-24 20:27:23 +04:00
# include "lib/tdb/include/tdb.h"
# include "lib/tdb/include/spinlock.h"
# include "lib/tdb/include/tdbutil.h"
2003-08-13 05:53:07 +04:00
# include "talloc.h"
# include "nt_status.h"
# include "interfaces.h"
# include "trans2.h"
# include "ioctl.h"
# include "nterr.h"
# include "messages.h"
# include "charset.h"
# include "dynconfig.h"
# include "version.h"
2004-06-07 16:06:26 +04:00
# include "rewrite.h"
2003-08-13 05:53:07 +04:00
# include "smb.h"
2004-02-01 14:26:25 +03:00
# include "ads.h"
2004-08-12 08:55:59 +04:00
# include "libcli/ldap/ldap.h"
2003-08-13 05:53:07 +04:00
# include "nameserv.h"
# include "secrets.h"
# include "byteorder.h"
# include "md5.h"
# include "hmacmd5.h"
2003-11-26 04:16:41 +03:00
# include "libcli/auth/ntlmssp.h"
2004-05-09 16:42:18 +04:00
# include "libcli/auth/credentials.h"
2004-02-10 13:22:12 +03:00
# include "libcli/auth/schannel.h"
2004-06-19 12:15:41 +04:00
# include "libcli/auth/kerberos.h"
2004-06-20 04:58:09 +04:00
# include "libcli/auth/gensec.h"
# include "libcli/auth/spnego.h"
2003-08-13 05:53:07 +04:00
2004-02-03 14:10:56 +03:00
# include "auth/auth.h"
2003-08-13 05:53:07 +04:00
2003-11-25 06:15:26 +03:00
# include "module.h"
2003-08-13 05:53:07 +04:00
# include "asn_1.h"
# include "popt.h"
# include "mutex.h"
2003-11-06 15:34:04 +03:00
# include "librpc/rpc/dcerpc.h"
2003-10-30 11:32:26 +03:00
2004-07-14 01:04:56 +04:00
# include "smbd/server.h"
# include "smbd/service.h"
2003-12-12 06:59:09 +03:00
# include "rpc_server/dcerpc_server.h"
2004-07-16 06:54:57 +04:00
# include "request.h"
2004-06-28 12:45:27 +04:00
# include "smb_server/smb_server.h"
2004-02-03 14:18:54 +03:00
# include "ntvfs/ntvfs.h"
2003-12-12 06:59:09 +03:00
# include "cli_context.h"
2004-04-04 20:24:08 +04:00
# include "registry.h"
2004-07-11 20:16:02 +04:00
# include "rap.h"
2004-07-11 05:01:48 +04:00
# include "gtk/common/gtk-smb.h"
2004-07-12 00:16:02 +04:00
# include "gtk/common/select.h"
2003-12-12 06:59:09 +03:00
2004-04-10 10:10:26 +04:00
# define malloc_p(type) (type *)malloc(sizeof(type))
# define malloc_array_p(type, count) (type *)realloc_array(NULL, sizeof(type), count)
# define realloc_p(p, type, count) (type *)realloc_array(p, sizeof(type), count)
# ifndef HAVE_COMPARISON_FN_T
typedef int ( * comparison_fn_t ) ( const void * , const void * ) ;
# endif
2003-08-13 05:53:07 +04:00
/***** automatically generated prototypes *****/
2004-05-26 12:02:20 +04:00
# define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2)
2003-08-13 05:53:07 +04:00
# include "proto.h"
2004-05-26 12:02:20 +04:00
# undef _PRINTF_ATTRIBUTE
# define _PRINTF_ATTRIBUTE(a1, a2)
2003-08-13 05:53:07 +04:00
/* String routines */
# include "safe_string.h"
# ifdef __COMPAR_FN_T
# define QSORT_CAST (__compar_fn_t)
# endif
# ifndef QSORT_CAST
# define QSORT_CAST (int (*)(const void *, const void *))
# endif
# ifndef SIGCLD
# define SIGCLD SIGCHLD
# endif
# ifndef MAP_FILE
# define MAP_FILE 0
# endif
# if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
# define OSF1_ENH_SEC 1
# endif
# ifndef ALLOW_CHANGE_PASSWORD
# if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
# define ALLOW_CHANGE_PASSWORD 1
# endif
# endif
/* what is the longest significant password available on your system?
Knowing this speeds up password searches a lot */
# ifndef PASSWORD_LENGTH
# define PASSWORD_LENGTH 8
# endif
# ifdef REPLACE_INET_NTOA
# define inet_ntoa rep_inet_ntoa
# endif
# ifndef HAVE_PIPE
# define SYNC_DNS 1
# endif
# ifndef MAXPATHLEN
# define MAXPATHLEN 256
# endif
# ifndef SEEK_SET
# define SEEK_SET 0
# endif
# ifndef INADDR_LOOPBACK
# define INADDR_LOOPBACK 0x7f000001
# endif
# ifndef INADDR_NONE
# define INADDR_NONE 0xffffffff
# endif
# ifndef HAVE_CRYPT
# define crypt ufc_crypt
# endif
# ifndef O_ACCMODE
# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
# endif
# if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
# define ULTRIX_AUTH 1
# endif
# ifndef HAVE_STRDUP
char * strdup ( const char * s ) ;
# endif
# ifndef HAVE_MEMMOVE
void * memmove ( void * dest , const void * src , int size ) ;
# endif
# ifndef HAVE_INITGROUPS
int initgroups ( char * name , gid_t id ) ;
# endif
# ifndef HAVE_RENAME
int rename ( const char * zfrom , const char * zto ) ;
# endif
# ifndef HAVE_MKTIME
time_t mktime ( struct tm * t ) ;
# endif
# ifndef HAVE_STRLCPY
size_t strlcpy ( char * d , const char * s , size_t bufsize ) ;
# endif
# ifndef HAVE_STRLCAT
size_t strlcat ( char * d , const char * s , size_t bufsize ) ;
# endif
# ifndef HAVE_FTRUNCATE
int ftruncate ( int f , long l ) ;
# endif
# ifndef HAVE_STRNDUP
char * strndup ( const char * s , size_t n ) ;
# endif
# ifndef HAVE_STRNLEN
size_t strnlen ( const char * s , size_t n ) ;
# endif
# ifndef HAVE_STRTOUL
unsigned long strtoul ( const char * nptr , char * * endptr , int base ) ;
# endif
# ifndef HAVE_SETENV
int setenv ( const char * name , const char * value , int overwrite ) ;
# endif
# if (defined(USE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
/* stupid glibc */
int setresuid ( uid_t ruid , uid_t euid , uid_t suid ) ;
# endif
# if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
int setresgid ( gid_t rgid , gid_t egid , gid_t sgid ) ;
# endif
# ifndef HAVE_VASPRINTF_DECL
int vasprintf ( char * * ptr , const char * format , va_list ap ) ;
# endif
# if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
# define bzero(a,b) memset((a),'\0',(b))
# endif
# ifdef REPLACE_GETPASS
# define getpass(prompt) getsmbpass((prompt))
# endif
/*
* Some older systems seem not to have MAXHOSTNAMELEN
* defined .
*/
# ifndef MAXHOSTNAMELEN
# define MAXHOSTNAMELEN 254
# endif
/* yuck, I'd like a better way of doing this */
# define DIRP_SIZE (256 + 32)
/*
* glibc on linux doesn ' t seem to have MSG_WAITALL
* defined . I think the kernel has it though . .
*/
# ifndef MSG_WAITALL
# define MSG_WAITALL 0
# endif
/* default socket options. Dave Miller thinks we should default to TCP_NODELAY
given the socket IO pattern that Samba uses */
# ifdef TCP_NODELAY
# define DEFAULT_SOCKET_OPTIONS "TCP_NODELAY"
# else
# define DEFAULT_SOCKET_OPTIONS ""
# endif
/* Load header file for dynamic linking stuff */
# ifdef HAVE_DLFCN_H
# include <dlfcn.h>
# endif
/* dmalloc -- free heap debugger (dmalloc.org). This should be near
* the * bottom * of include files so as not to conflict . */
# ifdef ENABLE_DMALLOC
# include <dmalloc.h>
# endif
/* Some POSIX definitions for those without */
# ifndef S_IFDIR
# define S_IFDIR 0x4000
# endif
# ifndef S_ISDIR
# define S_ISDIR(mode) ((mode & 0xF000) == S_IFDIR)
# endif
# ifndef S_IRWXU
# define S_IRWXU 00700 /* read, write, execute: owner */
# endif
# ifndef S_IRUSR
# define S_IRUSR 00400 /* read permission: owner */
# endif
# ifndef S_IWUSR
# define S_IWUSR 00200 /* write permission: owner */
# endif
# ifndef S_IXUSR
# define S_IXUSR 00100 /* execute permission: owner */
# endif
# ifndef S_IRWXG
# define S_IRWXG 00070 /* read, write, execute: group */
# endif
# ifndef S_IRGRP
# define S_IRGRP 00040 /* read permission: group */
# endif
# ifndef S_IWGRP
# define S_IWGRP 00020 /* write permission: group */
# endif
# ifndef S_IXGRP
# define S_IXGRP 00010 /* execute permission: group */
# endif
# ifndef S_IRWXO
# define S_IRWXO 00007 /* read, write, execute: other */
# endif
# ifndef S_IROTH
# define S_IROTH 00004 /* read permission: other */
# endif
# ifndef S_IWOTH
# define S_IWOTH 00002 /* write permission: other */
# endif
# ifndef S_IXOTH
# define S_IXOTH 00001 /* execute permission: other */
# endif
/* For sys_adminlog(). */
# ifndef LOG_EMERG
# define LOG_EMERG 0 /* system is unusable */
# endif
# ifndef LOG_ALERT
# define LOG_ALERT 1 /* action must be taken immediately */
# endif
# ifndef LOG_CRIT
# define LOG_CRIT 2 /* critical conditions */
# endif
# ifndef LOG_ERR
# define LOG_ERR 3 /* error conditions */
# endif
# ifndef LOG_WARNING
# define LOG_WARNING 4 /* warning conditions */
# endif
# ifndef LOG_NOTICE
# define LOG_NOTICE 5 /* normal but significant condition */
# endif
# ifndef LOG_INFO
# define LOG_INFO 6 /* informational */
# endif
# ifndef LOG_DEBUG
# define LOG_DEBUG 7 /* debug-level messages */
# endif
/* NetBSD doesn't have these */
# ifndef SHM_R
# define SHM_R 0400
# endif
# ifndef SHM_W
# define SHM_W 0200
# endif
# if HAVE_KERNEL_SHARE_MODES
# ifndef LOCK_MAND
# define LOCK_MAND 32 /* This is a mandatory flock */
# define LOCK_READ 64 /* ... Which allows concurrent read operations */
# define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
# define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
# endif
# endif
extern int DEBUGLEVEL ;
# define MAX_SEC_CTX_DEPTH 8 /* Maximum number of security contexts */
# ifdef GLIBC_HACK_FCNTL64
/* this is a gross hack. 64 bit locking is completely screwed up on
i386 Linux in glibc 2.1 .95 ( which ships with RedHat 7.0 ) . This hack
" fixes " the problem with the current 2.4 .0 test kernels
*/
# define fcntl fcntl64
# undef F_SETLKW
# undef F_SETLK
# define F_SETLK 13
# define F_SETLKW 14
# endif
/* Needed for sys_dlopen/sys_dlsym/sys_dlclose */
# ifndef RTLD_GLOBAL
# define RTLD_GLOBAL 0
# endif
# ifndef RTLD_LAZY
# define RTLD_LAZY 0
# endif
# ifndef RTLD_NOW
# define RTLD_NOW 0
# endif
/* needed for some systems without iconv. Doesn't really matter
what error code we use */
# ifndef EILSEQ
# define EILSEQ EIO
# endif
/* add varargs prototypes with printf checking */
int fdprintf ( int , const char * , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
int d_printf ( const char * , . . . ) PRINTF_ATTRIBUTE ( 1 , 2 ) ;
int d_fprintf ( FILE * f , const char * , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
# ifndef HAVE_SNPRINTF_DECL
int snprintf ( char * , size_t , const char * , . . . ) PRINTF_ATTRIBUTE ( 3 , 4 ) ;
# endif
# ifndef HAVE_ASPRINTF_DECL
int asprintf ( char * * , const char * , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
# endif
void sys_adminlog ( int priority , const char * format_str , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
int pstr_sprintf ( pstring s , const char * fmt , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
int fstr_sprintf ( fstring s , const char * fmt , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
int d_vfprintf ( FILE * f , const char * format , va_list ap ) PRINTF_ATTRIBUTE ( 2 , 0 ) ;
int smb_xvasprintf ( char * * ptr , const char * format , va_list ap ) PRINTF_ATTRIBUTE ( 2 , 0 ) ;
/* we used to use these fns, but now we have good replacements
for snprintf and vsnprintf */
# define slprintf snprintf
# define vslprintf vsnprintf
/* we need to use __va_copy() on some platforms */
# ifdef HAVE_VA_COPY
# define VA_COPY(dest, src) __va_copy(dest, src)
# else
# define VA_COPY(dest, src) (dest) = (src)
# endif
# ifndef HAVE_TIMEGM
time_t timegm ( struct tm * tm ) ;
# endif
# if defined(VALGRIND)
# define strlen(x) valgrind_strlen(x)
# endif
/*
* Veritas File System . Often in addition to native .
* Quotas different .
*/
# if defined(HAVE_SYS_FS_VX_QUOTA_H)
# define VXFS_QUOTA
# endif
# endif /* _INCLUDES_H */