]> git.sur5r.net Git - bacula/bacula/commitdiff
Attempt once again to fix OpenBSD acl/xattr problems
authorKern Sibbald <kern@sibbald.com>
Wed, 15 Mar 2017 10:40:49 +0000 (11:40 +0100)
committerKern Sibbald <kern@sibbald.com>
Wed, 15 Mar 2017 10:40:49 +0000 (11:40 +0100)
bacula/src/filed/backup.c
bacula/src/filed/restore.c
bacula/src/filed/xacl.c

index a036cb6a078bd84fc9ee8bf5cf1629ce3e49642f..5b2138e72900dd9c68e4fdd30febda8aa7ef6fbb 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula(R) - The Network Backup Solution
 
-   Copyright (C) 2000-2016 Kern Sibbald
+   Copyright (C) 2000-2017 Kern Sibbald
 
    The original author of Bacula is Kern Sibbald, with contributions
    from many others, a complete list can be found in the file AUTHORS.
@@ -17,7 +17,7 @@
    Bacula(R) is a registered trademark of Kern Sibbald.
  */
 /*
- *  Bacula File Daemon backup.c  send file attributes and data
+ *  Bacula File Daemon  backup.c  send file attributes and data
  *   to the Storage daemon.
  *
  *    Kern Sibbald, March MM
@@ -82,7 +82,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
    if (client) {
       buf_size = client->max_network_buffer_size;
    } else {
-      buf_size = 0;                  /* use default */
+      buf_size = 0;                   /* use default */
    }
    if (!sd->set_buffer_size(buf_size, BNET_SETBUF_WRITE)) {
       jcr->setJobStatus(JS_ErrorTerminated);
@@ -99,7 +99,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
     *  same output buffer can be used without growing it.
     *
     *  For LZO1X compression the recommended value is :
-    *                 output_block_size = input_block_size + (input_block_size / 16) + 64 + 3 + sizeof(comp_stream_header)
+    *                  output_block_size = input_block_size + (input_block_size / 16) + 64 + 3 + sizeof(comp_stream_header)
     *
     * The zlib compression workset is initialized here to minimize
     *  the "per file" load. The jcr member is only set, if the init
@@ -124,9 +124,9 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
       pZlibStream->state = Z_NULL;
 
       if (deflateInit(pZlibStream, Z_DEFAULT_COMPRESSION) == Z_OK) {
-        jcr->pZLIB_compress_workset = pZlibStream;
+         jcr->pZLIB_compress_workset = pZlibStream;
       } else {
-        free (pZlibStream);
+         free (pZlibStream);
       }
    }
 #endif
@@ -135,9 +135,9 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
    lzo_voidp pLzoMem = (lzo_voidp) malloc(LZO1X_1_MEM_COMPRESS);
    if (pLzoMem) {
       if (lzo_init() == LZO_E_OK) {
-        jcr->LZO_compress_workset = pLzoMem;
+         jcr->LZO_compress_workset = pLzoMem;
       } else {
-        free (pLzoMem);
+         free (pLzoMem);
       }
    }
 #endif
@@ -159,27 +159,29 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
 
    /* Subroutine save_file() is called for each file */
    if (!find_files(jcr, (FF_PKT *)jcr->ff, save_file, plugin_save)) {
-      ok = false;                    /* error */
+      ok = false;                     /* error */
       jcr->setJobStatus(JS_ErrorTerminated);
    }
 
-   if (jcr->xacl->get_acl_nr_errors() > 0) {
-      Jmsg(jcr, M_WARNING, 0, _("Had %ld acl errors while doing backup\n"), jcr->xacl->get_acl_nr_errors());
-   }
-
-   if (jcr->xacl->get_xattr_nr_errors() > 0) {
-      Jmsg(jcr, M_WARNING, 0, _("Had %ld xattr errors while doing backup\n"), jcr->xacl->get_xattr_nr_errors());
+   if (jcr->xacl) {
+      if (jcr->xacl->get_acl_nr_errors() > 0) {
+         Jmsg(jcr, M_WARNING, 0, _("Had %ld acl errors while doing backup\n"),
+            jcr->xacl->get_acl_nr_errors());
+      }
+      if (jcr->xacl->get_xattr_nr_errors() > 0) {
+         Jmsg(jcr, M_WARNING, 0, _("Had %ld xattr errors while doing backup\n"),
+            jcr->xacl->get_xattr_nr_errors());
+      }
    }
-
    /* Delete or keep snapshots */
    close_snapshot_backup_session(jcr);
    close_vss_backup_session(jcr);
 
-   accurate_finish(jcr);             /* send deleted or base file list to SD */
+   accurate_finish(jcr);              /* send deleted or base file list to SD */
 
    stop_heartbeat_monitor(jcr);
 
-   sd->signal(BNET_EOD);           /* end of sending data */
+   sd->signal(BNET_EOD);            /* end of sending data */
 
    if (jcr->xacl) {
       delete(jcr->xacl);
@@ -217,8 +219,8 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
  *  Send the file and its data to the Storage daemon.
  *
  *  Returns: 1 if OK
- *          0 if error
- *         -1 to ignore file/directory (not used here)
+ *           0 if error
+ *          -1 to ignore file/directory (not used here)
  */
 int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
 {
@@ -228,9 +230,9 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    int stat;
    int rtnstat = 0;
    bool has_file_data = false;
-   struct save_pkt sp;         /* used by option plugin */
+   struct save_pkt sp;          /* used by option plugin */
    BSOCK *sd = jcr->store_bsock;
-   bctx_t bctx;                 /* backup context */
+   bctx_t bctx;                  /* backup context */
 
    memset(&bctx, 0, sizeof(bctx));
    bctx.sd = sd;
@@ -241,10 +243,10 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    time_t now = time(NULL);
    if (jcr->last_stat_time == 0) {
       jcr->last_stat_time = now;
-      jcr->stat_interval = 30; /* Default 30 seconds */
+      jcr->stat_interval = 30;  /* Default 30 seconds */
    } else if (now >= jcr->last_stat_time + jcr->stat_interval) {
       jcr->dir_bsock->fsend("Progress Job=x files=%ld bytes=%lld bps=%ld\n",
-        jcr->JobFiles, jcr->JobBytes, jcr->LastRate);
+         jcr->JobFiles, jcr->JobBytes, jcr->LastRate);
       jcr->last_stat_time = now;
    }
 
@@ -253,10 +255,10 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       return 0;
    }
 
-   jcr->num_files_examined++;        /* bump total file count */
+   jcr->num_files_examined++;         /* bump total file count */
 
    switch (ff_pkt->type) {
-   case FT_LNKSAVED:                 /* Hard linked, file already saved */
+   case FT_LNKSAVED:                  /* Hard linked, file already saved */
       Dmsg2(130, "FT_LNKSAVED hard link: %s => %s\n", ff_pkt->fname, ff_pkt->link);
       break;
    case FT_REGE:
@@ -278,28 +280,28 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       break;
    case FT_DIRBEGIN:
       jcr->num_files_examined--;      /* correct file count */
-      return 1;                      /* not used */
+      return 1;                       /* not used */
    case FT_NORECURSE:
-      Jmsg(jcr, M_INFO, 1, _("    Recursion turned off. Will not descend from %s into %s\n"),
-          ff_pkt->top_fname, ff_pkt->fname);
+      Jmsg(jcr, M_INFO, 1, _("     Recursion turned off. Will not descend from %s into %s\n"),
+           ff_pkt->top_fname, ff_pkt->fname);
       ff_pkt->type = FT_DIREND;       /* Backup only the directory entry */
       break;
    case FT_NOFSCHG:
       /* Suppress message for /dev filesystems */
       if (!is_in_fileset(ff_pkt)) {
-        Jmsg(jcr, M_INFO, 1, _("     %s is a different filesystem. Will not descend from %s into it.\n"),
-             ff_pkt->fname, ff_pkt->top_fname);
+         Jmsg(jcr, M_INFO, 1, _("     %s is a different filesystem. Will not descend from %s into it.\n"),
+              ff_pkt->fname, ff_pkt->top_fname);
       }
       ff_pkt->type = FT_DIREND;       /* Backup only the directory entry */
       break;
    case FT_INVALIDFS:
-      Jmsg(jcr, M_INFO, 1, _("    Disallowed filesystem. Will not descend from %s into %s\n"),
-          ff_pkt->top_fname, ff_pkt->fname);
+      Jmsg(jcr, M_INFO, 1, _("     Disallowed filesystem. Will not descend from %s into %s\n"),
+           ff_pkt->top_fname, ff_pkt->fname);
       ff_pkt->type = FT_DIREND;       /* Backup only the directory entry */
       break;
    case FT_INVALIDDT:
-      Jmsg(jcr, M_INFO, 1, _("    Disallowed drive type. Will not descend into %s\n"),
-          ff_pkt->fname);
+      Jmsg(jcr, M_INFO, 1, _("     Disallowed drive type. Will not descend into %s\n"),
+           ff_pkt->fname);
       break;
    case FT_REPARSE:
    case FT_JUNCTION:
@@ -309,8 +311,8 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    case FT_SPEC:
       Dmsg1(130, "FT_SPEC saving: %s\n", ff_pkt->fname);
       if (S_ISSOCK(ff_pkt->statp.st_mode)) {
-       Jmsg(jcr, M_SKIPPED, 1, _("     Socket file skipped: %s\n"), ff_pkt->fname);
-       return 1;
+        Jmsg(jcr, M_SKIPPED, 1, _("     Socket file skipped: %s\n"), ff_pkt->fname);
+        return 1;
       }
       break;
    case FT_RAW:
@@ -323,21 +325,21 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    case FT_NOACCESS: {
       berrno be;
       Jmsg(jcr, M_NOTSAVED, 0, _("     Could not access \"%s\": ERR=%s\n"), ff_pkt->fname,
-        be.bstrerror(ff_pkt->ff_errno));
+         be.bstrerror(ff_pkt->ff_errno));
       jcr->JobErrors++;
       return 1;
    }
    case FT_NOFOLLOW: {
       berrno be;
       Jmsg(jcr, M_NOTSAVED, 0, _("     Could not follow link \"%s\": ERR=%s\n"),
-          ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno));
+           ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno));
       jcr->JobErrors++;
       return 1;
    }
    case FT_NOSTAT: {
       berrno be;
       Jmsg(jcr, M_NOTSAVED, 0, _("     Could not stat \"%s\": ERR=%s\n"), ff_pkt->fname,
-        be.bstrerror(ff_pkt->ff_errno));
+         be.bstrerror(ff_pkt->ff_errno));
       jcr->JobErrors++;
       return 1;
    }
