+/*
+ Bacula® - The Network Backup Solution
+
+ Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
+
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version two of the GNU General Public
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of Kern Sibbald.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
/*
* General header file configurations that apply to
* all daemons. System dependent stuff goes here.
*
* Version $Id$
*/
-/*
- Copyright (C) 2000-2005 Kern Sibbald
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as amended with additional clauses defined in the
- file LICENSE in the main source directory.
-
- 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
- the file LICENSE for additional details.
-
- */
#ifndef _BACONFIG_H
#define ETIME ETIMEDOUT
#endif
+#define ioctl_req_t long unsigned int
+
#ifdef PROTOTYPES
# define __PROTO(p) p
#else
/* Allow printing of NULL pointers */
#define NPRT(x) (x)?(x):_("*None*")
+#define NPRTB(x) (x)?(x):""
+
+#if defined(HAVE_WIN32)
+
+#define WIN32_REPARSE_POINT 1
+#define WIN32_MOUNT_POINT 2
+
+void InitWinAPIWrapper();
+
+#define OSDependentInit() InitWinAPIWrapper()
+
+#define sbrk(x) 0
+
+#define clear_thread_id(x) memset(&(x), 0, sizeof(x))
+
+#if defined(BUILDING_DLL)
+# define DLL_IMP_EXP _declspec(dllexport)
+#elif defined(USING_DLL)
+# define DLL_IMP_EXP _declspec(dllimport)
+#else
+# define DLL_IMP_EXP
+#endif
+
+#if defined(USING_CATS)
+# define CATS_IMP_EXP _declspec(dllimport)
+#else
+# define CATS_IMP_EXP
+#endif
+
+#else /* HAVE_WIN32 */
+
+#define clear_thread_id(x) x = 0
+
+#define DLL_IMP_EXP
+#define CATS_IMP_EXP
+
+#define OSDependentInit()
+
+#endif /* HAVE_WIN32 */
+
#ifdef ENABLE_NLS
#include <libintl.h>
#define N_(s) (s)
#endif /* N_ */
#else /* !ENABLE_NLS */
+ #undef _
+ #undef N_
+ #undef textdomain
+ #undef bindtextdomain
+ #undef setlocale
+
#ifndef _
#define _(s) (s)
#endif
#endif
#endif /* ENABLE_NLS */
+
+/* Use the following for strings not to be translated */
+#define NT_(s) (s)
+
/* This should go away! ****FIXME***** */
#define MAXSTRING 500
/*
* Default network buffer size
*/
-#define DEFAULT_NETWORK_BUFFER_SIZE (32 * 1024)
+#define DEFAULT_NETWORK_BUFFER_SIZE (64 * 1024)
/*
- * Stream definitions. Once defined these must NEVER
+ * Stream definitions. Once defined these must NEVER
* change as they go on the storage media.
* Note, the following streams are passed from the SD to the DIR
* so that they may be put into the catalog (actually only the
*
* STREAM_UNIX_ATTRIBUTES
* STREAM_UNIX_ATTRIBUTES_EX
- * STREAM_MD5_SIGNATURE
- * STREAM_SHA1_SIGNATURE
+ * STREAM_MD5_DIGEST
+ * STREAM_SHA1_DIGEST
+ * STREAM_SHA256_DIGEST
+ * STREAM_SHA512_DIGEST
*/
-#define STREAM_UNIX_ATTRIBUTES 1 /* Generic Unix attributes */
-#define STREAM_FILE_DATA 2 /* Standard uncompressed data */
-#define STREAM_MD5_SIGNATURE 3 /* MD5 signature for the file */
-#define STREAM_GZIP_DATA 4 /* GZip compressed file data */
-/* Extended Unix attributes with Win32 Extended data. Deprecated. */
-#define STREAM_UNIX_ATTRIBUTES_EX 5 /* Extended Unix attr for Win32 EX */
-#define STREAM_SPARSE_DATA 6 /* Sparse data stream */
-#define STREAM_SPARSE_GZIP_DATA 7
-#define STREAM_PROGRAM_NAMES 8 /* program names for program data */
-#define STREAM_PROGRAM_DATA 9 /* Data needing program */
-#define STREAM_SHA1_SIGNATURE 10 /* SHA1 signature for the file */
-#define STREAM_WIN32_DATA 11 /* Win32 BackupRead data */
-#define STREAM_WIN32_GZIP_DATA 12 /* Gzipped Win32 BackupRead data */
-#define STREAM_MACOS_FORK_DATA 13 /* Mac resource fork */
-#define STREAM_HFSPLUS_ATTRIBUTES 14 /* Mac OS extra attributes */
-/*** FIXME ***/
-#define STREAM_UNIX_ATTRIBUTES_ACCESS_ACL 15 /* Standard ACL attributes on UNIX */
-#define STREAM_UNIX_ATTRIBUTES_DEFAULT_ACL 16 /* Default ACL attributes on UNIX */
-/*** FIXME ***/
+#define STREAM_NONE 0 /* Reserved Non-Stream */
+#define STREAM_UNIX_ATTRIBUTES 1 /* Generic Unix attributes */
+#define STREAM_FILE_DATA 2 /* Standard uncompressed data */
+#define STREAM_MD5_SIGNATURE 3 /* deprecated */
+#define STREAM_MD5_DIGEST 3 /* MD5 digest for the file */
+#define STREAM_GZIP_DATA 4 /* GZip compressed file data */
+#define STREAM_UNIX_ATTRIBUTES_EX 5 /* Extended Unix attr for Win32 EX - Deprecated */
+#define STREAM_SPARSE_DATA 6 /* Sparse data stream */
+#define STREAM_SPARSE_GZIP_DATA 7 /* Sparse gzipped data stream */
+#define STREAM_PROGRAM_NAMES 8 /* program names for program data */
+#define STREAM_PROGRAM_DATA 9 /* Data needing program */
+#define STREAM_SHA1_SIGNATURE 10 /* deprecated */
+#define STREAM_SHA1_DIGEST 10 /* SHA1 digest for the file */
+#define STREAM_WIN32_DATA 11 /* Win32 BackupRead data */
+#define STREAM_WIN32_GZIP_DATA 12 /* Gzipped Win32 BackupRead data */
+#define STREAM_MACOS_FORK_DATA 13 /* Mac resource fork */
+#define STREAM_HFSPLUS_ATTRIBUTES 14 /* Mac OS extra attributes */
+#define STREAM_UNIX_ACCESS_ACL 15 /* Standard ACL attributes on UNIX - Deprecated */
+#define STREAM_UNIX_DEFAULT_ACL 16 /* Default ACL attributes on UNIX - Deprecated */
+#define STREAM_SHA256_DIGEST 17 /* SHA-256 digest for the file */
+#define STREAM_SHA512_DIGEST 18 /* SHA-512 digest for the file */
+#define STREAM_SIGNED_DIGEST 19 /* Signed File Digest, ASN.1, DER Encoded */
+#define STREAM_ENCRYPTED_FILE_DATA 20 /* Encrypted, uncompressed data */
+#define STREAM_ENCRYPTED_WIN32_DATA 21 /* Encrypted, uncompressed Win32 BackupRead data */
+#define STREAM_ENCRYPTED_SESSION_DATA 22 /* Encrypted Session Data, ASN.1, DER Encoded */
+#define STREAM_ENCRYPTED_FILE_GZIP_DATA 23 /* Encrypted, compressed data */
+#define STREAM_ENCRYPTED_WIN32_GZIP_DATA 24 /* Encrypted, compressed Win32 BackupRead data */
+#define STREAM_ENCRYPTED_MACOS_FORK_DATA 25 /* Encrypted, uncompressed Mac resource fork */
+#define STREAM_PLUGIN_NAME 26 /* Plugin "file" string */
+#define STREAM_PLUGIN_DATA 27 /* Plugin specific data */
+/*
+ * Additional Stream definitions. Once defined these must NEVER
+ * change as they go on the storage media.
+ *
+ * The Stream numbers from 1000-1999 are reserved for ACL and extended attribute streams.
+ * Each different platform has its own stream id(s), if a platform supports multiple stream types
+ * it should supply different handlers for each type it supports and this should be called
+ * from the stream dispatch function. Currently in this reserved space we allocate the
+ * different acl streams from 1000 on and the different extended attributes streams from
+ * 1999 down. So the two naming spaces grows towards each other.
+ */
+#define STREAM_ACL_AIX_TEXT 1000 /* AIX specific string representation from acl_get */
+#define STREAM_ACL_DARWIN_ACCESS_ACL 1001 /* Darwin (OSX) specific acl_t string representation
+ * from acl_to_text (POSIX acl)
+ */
+#define STREAM_ACL_FREEBSD_DEFAULT_ACL 1002 /* FreeBSD specific acl_t string representation
+ * from acl_to_text (POSIX acl) for default acls.
+ */
+#define STREAM_ACL_FREEBSD_ACCESS_ACL 1003 /* FreeBSD specific acl_t string representation
+ * from acl_to_text (POSIX acl) for access acls.
+ */
+#define STREAM_ACL_HPUX_ACL_ENTRY 1004 /* HPUX specific acl_entry string representation
+ * from acltostr (POSIX acl)
+ */
+#define STREAM_ACL_IRIX_DEFAULT_ACL 1005 /* IRIX specific acl_t string representation
+ * from acl_to_text (POSIX acl) for default acls.
+ */
+#define STREAM_ACL_IRIX_ACCESS_ACL 1006 /* IRIX specific acl_t string representation
+ * from acl_to_text (POSIX acl) for access acls.
+ */
+#define STREAM_ACL_LINUX_DEFAULT_ACL 1007 /* Linux specific acl_t string representation
+ * from acl_to_text (POSIX acl) for default acls.
+ */
+#define STREAM_ACL_LINUX_ACCESS_ACL 1008 /* Linux specific acl_t string representation
+ * from acl_to_text (POSIX acl) for access acls.
+ */
+#define STREAM_ACL_TRU64_DEFAULT_ACL 1009 /* Tru64 specific acl_t string representation
+ * from acl_to_text (POSIX acl) for default acls.
+ */
+#define STREAM_ACL_TRU64_DEFAULT_DIR_ACL 1010 /* Tru64 specific acl_t string representation
+ * from acl_to_text (POSIX acl) for default acls.
+ */
+#define STREAM_ACL_TRU64_ACCESS_ACL 1011 /* Tru64 specific acl_t string representation
+ * from acl_to_text (POSIX acl) for access acls.
+ */
+#define STREAM_ACL_SOLARIS_ACLENT 1012 /* Solaris specific aclent_t string representation
+ * from acltotext or acl_totext (POSIX acl)
+ */
+#define STREAM_ACL_SOLARIS_ACE 1013 /* Solaris specific ace_t string representation from
+ * from acl_totext (NFSv4 or ZFS acl)
+ */
+#define STREAM_XATTR_SOLARIS_SYS 1994 /* Solaris specific extensible attributes or
+ * otherwise named extended system attributes.
+ */
+#define STREAM_XATTR_SOLARIS 1995 /* Solaris specific extented attributes */
+#define STREAM_XATTR_DARWIN 1996 /* Darwin (OSX) specific extended attributes */
+#define STREAM_XATTR_FREEBSD 1997 /* FreeBSD specific extended attributes */
+#define STREAM_XATTR_LINUX 1998 /* Linux specific extended attributes */
+#define STREAM_XATTR_NETBSD 1999 /* NetBSD specific extended attributes */
/*
* File type (Bacula defined).
* NOTE!!! These are saved in the Attributes record on the tape, so
* do not change them. If need be, add to them.
*
- * This is stored as 32 bits on tape, but only FT_MASK bits are
+ * This is stored as 32 bits on the Volume, but only FT_MASK (16) bits are
* used for the file type. The upper bits are used to indicate
* additional optional fields in the attribute record.
*/
#define FT_NOOPEN 15 /* Could not open directory */
#define FT_RAW 16 /* Raw block device */
#define FT_FIFO 17 /* Raw fifo device */
-/* This directory packet is sent to the FD file processing routine so
+/* The DIRBEGIN packet is sent to the FD file processing routine so
* that it can filter packets, but otherwise, it is not used
* or saved */
#define FT_DIRBEGIN 18 /* Directory at beginning (not saved) */
#define FT_INVALIDFS 19 /* File system not allowed for */
+#define FT_INVALIDDT 20 /* Drive type not allowed for */
+#define FT_REPARSE 21 /* Win NTFS reparse point */
+#define FT_PLUGIN 22 /* Plugin generated filename */
+#define FT_DELETED 23 /* Deleted file entry */
+#define FT_BASE 24 /* Duplicate base file entry */
/* Definitions for upper part of type word (see above). */
#define AR_DATA_STREAM (1<<16) /* Data stream id present */
-/*
- * Internal code for Signature types
- */
-#define NO_SIG 0
-#define MD5_SIG 1
-#define SHA1_SIG 2
-
/*
* Tape label types -- stored in catalog
*/
/* Size of File Address stored in STREAM_SPARSE_DATA. Do NOT change! */
#define SPARSE_FADDR_SIZE (sizeof(uint64_t))
+/* Size of crypto length stored at head of crypto buffer. Do NOT change! */
+#define CRYPTO_LEN_SIZE ((int)sizeof(uint32_t))
+
/* This is for dumb compilers/libraries like Solaris. Linux GCC
* does it correctly, so it might be worthwhile
#define MODE_RW 0666
#endif
-#ifdef DEBUG_MUTEX
-extern void _p(char *file, int line, pthread_mutex_t *m);
-extern void _v(char *file, int line, pthread_mutex_t *m);
-
-#define P(x) _p(__FILE__, __LINE__, &(x))
-#define V(x) _v(__FILE__, __LINE__, &(x))
-
+#if defined(HAVE_WIN32)
+typedef int64_t boffset_t;
+#define caddr_t char *
#else
-extern void _p(pthread_mutex_t *m);
-extern void _v(pthread_mutex_t *m);
-
-#define P(x) _p(&(x))
-#define V(x) _v(&(x))
-
-#endif /* DEBUG_MUTEX */
+typedef off_t boffset_t;
+#endif
/* These probably should be subroutines */
#define Pw(x) \
void d_msg(const char *file, int line, int level, const char *fmt,...);
void p_msg(const char *file, int line, int level, const char *fmt,...);
void e_msg(const char *file, int line, int type, int level, const char *fmt,...);
-void j_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
-void q_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
+void j_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const char *fmt,...);
+void q_msg(const char *file, int line, JCR *jcr, int type, utime_t mtime, const char *fmt,...);
int m_msg(const char *file, int line, POOLMEM **msgbuf, const char *fmt,...);
int m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...);
/* Use our strdup with smartalloc */
-#ifndef __WXGTK__
+#ifndef HAVE_WXCONSOLE
#undef strdup
#define strdup(buf) bad_call_on_strdup_use_bstrdup(buf)
+#else
+/* Groan, WxWidgets has its own way of doing NLS so cleanup */
+#ifndef ENABLE_NLS
+#undef _
+#undef setlocale
+#undef textdomain
+#undef bindtextdomain
+#endif
#endif
/* Use our fgets which handles interrupts */
#define bmalloc(size) b_malloc(__FILE__, __LINE__, (size))
#endif
+/* Macro to simplify free/reset pointers */
+#define bfree_and_null(a) do{if(a){free(a); (a)=NULL;}} while(0)
+
/*
* Replace codes needed in both file routines and non-file routines
* Job replace codes -- in "replace"
#define REPLACE_NEVER 'n'
#define REPLACE_IFOLDER 'o'
-/* This probably should be done on a machine by machine basic, but it works */
+/* This probably should be done on a machine by machine basis, but it works */
/* This is critical for the smartalloc routines to properly align memory */
#define ALIGN_SIZE (sizeof(double))
#define BALIGN(x) (((x) + ALIGN_SIZE - 1) & ~(ALIGN_SIZE -1))
/* take this 'shortcut' */
#define fseeko fseek
#define ftello ftell
+#undef ioctl_req_t
+#define ioctl_req_t int
#endif
#ifdef __alpha__
#define OSF 1
+#undef ioctl_req_t
+#define ioctl_req_t int
#endif
#ifdef HAVE_SUN_OS
#define set_thread_concurrency(x) thr_setconcurrency(x)
extern int thr_setconcurrency(int);
#define SunOS 1
+#undef ioctl_req_t
+#define ioctl_req_t int
#else
extern "C" int getdomainname(char *name, int len);
#endif
-#ifdef HAVE_OSF1_OS
-extern "C" int mknod ( const char *path, int mode, dev_t device );
-#endif
-#ifdef HAVE_CYGWIN
-/* They don't really have it */
-#undef HAVE_GETDOMAINNAME
-#endif
+#if defined(HAVE_WIN32)
+#define DEFAULT_CONFIGDIR "C:\\Documents and Settings\\All Users\\Application Data\\Bacula"
+#define PathSeparator '\\'
+
+inline bool IsPathSeparator(int ch) { return ch == '/' || ch == '\\'; }
+inline char *first_path_separator(char *path) { return strpbrk(path, "/\\"); }
+inline const char *first_path_separator(const char *path) { return strpbrk(path, "/\\"); }
+
+extern void pause_msg(const char *file, const char *func, int line, const char *msg);
+#define pause(msg) if (debug_level) pause_msg(__FILE__, __func__, __LINE__, (msg))
+
+#else
+#define PathSeparator '/'
/* Define Winsock functions if we aren't on Windows */
-#if (!defined HAVE_WIN32) || (defined HAVE_CYGWIN)
+
#define WSA_Init() 0 /* 0 = success */
#define WSACleanup() 0 /* 0 = success */
-#endif
-#ifdef HAVE_AIX_OS
+inline bool IsPathSeparator(int ch) { return ch == '/'; }
+inline char *first_path_separator(char *path) { return strchr(path, '/'); }
+inline const char *first_path_separator(const char *path) { return strchr(path, '/'); }
+#define pause(msg)
#endif
+
/* HP-UX 11 specific workarounds */
#ifdef HAVE_HPUX_OS
*/
extern "C" int getdomainname(char *name, int namelen);
extern "C" int setdomainname(char *name, int namelen);
-#define uLong unsigned long
+#undef ioctl_req_t
+#define ioctl_req_t int
#endif /* HAVE_HPUX_OS */
#ifdef HAVE_OSF1_OS
-#undef HAVE_CHFLAGS /* chflags is incorrectly detected */
extern "C" int fchdir(int filedes);
extern "C" long gethostid(void);
-#endif
-
-
-/* Added by KES to deal with Win32 systems */
-#ifndef S_ISWIN32
-#define S_ISWIN32 020000
+extern "C" int mknod ( const char *path, int mode, dev_t device );
+#undef ioctl_req_t
+#define ioctl_req_t int
#endif
#endif
*/
-/* Fake entry points if regex does not exist */
-#ifndef HAVE_REGEX_H
-#define regcomp(x, y, z) 1
-#define regfree(x)
-#define regerror(rc, preg, prbuf, len) bstrncpy(prbuf, "REGEX not available on this system.", len)
-#define regex_t int
-#define regmatch_t char
-#endif
+/* Determine endiannes */
+static inline bool bigendian() { return htonl(1) == 1L; }
#endif /* _BACONFIG_H */