]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/backup.c
- Add a kludge to detect bad date/times, which cause a seg fault in
[bacula/bacula] / bacula / src / filed / backup.c
index 6adc77ecc356127f09cc682f075684be14eaa0de..84df57311cfd62a5f4bb74ba60993f681de5d17b 100644 (file)
@@ -173,21 +173,30 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
    case FT_FIFO:
       Dmsg1(130, "FT_FIFO saving: %s\n", ff_pkt->fname);
       break;
-   case FT_NOACCESS:
+   case FT_NOACCESS: {
+      berrno be;
+      be.set_errno(ff_pkt->ff_errno);
       Jmsg(jcr, M_NOTSAVED, -1, _("     Could not access %s: ERR=%s\n"), ff_pkt->fname, 
-        strerror(ff_pkt->ff_errno));
+        be.strerror());
       jcr->Errors++;
       return 1;
-   case FT_NOFOLLOW:
+   }
+   case FT_NOFOLLOW: {
+      berrno be;
+      be.set_errno(ff_pkt->ff_errno);
       Jmsg(jcr, M_NOTSAVED, -1, _("     Could not follow link %s: ERR=%s\n"), ff_pkt->fname, 
-        strerror(ff_pkt->ff_errno));
+        be.strerror());
       jcr->Errors++;
       return 1;
-   case FT_NOSTAT:
+   }
+   case FT_NOSTAT: {
+      berrno be;
+      be.set_errno(ff_pkt->ff_errno);
       Jmsg(jcr, M_NOTSAVED, -1, _("     Could not stat %s: ERR=%s\n"), ff_pkt->fname, 
-        strerror(ff_pkt->ff_errno));
+        be.strerror());
       jcr->Errors++;
       return 1;
+   }
    case FT_DIRNOCHG:
    case FT_NOCHG:
       Jmsg(jcr, M_SKIPPED, -1,  _("     Unchanged file skipped: %s\n"), ff_pkt->fname);
@@ -203,11 +212,14 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
       Jmsg(jcr, M_SKIPPED, -1,  _("     File system change prohibited. Directory skipped. %s\n"), 
         ff_pkt->fname);
       return 1;
-   case FT_NOOPEN:
+   case FT_NOOPEN: {
+      berrno be;
+      be.set_errno(ff_pkt->ff_errno);
       Jmsg(jcr, M_NOTSAVED, -1, _("     Could not open directory %s: ERR=%s\n"), ff_pkt->fname, 
-        strerror(ff_pkt->ff_errno));
+        be.strerror());
       jcr->Errors++;
       return 1;
+   }
    default:
       Jmsg(jcr, M_NOTSAVED, 0,  _("     Unknown file type %d; not saved: %s\n"), ff_pkt->type, ff_pkt->fname);
       jcr->Errors++;
@@ -218,6 +230,9 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
    if (ff_pkt->flags & FO_PORTABLE) {
       set_portable_backup(&ff_pkt->bfd); /* disable Win32 BackupRead() */
    }
+   if (ff_pkt->reader) {
+      set_prog(&ff_pkt->bfd, ff_pkt->reader, jcr);
+   }
 
    /* 
     * Open any file with data that we intend to save.  
@@ -236,13 +251,20 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
       }
       if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0) < 0) {
         ff_pkt->ff_errno = errno;
+        berrno be;
          Jmsg(jcr, M_NOTSAVED, -1, _("     Cannot open %s: ERR=%s.\n"), ff_pkt->fname, 
-             berror(&ff_pkt->bfd));
+             be.strerror());
         jcr->Errors++;
-        stop_thread_timer(tid);
+        if (tid) {
+           stop_thread_timer(tid);
+           tid = NULL;
+        }
         return 1;
       }
-      stop_thread_timer(tid);
+      if (tid) {
+        stop_thread_timer(tid);
+        tid = NULL;
+      }
    }
 
    Dmsg1(130, "bfiled: sending %s to stored\n", ff_pkt->fname);
@@ -458,8 +480,10 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
 
 
       if (sd->msglen < 0) {
+        berrno be;
+        be.set_errno(ff_pkt->bfd.berrno);
          Jmsg(jcr, M_ERROR, 0, _("Read error on file %s. ERR=%s\n"),
-           ff_pkt->fname, berror(&ff_pkt->bfd));
+           ff_pkt->fname, be.strerror());
       }
 
       bclose(&ff_pkt->bfd);             /* close file */
@@ -483,7 +507,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
            /* If there is no default ACL get standard ACL */
            myAcl = acl_get_file(ff_pkt->fname, ACL_TYPE_ACCESS);
            if (!myAcl) {
-               Emsg1(M_WARNING, 0, "Error while trying to get ACL of directory: %s!\n", ff_pkt->fname);
+               Jmsg1(jcr, M_WARNING, 0, "Error while trying to get ACL of directory: %s!\n", ff_pkt->fname);
            }
         }
          acl_text = acl_to_any_text(myAcl, NULL, ',', TEXT_ABBREVIATE);
@@ -493,7 +517,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
         /* Files or links */
         acl_t myAcl = acl_get_file(ff_pkt->fname, ACL_TYPE_ACCESS);
         if (!myAcl) {
-            Emsg1(M_WARNING, 0, "Error while trying to get ACL of file: %s!\n", ff_pkt->fname);
+            Jmsg1(jcr, M_WARNING, 0, "Error while trying to get ACL of file: %s!\n", ff_pkt->fname);
            acl_free(myAcl);
         }
          acl_text = acl_to_any_text(myAcl, NULL, ',', TEXT_ABBREVIATE);
@@ -523,7 +547,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
            sd->msglen = 0;
            bclose(&ff_pkt->bfd);
            set_jcr_job_status(jcr, JS_ErrorTerminated);
-            Emsg1(M_WARNING, 0, "Error while trying to send ACL of %s to SD!\n", ff_pkt->fname);
+            Jmsg1(jcr, M_FATAL, 0, "Error while trying to send ACL of %s to SD!\n", ff_pkt->fname);
         } else {
            jcr->JobBytes += sd->msglen;
            sd->msg = msgsave;