@@ -351,7 +353,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    case FT_NOOPEN: {
       berrno be;
       Jmsg(jcr, M_NOTSAVED, 0, _("     Could not open directory \"%s\": ERR=%s\n"),
-          ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno));
+           ff_pkt->fname, be.bstrerror(ff_pkt->ff_errno));
       jcr->JobErrors++;
       return 1;
    }
@@ -359,8 +361,8 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       Dmsg1(130, "FT_DELETED: %s\n", ff_pkt->fname);
       break;
    default:
-      Jmsg(jcr, M_NOTSAVED, 0, _("     Unknown file type %d; not saved: %s\n"),
-          ff_pkt->type, ff_pkt->fname);
+      Jmsg(jcr, M_NOTSAVED, 0,  _("     Unknown file type %d; not saved: %s\n"),
+           ff_pkt->type, ff_pkt->fname);
       jcr->JobErrors++;
       return 1;
    }
@@ -387,27 +389,27 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       /* ask the option plugin what to do with this file */
       switch (plugin_option_handle_file(jcr, ff_pkt, &sp)) {
       case bRC_OK:
-        Dmsg2(10, "Option plugin %s will be used to backup %s\n",
-              ff_pkt->plugin, ff_pkt->fname);
-        do_plugin_set = true;
-        break;
+         Dmsg2(10, "Option plugin %s will be used to backup %s\n",
+               ff_pkt->plugin, ff_pkt->fname);
+         do_plugin_set = true;
+         break;
       case bRC_Skip:
-        Dmsg2(10, "Option plugin %s decided to skip %s\n",
-              ff_pkt->plugin, ff_pkt->fname);
-        goto good_rtn;
+         Dmsg2(10, "Option plugin %s decided to skip %s\n",
+               ff_pkt->plugin, ff_pkt->fname);
+         goto good_rtn;
       default:
-        Dmsg2(10, "Option plugin %s decided to let bacula handle %s\n",
-              ff_pkt->plugin, ff_pkt->fname);
-        break;
+         Dmsg2(10, "Option plugin %s decided to let bacula handle %s\n",
+               ff_pkt->plugin, ff_pkt->fname);
+         break;
       }
    }
 
    if (do_plugin_set) {
       /* Tell bfile that it needs to call plugin */
       if (!set_cmd_plugin(&ff_pkt->bfd, jcr)) {
-        goto bail_out;
+         goto bail_out;
       }
-      send_plugin_name(jcr, sd, true);     /* signal start of plugin data */
+      send_plugin_name(jcr, sd, true);      /* signal start of plugin data */
       plugin_started = true;
    }
 
@@ -426,7 +428,7 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
    /** Set up the encryption context and send the session data to the SD */
    if (has_file_data && jcr->crypto.pki_encrypt) {
       if (!crypto_session_send(jcr, sd)) {
-        goto bail_out;
+         goto bail_out;
       }
    }
 
@@ -443,8 +445,8 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       do_read = ff_pkt->statp.st_size > 0;
 #endif
    } else if (ff_pkt->type == FT_RAW || ff_pkt->type == FT_FIFO ||
-             ff_pkt->type == FT_REPARSE || ff_pkt->type == FT_JUNCTION ||
-        (!is_portable_backup(&ff_pkt->bfd) && ff_pkt->type == FT_DIREND)) {
+              ff_pkt->type == FT_REPARSE || ff_pkt->type == FT_JUNCTION ||
+         (!is_portable_backup(&ff_pkt->bfd) && ff_pkt->type == FT_DIREND)) {
       do_read = true;
    }
 
