]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/backup.c
Added support for counting acl errors and only print a limited set of errors but...
[bacula/bacula] / bacula / src / filed / backup.c
index bdca4fac2d6c003c354ba546e30017e87609d7bf..ff83f4ac4c3d962111c036721c508b20e3c41e10 100644 (file)
@@ -142,6 +142,7 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
 
    if (have_acl) {
       jcr->acl_data = get_pool_memory(PM_MESSAGE);
+      jcr->total_acl_errors = 0;
    }
    if (have_xattr) {
       jcr->xattr_data = get_pool_memory(PM_MESSAGE);
@@ -153,6 +154,11 @@ bool blast_data_to_storage_daemon(JCR *jcr, char *addr)
       set_jcr_job_status(jcr, JS_ErrorTerminated);
    }
 
+   if (jcr->total_acl_errors > 0) {
+      Jmsg(jcr, M_ERROR, 0, _("Encountered %ld acl errors while doing backup\n"),
+           jcr->total_acl_errors);
+   }
+
    accurate_send_deleted_list(jcr);              /* send deleted list to SD  */
 
    stop_heartbeat_monitor(jcr);
@@ -600,8 +606,22 @@ int save_file(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
     */
    if (have_acl) {
       if (ff_pkt->flags & FO_ACL && ff_pkt->type != FT_LNK && !ff_pkt->cmd_plugin) {
-         if (build_acl_streams(jcr, ff_pkt) == bsub_exit_fatal)
-            goto bail_out;
+         switch (build_acl_streams(jcr, ff_pkt))
+            case bsub_exit_fatal:
+              goto bail_out;
+            case bsub_exit_nok:
+               /*
+                * Non-fatal errors, count them and when the number is under ACL_REPORT_ERR_MAX_PER_JOB
+                * print the error message set by the lower level routine in jcr->errmsg.
+                */
+               if (jcr->total_acl_errors < ACL_REPORT_ERR_MAX_PER_JOB) {
+                  Jmsg(jcr, M_ERROR, 0, "%s", jcr->errmsg);
+               }
+               jcr->total_acl_errors++;
+               break;
+            case bsub_exit_ok:
+               break;
+         }
       }
    }