]> git.sur5r.net Git - bacula/bacula/commitdiff
Update version
authorKern Sibbald <kern@sibbald.com>
Wed, 8 Jan 2003 16:08:01 +0000 (16:08 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 8 Jan 2003 16:08:01 +0000 (16:08 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@273 91ce42f0-d328-0410-95d8-f526ca767f89

13 files changed:
bacula/src/dird/fd_cmds.c
bacula/src/filed/backup.c
bacula/src/filed/estimate.c
bacula/src/filed/job.c
bacula/src/filed/verify.c
bacula/src/findlib/create_file.c
bacula/src/findlib/find.h
bacula/src/findlib/find_one.c
bacula/src/lib/edit.c
bacula/src/lib/message.c
bacula/src/lib/protos.h
bacula/src/lib/util.c
bacula/src/version.h

index 80079a6c2db6fd98c7fd5ee6a698bff624eda2b9..cb16e691b31e646a8f71845ee939d4f72e716a7d 100644 (file)
@@ -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;
       }
index bf834a40e281531b0601a5e3389daebe117dfe1c..81981da13a8fa891c3d275cd87fa25666c240df3 100644 (file)
@@ -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));
index 95275fe9a328e505058a82ced0e78d3e0fe35812..ccd5d5763ffdbc77512818de69c1bdfc717fc8f1 100644 (file)
@@ -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:
index dc8ccfc7c5246e353373f994d4879149280cbee8..b0418bdcb08f99977243c41f634379efa9d4f0bc 100644 (file)
@@ -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, "filed<dird: include file %s\n", dir->msg);
+       Dmsg1(010, "include file: %s\n", dir->msg);
        add_fname_to_include_list(jcr->ff, 1, dir->msg);
    }
 
index 1888bf5be46a40107afe4e141bc05bde9ff5ccb7..832c5068064eefe3f4a5a97e60c5e1d5841252b4 100644 (file)
@@ -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));
index 33e75690d61008a860561ec11af69d8079653c14..beb60185ddaba9b712bd4c65043d57e9b678cfbe 100644 (file)
@@ -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));
index 1206761abc98036d10091a562db34fac04894231..2d1f8da958454bc5ad86405463955ead058b7ce6 100755 (executable)
@@ -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 */
index 597d2575e9ea7fde8bcb3f92966bdc60c1a736b5..780bdc5d487b7c2dc1e7d687929292ffdc6fe18c 100755 (executable)
@@ -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;
index cf9b044c074cbe99dc5ea341655dd801e5359f5d..c7757f4bcd9b6819b7237d6967113d3495a9bd7e 100644 (file)
@@ -277,3 +277,4 @@ char *add_commas(char *val, char *buf)
    }   
    return buf;
 }
+
index a0079a6acbd39779324a75f574bc9cc8a1930c6a..3bcf27f15a63b20e9cbec8b1940cfb258f12f369 100755 (executable)
@@ -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; 
index b06e01b645965d067dd2122030aa2a127e569d5a..c05a1476e130f5f722ee355ad18f0833aa4f6bbb 100644 (file)
@@ -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 */
index 36b8e84b9d86d00776e12ac850a133651f7bb0a1..443498dfc6c4eb540e2026d5521145b0b7a8ef3d 100644 (file)
@@ -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;
+}
+
index 34b59217507bb8e9a494f5bbe58961cab2054ed9..f2f26dfc96269c31f5aa05a338fbea79a958cee5 100644 (file)
@@ -1,5 +1,5 @@
 /* */
-#define VERSION "1.29"
+#define VERSION "1.28b"
 #define VSTRING "1"
 #define DATE    "6 January 2003"
 #define LSMDATE "06Jan03"