@@ -457,41 +459,41 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       btimer_t *tid;
 
       if (ff_pkt->type == FT_FIFO) {
-        tid = start_thread_timer(jcr, pthread_self(), 60);
+         tid = start_thread_timer(jcr, pthread_self(), 60);
       } else {
-        tid = NULL;
+         tid = NULL;
       }
       int noatime = ff_pkt->flags & FO_NOATIME ? O_NOATIME : 0;
       ff_pkt->bfd.reparse_point = (ff_pkt->type == FT_REPARSE ||
-                                  ff_pkt->type == FT_JUNCTION);
+                                   ff_pkt->type == FT_JUNCTION);
       set_fattrs(&ff_pkt->bfd, &ff_pkt->statp);
       if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY | noatime, 0) < 0) {
-        ff_pkt->ff_errno = errno;
-        berrno be;
-        Jmsg(jcr, M_NOTSAVED, 0, _("     Cannot open \"%s\": ERR=%s.\n"), ff_pkt->fname,
-             be.bstrerror());
-        jcr->JobErrors++;
-        if (tid) {
-           stop_thread_timer(tid);
-           tid = NULL;
-        }
-        goto good_rtn;
+         ff_pkt->ff_errno = errno;
+         berrno be;
+         Jmsg(jcr, M_NOTSAVED, 0, _("     Cannot open \"%s\": ERR=%s.\n"), ff_pkt->fname,
+              be.bstrerror());
+         jcr->JobErrors++;
+         if (tid) {
+            stop_thread_timer(tid);
+            tid = NULL;
+         }
+         goto good_rtn;
       }
       if (tid) {
-        stop_thread_timer(tid);
-        tid = NULL;
+         stop_thread_timer(tid);
+         tid = NULL;
       }
 
       stat = send_data(bctx, bctx.data_stream);
 
       if (ff_pkt->flags & FO_CHKCHANGES) {
-        has_file_changed(jcr, ff_pkt);
+         has_file_changed(jcr, ff_pkt);
       }
 
       bclose(&ff_pkt->bfd);
 
       if (!stat) {
-        goto bail_out;
+         goto bail_out;
       }
    }
 
@@ -507,10 +509,10 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
     */
    if (jcr->xacl){
       if (jcr->xacl->backup_acl(jcr, ff_pkt) == bRC_XACL_error) {
-        goto bail_out;
+         goto bail_out;
       }
       if (jcr->xacl->backup_xattr(jcr, ff_pkt) == bRC_XACL_error) {
-        goto bail_out;
+         goto bail_out;
       }
    }
 
@@ -530,7 +532,7 @@ bail_out:
       send_plugin_name(jcr, sd, false); /* signal end of plugin data */
    }
    if (ff_pkt->opt_plugin) {
-      jcr->plugin_sp = NULL;   /* sp is local to this function */
+      jcr->plugin_sp = NULL;    /* sp is local to this function */
       jcr->plugin_ctx = NULL;
       jcr->plugin = NULL;
       jcr->opt_plugin = false;
@@ -563,9 +565,9 @@ static int send_data(bctx_t &bctx, int stream)
    bctx.fileAddr = 0;
    bctx.cipher_ctx = NULL;
    bctx.msgsave = sd->msg;
-   bctx.rbuf = sd->msg;                   /* read buffer */
-   bctx.wbuf = sd->msg;                   /* write buffer */
-   bctx.cipher_input = (uint8_t *)bctx.rbuf;   /* encrypt uncompressed data */
+   bctx.rbuf = sd->msg;                    /* read buffer */
+   bctx.wbuf = sd->msg;                    /* write buffer */
+   bctx.cipher_input = (uint8_t *)bctx.rbuf;    /* encrypt uncompressed data */
 
    Dmsg1(300, "Saving data, type=%d\n", bctx.ff_pkt->type);
 
@@ -579,13 +581,13 @@ static int send_data(bctx_t &bctx, int stream)
 
    /**
     * Send Data header to Storage daemon
-    *   <file-index> <stream> <expected stream length>
+    *    <file-index> <stream> <expected stream length>
     */
    if (!sd->fsend("%ld %d %lld", jcr->JobFiles, stream,
-       (int64_t)bctx.ff_pkt->statp.st_size)) {
+        (int64_t)bctx.ff_pkt->statp.st_size)) {
       if (!jcr->is_job_canceled()) {
-        Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
-              sd->bstrerror());
+         Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
+               sd->bstrerror());
       }
       goto err;
    }
@@ -593,7 +595,7 @@ static int send_data(bctx_t &bctx, int stream)
 
    /**
     * Make space at beginning of buffer for fileAddr because this
-    *  same buffer will be used for writing if compression is off.
+    *   same buffer will be used for writing if compression is off.
     */
    if ((bctx.ff_pkt->flags & FO_SPARSE) || (bctx.ff_pkt->flags & FO_OFFSETS)) {
       bctx.rbuf += OFFSET_FADDR_SIZE;
@@ -615,13 +617,13 @@ static int send_data(bctx_t &bctx, int stream)
    Dmsg1(200, "Fattrs=0X%x\n", bctx.ff_pkt->bfd.fattrs);
    if (bctx.ff_pkt->bfd.fattrs & FILE_ATTRIBUTE_ENCRYPTED) {
       if (!p_ReadEncryptedFileRaw) {
-        Jmsg0(bctx.jcr, M_FATAL, 0, _("Windows Encrypted data not supported on this OS.\n"));
-        goto err;
+         Jmsg0(bctx.jcr, M_FATAL, 0, _("Windows Encrypted data not supported on this OS.\n"));
+         goto err;
       }
       /* This single call reads all EFS data delivers it to a callback */
       if (p_ReadEncryptedFileRaw((PFE_EXPORT_FUNC)read_efs_data_cb, &bctx,
-           bctx.ff_pkt->bfd.pvContext) != 0) {
-        goto err;
+            bctx.ff_pkt->bfd.pvContext) != 0) {
+         goto err;
       }
       /* All read, so skip to finish sending */
       goto finish_sending;
@@ -634,18 +636,18 @@ static int send_data(bctx_t &bctx, int stream)
     */
    while ((sd->msglen=(uint32_t)bread(&bctx.ff_pkt->bfd, bctx.rbuf, bctx.rsize)) > 0) {
       if (!process_and_send_data(bctx)) {
-        goto err;
+         goto err;
       }
    } /* end while read file data */
    goto finish_sending;
 
 finish_sending:
-   if (sd->msglen < 0) {                /* error */
+   if (sd->msglen < 0) {                 /* error */
       berrno be;
       Jmsg(jcr, M_ERROR, 0, _("Read error on file %s. ERR=%s\n"),
-        bctx.ff_pkt->fname, be.bstrerror(bctx.ff_pkt->bfd.berrno));
-      if (jcr->JobErrors++ > 1000) {      /* insanity check */
-        Jmsg(jcr, M_FATAL, 0, _("Too many errors. JobErrors=%d.\n"), jcr->JobErrors);
+         bctx.ff_pkt->fname, be.bstrerror(bctx.ff_pkt->bfd.berrno));
+      if (jcr->JobErrors++ > 1000) {       /* insanity check */
+         Jmsg(jcr, M_FATAL, 0, _("Too many errors. JobErrors=%d.\n"), jcr->JobErrors);
       }
    } else if (bctx.ff_pkt->flags & FO_ENCRYPT) {
       /**
@@ -653,34 +655,34 @@ finish_sending:
        *  buffered data.
        */
       if (!crypto_cipher_finalize(bctx.cipher_ctx, (uint8_t *)jcr->crypto.crypto_buf,
-          &bctx.encrypted_len)) {
-        /* Padding failed. Shouldn't happen. */
-        Jmsg(jcr, M_FATAL, 0, _("Encryption padding error\n"));
-        goto err;
+           &bctx.encrypted_len)) {
+         /* Padding failed. Shouldn't happen. */
+         Jmsg(jcr, M_FATAL, 0, _("Encryption padding error\n"));
+         goto err;
       }
 
       /** Note, on SSL pre-0.9.7, there is always some output */
       if (bctx.encrypted_len > 0) {
-        sd->msglen = bctx.encrypted_len;     /* set encrypted length */
-        sd->msg = jcr->crypto.crypto_buf;    /* set correct write buffer */
-        if (!sd->send()) {
-           if (!jcr->is_job_canceled()) {
-              Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
-                    sd->bstrerror());
-           }
-           goto err;
-        }
-        Dmsg1(130, "Send data to SD len=%d\n", sd->msglen);
-        jcr->JobBytes += sd->msglen;     /* count bytes saved possibly compressed/encrypted */
-        sd->msg = bctx.msgsave;          /* restore bnet buffer */
+         sd->msglen = bctx.encrypted_len;     /* set encrypted length */
+         sd->msg = jcr->crypto.crypto_buf;    /* set correct write buffer */
+         if (!sd->send()) {
+            if (!jcr->is_job_canceled()) {
+               Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
+                     sd->bstrerror());
+            }
+            goto err;
+         }
+         Dmsg1(130, "Send data to SD len=%d\n", sd->msglen);
+         jcr->JobBytes += sd->msglen;     /* count bytes saved possibly compressed/encrypted */
+         sd->msg = bctx.msgsave;          /* restore bnet buffer */
       }
    }
 
 
    if (!sd->signal(BNET_EOD)) {        /* indicate end of file data */
       if (!jcr->is_job_canceled()) {
-        Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
-              sd->bstrerror());
+         Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
+               sd->bstrerror());
       }
       goto err;
    }
