]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/restore.c
Restore win32 dir from Branch-5.2 and update it
[bacula/bacula] / bacula / src / filed / restore.c
index c4cb40cef5409ad17ac11ec9eeaf33695c371b88..7f4c212d6cc06ac16901c405695bfb10f52592e0 100644 (file)
@@ -1134,6 +1134,12 @@ ok_out:
       delete rctx.delayed_streams;
    }
 
+   if (rctx.efs) {
+      rctx.efs->stop();
+      rctx.efs->destroy();
+      free(rctx.efs);
+      rctx.efs = NULL;
+   }
    Dsm_check(200);
    bclose(&rctx.forkbfd);
    bclose(&rctx.bfd);
@@ -1324,6 +1330,31 @@ static bool store_data(r_ctx &rctx, char *data, const int32_t length, bool win32
    if (jcr->crypto.digest) {
       crypto_digest_update(jcr->crypto.digest, (uint8_t *)data, length);
    }
+#ifdef TEST_WORKER
+   if (!test_write_efs_data(rctx, data, length)) {
+      berrno be;
+      Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: ERR=%s\n"),
+         jcr->last_fname, be.bstrerror(bfd->berrno));
+      return false;
+   }
+   return true;
+#endif
+
+#ifdef HAVE_WIN32
+   if (bfd->fattrs & FILE_ATTRIBUTE_ENCRYPTED) {
+      if (!p_WriteEncryptedFileRaw) {
+         Jmsg0(jcr, M_FATAL, 0, _("Windows Encrypted data not supported on this OS.\n"));
+         return false;
+      }
+      if (!win_write_efs_data(rctx, data, length)) {
+         berrno be;
+         Jmsg2(jcr, M_ERROR, 0, _("Encrypted file write error on %s: ERR=%s\n"),
+            jcr->last_fname, be.bstrerror(bfd->berrno));
+         return false;
+      }
+      return true;
+   }
+#endif
    if (win32_decomp) {
       if (!processWin32BackupAPIBlock(bfd, data, length)) {
          berrno be;
@@ -1507,6 +1538,12 @@ static bool close_previous_stream(r_ctx &rctx)
          deallocate_fork_cipher(rctx);
       }
 
+      if (rctx.efs) {
+         rctx.efs->finish_work();
+         bclose(&rctx.bfd);
+         rctx.count = 0;
+      }
+
       if (rctx.jcr->plugin) {
          plugin_set_attributes(rctx.jcr, rctx.attr, &rctx.bfd);
       } else {