From: Norbert Bizet Date: Tue, 21 Sep 2021 09:22:49 +0000 (-0400) Subject: Fix #8167 About BAT tool crashing the dir X-Git-Tag: Release-11.3.2~336 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28cdc7831aac26e636372bc82475d2962852d7b7;p=thirdparty%2Fbacula.git Fix #8167 About BAT tool crashing the dir Reintroduced missing 'if(job)' case for get_job_storage, so that it works for both 'run' and 'job' arguments provided. Removed unneded get_job_storage() call from get_storage(). --- diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index 6e9391e01..246f77d7b 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -1605,7 +1605,9 @@ void dird_free_jcr(JCR *jcr) } /* - * Override storage from run parameters if set. + * The Job storage definition must be either in the Job record + * or in the Pool record. The Pool record overrides the Job + * record. */ void get_job_storage(USTORE *store, JOB *job, RUN *run) { @@ -1619,6 +1621,17 @@ void get_job_storage(USTORE *store, JOB *job, RUN *run) pm_strcpy(store->store_source, _("Run storage override")); return; } + + if (job) { + if (job->pool->storage) { + store->store = (STORE *)job->pool->storage->first(); + pm_strcpy(store->store_source, _("Pool resource")); + return; + } else { + store->store = (STORE *)job->storage->first(); + pm_strcpy(store->store_source, _("Job resource")); + } + } } /* Init storage manager with specified storage group policy */ diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index 411c03e15..a449d5327 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -2576,7 +2576,7 @@ static bool defaultscmd(UAContext *ua, const char *cmd) ua->send_msg("messages=%s", job->messages->name()); ua->send_msg("client=%s", job->client?job->client->name():_("*None*")); get_job_storage(&store, job, NULL); - ua->send_msg("storage=%s", store.store->name()); + ua->send_msg("storage=%s", store.store ? store.store->name() :_("*None*")); ua->send_msg("where=%s", job->RestoreWhere?job->RestoreWhere:""); ua->send_msg("level=%s", level_to_str(edl, sizeof(edl),job->JobLevel)); ua->send_msg("type=%s", job_type_to_str(job->JobType)); diff --git a/bacula/src/dird/ua_run.c b/bacula/src/dird/ua_run.c index 2d1236741..f07b4f443 100644 --- a/bacula/src/dird/ua_run.c +++ b/bacula/src/dird/ua_run.c @@ -556,9 +556,6 @@ static bool get_storage(UAContext *ua, run_ctx &rc) } } - if (!rc.store->store) { - get_job_storage(rc.store, rc.job, NULL); /* use default */ - } if (rc.store->store && !acl_access_ok(ua, Storage_ACL, rc.store->store->name())) { ua->error_msg(_("No authorization. Storage \"%s\".\n"), rc.store->store->name());