@@ -717,20 +719,20 @@ bool process_and_send_data(bctx_t &bctx)
       ser_declare;
       bool allZeros = false;
       if ((sd->msglen == bctx.rsize &&
-          bctx.fileAddr+sd->msglen < (uint64_t)bctx.ff_pkt->statp.st_size) ||
-         ((bctx.ff_pkt->type == FT_RAW || bctx.ff_pkt->type == FT_FIFO) &&
-           (uint64_t)bctx.ff_pkt->statp.st_size == 0)) {
-        allZeros = is_buf_zero(bctx.rbuf, bctx.rsize);
+           bctx.fileAddr+sd->msglen < (uint64_t)bctx.ff_pkt->statp.st_size) ||
+          ((bctx.ff_pkt->type == FT_RAW || bctx.ff_pkt->type == FT_FIFO) &&
+            (uint64_t)bctx.ff_pkt->statp.st_size == 0)) {
+         allZeros = is_buf_zero(bctx.rbuf, bctx.rsize);
       }
       if (!allZeros) {
-        /** Put file address as first data in buffer */
-        ser_begin(bctx.wbuf, OFFSET_FADDR_SIZE);
-        ser_uint64(bctx.fileAddr);     /* store fileAddr in begin of buffer */
+         /** Put file address as first data in buffer */
+         ser_begin(bctx.wbuf, OFFSET_FADDR_SIZE);
+         ser_uint64(bctx.fileAddr);     /* store fileAddr in begin of buffer */
       }
-      bctx.fileAddr += sd->msglen;     /* update file address */
+      bctx.fileAddr += sd->msglen;      /* update file address */
       /** Skip block of all zeros */
       if (allZeros) {
-        return true;                 /* skip block of zeros */
+         return true;                 /* skip block of zeros */
       }
    } else if (bctx.ff_pkt->flags & FO_OFFSETS) {
       ser_declare;
@@ -738,7 +740,7 @@ bool process_and_send_data(bctx_t &bctx)
       ser_uint64(bctx.ff_pkt->bfd.offset);     /* store offset in begin of buffer */
    }
 
-   jcr->ReadBytes += sd->msglen;        /* count bytes read */
+   jcr->ReadBytes += sd->msglen;         /* count bytes read */
 
    /** Uncompressed cipher input length */
    bctx.cipher_input_len = sd->msglen;
@@ -779,7 +781,7 @@ bool process_and_send_data(bctx_t &bctx)
       ser_declare;
 
       if ((bctx.ff_pkt->flags & FO_SPARSE) || (bctx.ff_pkt->flags & FO_OFFSETS)) {
-        bctx.cipher_input_len += OFFSET_FADDR_SIZE;
+         bctx.cipher_input_len += OFFSET_FADDR_SIZE;
       }
 
       /** Encrypt the length of the input block */
@@ -790,26 +792,26 @@ bool process_and_send_data(bctx_t &bctx)
       Dmsg1(20, "Encrypt len=%d\n", bctx.cipher_input_len);
 
       if (!crypto_cipher_update(bctx.cipher_ctx, packet_len, sizeof(packet_len),
-         (uint8_t *)jcr->crypto.crypto_buf, &initial_len)) {
-        /** Encryption failed. Shouldn't happen. */
-        Jmsg(jcr, M_FATAL, 0, _("Encryption error\n"));
-        goto err;
+          (uint8_t *)jcr->crypto.crypto_buf, &initial_len)) {
+         /** Encryption failed. Shouldn't happen. */
+         Jmsg(jcr, M_FATAL, 0, _("Encryption error\n"));
+         goto err;
       }
 
       /** Encrypt the input block */
       if (crypto_cipher_update(bctx.cipher_ctx, bctx.cipher_input, bctx.cipher_input_len,
-         (uint8_t *)&jcr->crypto.crypto_buf[initial_len], &bctx.encrypted_len)) {
-        if ((initial_len + bctx.encrypted_len) == 0) {
-           /** No full block of data available, read more data */
-           return true;
-        }
-        Dmsg2(400, "encrypted len=%d unencrypted len=%d\n", bctx.encrypted_len,
-              sd->msglen);
-        sd->msglen = initial_len + bctx.encrypted_len; /* set encrypted length */
+          (uint8_t *)&jcr->crypto.crypto_buf[initial_len], &bctx.encrypted_len)) {
+         if ((initial_len + bctx.encrypted_len) == 0) {
+            /** No full block of data available, read more data */
+            return true;
+         }
+         Dmsg2(400, "encrypted len=%d unencrypted len=%d\n", bctx.encrypted_len,
+               sd->msglen);
+         sd->msglen = initial_len + bctx.encrypted_len; /* set encrypted length */
       } else {
-        /** Encryption failed. Shouldn't happen. */
-        Jmsg(jcr, M_FATAL, 0, _("Encryption error\n"));
-        goto err;
+         /** Encryption failed. Shouldn't happen. */
+         Jmsg(jcr, M_FATAL, 0, _("Encryption error\n"));
+         goto err;
       }
    }
 
@@ -817,18 +819,18 @@ bool process_and_send_data(bctx_t &bctx)
    if ((bctx.ff_pkt->flags & FO_SPARSE) || (bctx.ff_pkt->flags & FO_OFFSETS)) {
       sd->msglen += OFFSET_FADDR_SIZE; /* include fileAddr in size */
    }
-   sd->msg = bctx.wbuf;             /* set correct write buffer */
+   sd->msg = bctx.wbuf;              /* set correct write buffer */
    if (!sd->send()) {
       if (!jcr->is_job_canceled()) {
-        Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
-              sd->bstrerror());
+         Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
+               sd->bstrerror());
       }
       goto err;
    }
    Dmsg1(130, "Send data to SD len=%d\n", sd->msglen);
-   /*         #endif */
+   /*          #endif */
    jcr->JobBytes += sd->msglen;      /* count bytes saved possibly compressed/encrypted */
-   sd->msg = bctx.msgsave;               /* restore read buffer */
+   sd->msg = bctx.msgsave;                /* restore read buffer */
    return true;
 
 err:
@@ -872,7 +874,7 @@ bool encode_and_send_attributes(bctx_t &bctx)
    Dmsg3(300, "File %s\nattribs=%s\nattribsEx=%s\n", ff_pkt->fname, attribs, attribsEx);
 
    jcr->lock();
-   jcr->JobFiles++;                   /* increment number of files sent */
+   jcr->JobFiles++;                    /* increment number of files sent */
    ff_pkt->FileIndex = jcr->JobFiles;  /* return FileIndex */
    pm_strcpy(jcr->last_fname, ff_pkt->fname);
    jcr->unlock();
