+/*
+ Bacula® - The Network Backup Solution
+
+ Copyright (C) 2002-2007 Free Software Foundation Europe e.V.
+
+ The main author of Bacula is Kern Sibbald, with contributions from
+ many others, a complete list can be found in the file AUTHORS.
+ This program is Free Software; you can redistribute it and/or
+ modify it under the terms of version two of the GNU General Public
+ License as published by the Free Software Foundation plus additions
+ that are listed in the file LICENSE.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ Bacula® is a registered trademark of John Walker.
+ The licensor of Bacula is the Free Software Foundation Europe
+ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
+ Switzerland, email:ftf@fsfeurope.org.
+*/
/*
*
* Bacula Director -- User Agent Database restore Command
*
* Version $Id$
*/
-/*
- Copyright (C) 2002-2006 Kern Sibbald
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- version 2 as amended with additional clauses defined in the
- file LICENSE in the main source directory.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- the file LICENSE for additional details.
-
- */
#include "bacula.h"
JOB *job;
int i;
JCR *jcr = ua->jcr;
+ char *escaped_bsr_name = NULL;
+ char *escaped_where_name = NULL;
memset(&rx, 0, sizeof(rx));
rx.path = get_pool_memory(PM_FNAME);
if (i >= 0) {
rx.where = ua->argv[i];
if (!acl_access_ok(ua, Where_ACL, rx.where)) {
- bsendmsg(ua, _("Forbidden \"where\" specified.\n"));
+ ua->error_msg(_("\"where\" specification not authorized.\n"));
goto bail_out;
}
}
- if (!open_db(ua)) {
+ if (!open_client_db(ua)) {
goto bail_out;
}
}
UnlockRes();
if (!rx.restore_jobs) {
- bsendmsg(ua, _(
+ ua->error_msg(_(
"No Restore Job Resource found in bacula-dir.conf.\n"
"You must create at least one before running this command.\n"));
goto bail_out;
goto bail_out;
case 1: /* selected by jobid */
if (!build_directory_tree(ua, &rx)) {
- bsendmsg(ua, _("Restore not done.\n"));
+ ua->send_msg(_("Restore not done.\n"));
goto bail_out;
}
break;
if (rx.bsr->JobId) {
uint32_t selected_files;
+ char ed1[50];
if (!complete_bsr(ua, rx.bsr)) { /* find Vol, SessId, SessTime from JobIds */
- bsendmsg(ua, _("Unable to construct a valid BSR. Cannot continue.\n"));
+ ua->error_msg(_("Unable to construct a valid BSR. Cannot continue.\n"));
goto bail_out;
}
if (!(selected_files = write_bsr_file(ua, rx))) {
- bsendmsg(ua, _("No files selected to be restored.\n"));
+ ua->warning_msg(_("No files selected to be restored.\n"));
goto bail_out;
}
/* If no count of files, use bsr generated value (often wrong) */
rx.selected_files = selected_files;
}
if (rx.selected_files==1) {
- bsendmsg(ua, _("\n1 file selected to be restored.\n\n"));
+ ua->info_msg(_("\n1 file selected to be restored.\n\n"));
}
else {
- bsendmsg(ua, _("\n%u files selected to be restored.\n\n"), rx.selected_files);
+ ua->info_msg(_("\n%s files selected to be restored.\n\n"),
+ edit_uint64_with_commas(rx.selected_files, ed1));
}
} else {
- bsendmsg(ua, _("No files selected to be restored.\n"));
+ ua->warning_msg(_("No files selected to be restored.\n"));
goto bail_out;
}
get_client_name(ua, &rx);
if (!rx.ClientName) {
- bsendmsg(ua, _("No Restore Job resource found!\n"));
+ ua->error_msg(_("No Client resource found!\n"));
goto bail_out;
}
+ escaped_bsr_name = escape_filename(jcr->RestoreBootstrap);
+ escaped_where_name = escape_filename(rx.where);
+
/* Build run command */
if (rx.where) {
if (!acl_access_ok(ua, Where_ACL, rx.where)) {
- bsendmsg(ua, _("Forbidden \"where\" specified.\n"));
+ ua->error_msg(_("\"where\" specification not authorized.\n"));
goto bail_out;
}
+
Mmsg(ua->cmd,
"run job=\"%s\" client=\"%s\" storage=\"%s\" bootstrap=\"%s\""
" where=\"%s\" files=%d catalog=\"%s\"",
job->name(), rx.ClientName, rx.store?rx.store->name():"",
- jcr->RestoreBootstrap, rx.where, rx.selected_files, ua->catalog->name());
+ escaped_bsr_name ? escaped_bsr_name : jcr->RestoreBootstrap,
+ escaped_where_name ? escaped_where_name : rx.where,
+ rx.selected_files, ua->catalog->name());
} else {
Mmsg(ua->cmd,
"run job=\"%s\" client=\"%s\" storage=\"%s\" bootstrap=\"%s\""
" files=%d catalog=\"%s\"",
job->name(), rx.ClientName, rx.store?rx.store->name():"",
- jcr->RestoreBootstrap, rx.selected_files, ua->catalog->name());
+ escaped_bsr_name ? escaped_bsr_name : jcr->RestoreBootstrap,
+ rx.selected_files, ua->catalog->name());
}
+
+ if (escaped_bsr_name != NULL) {
+ bfree(escaped_bsr_name);
+ }
+
+ if (escaped_where_name != NULL) {
+ bfree(escaped_where_name);
+ }
+
if (find_arg(ua, NT_("yes")) > 0) {
pm_strcat(ua->cmd, " yes"); /* pass it on to the run command */
}
return 1;
bail_out:
+ if (escaped_bsr_name != NULL) {
+ bfree(escaped_bsr_name);
+ }
+
+ if (escaped_where_name != NULL) {
+ bfree(escaped_where_name);
+ }
+
free_rx(&rx);
return 0;
static bool has_value(UAContext *ua, int i)
{
if (!ua->argv[i]) {
- bsendmsg(ua, _("Missing value for keyword: %s\n"), ua->argk[i]);
+ ua->error_msg(_("Missing value for keyword: %s\n"), ua->argk[i]);
return false;
}
return true;
}
}
if (!found_kw) {
- bsendmsg(ua, _("Unknown keyword: %s\n"), ua->argk[i]);
+ ua->error_msg(_("Unknown keyword: %s\n"), ua->argk[i]);
return 0;
}
/* Found keyword in kw[] list, process it */
return 0;
}
if (str_to_utime(ua->argv[i]) == 0) {
- bsendmsg(ua, _("Improper date format: %s\n"), ua->argv[i]);
+ ua->error_msg(_("Improper date format: %s\n"), ua->argv[i]);
return 0;
}
bstrncpy(date, ua->argv[i], sizeof(date));
}
rx->pool = (POOL *)GetResWithName(R_POOL, ua->argv[i]);
if (!rx->pool) {
- bsendmsg(ua, _("Error: Pool resource \"%s\" does not exist.\n"), ua->argv[i]);
+ ua->error_msg(_("Error: Pool resource \"%s\" does not exist.\n"), ua->argv[i]);
return 0;
}
if (!acl_access_ok(ua, Pool_ACL, ua->argv[i])) {
rx->pool = NULL;
- bsendmsg(ua, _("Error: Pool resource \"%s\" access not allowed.\n"), ua->argv[i]);
+ ua->error_msg(_("Error: Pool resource \"%s\" access not allowed.\n"), ua->argv[i]);
return 0;
}
break;
}
if (!done) {
- bsendmsg(ua, _("\nFirst you select one or more JobIds that contain files\n"
+ ua->send_msg(_("\nFirst you select one or more JobIds that contain files\n"
"to be restored. You will be presented several methods\n"
"of specifying the JobIds. Then you will be allowed to\n"
"select which files from those JobIds are to be restored.\n\n"));
case -1: /* error or cancel */
return 0;
case 0: /* list last 20 Jobs run */
- /* ***FIXME*** restrict clients on restricted console */
+ if (!acl_access_ok(ua, Command_ACL, NT_("sqlquery"), 8)) {
+ ua->error_msg(_("SQL query not authorized.\n"));
+ return 0;
+ }
gui_save = ua->jcr->gui;
ua->jcr->gui = true;
db_list_sql_query(ua->jcr, ua->db, uar_list_jobs, prtit, ua, 1, HORZ_LIST);
break;
case 3: /* Enter an SQL list command */
if (!acl_access_ok(ua, Command_ACL, NT_("sqlquery"), 8)) {
+ ua->error_msg(_("SQL query not authorized.\n"));
return 0;
}
if (!get_cmd(ua, _("Enter SQL list command: "))) {
if (!get_client_name(ua, rx)) {
return 0;
}
- bsendmsg(ua, _("Enter file names with paths, or < to enter a filename\n"
+ ua->send_msg(_("Enter file names with paths, or < to enter a filename\n"
"containing a list of file names with paths, and terminate\n"
"them with a blank line.\n"));
for ( ;; ) {
if (!get_client_name(ua, rx)) {
return 0;
}
- bsendmsg(ua, _("Enter file names with paths, or < to enter a filename\n"
+ ua->send_msg(_("Enter file names with paths, or < to enter a filename\n"
"containing a list of file names with paths, and terminate\n"
"them with a blank line.\n"));
for ( ;; ) {
case 10: /* Enter directories */
if (*rx->JobIds != 0) {
- bsendmsg(ua, _("You have already seleted the following JobIds: %s\n"),
+ ua->send_msg(_("You have already selected the following JobIds: %s\n"),
rx->JobIds);
} else if (get_cmd(ua, _("Enter JobId(s), comma separated, to restore: "))) {
if (*rx->JobIds != 0 && *ua->cmd) {
if (!get_client_name(ua, rx)) {
return 0;
}
- bsendmsg(ua, _("Enter full directory names or start the name\n"
+ ua->send_msg(_("Enter full directory names or start the name\n"
"with a < to indicate it is a filename containing a list\n"
"of directories and terminate them with a blank line.\n"));
for ( ;; ) {
break;
}
/* Add trailing slash to end of directory names */
- if (ua->cmd[0] != '<' && ua->cmd[len-1] != '/') {
+ if (ua->cmd[0] != '<' && !IsPathSeparator(ua->cmd[len-1])) {
strcat(ua->cmd, "/");
}
insert_one_file_or_dir(ua, rx, date, true);
}
}
- if (*rx->JobIds == 0) {
- bsendmsg(ua, _("No Jobs selected.\n"));
- return 0;
- }
- if (strchr(rx->JobIds,',')) {
- bsendmsg(ua, _("You have selected the following JobIds: %s\n"), rx->JobIds);
- }
- else {
- bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds);
- }
-
-
+ POOLMEM *JobIds = get_pool_memory(PM_FNAME);
+ *JobIds = 0;
rx->TotalFiles = 0;
+ /*
+ * Find total number of files to be restored, and filter the JobId
+ * list to contain only ones permitted by the ACL conditions.
+ */
for (p=rx->JobIds; ; ) {
+ char ed1[50];
int stat = get_next_jobid_from_list(&p, &JobId);
if (stat < 0) {
- bsendmsg(ua, _("Invalid JobId in list.\n"));
+ ua->error_msg(_("Invalid JobId in list.\n"));
+ free_pool_memory(JobIds);
return 0;
}
if (stat == 0) {
memset(&jr, 0, sizeof(JOB_DBR));
jr.JobId = JobId;
if (!db_get_job_record(ua->jcr, ua->db, &jr)) {
- char ed1[50];
- bsendmsg(ua, _("Unable to get Job record for JobId=%s: ERR=%s\n"),
+ ua->error_msg(_("Unable to get Job record for JobId=%s: ERR=%s\n"),
edit_int64(JobId, ed1), db_strerror(ua->db));
+ free_pool_memory(JobIds);
return 0;
}
if (!acl_access_ok(ua, Job_ACL, jr.Name)) {
- bsendmsg(ua, _("No authorization. Job \"%s\" not selected.\n"),
- jr.Name);
+ ua->error_msg(_("Access to JobId=%s (Job \"%s\") not authorized. Not selected.\n"),
+ edit_int64(JobId, ed1), jr.Name);
continue;
}
+ if (*JobIds != 0) {
+ pm_strcat(JobIds, ",");
+ }
+ pm_strcat(JobIds, edit_int64(JobId, ed1));
rx->TotalFiles += jr.JobFiles;
}
+ free_pool_memory(rx->JobIds);
+ rx->JobIds = JobIds; /* Set ACL filtered list */
+ if (*rx->JobIds == 0) {
+ ua->warning_msg(_("No Jobs selected.\n"));
+ return 0;
+ }
+ if (strchr(rx->JobIds,',')) {
+ ua->info_msg(_("You have selected the following JobIds: %s\n"), rx->JobIds);
+ } else {
+ ua->info_msg(_("You have selected the following JobId: %s\n"), rx->JobIds);
+ }
return 1;
}
*/
static int get_date(UAContext *ua, char *date, int date_len)
{
- bsendmsg(ua, _("The restored files will the most current backup\n"
+ ua->send_msg(_("The restored files will the most current backup\n"
"BEFORE the date you specify below.\n\n"));
for ( ;; ) {
if (!get_cmd(ua, _("Enter date as YYYY-MM-DD HH:MM:SS :"))) {
if (str_to_utime(ua->cmd) != 0) {
break;
}
- bsendmsg(ua, _("Improper date format.\n"));
+ ua->error_msg(_("Improper date format.\n"));
}
bstrncpy(date, ua->cmd, date_len);
return 1;
p++;
if ((ffd = fopen(p, "rb")) == NULL) {
berrno be;
- bsendmsg(ua, _("Cannot open file %s: ERR=%s\n"),
+ ua->error_msg(_("Cannot open file %s: ERR=%s\n"),
p, be.strerror());
break;
}
line++;
if (dir) {
if (!insert_dir_into_findex_list(ua, rx, file, date)) {
- bsendmsg(ua, _("Error occurred on line %d of %s\n"), line, p);
+ ua->error_msg(_("Error occurred on line %d of file \"%s\"\n"), line, p);
}
} else {
if (!insert_file_into_findex_list(ua, rx, file, date)) {
- bsendmsg(ua, _("Error occurred on line %d of %s\n"), line, p);
+ ua->error_msg(_("Error occurred on line %d of file \"%s\"\n"), line, p);
}
}
}
rx->found = false;
/* Find and insert jobid and File Index */
if (!db_sql_query(ua->db, rx->query, jobid_fileindex_handler, (void *)rx)) {
- bsendmsg(ua, _("Query failed: %s. ERR=%s\n"),
+ ua->error_msg(_("Query failed: %s. ERR=%s\n"),
rx->query, db_strerror(ua->db));
}
if (!rx->found) {
- bsendmsg(ua, _("No database record found for: %s\n"), file);
+ ua->error_msg(_("No database record found for: %s\n"), file);
return true;
}
return true;
{
strip_trailing_junk(dir);
if (*rx->JobIds == 0) {
- bsendmsg(ua, _("No JobId specified cannot continue.\n"));
+ ua->error_msg(_("No JobId specified cannot continue.\n"));
return false;
} else {
Mmsg(rx->query, uar_jobid_fileindex_from_dir, rx->JobIds,
rx->found = false;
/* Find and insert jobid and File Index */
if (!db_sql_query(ua->db, rx->query, jobid_fileindex_handler, (void *)rx)) {
- bsendmsg(ua, _("Query failed: %s. ERR=%s\n"),
+ ua->error_msg(_("Query failed: %s. ERR=%s\n"),
rx->query, db_strerror(ua->db));
}
if (!rx->found) {
- bsendmsg(ua, _("No database record found for: %s\n"), dir);
+ ua->error_msg(_("No database record found for: %s\n"), dir);
return true;
}
return true;
rx->found = false;
/* Find and insert jobid and File Index */
if (!db_sql_query(ua->db, rx->query, jobid_fileindex_handler, (void *)rx)) {
- bsendmsg(ua, _("Query failed: %s. ERR=%s\n"),
+ ua->error_msg(_("Query failed: %s. ERR=%s\n"),
rx->query, db_strerror(ua->db));
}
if (!rx->found) {
- bsendmsg(ua, _("No table found: %s\n"), table);
+ ua->error_msg(_("No table found: %s\n"), table);
return true;
}
return true;
* must be a path name (e.g. c:).
*/
for (p=f=name; *p; p++) {
- if (*p == '/') {
+ if (IsPathSeparator(*p)) {
f = p; /* set pos of last slash */
}
}
- if (*f == '/') { /* did we find a slash? */
+ if (IsPathSeparator(*f)) { /* did we find a slash? */
f++; /* yes, point to filename */
} else { /* no, whole thing must be path name */
f = p;
rx->pnl = 0;
}
- Dmsg2(100, "sllit path=%s file=%s\n", rx->path, rx->fname);
+ Dmsg2(100, "split path=%s file=%s\n", rx->path, rx->fname);
}
static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx)
/* Use first JobId as estimate of the number of files to restore */
Mmsg(rx->query, uar_count_files, edit_int64(JobId, ed1));
if (!db_sql_query(ua->db, rx->query, count_handler, (void *)rx)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
}
if (rx->found) {
/* Add about 25% more than this job for over estimate */
continue; /* eliminate duplicate JobIds */
}
last_JobId = JobId;
- bsendmsg(ua, _("\nBuilding directory tree for JobId %s ... "),
+ ua->info_msg(_("\nBuilding directory tree for JobId %s ... "),
edit_int64(JobId, ed1));
items++;
/*
*/
Mmsg(rx->query, uar_sel_files, edit_int64(JobId, ed1));
if (!db_sql_query(ua->db, rx->query, insert_tree_handler, (void *)&tree)) {
- bsendmsg(ua, "%s", db_strerror(ua->db));
+ ua->error_msg("%s", db_strerror(ua->db));
}
}
if (tree.FileCount == 0) {
- bsendmsg(ua, _("\nThere were no files inserted into the tree, so file selection\n"
+ ua->send_msg(_("\nThere were no files inserted into the tree, so file selection\n"
"is not possible.Most likely your retention policy pruned the files\n"));
if (!get_yesno(ua, _("\nDo you want to restore all the files? (yes|no): "))) {
OK = false;
char ec1[50];
if (items==1) {
if (tree.all) {
- bsendmsg(ua, _("\n1 Job, %s files inserted into the tree and marked for extraction.\n"),
+ ua->info_msg(_("\n1 Job, %s files inserted into the tree and marked for extraction.\n"),
edit_uint64_with_commas(tree.FileCount, ec1));
}
else {
- bsendmsg(ua, _("\n1 Job, %s files inserted into the tree.\n"),
+ ua->info_msg(_("\n1 Job, %s files inserted into the tree.\n"),
edit_uint64_with_commas(tree.FileCount, ec1));
}
}
else {
if (tree.all) {
- bsendmsg(ua, _("\n%d Jobs, %s files inserted into the tree and marked for extraction.\n"),
+ ua->info_msg(_("\n%d Jobs, %s files inserted into the tree and marked for extraction.\n"),
items, edit_uint64_with_commas(tree.FileCount, ec1));
}
else {
- bsendmsg(ua, _("\n%d Jobs, %s files inserted into the tree.\n"),
+ ua->info_msg(_("\n%d Jobs, %s files inserted into the tree.\n"),
items, edit_uint64_with_commas(tree.FileCount, ec1));
}
}
db_sql_query(ua->db, uar_del_temp, NULL, NULL);
db_sql_query(ua->db, uar_del_temp1, NULL, NULL);
if (!db_sql_query(ua->db, uar_create_temp, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
}
if (!db_sql_query(ua->db, uar_create_temp1, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
}
/*
* Select Client from the Catalog
if (i >= 0) {
bstrncpy(fsr.FileSet, ua->argv[i], sizeof(fsr.FileSet));
if (!db_get_fileset_record(ua->jcr, ua->db, &fsr)) {
- bsendmsg(ua, _("Error getting FileSet \"%s\": ERR=%s\n"), fsr.FileSet,
+ ua->error_msg(_("Error getting FileSet \"%s\": ERR=%s\n"), fsr.FileSet,
db_strerror(ua->db));
i = -1;
}
Mmsg(rx->query, uar_sel_fileset, ed1, ed1);
start_prompt(ua, _("The defined FileSet resources are:\n"));
if (!db_sql_query(ua->db, rx->query, fileset_handler, (void *)ua)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
}
if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"),
fileset_name, sizeof(fileset_name)) < 0) {
+ ua->error_msg(_("No FileSet found for client \"%s\".\n"), cr.Name);
goto bail_out;
}
bstrncpy(fsr.FileSet, fileset_name, sizeof(fsr.FileSet));
if (!db_get_fileset_record(ua->jcr, ua->db, &fsr)) {
- bsendmsg(ua, _("Error getting FileSet record: %s\n"), db_strerror(ua->db));
- bsendmsg(ua, _("This probably means you modified the FileSet.\n"
+ ua->warning_msg(_("Error getting FileSet record: %s\n"), db_strerror(ua->db));
+ ua->send_msg(_("This probably means you modified the FileSet.\n"
"Continuing anyway.\n"));
}
}
bsnprintf(pool_select, sizeof(pool_select), "AND Media.PoolId=%s ",
edit_int64(pr.PoolId, ed1));
} else {
- bsendmsg(ua, _("Pool \"%s\" not found, using any pool.\n"), pr.Name);
+ ua->warning_msg(_("Pool \"%s\" not found, using any pool.\n"), pr.Name);
}
}
Mmsg(rx->query, uar_last_full, ed1, ed1, date, fsr.FileSet,
pool_select);
if (!db_sql_query(ua->db, rx->query, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
goto bail_out;
}
/* Find all Volumes used by that JobId */
if (!db_sql_query(ua->db, uar_full, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->error_msg("%s\n", db_strerror(ua->db));
goto bail_out;
}
/* Note, this is needed because I don't seem to get the callback
*/
rx->JobTDate = 0;
if (!db_sql_query(ua->db, uar_sel_all_temp1, last_full_handler, (void *)rx)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->warning_msg("%s\n", db_strerror(ua->db));
}
if (rx->JobTDate == 0) {
- bsendmsg(ua, _("No Full backup before %s found.\n"), date);
+ ua->error_msg(_("No Full backup before %s found.\n"), date);
goto bail_out;
}
Mmsg(rx->query, uar_dif, edit_uint64(rx->JobTDate, ed1), date,
edit_int64(cr.ClientId, ed2), fsr.FileSet, pool_select);
if (!db_sql_query(ua->db, rx->query, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->warning_msg("%s\n", db_strerror(ua->db));
}
/* Now update JobTDate to lock onto Differental, if any */
rx->JobTDate = 0;
if (!db_sql_query(ua->db, uar_sel_all_temp, last_full_handler, (void *)rx)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->warning_msg("%s\n", db_strerror(ua->db));
}
if (rx->JobTDate == 0) {
- bsendmsg(ua, _("No Full backup before %s found.\n"), date);
+ ua->error_msg(_("No Full backup before %s found.\n"), date);
goto bail_out;
}
Mmsg(rx->query, uar_inc, edit_uint64(rx->JobTDate, ed1), date,
edit_int64(cr.ClientId, ed2), fsr.FileSet, pool_select);
if (!db_sql_query(ua->db, rx->query, NULL, NULL)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->warning_msg("%s\n", db_strerror(ua->db));
}
/* Get the JobIds from that list */
rx->JobIds[0] = 0;
rx->last_jobid[0] = 0;
if (!db_sql_query(ua->db, uar_sel_jobid_temp, jobid_handler, (void *)rx)) {
- bsendmsg(ua, "%s\n", db_strerror(ua->db));
+ ua->warning_msg("%s\n", db_strerror(ua->db));
}
if (rx->JobIds[0] != 0) {
db_list_sql_query(ua->jcr, ua->db, uar_list_temp, prtit, ua, 1, HORZ_LIST);
ok = true;
} else {
- bsendmsg(ua, _("No jobs found.\n"));
+ ua->warning_msg(_("No jobs found.\n"));
}
bail_out:
}
}
if (store && (store != rx.store)) {
- bsendmsg(ua, _("Warning default storage overridden by \"%s\" on command line.\n"),
+ ua->info_msg(_("Warning default storage overridden by \"%s\" on command line.\n"),
store->name());
rx.store = store;
Dmsg1(200, "Set store=%s\n", rx.store->name());
if (acl_access_ok(ua, Storage_ACL, store->name())) {
rx.store = store;
Dmsg1(200, "Set store=%s\n", rx.store->name());
- bsendmsg(ua, _("Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n"),
+ ua->warning_msg(_("Storage \"%s\" not found, using Storage \"%s\" from MediaType \"%s\".\n"),
Storage, store->name(), MediaType);
}
UnlockRes();
}
}
UnlockRes();
- bsendmsg(ua, _("\nUnable to find Storage resource for\n"
+ ua->warning_msg(_("\nUnable to find Storage resource for\n"
"MediaType \"%s\", needed by the Jobs you selected.\n"), MediaType);
}