From: Kern Sibbald Date: Wed, 8 Jan 2003 16:08:01 +0000 (+0000) Subject: Update version X-Git-Tag: Release-1.29~47 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2734b3996d7af82d3e9bb455258bcfdb4634fe35;p=bacula%2Fbacula Update version git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@273 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 80079a6c2d..cb16e691b3 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -118,28 +118,77 @@ int send_include_list(JCR *jcr) fd = jcr->file_bsock; fileset = jcr->fileset; - msgsave = fd->msg; - fd->msglen = sprintf(fd->msg, inc); bnet_send(fd); for (i=0; i < fileset->num_includes; i++) { - fd->msglen = strlen(fileset->include_array[i]); + BPIPE *bpipe; + FILE *ffd; + char buf[1000]; + char *p; + Dmsg1(120, "dird>filed: include file: %s\n", fileset->include_array[i]); - fd->msg = fileset->include_array[i]; - if (!bnet_send(fd)) { - fd->msg = msgsave; - Emsg0(M_FATAL, 0, _(">filed: write error on socket\n")); - jcr->JobStatus = JS_ErrorTerminated; - return 0; + p = fileset->include_array[i]; + skip_nonspaces(&p); + skip_spaces(&p); + switch (*p++) { + case '|': + fd->msg = edit_job_codes(jcr, fd->msg, p, ""); + Dmsg1(000, "Doing bopen: %s\n", fd->msg); + bpipe = open_bpipe(fd->msg, 0, "r"); + if (!bpipe) { + Jmsg(jcr, M_FATAL, 0, _("Cannot run program: %s. ERR=%s\n"), + p, strerror(errno)); + goto bail_out; + } + Dmsg0(000, "Call fgets\n"); + while (fgets(buf, sizeof(buf), bpipe->rfd)) { + fd->msglen = Mmsg(&fd->msg, "%s", buf); + Dmsg2(000, "Including len=%d: %s", fd->msglen, fd->msg); + if (!bnet_send(fd)) { + Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); + goto bail_out; + } + } + Dmsg0(000, "Close bpipe\n"); + close_bpipe(bpipe); + break; + case '<': + if ((ffd = fopen(p, "r")) == NULL) { + Jmsg(jcr, M_FATAL, 0, _("Cannot open included file: %s. ERR=%s\n"), + p, strerror(errno)); + goto bail_out; + } + while (fgets(buf, sizeof(buf), ffd)) { + fd->msglen = Mmsg(&fd->msg, "%s", buf); + if (!bnet_send(fd)) { + Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); + goto bail_out; + } + } + fclose(ffd); + break; + default: + msgsave = fd->msg; + fd->msg = fileset->include_array[i]; + fd->msglen = strlen(fileset->include_array[i]); + if (!bnet_send(fd)) { + Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); + goto bail_out; + } + fd->msg = msgsave; + break; } } bnet_sig(fd, BNET_EOD); /* end of data */ - fd->msg = msgsave; if (!response(fd, OKinc, "Include")) { - jcr->JobStatus = JS_ErrorTerminated; - return 0; + goto bail_out; } return 1; + +bail_out: + jcr->JobStatus = JS_ErrorTerminated; + return 0; + } /* @@ -163,7 +212,7 @@ int send_exclude_list(JCR *jcr) Dmsg1(120, "dird>filed: exclude file: %s\n", fileset->exclude_array[i]); fd->msg = fileset->exclude_array[i]; if (!bnet_send(fd)) { - Emsg0(M_FATAL, 0, _(">filed: write error on socket\n")); + Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n")); jcr->JobStatus = JS_ErrorTerminated; return 0; } diff --git a/bacula/src/filed/backup.c b/bacula/src/filed/backup.c index bf834a40e2..81981da13a 100644 --- a/bacula/src/filed/backup.c +++ b/bacula/src/filed/backup.c @@ -132,6 +132,9 @@ static int save_file(FF_PKT *ff_pkt, void *ijcr) case FT_RAW: Dmsg1(130, "FT_RAW saving: %s\n", ff_pkt->fname); break; + case FT_FIFO: + Dmsg1(130, "FT_FIFO saving: %s\n", ff_pkt->fname); + break; case FT_NOACCESS: Jmsg(jcr, M_NOTSAVED, -1, _(" Could not access %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); @@ -169,7 +172,8 @@ static int save_file(FF_PKT *ff_pkt, void *ijcr) } if (ff_pkt->type != FT_LNKSAVED && (S_ISREG(ff_pkt->statp.st_mode) && - ff_pkt->statp.st_size > 0) || ff_pkt->type == FT_RAW) { + ff_pkt->statp.st_size > 0) || + ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO) { if ((ff_pkt->fid = open(ff_pkt->fname, O_RDONLY | O_BINARY)) < 0) { ff_pkt->ff_errno = errno; Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); diff --git a/bacula/src/filed/estimate.c b/bacula/src/filed/estimate.c index 95275fe9a3..ccd5d5763f 100644 --- a/bacula/src/filed/estimate.c +++ b/bacula/src/filed/estimate.c @@ -65,6 +65,7 @@ static int tally_file(FF_PKT *ff_pkt, void *ijcr) case FT_DIR: case FT_SPEC: case FT_RAW: + case FT_FIFO: break; case FT_NOACCESS: case FT_NOFOLLOW: diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index dc8ccfc7c5..b0418bdcb0 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -304,7 +304,7 @@ static int include_cmd(JCR *jcr) while (bnet_recv(dir) >= 0) { dir->msg[dir->msglen] = 0; strip_trailing_junk(dir->msg); - Dmsg1(110, "filedmsg); + Dmsg1(010, "include file: %s\n", dir->msg); add_fname_to_include_list(jcr->ff, 1, dir->msg); } diff --git a/bacula/src/filed/verify.c b/bacula/src/filed/verify.c index 1888bf5be4..832c506806 100644 --- a/bacula/src/filed/verify.c +++ b/bacula/src/filed/verify.c @@ -69,7 +69,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt) int32_t n; int fid, stat; struct MD5Context md5c; - unsigned char signature[16]; + unsigned char signature[20]; BSOCK *dir; JCR *jcr = (JCR *)pkt; @@ -102,6 +102,9 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt) case FT_RAW: Dmsg1(30, "FT_RAW saving: %s\n", ff_pkt->fname); break; + case FT_FIFO: + Dmsg1(30, "FT_FIFO saving: %s\n", ff_pkt->fname); + break; case FT_NOACCESS: Jmsg(jcr, M_NOTSAVED, -1, _(" Could not access %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); return 1; @@ -109,7 +112,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt) Jmsg(jcr, M_NOTSAVED, -1, _(" Could not follow link %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); return 1; case FT_NOSTAT: - Jmsg(jcr, M_NOTSAVED, -1, _(" Could not stat %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); + Jmsg(jcr, M_NOTSAVED, -1, _(" Could not stat %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); return 1; case FT_DIRNOCHG: case FT_NOCHG: @@ -134,7 +137,8 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt) if (ff_pkt->type != FT_LNKSAVED && (S_ISREG(ff_pkt->statp.st_mode) && - ff_pkt->statp.st_size > 0) || ff_pkt->type == FT_RAW) { + ff_pkt->statp.st_size > 0) || + ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO) { if ((fid = open(ff_pkt->fname, O_RDONLY | O_BINARY)) < 0) { ff_pkt->ff_errno = errno; Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno)); diff --git a/bacula/src/findlib/create_file.c b/bacula/src/findlib/create_file.c index 33e75690d6..beb60185dd 100644 --- a/bacula/src/findlib/create_file.c +++ b/bacula/src/findlib/create_file.c @@ -182,6 +182,7 @@ int create_file(void *jcr, char *fname, char *ofile, char *lname, } return CF_CREATED; case FT_RAW: + case FT_FIFO: case FT_SPEC: if (S_ISFIFO(statp->st_mode)) { Dmsg1(200, "Restore fifo: %s\n", ofile); @@ -196,8 +197,8 @@ int create_file(void *jcr, char *fname, char *ofile, char *lname, return CF_ERROR; } } - if (type == FT_RAW) { - Dmsg1(200, "FT_RAW %s\n", ofile); + if (type == FT_RAW || type == FT_FIFO) { + Dmsg1(200, "FT_RAW|FT_FIFO %s\n", ofile); mode = O_WRONLY | O_BINARY; if ((*ofd = open(ofile, mode)) < 0) { Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), ofile, strerror(errno)); diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h index 1206761abc..2d1f8da958 100755 --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -73,6 +73,7 @@ #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 */ /* Options saved in "flag" of ff packet */ #define FO_MD5 0x01 /* Do MD5 checksum */ diff --git a/bacula/src/findlib/find_one.c b/bacula/src/findlib/find_one.c index 597d2575e9..780bdc5d48 100755 --- a/bacula/src/findlib/find_one.c +++ b/bacula/src/findlib/find_one.c @@ -312,10 +312,13 @@ find_one_file(FF_PKT *ff_pkt, int handle_file(FF_PKT *ff, void *hpkt), void *pkt /* * If it is explicitly mentioned (i.e. top_level) and is - * a block device, we do a raw backup of it. + * a block device, we do a raw backup of it or if it is + * a fifo, we simply read it. */ - if (top_level && S_ISBLK(ff_pkt->statp.st_mode)) { + if (top_level && S_ISBLK(ff_pkt->statp.st_mode) { ff_pkt->type = FT_RAW; /* raw partition */ + } else if (top_level && S_ISFIFO(ff_pkt->statp.st_mode) { + ff_pkt->type = FT_FIFO; } else { /* The only remaining types are special (character, ...) files */ ff_pkt->type = FT_SPEC; diff --git a/bacula/src/lib/edit.c b/bacula/src/lib/edit.c index cf9b044c07..c7757f4bcd 100644 --- a/bacula/src/lib/edit.c +++ b/bacula/src/lib/edit.c @@ -277,3 +277,4 @@ char *add_commas(char *val, char *buf) } return buf; } + diff --git a/bacula/src/lib/message.c b/bacula/src/lib/message.c index a0079a6acb..3bcf27f15a 100755 --- a/bacula/src/lib/message.c +++ b/bacula/src/lib/message.c @@ -285,84 +285,6 @@ void rem_msg_dest(MSGS *msg, int dest_code, int msg_type, char *where) - -/* - * Edit job codes into main command line - * %% = % - * %j = Job name - * %t = Job type (Backup, ...) - * %e = Job Exit code - * %i = JobId - * %l = job level - * %c = Client's name - * %r = Recipients - * %d = Director's name - * - * omsg = edited output message - * imsg = input string containing edit codes (%x) - * to = recepients list - * - */ -static char *edit_job_codes(JCR *jcr, char *omsg, char *imsg, char *to) -{ - char *p, *str; - char add[20]; - - *omsg = 0; - Dmsg1(200, "edit_job_codes: %s\n", imsg); - for (p=imsg; *p; p++) { - if (*p == '%') { - switch (*++p) { - case '%': - str = "%"; - break; - case 'c': - str = jcr->client_name; - if (!str) { - str = ""; - } - break; - case 'd': - str = my_name; /* Director's name */ - break; - case 'e': - str = job_status_to_str(jcr->JobStatus); - break; - case 'i': - sprintf(add, "%d", jcr->JobId); - str = add; - break; - case 'j': /* Job name */ - str = jcr->Job; - break; - case 'l': - str = job_level_to_str(jcr->JobLevel); - break; - case 'r': - str = to; - break; - case 't': - str = job_type_to_str(jcr->JobType); - break; - default: - add[0] = '%'; - add[1] = *p; - add[2] = 0; - str = add; - break; - } - } else { - add[0] = *p; - add[1] = 0; - str = add; - } - Dmsg1(1200, "add_str %s\n", str); - pm_strcat(&omsg, str); - Dmsg1(1200, "omsg=%s\n", omsg); - } - return omsg; -} - static void make_unique_spool_filename(JCR *jcr, POOLMEM **name, int fd) { Mmsg(name, "%s/%s.spool.%s.%d", working_directory, my_name, @@ -989,8 +911,7 @@ void j_msg(char *file, int line, void *jcr, int type, int level, char *fmt,...) POOLMEM *pool_buf; pool_buf = get_pool_memory(PM_EMSG); - sprintf(pool_buf, "%s:%d ", file, line); - i = strlen(pool_buf); + i = sprintf(pool_buf, "%s:%d ", file, line); again: maxlen = sizeof_pool_memory(pool_buf) - i - 1; diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index b06e01b645..c05a1476e1 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -149,6 +149,7 @@ void makeSessionKey (char *key, char *seed, int mode); BPIPE * open_bpipe(char *prog, int wait, char *mode); int close_wpipe(BPIPE *bpipe); int close_bpipe(BPIPE *bpipe); +POOLMEM *edit_job_codes(void *jcr, char *omsg, char *imsg, char *to); /* watchdog.c */ diff --git a/bacula/src/lib/util.c b/bacula/src/lib/util.c index 36b8e84b9d..443498dfc6 100644 --- a/bacula/src/lib/util.c +++ b/bacula/src/lib/util.c @@ -564,3 +564,84 @@ void makeSessionKey(char *key, char *seed, int mode) } } #undef nextrand + + + +/* + * Edit job codes into main command line + * %% = % + * %j = Job name + * %t = Job type (Backup, ...) + * %e = Job Exit code + * %i = JobId + * %l = job level + * %c = Client's name + * %r = Recipients + * %d = Director's name + * + * omsg = edited output message + * imsg = input string containing edit codes (%x) + * to = recepients list + * + */ +POOLMEM *edit_job_codes(void *mjcr, char *omsg, char *imsg, char *to) +{ + char *p, *str; + char add[20]; + JCR *jcr = (JCR *)mjcr; + + *omsg = 0; + Dmsg1(200, "edit_job_codes: %s\n", imsg); + for (p=imsg; *p; p++) { + if (*p == '%') { + switch (*++p) { + case '%': + str = "%"; + break; + case 'c': + str = jcr->client_name; + if (!str) { + str = ""; + } + break; + case 'd': + str = my_name; /* Director's name */ + break; + case 'e': + str = job_status_to_str(jcr->JobStatus); + break; + case 'i': + sprintf(add, "%d", jcr->JobId); + str = add; + break; + case 'j': /* Job name */ + str = jcr->Job; + break; + case 'l': + str = job_level_to_str(jcr->JobLevel); + break; + case 'r': + str = to; + break; + case 't': + str = job_type_to_str(jcr->JobType); + break; + default: + add[0] = '%'; + add[1] = *p; + add[2] = 0; + str = add; + break; + } + } else { + add[0] = *p; + add[1] = 0; + str = add; + } + Dmsg1(1200, "add_str %s\n", str); + pm_strcat(&omsg, str); + Dmsg1(1200, "omsg=%s\n", omsg); + } + return omsg; +} + diff --git a/bacula/src/version.h b/bacula/src/version.h index 34b5921750..f2f26dfc96 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -1,5 +1,5 @@ /* */ -#define VERSION "1.29" +#define VERSION "1.28b" #define VSTRING "1" #define DATE "6 January 2003" #define LSMDATE "06Jan03"