@@ -892,12 +894,12 @@ bool encode_and_send_attributes(bctx_t &bctx)
 
    /**
     * Send Attributes header to Storage daemon
-    *   <file-index> <stream> <info>
+    *    <file-index> <stream> <info>
     */
    if (!sd->fsend("%ld %d 0", jcr->JobFiles, attr_stream)) {
       if (!jcr->is_canceled() && !jcr->is_incomplete()) {
-        Jmsg2(jcr, M_FATAL, 0, _("Network send error to SD. Data=%s ERR=%s\n"),
-              sd->msg, sd->bstrerror());
+         Jmsg2(jcr, M_FATAL, 0, _("Network send error to SD. Data=%s ERR=%s\n"),
+               sd->msg, sd->bstrerror());
       }
       return false;
    }
@@ -905,23 +907,23 @@ bool encode_and_send_attributes(bctx_t &bctx)
 
    /**
     * Send file attributes to Storage daemon
-    *  File_index
-    *  File type
-    *  Filename (full path)
-    *  Encoded attributes
-    *  Link name (if type==FT_LNK or FT_LNKSAVED)
-    *  Encoded extended-attributes (for Win32)
+    *   File_index
+    *   File type
+    *   Filename (full path)
+    *   Encoded attributes
+    *   Link name (if type==FT_LNK or FT_LNKSAVED)
+    *   Encoded extended-attributes (for Win32)
     *
     * or send Restore Object to Storage daemon
-    *  File_index
-    *  File_type
-    *  Object_index
-    *  Object_len  (possibly compressed)
-    *  Object_full_len (not compressed)
-    *  Object_compression
-    *  Plugin_name
-    *  Object_name
-    *  Binary Object data
+    *   File_index
+    *   File_type
+    *   Object_index
+    *   Object_len  (possibly compressed)
+    *   Object_full_len (not compressed)
+    *   Object_compression
+    *   Plugin_name
+    *   Object_name
+    *   Binary Object data
     *
     * For a directory, link is the same as fname, but with trailing
     * slash. For a linked file, link is the link.
@@ -934,58 +936,58 @@ bool encode_and_send_attributes(bctx_t &bctx)
    case FT_LNKSAVED:
       Dmsg3(300, "Link %d %s to %s\n", jcr->JobFiles, ff_pkt->fname, ff_pkt->link);
       stat = sd->fsend("%ld %d %s%c%s%c%s%c%s%c%u%c", jcr->JobFiles,
-                      ff_pkt->type, ff_pkt->fname, 0, attribs, 0,
-                      ff_pkt->link, 0, attribsEx, 0, ff_pkt->delta_seq, 0);
+                       ff_pkt->type, ff_pkt->fname, 0, attribs, 0,
+                       ff_pkt->link, 0, attribsEx, 0, ff_pkt->delta_seq, 0);
       break;
    case FT_DIREND:
    case FT_REPARSE:
    case FT_JUNCTION:
       /* Here link is the canonical filename (i.e. with trailing slash) */
       stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%u%c", jcr->JobFiles,
-                      ff_pkt->type, ff_pkt->link, 0, attribs, 0, 0,
-                      attribsEx, 0, ff_pkt->delta_seq, 0);
+                       ff_pkt->type, ff_pkt->link, 0, attribs, 0, 0,
+                       attribsEx, 0, ff_pkt->delta_seq, 0);
       break;
    case FT_PLUGIN_CONFIG:
    case FT_RESTORE_FIRST:
       comp_len = ff_pkt->object_len;
       ff_pkt->object_compression = 0;
       if (ff_pkt->object_len > 1000) {
-        /* Big object, compress it */
-        comp_len = ff_pkt->object_len + 1000;
-        POOLMEM *comp_obj = get_memory(comp_len);
-        /* *** FIXME *** check Zdeflate error */
-        Zdeflate(ff_pkt->object, ff_pkt->object_len, comp_obj, comp_len);
-        if (comp_len < ff_pkt->object_len) {
-           ff_pkt->object = comp_obj;
-           ff_pkt->object_compression = 1;    /* zlib level 9 compression */
-        } else {
-           /* Uncompressed object smaller, use it */
-           comp_len = ff_pkt->object_len;
-        }
-        Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->object_len, comp_len);
+         /* Big object, compress it */
+         comp_len = ff_pkt->object_len + 1000;
+         POOLMEM *comp_obj = get_memory(comp_len);
+         /* *** FIXME *** check Zdeflate error */
+         Zdeflate(ff_pkt->object, ff_pkt->object_len, comp_obj, comp_len);
+         if (comp_len < ff_pkt->object_len) {
+            ff_pkt->object = comp_obj;
+            ff_pkt->object_compression = 1;    /* zlib level 9 compression */
+         } else {
+            /* Uncompressed object smaller, use it */
+            comp_len = ff_pkt->object_len;
+         }
+         Dmsg2(100, "Object compressed from %d to %d bytes\n", ff_pkt->object_len, comp_len);
       }
       sd->msglen = Mmsg(sd->msg, "%d %d %d %d %d %d %s%c%s%c",
-                       jcr->JobFiles, ff_pkt->type, ff_pkt->object_index,
-                       comp_len, ff_pkt->object_len, ff_pkt->object_compression,
-                       ff_pkt->fname, 0, ff_pkt->object_name, 0);
+                        jcr->JobFiles, ff_pkt->type, ff_pkt->object_index,
+                        comp_len, ff_pkt->object_len, ff_pkt->object_compression,
+                        ff_pkt->fname, 0, ff_pkt->object_name, 0);
       sd->msg = check_pool_memory_size(sd->msg, sd->msglen + comp_len + 2);
       memcpy(sd->msg + sd->msglen, ff_pkt->object, comp_len);
       /* Note we send one extra byte so Dir can store zero after object */
       sd->msglen += comp_len + 1;
       stat = sd->send();
       if (ff_pkt->object_compression) {
-        free_and_null_pool_memory(ff_pkt->object);
+         free_and_null_pool_memory(ff_pkt->object);
       }
       break;
    case FT_REG:
       stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%d%c", jcr->JobFiles,
-              ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0, attribsEx, 0,
-              ff_pkt->delta_seq, 0);
+               ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0, attribsEx, 0,
+               ff_pkt->delta_seq, 0);
       break;
    default:
       stat = sd->fsend("%ld %d %s%c%s%c%c%s%c%u%c", jcr->JobFiles,
-                      ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0,
-                      attribsEx, 0, ff_pkt->delta_seq, 0);
+                       ff_pkt->type, ff_pkt->fname, 0, attribs, 0, 0,
+                       attribsEx, 0, ff_pkt->delta_seq, 0);
       break;
    }
 
@@ -996,9 +998,9 @@ bool encode_and_send_attributes(bctx_t &bctx)
    Dmsg2(300, ">stored: attr len=%d: %s\n", sd->msglen, sd->msg);
    if (!stat && !jcr->is_job_canceled()) {
       Jmsg1(jcr, M_FATAL, 0, _("Network send error to SD. ERR=%s\n"),
-           sd->bstrerror());
+            sd->bstrerror());
    }
-   sd->signal(BNET_EOD);           /* indicate end of attributes data */
+   sd->signal(BNET_EOD);            /* indicate end of attributes data */
    return stat;
 }
 
