X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fbaconfig.h;h=90a2248fbbb3a68e1e950d264fced1146b316a9a;hb=44dbd37e7efb85886c97c73931a3286851228138;hp=b36517f2c3dbb7fc10d32c318d788b7800b81953;hpb=14688fe152ffecdc82336decd897a0b5e56bb670;p=bacula%2Fbacula diff --git a/bacula/src/baconfig.h b/bacula/src/baconfig.h index b36517f2c3..90a2248fbb 100644 --- a/bacula/src/baconfig.h +++ b/bacula/src/baconfig.h @@ -5,7 +5,7 @@ * Version $Id$ */ /* - Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker + Copyright (C) 2000-2004 Kern Sibbald and John Walker This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -30,33 +30,45 @@ /* Bacula common configuration defines */ -#define DEBUG 1 /* turn on debug code */ - +#undef TRUE +#undef FALSE #define TRUE 1 #define FALSE 0 +#ifndef ETIME +#define ETIME ETIMEDOUT +#endif + #ifdef PROTOTYPES # define __PROTO(p) p #else # define __PROTO(p) () #endif -/* #define ASSERT(x) if (!(x)) Emsg1(M_ABORT, 0, "Failed ASSERT: %s\n", __STRING(x)) */ +#ifdef DEBUG #define ASSERT(x) if (!(x)) { \ char *jcr = NULL; \ Emsg1(M_ERROR, 0, "Failed ASSERT: %s\n", #x); \ jcr[0] = 0; } +#else +#define ASSERT(x) +#endif - +/* Allow printing of NULL pointers */ +#define NPRT(x) (x)?(x):"*None*" #ifdef ENABLE_NLS #include #define _(s) gettext((s)) #define N_(s) (s) #else +#undef _ #define _(s) (s) +#undef N_ #define N_(s) (s) -#define textdomain(x) +#undef textdomain +#define textdomain(d) +/* #define bindtextdomain(p, d) */ #endif @@ -64,46 +76,106 @@ #define MAXSTRING 500 /* Maximum length to edit time/date */ -#define MAX_TIME_LENGTH 30 +#define MAX_TIME_LENGTH 50 /* Maximum Name length including EOS */ #define MAX_NAME_LENGTH 128 +/* Maximume number of user entered command args */ +#define MAX_CMD_ARGS 30 + /* All tape operations MUST be a multiple of this */ #define TAPE_BSIZE 1024 #if !defined(DEV_BSIZE) && defined(BSIZE) #define DEV_BSIZE BSIZE -#else +#endif + +#ifndef DEV_BSIZE #define DEV_BSIZE 512 #endif -/* Maximum number of bytes that you can push into a - * socket. +/* + * Default network buffer size + */ +#define DEFAULT_NETWORK_BUFFER_SIZE (32 * 1024) + +/* + * 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 + * stat packet part of the attr record is put in the catalog. + * + * STREAM_UNIX_ATTRIBUTES + * STREAM_UNIX_ATTRIBUTES_EX + * STREAM_MD5_SIGNATURE + * STREAM_SHA1_SIGNATURE */ -#define MAX_NETWORK_BUFFER_SIZE (32 * 1024) +#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 */ + +/* + * 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 + * used for the file type. The upper bits are used to indicate + * additional optional fields in the attribute record. + */ +#define FT_MASK 0xFFFF /* Bits used by FT (type) */ +#define FT_LNKSAVED 1 /* hard link to file already saved */ +#define FT_REGE 2 /* Regular file but empty */ +#define FT_REG 3 /* Regular file */ +#define FT_LNK 4 /* Soft Link */ +#define FT_DIR 5 /* Directory */ +#define FT_SPEC 6 /* Special file -- chr, blk, fifo, sock */ +#define FT_NOACCESS 7 /* Not able to access */ +#define FT_NOFOLLOW 8 /* Could not follow link */ +#define FT_NOSTAT 9 /* Could not stat file */ +#define FT_NOCHG 10 /* Incremental option, file not changed */ +#define FT_DIRNOCHG 11 /* Incremental option, directory not changed */ +#define FT_ISARCH 12 /* Trying to save archive file */ +#define FT_NORECURSE 13 /* No recursion into directory */ +#define FT_NOFSCHG 14 /* Different file system, prohibited */ +#define FT_NOOPEN 15 /* Could not open directory */ +#define FT_RAW 16 /* Raw block device */ +#define FT_FIFO 17 /* Raw fifo device */ + +/* Definitions for upper part of type word (see above). */ +#define AR_DATA_STREAM (1<<16) /* Data stream id present */ -/* Stream definitions. Once defined these must NEVER - * change as they go on the storage media +/* + * Internal code for Signature types */ -#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 */ +#define NO_SIG 0 +#define MD5_SIG 1 +#define SHA1_SIG 2 +/* Size of File Address stored in STREAM_SPARSE_DATA. Do NOT change! */ +#define SPARSE_FADDR_SIZE (sizeof(uint64_t)) -/* This is for dumb compilers like Solaris. Linux GCC + +/* This is for dumb compilers/libraries like Solaris. Linux GCC * does it correctly, so it might be worthwhile * to remove the isascii(c) with ifdefs on such * "smart" systems. */ -#undef ISSPACE -#undef ISALPHA -#undef ISUPPER -#undef ISDIGIT -#define ISSPACE(c) (isascii((int)(c)) && isspace((int)(c))) -#define ISALPHA(c) (isascii((int)(c)) && isalpha((int)(c))) -#define ISUPPER(c) (isascii((int)(c)) && isupper((int)(c))) -#define ISDIGIT(c) (isascii((int)(c)) && isdigit((int)(c))) +#define B_ISSPACE(c) (isascii((int)(c)) && isspace((int)(c))) +#define B_ISALPHA(c) (isascii((int)(c)) && isalpha((int)(c))) +#define B_ISUPPER(c) (isascii((int)(c)) && isupper((int)(c))) +#define B_ISDIGIT(c) (isascii((int)(c)) && isdigit((int)(c))) typedef void (HANDLER)(); @@ -119,6 +191,11 @@ typedef int (INTHANDLER)(); #define S_ISLNK(m) (((m) & S_IFM) == S_IFLNK) #endif +/* Added by KES to deal with Win32 systems */ +#ifndef S_ISWIN32 +#define S_ISWIN32 020000 +#endif + #ifndef INADDR_NONE #define INADDR_NONE ((unsigned long) -1) #endif @@ -138,6 +215,10 @@ typedef int (INTHANDLER)(); #define O_BINARY 0 #endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif + #ifndef MODE_RW #define MODE_RW 0666 #endif @@ -166,6 +247,20 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #endif /* DEBUG_MUTEX */ +/* These probably should be subroutines */ +#define Pw(x) \ + do { int errstat; if ((errstat=rwl_writelock(&(x)))) \ + e_msg(__FILE__, __LINE__, M_ABORT, 0, "Write lock lock failure. ERR=%s\n",\ + strerror(errstat)); \ + } while(0) + +#define Vw(x) \ + do { int errstat; if ((errstat=rwl_writeunlock(&(x)))) \ + e_msg(__FILE__, __LINE__, M_ABORT, 0, "Write lock unlock failure. ERR=%s\n",\ + strerror(errstat)); \ + } while(0) + + /* * The digit following Dmsg and Emsg indicates the number of substitutions in * the message string. We need to do this kludge because non-GNU compilers @@ -201,6 +296,56 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #define Dmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) #define Dmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) #endif /* DEBUG */ + +#ifdef TRACE_FILE +#define Tmsg0(lvl, msg) t_msg(__FILE__, __LINE__, lvl, msg) +#define Tmsg1(lvl, msg, a1) t_msg(__FILE__, __LINE__, lvl, msg, a1) +#define Tmsg2(lvl, msg, a1, a2) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2) +#define Tmsg3(lvl, msg, a1, a2, a3) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) +#define Tmsg4(lvl, msg, arg1, arg2, arg3, arg4) t_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) +#define Tmsg5(lvl, msg, a1, a2, a3, a4, a5) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) +#define Tmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) +#define Tmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Tmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) t_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Tmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) t_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) +#define Tmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) t_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) +#define Tmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) t_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Tmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) t_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Tmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) t_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#else +#define Tmsg0(lvl, msg) +#define Tmsg1(lvl, msg, a1) +#define Tmsg2(lvl, msg, a1, a2) +#define Tmsg3(lvl, msg, a1, a2, a3) +#define Tmsg4(lvl, msg, arg1, arg2, arg3, arg4) +#define Tmsg5(lvl, msg, a1, a2, a3, a4, a5) +#define Tmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) +#define Tmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Tmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Tmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Tmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Tmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#endif /* TRACE_FILE */ + + + +/* Messages that are printed (uses d_msg) */ +#define Pmsg0(lvl, msg) p_msg(__FILE__, __LINE__, lvl, msg) +#define Pmsg1(lvl, msg, a1) p_msg(__FILE__, __LINE__, lvl, msg, a1) +#define Pmsg2(lvl, msg, a1, a2) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2) +#define Pmsg3(lvl, msg, a1, a2, a3) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3) +#define Pmsg4(lvl, msg, arg1, arg2, arg3, arg4) p_msg(__FILE__, __LINE__, lvl, msg, arg1, arg2, arg3, arg4) +#define Pmsg5(lvl, msg, a1, a2, a3, a4, a5) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5) +#define Pmsg6(lvl, msg, a1, a2, a3, a4, a5, a6) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6) +#define Pmsg7(lvl, msg, a1, a2, a3, a4, a5, a6, a7) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7) +#define Pmsg8(lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) p_msg(__FILE__, __LINE__, lvl, msg, a1, a2, a3, a4, a5, a6, a7, a8) +#define Pmsg9(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9) +#define Pmsg10(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) +#define Pmsg11(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) +#define Pmsg12(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) +#define Pmsg13(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) +#define Pmsg14(lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) p_msg(__FILE__,__LINE__,lvl,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) + /* Daemon Error Messages that are delivered according to the message resource */ #define Emsg0(typ, lvl, msg) e_msg(__FILE__, __LINE__, typ, lvl, msg) @@ -235,19 +380,25 @@ extern void _v(char *file, int line, pthread_mutex_t *m); #define Mmsg15(buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) m_msg(__FILE__,__LINE__,buf,msg,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) /* Edit message into Pool Memory buffer -- no __FILE__ and __LINE__ */ -int Mmsg(char **msgbuf, char *fmt,...); +int Mmsg(POOLMEM **msgbuf, char *fmt,...); +struct JCR; void d_msg(char *file, int line, int level, char *fmt,...); +void p_msg(char *file, int line, int level, char *fmt,...); void e_msg(char *file, int line, int type, int level, char *fmt,...); -void j_msg(char *file, int line, void *vjcr, int type, int level, char *fmt,...); -int m_msg(char *file, int line, char **msgbuf, char *fmt,...); +void j_msg(char *file, int line, JCR *jcr, int type, int level, char *fmt,...); +int m_msg(char *file, int line, POOLMEM **msgbuf, char *fmt,...); /* Use our strdup with smartalloc */ #undef strdup #define strdup(buf) bad_call_on_strdup_use_bstrdup(buf) +/* Use our fgets which handles interrupts */ +#undef fgets +#define fgets(x,y,z) bfgets((x), (y), (z)) + #ifdef DEBUG #define bstrdup(str) strcpy((char *) b_malloc(__FILE__,__LINE__,strlen((str))+1),(str)) #else @@ -274,12 +425,45 @@ extern int thr_setconcurrency(int); #else + /* Not needed on most systems */ #define set_thread_concurrency(x) #endif +#ifdef HAVE_DARWIN_OS +/* Apparently someone forgot to wrap getdomainname as a C function */ +extern "C" int getdomainname(char *name, int len); + +/* Darwin lib fnmatch() doesn't work, so use our own */ +#undef HAVE_FNMATCH +#endif + +#ifdef HAVE_CYGWIN +/* They don't really have it */ +#undef HAVE_GETDOMAINNAME +#endif + +#ifdef HAVE_AIX_OS +#endif + +/* This probably should be done on a machine by machine basic, but it works */ #define ALIGN_SIZE (sizeof(double)) #define BALIGN(x) (((x) + ALIGN_SIZE - 1) & ~(ALIGN_SIZE -1)) + +/* Added by KES to deal with Win32 systems */ +#ifndef S_ISWIN32 +#define S_ISWIN32 020000 +#endif + +/* + * Replace codes needed in both file routines and non-file routines + * Job replace codes -- in "replace" + */ +#define REPLACE_ALWAYS 'a' +#define REPLACE_IFNEWER 'w' +#define REPLACE_NEVER 'n' +#define REPLACE_IFOLDER 'o' + #endif /* _BACONFIG_H */