1996-05-04 11:50:46 +04:00
# ifndef _INCLUDES_H
# define _INCLUDES_H
2023-11-09 06:02:18 +03:00
/*
2002-01-30 09:08:46 +03:00
Unix SMB / CIFS implementation .
1996-05-04 11:50:46 +04:00
Machine customisation and include handling
1998-01-22 16:27:43 +03:00
Copyright ( C ) Andrew Tridgell 1994 - 1998
2002-01-09 08:27:59 +03:00
Copyright ( C ) 2002 by Martin Pool < mbp @ samba . org >
2023-11-09 06:02:18 +03:00
1996-05-04 11:50:46 +04:00
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
2007-07-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
1996-05-04 11:50:46 +04:00
( at your option ) any later version .
2023-11-09 06:02:18 +03:00
1996-05-04 11:50:46 +04:00
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 .
2023-11-09 06:02:18 +03:00
1996-05-04 11:50:46 +04:00
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
1996-05-04 11:50:46 +04:00
*/
2008-09-16 18:30:14 +04:00
# include "../replace/replace.h"
1998-10-07 11:55:14 +04:00
2007-01-03 11:55:22 +03:00
/* make sure we have included the correct config.h */
# ifndef NO_CONFIG_H /* for some tests */
# ifndef CONFIG_H_IS_FROM_SAMBA
# error "make sure you have removed all config.h files from standalone builds!"
# error "the included config.h isn't from samba!"
# endif
# endif /* NO_CONFIG_H */
2006-05-24 18:38:11 +04:00
/* only do the C++ reserved word check when we compile
to include - - with - developer since too many systems
2023-11-09 06:02:32 +03:00
still have conflicts with their header files ( e . g . IRIX 6.4 ) */
2006-05-24 18:38:11 +04:00
2010-11-17 12:36:37 +03:00
# if !defined(__cplusplus) && defined(DEVELOPER) && defined(__linux__)
2005-06-25 00:25:18 +04:00
# define class #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
2006-02-22 14:47:41 +03:00
# define private #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
2005-06-25 00:25:18 +04:00
# define public #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
2005-06-25 01:18:20 +04:00
# define protected #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
2005-06-25 00:25:18 +04:00
# define template #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
# define this #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
# define new #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
# define delete #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
# define friend #error DONT_USE_CPLUSPLUS_RESERVED_NAMES
# endif
1998-07-29 07:08:05 +04:00
# include "local.h"
1996-05-04 11:50:46 +04:00
1998-07-29 07:08:05 +04:00
# ifdef SUNOS4
/* on SUNOS4 termios.h conflicts with sys/ioctl.h */
# undef HAVE_TERMIOS_H
1996-05-04 11:50:46 +04:00
# endif
1999-12-13 16:27:58 +03:00
# ifdef RELIANTUNIX
/*
* < unistd . h > has to be included before any other to get
2001-04-04 21:20:57 +04:00
* large file support on Reliant UNIX . Yes , it ' s broken : - ) .
1999-12-13 16:27:58 +03:00
*/
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
# endif /* RELIANTUNIX */
2006-09-19 02:49:20 +04:00
# include "system/dir.h"
# include "system/locale.h"
# include "system/time.h"
# include "system/wait.h"
2009-11-27 17:52:57 +03:00
# ifndef HAVE_KRB5_H
2001-11-28 01:37:25 +03:00
# undef HAVE_KRB5
2001-10-18 14:26:06 +04:00
# endif
2011-02-24 13:56:08 +03:00
# ifndef HAVE_LDAP_H
2001-11-28 01:37:25 +03:00
# undef HAVE_LDAP
2001-11-20 11:54:15 +03:00
# endif
2018-11-20 16:12:23 +03:00
# ifdef HAVE_SYS_ATTRIBUTES_H
2003-08-15 05:29:08 +04:00
# include <sys/attributes.h>
# endif
2007-08-10 13:44:13 +04:00
# ifndef ENOATTR
2009-08-07 02:09:01 +04:00
# if defined(ENODATA)
2007-08-10 13:44:13 +04:00
# define ENOATTR ENODATA
2009-08-07 02:09:01 +04:00
# else
# define ENOATTR ENOENT
# endif
2007-08-10 13:44:13 +04:00
# endif
2005-04-10 08:27:14 +04:00
# ifdef HAVE_SYS_UIO_H
# include <sys/uio.h>
# endif
2018-11-20 16:12:23 +03:00
# ifdef HAVE_LANGINFO_H
2003-06-30 06:11:13 +04:00
# include <langinfo.h>
# endif
2003-04-16 17:19:51 +04:00
/* Special macros that are no-ops except when run under Valgrind on
* x86 . They ' ve moved a little bit from valgrind 1.0 .4 to 1.9 .4 */
2018-11-20 16:12:23 +03:00
# ifdef HAVE_VALGRIND_MEMCHECK_H
2003-04-16 17:19:51 +04:00
/* memcheck.h includes valgrind.h */
# include <valgrind/memcheck.h>
2018-12-13 20:52:11 +03:00
# elif defined(HAVE_VALGRIND_H)
2003-04-16 17:19:51 +04:00
# include <valgrind.h>
# endif
1999-12-13 16:27:58 +03:00
/*
2001-06-25 06:53:13 +04:00
* Define additional missing types
1999-12-13 16:27:58 +03:00
*/
2008-10-19 11:51:26 +04:00
# if defined(AIX)
2002-07-15 14:35:28 +04:00
typedef sig_atomic_t SIG_ATOMIC_T ;
# else
2008-10-19 11:51:26 +04:00
typedef sig_atomic_t volatile SIG_ATOMIC_T ;
2001-06-25 06:53:13 +04:00
# endif
1999-12-13 16:27:58 +03:00
1998-07-29 07:08:05 +04:00
# ifndef uchar
# define uchar unsigned char
1996-05-04 11:50:46 +04:00
# endif
1998-09-01 00:20:54 +04:00
/*
1998-09-03 22:40:31 +04:00
* Types for devices , inodes and offsets .
1998-09-01 00:20:54 +04:00
*/
# ifndef SMB_DEV_T
2012-03-28 02:49:48 +04:00
# define SMB_DEV_T dev_t
1998-09-01 00:20:54 +04:00
# endif
2006-01-13 01:17:54 +03:00
# ifndef LARGE_SMB_DEV_T
2012-03-28 02:49:48 +04:00
# if (defined(SIZEOF_DEV_T) && (SIZEOF_DEV_T == 8))
2006-01-13 01:17:54 +03:00
# define LARGE_SMB_DEV_T 1
# endif
# endif
# ifdef LARGE_SMB_DEV_T
# define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),(v)&0xFFFFFFFF), SIVAL((p),(ofs)+4,(v)>>32))
2008-10-14 03:59:36 +04:00
# define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(((uint64_t)(IVAL((p),(ofs))))| (((uint64_t)(IVAL((p),(ofs)+4))) << 32)))
2023-11-09 06:02:18 +03:00
# else
2006-01-13 01:17:54 +03:00
# define SDEV_T_VAL(p, ofs, v) (SIVAL((p),(ofs),v),SIVAL((p),(ofs)+4,0))
# define DEV_T_VAL(p, ofs) ((SMB_DEV_T)(IVAL((p),(ofs))))
# endif
1998-09-05 00:53:58 +04:00
/*
* Setup the correctly sized inode type .
*/
1998-09-01 00:20:54 +04:00
# ifndef SMB_INO_T
1998-09-05 00:53:58 +04:00
# define SMB_INO_T ino_t
# endif
# ifndef LARGE_SMB_INO_T
2012-03-28 02:49:48 +04:00
# if (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
1998-09-05 00:53:58 +04:00
# define LARGE_SMB_INO_T 1
# endif
1998-09-01 00:20:54 +04:00
# endif
1998-10-24 12:08:05 +04:00
# ifdef LARGE_SMB_INO_T
2011-04-23 13:15:30 +04:00
# define SINO_T_VAL(p, ofs, v) SBVAL(p, ofs, v)
# define INO_T_VAL(p, ofs) ((SMB_INO_T)BVAL(p, ofs))
2023-11-09 06:02:18 +03:00
# else
2011-04-23 13:15:30 +04:00
# define SINO_T_VAL(p, ofs, v) SBVAL(p, ofs, ((uint64_t)(v)) & UINT32_MAX)
2006-01-13 01:17:54 +03:00
# define INO_T_VAL(p, ofs) ((SMB_INO_T)(IVAL((p),(ofs))))
1998-10-24 12:08:05 +04:00
# endif
2011-04-23 13:10:05 +04:00
/* TODO: remove this macros */
# define SBIG_UINT(p, ofs, v) SBVAL(p, ofs, v)
# define BIG_UINT(p, ofs) BVAL(p, ofs)
2004-03-04 21:17:01 +03:00
1998-09-03 22:40:31 +04:00
/*
* Set the define that tells us if we can do 64 bit
* NT SMB calls .
*/
1998-09-18 22:30:42 +04:00
# define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
2001-04-18 08:33:24 +04:00
# define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32))
2012-04-05 08:53:08 +04:00
# define IVAL_TO_SMB_OFF_T(buf,off) ((off_t)(( ((uint64_t)(IVAL((buf),(off)))) & ((uint64_t)0xFFFFFFFF) )))
1998-09-18 22:30:42 +04:00
2019-06-27 18:06:46 +03:00
/* Is birthtime real, or was it calculated ? */
# define ST_EX_IFLAG_CALCULATED_BTIME (1 << 0)
1998-09-02 00:11:54 +04:00
/*
1998-09-03 22:40:31 +04:00
* Type for stat structure .
1998-09-02 00:11:54 +04:00
*/
2009-05-14 17:34:42 +04:00
struct stat_ex {
dev_t st_ex_dev ;
ino_t st_ex_ino ;
mode_t st_ex_mode ;
nlink_t st_ex_nlink ;
uid_t st_ex_uid ;
gid_t st_ex_gid ;
dev_t st_ex_rdev ;
off_t st_ex_size ;
struct timespec st_ex_atime ;
struct timespec st_ex_mtime ;
struct timespec st_ex_ctime ;
struct timespec st_ex_btime ; /* birthtime */
2022-08-24 12:40:41 +03:00
uint32_t cached_dos_attributes ;
2019-06-27 18:06:46 +03:00
2009-05-14 17:34:42 +04:00
blksize_t st_ex_blksize ;
blkcnt_t st_ex_blocks ;
2009-05-27 00:39:50 +04:00
uint32_t st_ex_flags ;
2019-06-27 18:06:46 +03:00
uint32_t st_ex_iflags ;
2009-05-14 17:34:42 +04:00
} ;
typedef struct stat_ex SMB_STRUCT_STAT ;
1998-09-04 04:23:28 +04:00
2009-08-25 07:57:37 +04:00
enum timestamp_set_resolution {
TIMESTAMP_SET_SECONDS = 0 ,
TIMESTAMP_SET_MSEC ,
TIMESTAMP_SET_NT_OR_BETTER
} ;
2007-12-07 23:02:44 +03:00
/* Our own fstrings */
2007-12-08 01:54:38 +03:00
/*
- - - - - - - - - - - - - -
/ \
/ REST \
/ IN \
/ PEACE \
/ \
| The infamous pstring |
| |
| |
| 7 December |
| |
| 2007 |
* | * * * | *
_________ ) / \ \ _ //(\/(/\)/\//\/\///|_)_______
*/
2024-02-15 18:53:29 +03:00
# include "fstring.h"
2002-03-02 08:35:10 +03:00
2015-03-05 13:26:46 +03:00
/* debug.h need to be included before samba_util.h for the macro SMB_ASSERT */
# include "../lib/util/debug.h"
2000-05-09 17:28:19 +04:00
/* Lists, trees, caching, database... */
2011-09-21 01:26:36 +04:00
# include "../lib/util/samba_util.h"
2009-09-15 21:11:45 +04:00
# include "../lib/util/util_net.h"
2008-10-18 20:50:37 +04:00
# include "../lib/util/attr.h"
2010-02-14 01:57:36 +03:00
# include "../lib/util/tsort.h"
2008-10-11 23:48:00 +04:00
# include "../lib/util/dlinklist.h"
2005-06-09 02:10:34 +04:00
2011-04-14 13:43:31 +04:00
# include <talloc.h>
2016-09-24 06:00:33 +03:00
# include <tevent.h>
2009-01-05 11:06:05 +03:00
2008-10-12 03:46:15 +04:00
# include "../lib/util/data_blob.h"
2008-10-12 01:57:44 +04:00
# include "../lib/util/time.h"
2011-04-14 01:34:25 +04:00
# include "../lib/util/debug_s3.h"
2008-10-22 16:06:08 +04:00
2011-05-05 13:25:29 +04:00
# include "../libcli/util/ntstatus.h"
2008-10-23 17:35:21 +04:00
# include "../libcli/util/error.h"
2009-03-02 00:31:10 +03:00
# include "../lib/util/charset/charset.h"
2011-04-27 10:39:42 +04:00
# include "dynconfig/dynconfig.h"
2006-07-18 01:09:02 +04:00
# include "locking.h"
1996-05-04 11:50:46 +04:00
# include "smb.h"
2008-10-12 18:17:21 +04:00
# include "../lib/util/byteorder.h"
2009-12-22 10:50:55 +03:00
2011-12-03 10:03:35 +04:00
# include "../lib/util/samba_modules.h"
2008-10-23 19:27:30 +04:00
# include "../lib/util/talloc_stack.h"
2006-02-04 01:19:41 +03:00
2012-06-28 22:59:51 +04:00
/* samba_setXXid functions. */
# include "../lib/util/setid.h"
2008-11-02 19:29:39 +03:00
/***** prototypes *****/
2003-03-28 05:03:31 +03:00
# ifndef NO_PROTO_H
1997-10-30 18:42:40 +03:00
# include "proto.h"
2003-03-28 05:03:31 +03:00
# endif
1997-10-30 18:42:40 +03:00
2012-07-23 06:47:01 +04:00
# include "lib/param/loadparm.h"
2020-08-10 16:47:35 +03:00
# include "source3/param/loadparm.h"
/* Automatically generated by generate_param.py. */
# include "source3/param/param_proto.h"
2012-07-23 06:47:01 +04:00
2000-02-03 07:47:50 +03:00
/* String routines */
2003-03-18 14:22:52 +03:00
# include "srvstr.h"
2020-08-07 23:27:39 +03:00
# include "lib/util/safe_string.h"
1999-12-23 04:57:43 +03:00
1998-07-29 07:08:05 +04:00
# ifndef SIGCLD
# define SIGCLD SIGCHLD
1996-05-04 11:50:46 +04:00
# endif
2003-03-28 04:07:05 +03:00
# ifndef SIGRTMIN
2009-06-07 17:58:38 +04:00
# define SIGRTMIN NSIG
2003-03-28 04:07:05 +03:00
# endif
1996-05-04 11:50:46 +04:00
1998-07-29 07:08:05 +04:00
# if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
# define ULTRIX_AUTH 1
# endif
1996-05-04 11:50:46 +04:00
1998-10-07 11:55:14 +04:00
/* yuck, I'd like a better way of doing this */
# define DIRP_SIZE (256 + 32)
1999-12-13 16:27:58 +03:00
/* 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
2001-12-20 07:01:44 +03:00
/* dmalloc -- free heap debugger (dmalloc.org). This should be near
* the * bottom * of include files so as not to conflict . */
2002-01-09 08:10:47 +03:00
# ifdef ENABLE_DMALLOC
2001-12-20 07:01:44 +03:00
# include <dmalloc.h>
# endif
2000-06-23 10:19:26 +04:00
# define MAX_SEC_CTX_DEPTH 8 /* Maximum number of security contexts */
2000-09-29 08:45:00 +04:00
2001-04-28 17:49:34 +04:00
/* add varargs prototypes with printf checking */
2005-08-26 07:23:48 +04:00
/*PRINTFLIKE1 */
2001-09-09 06:37:10 +04:00
int d_printf ( const char * , . . . ) PRINTF_ATTRIBUTE ( 1 , 2 ) ;
2005-08-26 07:23:48 +04:00
/*PRINTFLIKE2 */
2001-09-09 06:37:10 +04:00
int d_fprintf ( FILE * f , const char * , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
2003-01-03 06:24:23 +03:00
2005-08-26 07:23:48 +04:00
/* PRINTFLIKE2 */
2003-01-03 06:24:23 +03:00
int fstr_sprintf ( fstring s , const char * fmt , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
2007-11-24 19:27:54 +03:00
char * talloc_asprintf_strupper_m ( TALLOC_CTX * t , const char * fmt , . . . ) PRINTF_ATTRIBUTE ( 2 , 3 ) ;
2002-12-31 02:55:53 +03:00
/*
* Veritas File System . Often in addition to native .
* Quotas different .
*/
# if defined(HAVE_SYS_FS_VX_QUOTA_H)
# define VXFS_QUOTA
# endif
2003-04-14 05:19:58 +04:00
# ifdef TRUE
# undef TRUE
# endif
# define TRUE __ERROR__XX__DONT_USE_TRUE
2000-07-06 10:59:27 +04:00
2003-04-14 05:19:58 +04:00
# ifdef FALSE
# undef FALSE
# endif
# define FALSE __ERROR__XX__DONT_USE_FALSE
2008-10-18 20:50:37 +04:00
void dump_core ( void ) _NORETURN_ ;
void exit_server ( const char * const reason ) _NORETURN_ ;
void exit_server_cleanly ( const char * const reason ) _NORETURN_ ;
2006-04-04 04:27:50 +04:00
2010-05-06 19:49:36 +04:00
# define BASE_RID (0x000003E8L)
2003-04-14 05:19:58 +04:00
# endif /* _INCLUDES_H */