@@ -1018,13 +1020,13 @@ static bool setup_compression(bctx_t &bctx)
 
    if ((bctx.ff_pkt->flags & FO_COMPRESS) && bctx.ff_pkt->Compress_algo == COMPRESS_GZIP) {
       if ((bctx.ff_pkt->flags & FO_SPARSE) || (bctx.ff_pkt->flags & FO_OFFSETS)) {
-        bctx.cbuf = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE;
-        bctx.max_compress_len = jcr->compress_buf_size - OFFSET_FADDR_SIZE;
+         bctx.cbuf = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE;
+         bctx.max_compress_len = jcr->compress_buf_size - OFFSET_FADDR_SIZE;
       } else {
-        bctx.cbuf = (Bytef *)jcr->compress_buf;
-        bctx.max_compress_len = jcr->compress_buf_size; /* set max length */
+         bctx.cbuf = (Bytef *)jcr->compress_buf;
+         bctx.max_compress_len = jcr->compress_buf_size; /* set max length */
       }
-      bctx.wbuf = jcr->compress_buf;   /* compressed output here */
+      bctx.wbuf = jcr->compress_buf;    /* compressed output here */
       bctx.cipher_input = (uint8_t *)jcr->compress_buf; /* encrypt compressed data */
 
       /**
@@ -1034,13 +1036,13 @@ static bool setup_compression(bctx_t &bctx)
        */
 
       if (((z_stream*)jcr->pZLIB_compress_workset)->total_in == 0) {
-        /** set gzip compression level - must be done per file */
-        if ((zstat=deflateParams((z_stream*)jcr->pZLIB_compress_workset,
-             bctx.ff_pkt->Compress_level, Z_DEFAULT_STRATEGY)) != Z_OK) {
-           Jmsg(jcr, M_FATAL, 0, _("Compression deflateParams error: %d\n"), zstat);
-           jcr->setJobStatus(JS_ErrorTerminated);
-           return false;
-        }
+         /** set gzip compression level - must be done per file */
+         if ((zstat=deflateParams((z_stream*)jcr->pZLIB_compress_workset,
+              bctx.ff_pkt->Compress_level, Z_DEFAULT_STRATEGY)) != Z_OK) {
+            Jmsg(jcr, M_FATAL, 0, _("Compression deflateParams error: %d\n"), zstat);
+            jcr->setJobStatus(JS_ErrorTerminated);
+            return false;
+         }
       }
    }
  #endif
@@ -1050,17 +1052,17 @@ static bool setup_compression(bctx_t &bctx)
 
    if ((bctx.ff_pkt->flags & FO_COMPRESS) && bctx.ff_pkt->Compress_algo == COMPRESS_LZO1X) {
       if ((bctx.ff_pkt->flags & FO_SPARSE) || (bctx.ff_pkt->flags & FO_OFFSETS)) {
-        bctx.cbuf = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE;
-        bctx.cbuf2 = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE + sizeof(comp_stream_header);
-        bctx.max_compress_len = jcr->compress_buf_size - OFFSET_FADDR_SIZE;
+         bctx.cbuf = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE;
+         bctx.cbuf2 = (Bytef *)jcr->compress_buf + OFFSET_FADDR_SIZE + sizeof(comp_stream_header);
+         bctx.max_compress_len = jcr->compress_buf_size - OFFSET_FADDR_SIZE;
       } else {
-        bctx.cbuf = (Bytef *)jcr->compress_buf;
-        bctx.cbuf2 = (Bytef *)jcr->compress_buf + sizeof(comp_stream_header);
-        bctx.max_compress_len = jcr->compress_buf_size; /* set max length */
+         bctx.cbuf = (Bytef *)jcr->compress_buf;
+         bctx.cbuf2 = (Bytef *)jcr->compress_buf + sizeof(comp_stream_header);
+         bctx.max_compress_len = jcr->compress_buf_size; /* set max length */
       }
       bctx.ch.magic = COMPRESS_LZO1X;
       bctx.ch.version = COMP_HEAD_VERSION;
-      bctx.wbuf = jcr->compress_buf;   /* compressed output here */
+      bctx.wbuf = jcr->compress_buf;    /* compressed output here */
       bctx.cipher_input = (uint8_t *)jcr->compress_buf; /* encrypt compressed data */
    }
  #endif
@@ -1085,32 +1087,32 @@ static bool send_resource_fork(bctx_t &bctx)
    if (ff_pkt->type != FT_LNKSAVED && (S_ISREG(ff_pkt->statp.st_mode) &&
        ff_pkt->flags & FO_HFSPLUS)) {
       if (ff_pkt->hfsinfo.rsrclength > 0) {
-        int flags;
-        int rsrc_stream;
-        if (bopen_rsrc(&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 resource fork for \"%s\": ERR=%s.\n"),
-                ff_pkt->fname, be.bstrerror());
-           jcr->JobErrors++;
-           if (is_bopen(&ff_pkt->bfd)) {
-              bclose(&ff_pkt->bfd);
-           }
-           return true;
-        }
-        flags = ff_pkt->flags;
-        ff_pkt->flags &= ~(FO_COMPRESS|FO_SPARSE|FO_OFFSETS);
-        if (flags & FO_ENCRYPT) {
-           rsrc_stream = STREAM_ENCRYPTED_MACOS_FORK_DATA;
-        } else {
-           rsrc_stream = STREAM_MACOS_FORK_DATA;
-        }
-        stat = send_data(bctx, rsrc_stream);
-        ff_pkt->flags = flags;
-        bclose(&ff_pkt->bfd);
-        if (!stat) {
-           return false;
-        }
+         int flags;
+         int rsrc_stream;
+         if (bopen_rsrc(&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 resource fork for \"%s\": ERR=%s.\n"),
+                 ff_pkt->fname, be.bstrerror());
+            jcr->JobErrors++;
+            if (is_bopen(&ff_pkt->bfd)) {
+               bclose(&ff_pkt->bfd);
+            }
+            return true;
+         }
+         flags = ff_pkt->flags;
+         ff_pkt->flags &= ~(FO_COMPRESS|FO_SPARSE|FO_OFFSETS);
+         if (flags & FO_ENCRYPT) {
+            rsrc_stream = STREAM_ENCRYPTED_MACOS_FORK_DATA;
+         } else {
+            rsrc_stream = STREAM_MACOS_FORK_DATA;
+         }
+         stat = send_data(bctx, rsrc_stream);
+         ff_pkt->flags = flags;
+         bclose(&ff_pkt->bfd);
+         if (!stat) {
+            return false;
+         }
       }
 
       Dmsg1(300, "Saving Finder Info for \"%s\"\n", ff_pkt->fname);
@@ -1119,10 +1121,10 @@ static bool send_resource_fork(bctx_t &bctx)
       pm_memcpy(sd->msg, ff_pkt->hfsinfo.fndrinfo, 32);
       sd->msglen = 32;
       if (bctx.digest) {
-        crypto_digest_update(bctx.digest, (uint8_t *)sd->msg, sd->msglen);
+         crypto_digest_update(bctx.digest, (uint8_t *)sd->msg, sd->msglen);
       }
       if (bctx.signing_digest) {
-        crypto_digest_update(bctx.signing_digest, (uint8_t *)sd->msg, sd->msglen);
+         crypto_digest_update(bctx.signing_digest, (uint8_t *)sd->msg, sd->msglen);
       }
       sd->send();
       sd->signal(BNET_EOD);
@@ -1143,27 +1145,27 @@ static bool do_libz_compression(bctx_t &bctx)
       Dmsg3(400, "cbuf=0x%x rbuf=0x%x len=%u\n", bctx.cbuf, bctx.rbuf, sd->msglen);
 
       ((z_stream*)jcr->pZLIB_compress_workset)->next_in   = (Bytef *)bctx.rbuf;
-            ((z_stream*)jcr->pZLIB_compress_workset)->avail_in  = sd->msglen;
+             ((z_stream*)jcr->pZLIB_compress_workset)->avail_in  = sd->msglen;
       ((z_stream*)jcr->pZLIB_compress_workset)->next_out  = bctx.cbuf;
