X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_output.c;h=3d03199f12437164706f76732cf634acb14cef33;hb=556161f68a5ac813546c6b273269df96e4cf36bc;hp=f53628e974032130f25c14191a0f47a9d54bf8d9;hpb=8e94b30da91f44a8a0d39de5c493983cfd08884e;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index f53628e974..3d03199f12 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -1,3 +1,30 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-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 Output Commands @@ -8,21 +35,6 @@ * Version $Id$ */ -/* - Copyright (C) 2000-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" #include "dird.h" @@ -237,7 +249,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) POOL_DBR pr; MEDIA_DBR mr; - if (!open_db(ua)) + if (!open_client_db(ua)) return 1; memset(&jr, 0, sizeof(jr)); @@ -416,7 +428,7 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) if (j >= 0) { n = atoi(ua->argv[j]); if ((n < 0) || (n > 50)) { - bsendmsg(ua, _("Ignoring illegal value for days.\n")); + bsendmsg(ua, _("Ignoring invalid value for days. Max is 50.\n")); n = 1; } } @@ -436,6 +448,7 @@ static bool list_nextvol(UAContext *ua, int ndays) JOB *job; JCR *jcr = ua->jcr; POOL *pool; + USTORE store; RUN *run; time_t runtime; bool found = false; @@ -465,15 +478,11 @@ static bool list_nextvol(UAContext *ua, int ndays) memset(&pr, 0, sizeof(pr)); pr.PoolId = jcr->jr.PoolId; if (! db_get_pool_record(ua->jcr, ua->db, &pr)) { - strcpy(pr.Name, "*UnknownPool*"); + bstrncpy(pr.Name, "*UnknownPool*", sizeof(pr.Name)); } mr.PoolId = jcr->jr.PoolId; - if (run->storage) { - jcr->store = run->storage; - } else { - jcr->store = (STORE *)job->storage->first(); - } - mr.StorageId = jcr->store->StorageId; + get_job_storage(&store, job, run); + mr.StorageId = store.store->StorageId; if (!find_next_volume_for_append(jcr, &mr, 1, false/*no create*/)) { bsendmsg(ua, _("Could not find next Volume for Job %s (%s, %s).\n"), job->hdr.name, pr.Name, level_to_str(run->level)); @@ -588,11 +597,12 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime, int ndays) /* Nothing found */ return NULL; } + /* * Fill in the remaining fields of the jcr as if it * is going to run the job. */ -int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) +bool complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) { POOL_DBR pr; @@ -601,6 +611,10 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) if (pool) { jcr->pool = pool; /* override */ } + if (jcr->db) { + db_close_database(jcr, jcr->db); + jcr->db = NULL; + } jcr->db = jcr->db=db_init_database(jcr, jcr->catalog->db_name, jcr->catalog->db_user, jcr->catalog->db_password, jcr->catalog->db_address, jcr->catalog->db_port, jcr->catalog->db_socket, @@ -610,8 +624,10 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) jcr->catalog->db_name); if (jcr->db) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); + db_close_database(jcr, jcr->db); + jcr->db = NULL; } - return 0; + return false; } bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); while (!db_get_pool_record(jcr, jcr->db, &pr)) { /* get by Name */ @@ -623,13 +639,13 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) db_close_database(jcr, jcr->db); jcr->db = NULL; } - return 0; + return false; } else { Jmsg(jcr, M_INFO, 0, _("Pool %s created in database.\n"), pr.Name); } } jcr->jr.PoolId = pr.PoolId; - return 1; + return true; }