[pkg-bacula-commits] [bacula] 01/01: Imported Upstream version 7.4.7+dfsg
Carsten Leonhardt
leo at moszumanska.debian.org
Mon Mar 20 16:00:51 UTC 2017
This is an automated email from the git hooks/post-receive script.
leo pushed a commit to branch upstream
in repository bacula.
commit f71e10923139bb61950130ea06c4421f35276a35
Author: Carsten Leonhardt <leo at debian.org>
Date: Mon Mar 20 16:58:41 2017 +0100
Imported Upstream version 7.4.7+dfsg
---
ChangeLog | 11 +-
ReleaseNotes | 20 +-
src/baconfig.h | 10 +-
src/cats/cats.h | 4 +-
src/dird/job.c | 4 +-
src/dird/ua_cmds.c | 28 +--
src/dird/ua_query.c | 29 ++-
src/filed/backup.c | 612 ++++++++++++++++++++++++++-------------------------
src/filed/job.c | 2 +-
src/filed/restore.c | 21 +-
src/filed/xacl.c | 7 +-
src/findlib/fstype.c | 3 +-
src/lib/bnet.c | 6 +-
src/lib/mem_pool.c | 3 +-
src/stored/fd_cmds.c | 3 +-
src/stored/lock.c | 62 +++---
src/version.h | 8 +-
17 files changed, 443 insertions(+), 390 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 7a0fb7f..568e662 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,13 @@
- Changelog on version 7.4.6
+ Changelog on version 7.4.7
+
+Release Version 7.4.7
+
+15Mar17
+ - Permit specifying query item number on bconsole query command line
+ - Fix Solaris 10 problems reported by Phil Stracchino
+ - Fix EPROTO on OpenBSD
+
+==========================================================================
Release Version 7.4.6
diff --git a/ReleaseNotes b/ReleaseNotes
index 56a6e38..c0ae8bc 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -1,10 +1,26 @@
- Release Notes for Bacula 7.4.6
+ Release Notes for Bacula 7.4.7
+
+Release Version 7.4.7
+
+This is a minor bug fix release, which hopefully corrects a seg fault
+on OpenBSD due to the new ACL/XATTR code, and it also fixes most build
+problems on Solaris 10 as well as EPROTO on OpenBSD.
+
+There is one minor new feature that allows you to specify the query
+item number on the bconsole query command line.
+
+15Mar17
+ - Permit specifying query item number on bconsole query command line
+ - Fix Solaris 10 problems reported by Phil Stracchino
+ - Fix EPROTO on OpenBSD
+
+=====================================================
Release Version 7.4.6
This is a bug fix release, which hopefully corrects a seg fault on OpenBSD
-due to the nex ACL/XATTR code, and it also fixes the large number of tape
+due to the new ACL/XATTR code, and it also fixes the large number of tape
mount messages that are repeated at 5 minute intervals due to a bug in the
poll code. Various small fixes for FreeBSD.
diff --git a/src/baconfig.h b/src/baconfig.h
index 2b89e96..bf33b78 100644
--- a/src/baconfig.h
+++ b/src/baconfig.h
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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
@@ -60,17 +60,17 @@
#ifdef DEBUG
#define ASSERT(x) if (!(x)) { \
- char *jcr = NULL; \
+ char *tjcr = NULL; \
Emsg1(M_ERROR, 0, _("Failed ASSERT: %s\n"), #x); \
Pmsg1(000, _("Failed ASSERT: %s\n"), #x); \
- jcr[0] = 0; }
+ tjcr[0] = 0; }
#define ASSERT2(x,y) if (!(x)) { \
set_assert_msg(__FILE__, __LINE__, y); \
Emsg1(M_ERROR, 0, _("Failed ASSERT: %s\n"), #x); \
Pmsg1(000, _("Failed ASSERT: %s\n"), #x); \
- char *jcr = NULL; \
- jcr[0] = 0; }
+ char *tjcr = NULL; \
+ tjcr[0] = 0; }
#else
#define ASSERT(x)
#define ASSERT2(x, y)
diff --git a/src/cats/cats.h b/src/cats/cats.h
index e2d48f6..2e03c40 100644
--- a/src/cats/cats.h
+++ b/src/cats/cats.h
@@ -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.
@@ -65,7 +65,7 @@ typedef enum {
typedef enum {
SQL_DRIVER_TYPE_MYSQL = 0,
SQL_DRIVER_TYPE_POSTGRESQL = 1,
- SQL_DRIVER_TYPE_SQLITE3 = 2,
+ SQL_DRIVER_TYPE_SQLITE3 = 2
} SQL_DRIVER;
diff --git a/src/dird/job.c b/src/dird/job.c
index 7558d36..60c70f1 100644
--- a/src/dird/job.c
+++ b/src/dird/job.c
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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.
@@ -1467,6 +1467,8 @@ void dird_free_jcr(JCR *jcr)
free_plugins(jcr); /* release instantiated plugins */
+ garbage_collect_memory_pool();
+
Dmsg0(200, "End dird free_jcr\n");
}
diff --git a/src/dird/ua_cmds.c b/src/dird/ua_cmds.c
index d2e007b..4a3fc96 100644
--- a/src/dird/ua_cmds.c
+++ b/src/dird/ua_cmds.c
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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
@@ -12,7 +12,7 @@
Public License, v3.0 ("AGPLv3") and some additional permissions and
terms pursuant to its AGPLv3 Section 7.
- This notice must be preserved when any source code is
+ This notice must be preserved when any source code is
conveyed and/or propagated.
Bacula(R) is a registered trademark of Kern Sibbald.
@@ -44,12 +44,12 @@ extern int messagescmd(UAContext *ua, const char *cmd);
extern int prunecmd(UAContext *ua, const char *cmd);
extern int purge_cmd(UAContext *ua, const char *cmd);
extern int truncate_cmd(UAContext *ua, const char *cmd); /* in ua_purge.c */
-extern int querycmd(UAContext *ua, const char *cmd);
+extern int query_cmd(UAContext *ua, const char *cmd);
extern int relabel_cmd(UAContext *ua, const char *cmd);
extern int restore_cmd(UAContext *ua, const char *cmd);
extern int retentioncmd(UAContext *ua, const char *cmd);
extern int show_cmd(UAContext *ua, const char *cmd);
-extern int sqlquerycmd(UAContext *ua, const char *cmd);
+extern int sqlquery_cmd(UAContext *ua, const char *cmd);
extern int status_cmd(UAContext *ua, const char *cmd);
extern int update_cmd(UAContext *ua, const char *cmd);
@@ -137,7 +137,7 @@ static struct cmdstruct commands[] = { /* C
{ NT_("purge"), purge_cmd, _("Purge records from catalog"), NT_("files jobs volume=<vol> [mediatype=<type> pool=<pool> allpools storage=<st> drive=<num>]"), true},
{ NT_("quit"), quit_cmd, _("Terminate Bconsole session"), NT_(""), false},
- { NT_("query"), querycmd, _("Query catalog"), NT_(""), false},
+ { NT_("query"), query_cmd, _("Query catalog"), NT_("[<query-item-number>]"), false},
{ NT_("restore"), restore_cmd, _("Restore files"),
NT_("where=</path> client=<client> storage=<storage> bootstrap=<file> "
"restorejob=<job>"
@@ -174,14 +174,14 @@ static struct cmdstruct commands[] = { /* C
{ NT_("setbandwidth"), setbwlimit_cmd, _("Sets bandwidth"),
NT_("limit=<nn-kbs> client=<client-name> jobid=<number> job=<job-name> ujobid=<unique-jobid>"), true},
- { NT_("snapshot"), snapshot_cmd, _("Handle snapshots"),
+ { NT_("snapshot"), snapshot_cmd, _("Handle snapshots"),
NT_("[client=<client-name> | job=<job-name> | jobid=<jobid>] [delete | list | listclient | prune | sync | update]"), true},
{ NT_("setip"), setip_cmd, _("Sets new client address -- if authorized"), NT_(""), false},
{ NT_("show"), show_cmd, _("Show resource records"),
NT_("job=<xxx> | pool=<yyy> | fileset=<aaa> | schedule=<sss> | client=<zzz> | storage=<sss> | disabled | all"), true},
- { NT_("sqlquery"), sqlquerycmd, _("Use SQL to query catalog"), NT_(""), false},
+ { NT_("sqlquery"), sqlquery_cmd, _("Use SQL to query catalog"), NT_(""), false},
{ NT_("time"), time_cmd, _("Print current time"), NT_(""), true},
{ NT_("trace"), trace_cmd, _("Turn on/off trace to file"), NT_("on | off"), true},
{ NT_("truncate"), truncate_cmd, _("Truncate one or more Volumes"), NT_("volume=<vol> [mediatype=<type> pool=<pool> allpools storage=<st> drive=<num>]"), true},
@@ -1364,8 +1364,8 @@ static int estimate_cmd(UAContext *ua, const char *cmd)
}
continue;
} else {
- ua->error_msg(_("Level value missing.\n"));
- return 1;
+ ua->error_msg(_("Level value missing.\n"));
+ return 1;
}
}
if (strcasecmp(ua->argk[i], NT_("accurate")) == 0) {
@@ -1378,7 +1378,7 @@ static int estimate_cmd(UAContext *ua, const char *cmd)
continue;
} else {
ua->error_msg(_("Accurate value missing.\n"));
- return 1;
+ return 1;
}
}
}
@@ -1590,14 +1590,14 @@ static void delete_job(UAContext *ua)
if (!sl.set_string(ua->argv[i], true)) {
ua->warning_msg("%s", sl.get_errmsg());
return;
- }
-
+ }
+
if (sl.size() > 25 && (find_arg(ua, "yes") < 0)) {
bsnprintf(buf, sizeof(buf),
_("Are you sure you want to delete %d JobIds ? (yes/no): "), sl.size());
if (!get_yesno(ua, buf)) {
return;
- }
+ }
}
foreach_sellist(JobId, &sl) {
@@ -2223,7 +2223,7 @@ bool open_db(UAContext *ua)
ua->catalog->db_ssl_key, ua->catalog->db_ssl_cert,
ua->catalog->db_ssl_ca, ua->catalog->db_ssl_capath,
ua->catalog->db_ssl_cipher,
- mult_db_conn, ua->catalog->disable_batch_insert);
+ mult_db_conn, ua->catalog->disable_batch_insert);
if (!ua->db || !db_open_database(ua->jcr, ua->db)) {
ua->error_msg(_("Could not open catalog database \"%s\".\n"),
ua->catalog->db_name);
diff --git a/src/dird/ua_query.c b/src/dird/ua_query.c
index e7ba1f0..561b335 100644
--- a/src/dird/ua_query.c
+++ b/src/dird/ua_query.c
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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.
@@ -11,7 +11,7 @@
Public License, v3.0 ("AGPLv3") and some additional permissions and
terms pursuant to its AGPLv3 Section 7.
- This notice must be preserved when any source code is
+ This notice must be preserved when any source code is
conveyed and/or propagated.
Bacula(R) is a registered trademark of Kern Sibbald.
@@ -45,15 +45,18 @@ static POOLMEM *substitute_prompts(UAContext *ua,
* SQL statement possibly terminated by ;
* :next query prompt
*/
-int querycmd(UAContext *ua, const char *cmd)
+int query_cmd(UAContext *ua, const char *cmd)
{
FILE *fd = NULL;
POOLMEM *query = get_pool_memory(PM_MESSAGE);
char line[1000];
- int i, item, len;
+ int i, len;
+ int item = 0;
+ long val;
char *prompt[9];
int nprompt = 0;;
char *query_file = director->query_file;
+ bool must_prompt = true;
if (!open_client_db(ua)) {
goto bail_out;
@@ -72,7 +75,21 @@ int querycmd(UAContext *ua, const char *cmd)
add_prompt(ua, line+1);
}
}
- if ((item=do_prompt(ua, "", _("Choose a query"), NULL, 0)) < 0) {
+ if (ua->argc >= 2) {
+ errno = 0;
+ val = strtol(ua->argk[1], NULL, 10) - 1;
+ if (val < 0) {
+ errno = 1;
+ }
+ if (errno != 0) {
+ ua->error_msg(_("Invalid command line query item specified.\n"));
+ must_prompt = true;
+ } else {
+ item = val;
+ must_prompt = false;
+ }
+ }
+ if (must_prompt && (item=do_prompt(ua, "", _("Choose a query"), NULL, 0)) < 0) {
goto bail_out;
}
rewind(fd);
@@ -241,7 +258,7 @@ static POOLMEM *substitute_prompts(UAContext *ua,
/*
* Get general SQL query for Catalog
*/
-int sqlquerycmd(UAContext *ua, const char *cmd)
+int sqlquery_cmd(UAContext *ua, const char *cmd)
{
POOL_MEM query(PM_MESSAGE);
int len;
diff --git a/src/filed/backup.c b/src/filed/backup.c
index a036cb6..5b2138e 100644
--- a/src/filed/backup.c
+++ b/src/filed/backup.c
@@ -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
diff --git a/src/filed/job.c b/src/filed/job.c
index bcc72b1..a5974e2 100644
--- a/src/filed/job.c
+++ b/src/filed/job.c
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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.
diff --git a/src/filed/restore.c b/src/filed/restore.c
index 20ef9ab..f7ee5a6 100644
--- a/src/filed/restore.c
+++ b/src/filed/restore.c
@@ -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);
diff --git a/src/filed/xacl.c b/src/filed/xacl.c
index a66f95a..8eea8a2 100644
--- a/src/filed/xacl.c
+++ b/src/filed/xacl.c
@@ -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
};
diff --git a/src/findlib/fstype.c b/src/findlib/fstype.c
index 4fc4f26..1ae6909 100644
--- a/src/findlib/fstype.c
+++ b/src/findlib/fstype.c
@@ -1,7 +1,7 @@
/*
Bacula(R) - The Network Backup Solution
- Copyright (C) 2000-2015 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.
@@ -291,6 +291,7 @@ bool fstype(FF_PKT *ff_pkt, char *fs, int fslen)
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/mtab.h>
bool fstype(FF_PKT *ff_pkt, char *fs, int fslen)
{
diff --git a/src/lib/bnet.c b/src/lib/bnet.c
index 4eddee2..17a4484 100644
--- a/src/lib/bnet.c
+++ b/src/lib/bnet.c
@@ -629,12 +629,14 @@ int set_socket_errno(int sockstat)
/* Handle errrors from prior connections as EAGAIN */
switch (errno) {
case ENETDOWN:
+#ifdef EPROTO
case EPROTO:
- case ENOPROTOOPT:
- case EHOSTDOWN:
+#endif
#ifdef ENONET
case ENONET:
#endif
+ case ENOPROTOOPT:
+ case EHOSTDOWN:
case EHOSTUNREACH:
case EOPNOTSUPP:
case ENETUNREACH:
diff --git a/src/lib/mem_pool.c b/src/lib/mem_pool.c
index a2e7606..5d7028c 100644
--- a/src/lib/mem_pool.c
+++ b/src/lib/mem_pool.c
@@ -375,7 +375,8 @@ void garbage_collect_memory_pool()
return;
}
now = time(NULL);
- if (now >= last_garbage_collection + garbage_interval) {
+ if (now >= last_garbage_collection + garbage_interval ||
+ sm_bytes > 500000) {
last_garbage_collection = now;
V(mutex);
garbage_collect_memory();
diff --git a/src/stored/fd_cmds.c b/src/stored/fd_cmds.c
index 630f5e0..1b6bfe8 100644
--- a/src/stored/fd_cmds.c
+++ b/src/stored/fd_cmds.c
@@ -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.
@@ -161,6 +161,7 @@ bail_out:
Dmsg1(100, "==== %s", dir->msg);
dir->signal(BNET_EOD); /* send EOD to Director daemon */
free_plugins(jcr); /* release instantiated plugins */
+ garbage_collect_memory_pool();
return;
}
diff --git a/src/stored/lock.c b/src/stored/lock.c
index f5f6498..f269bce 100644
--- a/src/stored/lock.c
+++ b/src/stored/lock.c
@@ -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.
@@ -154,25 +154,25 @@ void DEVICE::dunblock(bool locked)
#ifdef DEV_DEBUG_LOCK
-void DEVICE::dbg_Lock(const char *file, int line)
+void DEVICE::dbg_Lock(const char *tfile, int line)
{
- Dmsg3(sd_dbglvl, "Lock from %s:%d precnt=%d\n", file, line, m_count);
- bthread_mutex_lock_p(&m_mutex, file, line);
+ Dmsg3(sd_dbglvl, "Lock from %s:%d precnt=%d\n", tfile, line, m_count);
+ bthread_mutex_lock_p(&m_mutex, tfile, line);
m_pid = pthread_self();
m_count++;
}
-void DEVICE::dbg_Unlock(const char *file, int line)
+void DEVICE::dbg_Unlock(const char *tfile, int line)
{
m_count--;
- Dmsg3(sd_dbglvl, "Unlock from %s:%d postcnt=%d\n", file, line, m_count);
- bthread_mutex_unlock_p(&m_mutex, file, line);
+ Dmsg3(sd_dbglvl, "Unlock from %s:%d postcnt=%d\n", tfile, line, m_count);
+ bthread_mutex_unlock_p(&m_mutex, tfile, line);
}
-void DEVICE::dbg_rUnlock(const char *file, int line)
+void DEVICE::dbg_rUnlock(const char *tfile, int line)
{
- Dmsg2(sd_dbglvl, "rUnlock from %s:%d\n", file, line);
- dbg_Unlock(file, line);
+ Dmsg2(sd_dbglvl, "rUnlock from %s:%d\n", tfile, line);
+ dbg_Unlock(tfile, line);
}
#else
@@ -208,14 +208,14 @@ void DEVICE::Unlock()
* and preparing the label.
*/
#ifdef DEV_DEBUG_LOCK
-void DEVICE::dbg_rLock(const char *file, int line, bool locked)
+void DEVICE::dbg_rLock(const char *tfile, int line, bool locked)
{
Dmsg3(sd_dbglvl, "rLock blked=%s from %s:%d\n", print_blocked(),
- file, line);
+ tfile, line);
if (!locked) {
/* lockmgr version of P(m_mutex) */
- bthread_mutex_lock_p(&m_mutex, file, line);
+ bthread_mutex_lock_p(&m_mutex, tfile, line);
m_count++;
}
@@ -228,9 +228,9 @@ void DEVICE::dbg_rLock(const char *file, int line, bool locked)
Dmsg3(sd_dbglvl, "rLock blked=%s no_wait=%p me=%p\n", print_blocked(),
no_wait_id, pthread_self());
#endif
- if ((stat = bthread_cond_wait_p(&this->wait, &m_mutex, file, line)) != 0) {
+ if ((stat = bthread_cond_wait_p(&this->wait, &m_mutex, tfile, line)) != 0) {
berrno be;
- this->dbg_Unlock(file, line);
+ this->dbg_Unlock(tfile, line);
Emsg1(M_ABORT, 0, _("pthread_cond_wait failure. ERR=%s\n"),
be.bstrerror(stat));
}
@@ -272,38 +272,38 @@ void DEVICE::rLock(bool locked)
#ifdef SD_DEBUG_LOCK
-void DEVICE::dbg_Lock_acquire(const char *file, int line)
+void DEVICE::dbg_Lock_acquire(const char *tfile, int line)
{
- Dmsg2(sd_dbglvl, "Lock_acquire from %s:%d\n", file, line);
- bthread_mutex_lock_p(&acquire_mutex, file, line);
+ Dmsg2(sd_dbglvl, "Lock_acquire from %s:%d\n", tfile, line);
+ bthread_mutex_lock_p(&acquire_mutex, tfile, line);
}
-void DEVICE::dbg_Unlock_acquire(const char *file, int line)
+void DEVICE::dbg_Unlock_acquire(const char *tfile, int line)
{
- Dmsg2(sd_dbglvl, "Unlock_acquire from %s:%d\n", file, line);
- bthread_mutex_unlock_p(&acquire_mutex, file, line);
+ Dmsg2(sd_dbglvl, "Unlock_acquire from %s:%d\n", tfile, line);
+ bthread_mutex_unlock_p(&acquire_mutex, tfile, line);
}
-void DEVICE::dbg_Lock_read_acquire(const char *file, int line)
+void DEVICE::dbg_Lock_read_acquire(const char *tfile, int line)
{
- Dmsg2(sd_dbglvl, "Lock_read_acquire from %s:%d\n", file, line);
- bthread_mutex_lock_p(&read_acquire_mutex, file, line);
+ Dmsg2(sd_dbglvl, "Lock_read_acquire from %s:%d\n", tfile, line);
+ bthread_mutex_lock_p(&read_acquire_mutex, tfile, line);
}
-void DEVICE::dbg_Unlock_read_acquire(const char *file, int line)
+void DEVICE::dbg_Unlock_read_acquire(const char *tfile, int line)
{
- Dmsg2(sd_dbglvl, "Unlock_read_acquire from %s:%d\n", file, line);
- bthread_mutex_unlock_p(&read_acquire_mutex, file, line);
+ Dmsg2(sd_dbglvl, "Unlock_read_acquire from %s:%d\n", tfile, line);
+ bthread_mutex_unlock_p(&read_acquire_mutex, tfile, line);
}
-void DEVICE::dbg_Lock_VolCatInfo(const char *file, int line)
+void DEVICE::dbg_Lock_VolCatInfo(const char *tfile, int line)
{
- bthread_mutex_lock_p(&volcat_mutex, file, line);
+ bthread_mutex_lock_p(&volcat_mutex, tfile, line);
}
-void DEVICE::dbg_Unlock_VolCatInfo(const char *file, int line)
+void DEVICE::dbg_Unlock_VolCatInfo(const char *tfile, int line)
{
- bthread_mutex_unlock_p(&volcat_mutex, file, line);
+ bthread_mutex_unlock_p(&volcat_mutex, tfile, line);
}
#else
diff --git a/src/version.h b/src/version.h
index 78d91b0..6d849b0 100644
--- a/src/version.h
+++ b/src/version.h
@@ -5,9 +5,9 @@
#define COMMUNITY 1 /* Define to create a Windows community binary */
/* Note: there can be only *one* VERSION in this file */
-#define VERSION "7.4.6"
-#define BDATE "10 March 2017"
-#define LSMDATE "10Mar17"
+#define VERSION "7.4.7"
+#define BDATE "16 March 2017"
+#define LSMDATE "16Mar17"
#define RELEASE 1 /* Use ONLY in rpms */
@@ -23,7 +23,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.
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bacula/bacula.git
More information about the pkg-bacula-commits
mailing list