-            ((z_stream*)jcr->pZLIB_compress_workset)->avail_out = bctx.max_compress_len;
+             ((z_stream*)jcr->pZLIB_compress_workset)->avail_out = bctx.max_compress_len;
 
       if ((zstat=deflate((z_stream*)jcr->pZLIB_compress_workset, Z_FINISH)) != Z_STREAM_END) {
-        Jmsg(jcr, M_FATAL, 0, _("Compression deflate error: %d\n"), zstat);
-        jcr->setJobStatus(JS_ErrorTerminated);
-        return false;
+         Jmsg(jcr, M_FATAL, 0, _("Compression deflate error: %d\n"), zstat);
+         jcr->setJobStatus(JS_ErrorTerminated);
+         return false;
       }
       bctx.compress_len = ((z_stream*)jcr->pZLIB_compress_workset)->total_out;
       /** reset zlib stream to be able to begin from scratch again */
       if ((zstat=deflateReset((z_stream*)jcr->pZLIB_compress_workset)) != Z_OK) {
-        Jmsg(jcr, M_FATAL, 0, _("Compression deflateReset error: %d\n"), zstat);
-        jcr->setJobStatus(JS_ErrorTerminated);
-        return false;
+         Jmsg(jcr, M_FATAL, 0, _("Compression deflateReset error: %d\n"), zstat);
+         jcr->setJobStatus(JS_ErrorTerminated);
+         return false;
       }
 
       Dmsg2(400, "GZIP compressed len=%d uncompressed len=%d\n", bctx.compress_len,
-           sd->msglen);
+            sd->msglen);
 
-      sd->msglen = bctx.compress_len;     /* set compressed length */
+      sd->msglen = bctx.compress_len;      /* set compressed length */
       bctx.cipher_input_len = bctx.compress_len;
    }
 #endif
@@ -1179,7 +1181,7 @@ static bool do_lzo_compression(bctx_t &bctx)
 
    /** Do compression if turned on */
    if (bctx.ff_pkt->flags & FO_COMPRESS && bctx.ff_pkt->Compress_algo == COMPRESS_LZO1X && jcr->LZO_compress_workset) {
-      lzo_uint len;         /* TODO: See with the latest patch how to handle lzo_uint with 64bit */
+      lzo_uint len;          /* TODO: See with the latest patch how to handle lzo_uint with 64bit */
 
       ser_declare;
       ser_begin(bctx.cbuf, sizeof(comp_stream_header));
@@ -1187,26 +1189,26 @@ static bool do_lzo_compression(bctx_t &bctx)
       Dmsg3(400, "cbuf=0x%x rbuf=0x%x len=%u\n", bctx.cbuf, bctx.rbuf, sd->msglen);
 
       lzores = lzo1x_1_compress((const unsigned char*)bctx.rbuf, sd->msglen, bctx.cbuf2,
-                               &len, jcr->LZO_compress_workset);
+                                &len, jcr->LZO_compress_workset);
       bctx.compress_len = len;
       if (lzores == LZO_E_OK && bctx.compress_len <= bctx.max_compress_len) {
-        /* complete header */
-        ser_uint32(COMPRESS_LZO1X);
-        ser_uint32(bctx.compress_len);
-        ser_uint16(bctx.ch.level);
-        ser_uint16(bctx.ch.version);
+         /* complete header */
+         ser_uint32(COMPRESS_LZO1X);
+         ser_uint32(bctx.compress_len);
+         ser_uint16(bctx.ch.level);
+         ser_uint16(bctx.ch.version);
       } else {
-        /** this should NEVER happen */
-        Jmsg(jcr, M_FATAL, 0, _("Compression LZO error: %d\n"), lzores);
-        jcr->setJobStatus(JS_ErrorTerminated);
-        return false;
+         /** this should NEVER happen */
+         Jmsg(jcr, M_FATAL, 0, _("Compression LZO error: %d\n"), lzores);
+         jcr->setJobStatus(JS_ErrorTerminated);
+         return false;
       }
 
       Dmsg2(400, "LZO compressed len=%d uncompressed len=%d\n", bctx.compress_len,
-           sd->msglen);
+            sd->msglen);
 
       bctx.compress_len += sizeof(comp_stream_header); /* add size of header */
-      sd->msglen = bctx.compress_len;     /* set compressed length */
+      sd->msglen = bctx.compress_len;      /* set compressed length */
       bctx.cipher_input_len = bctx.compress_len;
    }
 #endif
@@ -1229,13 +1231,13 @@ static bool do_snap_strip(FF_PKT *ff)
       last = MAX(last - 1, 0);
 
       if (ff->snap_fname[last] == '/') {
-        if (ff->fname[sp_first] == '/') { /* compare with the first character of the string (sp_first not sp_first-1) */
-           ff->snap_fname[last] = 0;
-        }
+         if (ff->fname[sp_first] == '/') { /* compare with the first character of the string (sp_first not sp_first-1) */
+            ff->snap_fname[last] = 0;
+         }
       } else {
-        if (ff->fname[sp_first] != '/') {
-           pm_strcat(ff->snap_fname, "/");
-        }
+         if (ff->fname[sp_first] != '/') {
+            pm_strcat(ff->snap_fname, "/");
+         }
       }
 
       pm_strcat(ff->snap_fname, ff->fname + sp_first);
@@ -1248,13 +1250,13 @@ static bool do_snap_strip(FF_PKT *ff)
       last = MAX(last - 1, 0);
 
       if (ff->snap_fname[last] == '/') {
-        if (ff->link[sp_first] == '/') { /* compare with the first character of the string (sp_first not sp_first-1) */
-           ff->snap_fname[last] = 0;
-        }
+         if (ff->link[sp_first] == '/') { /* compare with the first character of the string (sp_first not sp_first-1) */
+            ff->snap_fname[last] = 0;
+         }
       } else {
-        if (ff->link[sp_first] != '/') {
-           pm_strcat(ff->snap_fname, "/");
-        }
+         if (ff->link[sp_first] != '/') {
+            pm_strcat(ff->snap_fname, "/");
+         }
       }
 
       pm_strcat(ff->snap_fname, ff->link + sp_first);
@@ -1279,29 +1281,29 @@ static bool do_strip(int count, char *in)
    while (*in && !IsPathSeparator(*in)) {
       out++; in++;
    }
-   if (*in) {                   /* Not at the end of the string */
+   if (*in) {                    /* Not at the end of the string */
       out++; in++;
-      numsep++;                 /* one separator seen */
+      numsep++;                  /* one separator seen */
    }
    for (stripped=0; stripped<count && *in; stripped++) {
       while (*in && !IsPathSeparator(*in)) {
-        in++;                   /* skip chars */
+         in++;                   /* skip chars */
       }
       if (*in) {
-        numsep++;               /* count separators seen */
-        in++;                   /* skip separator */
+         numsep++;               /* count separators seen */
+         in++;                   /* skip separator */
       }
    }
    /* Copy to end */
-   while (*in) {               /* copy to end */
+   while (*in) {                /* copy to end */
       if (IsPathSeparator(*in)) {
-        numsep++;
+         numsep++;
       }
       *out++ = *in++;
    }
    *out = 0;
    Dmsg4(500, "stripped=%d count=%d numsep=%d sep>count=%d\n",
-        stripped, count, numsep, numsep>count);
+         stripped, count, numsep, numsep>count);
    return stripped==count && numsep>count;
 }
 
@@ -1333,15 +1335,15 @@ void strip_path(FF_PKT *ff_pkt)
    if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) {
       pm_strcpy(ff_pkt->link_save, ff_pkt->link);
       Dmsg2(500, "strcpy link_save=%d link=%d\n", strlen(ff_pkt->link_save),
-        strlen(ff_pkt->link));
+         strlen(ff_pkt->link));
       Dsm_check(200);
    }
 
    if (ff_pkt->strip_snap_path) {
       if (!do_snap_strip(ff_pkt)) {
-        Dmsg1(0, "Something wrong with do_snap_strip(%s)\n", ff_pkt->fname);
-        unstrip_path(ff_pkt);
-        goto rtn;
+         Dmsg1(0, "Something wrong with do_snap_strip(%s)\n", ff_pkt->fname);
+         unstrip_path(ff_pkt);
+         goto rtn;
       }
    }
 
@@ -1365,7 +1367,7 @@ void strip_path(FF_PKT *ff_pkt)
    /** Strip links but not symlinks */
    if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) {
       if (!do_strip(ff_pkt->strip_path, ff_pkt->link)) {
-        unstrip_path(ff_pkt);
+         unstrip_path(ff_pkt);
       }
    }
 
@@ -1385,10 +1387,10 @@ void unstrip_path(FF_PKT *ff_pkt)
    strcpy(ff_pkt->fname, ff_pkt->fname_save);
    if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) {
       Dmsg2(10, "strcpy link=%s link_save=%s\n", ff_pkt->link,
-         ff_pkt->link_save);
+          ff_pkt->link_save);
       strcpy(ff_pkt->link, ff_pkt->link_save);
       Dmsg2(10, "strcpy link=%d link_save=%d\n", strlen(ff_pkt->link),
-         strlen(ff_pkt->link_save));
+          strlen(ff_pkt->link_save));
       Dsm_check(200);
    }
 }
@@ -1400,28 +1402,28 @@ static void close_vss_backup_session(JCR *jcr)
    /* tell vss to close the backup session */
    if (jcr->Snapshot) {
       if (g_pVSSClient->CloseBackup()) {
-        /* inform user about writer states */
-        for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) {
-           int msg_type = M_INFO;
-           if (g_pVSSClient->GetWriterState(i) < 1) {
-              msg_type = M_WARNING;
-              jcr->JobErrors++;
-           }
-           Jmsg(jcr, msg_type, 0, _("VSS Writer (BackupComplete): %s\n"), g_pVSSClient->GetWriterInfo(i));
-        }
+         /* inform user about writer states */
+         for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) {
+            int msg_type = M_INFO;
+            if (g_pVSSClient->GetWriterState(i) < 1) {
+               msg_type = M_WARNING;
+               jcr->JobErrors++;
+            }
+            Jmsg(jcr, msg_type, 0, _("VSS Writer (BackupComplete): %s\n"), g_pVSSClient->GetWriterInfo(i));
+         }
       }
       /* Generate Job global writer metadata */
       WCHAR *metadata = g_pVSSClient->GetMetadata();
       if (metadata) {
-        FF_PKT *ff_pkt = jcr->ff;
-        ff_pkt->fname = (char *)"*all*"; /* for all plugins */
-        ff_pkt->type = FT_RESTORE_FIRST;
-        ff_pkt->LinkFI = 0;
-        ff_pkt->object_name = (char *)"job_metadata.xml";
-        ff_pkt->object = (char *)metadata;
-        ff_pkt->object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
-        ff_pkt->object_index = (int)time(NULL);
-        save_file(jcr, ff_pkt, true);
+         FF_PKT *ff_pkt = jcr->ff;
+         ff_pkt->fname = (char *)"*all*"; /* for all plugins */
+         ff_pkt->type = FT_RESTORE_FIRST;
+         ff_pkt->LinkFI = 0;
+         ff_pkt->object_name = (char *)"job_metadata.xml";
+         ff_pkt->object = (char *)metadata;
+         ff_pkt->object_len = (wcslen(metadata) + 1) * sizeof(WCHAR);
+         ff_pkt->object_index = (int)time(NULL);
+         save_file(jcr, ff_pkt, true);
      }
    }
 #endif
index 20ef9abf227926944dee51b6e2b6aa79f38a65fb..f7ee5a6d008457895ba8d3d2d588258bf6ee876f 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula(R) - The Network Backup Solution
 
-   Copyright (C) 2000-2016 Kern Sibbald
+   Copyright (C) 2000-2017 Kern Sibbald
    Copyright (C) 2000-2014 Free Software Foundation Europe e.V.
 
    The original author of Bacula is Kern Sibbald, with contributions
@@ -199,6 +199,9 @@ static inline void push_delayed_restore_stream(r_ctx &rctx, char *msg, int msgle
 static inline bool do_restore_acl(JCR *jcr, int stream, char *content,
                                   uint32_t content_length)
 {
+   if (!jcr->xacl) {
+      return true;
+   }
    switch (jcr->xacl->restore_acl(jcr, stream, content, content_length)) {
       case bRC_XACL_fatal:
          return false;
@@ -224,6 +227,9 @@ static inline bool do_restore_acl(JCR *jcr, int stream, char *content,
 static inline bool do_restore_xattr(JCR *jcr, int stream, char *content,
                                     uint32_t content_length)
 {
+   if (!jcr->xacl) {
+      return true;
+   }
    switch (jcr->xacl->restore_xattr(jcr, stream, content, content_length)) {
       case bRC_XACL_fatal:
          return false;
@@ -1006,13 +1012,14 @@ ok_out:
    Dmsg2(10, "End Do Restore. Files=%d Bytes=%s\n", jcr->JobFiles,
       edit_uint64(jcr->JobBytes, ec1));
 
-   if (jcr->xacl->get_acl_nr_errors() > 0) {
-      Jmsg(jcr, M_WARNING, 0, _("Encountered %ld acl errors while doing restore\n"), jcr->xacl->get_acl_nr_errors());
-   }
-   if (jcr->xacl->get_xattr_nr_errors() > 0) {
-      Jmsg(jcr, M_WARNING, 0, _("Encountered %ld xattr errors while doing restore\n"), jcr->xacl->get_xattr_nr_errors());
+   if (jcr->xacl) {
+      if (jcr->xacl->get_acl_nr_errors() > 0) {
+         Jmsg(jcr, M_WARNING, 0, _("Encountered %ld acl errors while doing restore\n"), jcr->xacl->get_acl_nr_errors());
+      }
+      if (jcr->xacl->get_xattr_nr_errors() > 0) {
+         Jmsg(jcr, M_WARNING, 0, _("Encountered %ld xattr errors while doing restore\n"), jcr->xacl->get_xattr_nr_errors());
+      }
    }
-
    if (non_suppored_data > 1 || non_suppored_attr > 1) {
       Jmsg(jcr, M_WARNING, 0, _("%d non-supported data streams and %d non-supported attrib streams ignored.\n"),
          non_suppored_data, non_suppored_attr);
index a66f95a49a61bcafd7c4d478236549ca032ba3ce..8eea8a29378d090e51884aa848828bdd6fdf2942 100644 (file)
@@ -1313,7 +1313,6 @@ bRC_XACL XACL::afs_restore_acl (JCR *jcr, int stream){
  */
 void *new_xacl()
 {
-   XACL *xacl;
 #if   defined(HAVE_DARWIN_OS)
    return new XACL_OSX();
 #elif defined(HAVE_LINUX_OS)
@@ -1331,10 +1330,6 @@ void *new_xacl()
 #elif defined(HAVE_SUN_OS)
    return new XACL_Solaris();
 #else
-   /* No driver defined */
-   xacl = new XACL();
-   xacl->disable_acl();
-   xacl->disable_xattr();
-   return xacl;
+   return NULL;
 #endif
 };