From: Eric B. <ri...@us...> - 2006-05-27 09:35:49
|
Update of /cvsroot/bacula/bacula/src/dird In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv14652/src/dird Modified Files: backup.c dird.c dird_conf.c dird_conf.h dird.h fd_cmds.c job.c protos.h restore.c verify.c Log Message: Done with item 9 = Implement new {Client}Run{Before|After}Job feature. Index: dird.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/dird.c,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- dird.c 30 Apr 2006 17:14:26 -0000 1.101 +++ dird.c 27 May 2006 09:35:37 -0000 1.102 @@ -555,6 +555,19 @@ job->storage->append(st); } } + /* Handle RunScripts alists specifically */ + if (jobdefs->RunScripts) { + RUNSCRIPT *rs, *elt; + + if (!job->RunScripts) { + job->RunScripts = New(alist(10, not_owned_by_alist)); + } + + foreach_alist(rs, jobdefs->RunScripts) { + elt = copy_runscript(rs); + job->RunScripts->append(elt); /* we have to free it */ + } + } /* Transfer default items from JobDefs Resource */ for (i=0; job_items[i].name; i++) { Index: dird_conf.h =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/dird_conf.h,v retrieving revision 1.96 retrieving revision 1.97 diff -u -d -r1.96 -r1.97 --- dird_conf.h 8 Mar 2006 21:17:09 -0000 1.96 +++ dird_conf.h 27 May 2006 09:35:37 -0000 1.97 @@ -83,6 +83,7 @@ struct POOL; struct RUN; struct DEVICE; +struct RUNSCRIPT; /* * Director Resource @@ -280,11 +281,7 @@ int RestoreJobId; /* What -- JobId to restore */ char *RestoreWhere; /* Where on disk to restore -- directory */ char *RestoreBootstrap; /* Bootstrap file */ - char *RunBeforeJob; /* Run program before Job */ - char *RunAfterJob; /* Run program after Job */ - char *RunAfterFailedJob; /* Run program after Job that errs */ - char *ClientRunBeforeJob; /* Run client program before Job */ - char *ClientRunAfterJob; /* Run client program after Job */ + alist *RunScripts; /* Run {client} program {after|before} Job */ union { char *WriteBootstrap; /* Where to write bootstrap Job updates */ char *WriteVerifyList; /* List of changed files */ Index: verify.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/verify.c,v retrieving revision 1.77 retrieving revision 1.78 diff -u -d -r1.77 -r1.78 --- verify.c 26 May 2006 21:02:29 -0000 1.77 +++ verify.c 27 May 2006 09:35:37 -0000 1.78 @@ -262,7 +262,7 @@ return false; } - if (!send_run_before_and_after_commands(jcr)) { + if (!send_runscripts_commands(jcr)) { return false; } Index: backup.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/backup.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -d -r1.103 -r1.104 --- backup.c 21 May 2006 08:56:15 -0000 1.103 +++ backup.c 27 May 2006 09:35:37 -0000 1.104 @@ -222,7 +222,7 @@ } - if (!send_run_before_and_after_commands(jcr)) { + if (!send_runscripts_commands(jcr)) { goto bail_out; } Index: dird_conf.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/dird_conf.c,v retrieving revision 1.141 retrieving revision 1.142 diff -u -d -r1.141 -r1.142 --- dird_conf.c 16 Apr 2006 17:36:01 -0000 1.141 +++ dird_conf.c 27 May 2006 09:35:37 -0000 1.142 @@ -62,7 +62,10 @@ void store_acl(LEX *lc, RES_ITEM *item, int index, int pass); static void store_device(LEX *lc, RES_ITEM *item, int index, int pass); static void store_migtype(LEX *lc, RES_ITEM *item, int index, int pass); - +static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass); +static void store_runscript_when(LEX *lc, RES_ITEM *item, int index, int pass); +static void store_runscript_cmd(LEX *lc, RES_ITEM *item, int index, int pass); +static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass); /* We build the current resource here as we are * scanning the resource configuration definition, @@ -266,11 +269,11 @@ {"spooldata", store_bool, ITEM(res_job.spool_data), 0, ITEM_DEFAULT, false}, {"rerunfailedlevels", store_bool, ITEM(res_job.rerun_failed_levels), 0, ITEM_DEFAULT, false}, {"prefermountedvolumes", store_bool, ITEM(res_job.PreferMountedVolumes), 0, ITEM_DEFAULT, true}, - {"runbeforejob", store_str, ITEM(res_job.RunBeforeJob), 0, 0, 0}, - {"runafterjob", store_str, ITEM(res_job.RunAfterJob), 0, 0, 0}, - {"runafterfailedjob", store_str, ITEM(res_job.RunAfterFailedJob), 0, 0, 0}, - {"clientrunbeforejob", store_str, ITEM(res_job.ClientRunBeforeJob), 0, 0, 0}, - {"clientrunafterjob", store_str, ITEM(res_job.ClientRunAfterJob), 0, 0, 0}, + {"runbeforejob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, + {"runafterjob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, + {"runafterfailedjob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, + {"clientrunbeforejob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, + {"clientrunafterjob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0}, {"maximumconcurrentjobs", store_pint, ITEM(res_job.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1}, {"rescheduleonerror", store_bool, ITEM(res_job.RescheduleOnError), 0, ITEM_DEFAULT, false}, {"rescheduleinterval", store_time, ITEM(res_job.RescheduleInterval), 0, ITEM_DEFAULT, 60 * 30}, @@ -279,6 +282,7 @@ {"writepartafterjob", store_bool, ITEM(res_job.write_part_after_job), 0, ITEM_DEFAULT, false}, {"selectionpattern", store_str, ITEM(res_job.selection_pattern), 0, 0, 0}, {"selectiontype", store_migtype, ITEM(res_job.selection_type), 0, 0, 0}, + {"runscript", store_runscript, ITEM(res_job.RunScripts), 0, ITEM_NO_EQUALS, 0}, {NULL, NULL, NULL, 0, 0, 0} }; @@ -589,15 +593,6 @@ if (res->res_job.RestoreBootstrap) { sendit(sock, _(" --> Bootstrap=%s\n"), NPRT(res->res_job.RestoreBootstrap)); } - if (res->res_job.RunBeforeJob) { - sendit(sock, _(" --> RunBefore=%s\n"), NPRT(res->res_job.RunBeforeJob)); - } - if (res->res_job.RunAfterJob) { - sendit(sock, _(" --> RunAfter=%s\n"), NPRT(res->res_job.RunAfterJob)); - } - if (res->res_job.RunAfterFailedJob) { - sendit(sock, _(" --> RunAfterFailed=%s\n"), NPRT(res->res_job.RunAfterFailedJob)); - } if (res->res_job.WriteBootstrap) { sendit(sock, _(" --> WriteBootstrap=%s\n"), NPRT(res->res_job.WriteBootstrap)); } @@ -608,6 +603,18 @@ dump_resource(-R_STORAGE, (RES *)store, sendit, sock); } } + if (res->res_job.RunScripts) { + RUNSCRIPT *script; + foreach_alist(script, res->res_job.RunScripts) { + sendit(sock, _(" --> RunScript\n")); + sendit(sock, _(" --> Command=%s\n"), NPRT(script->command)); + sendit(sock, _(" --> Target=%s\n"), NPRT(script->target)); + sendit(sock, _(" --> RunOnSuccess=%u\n"), script->on_success); + sendit(sock, _(" --> RunOnFailure=%u\n"), script->on_failure); + sendit(sock, _(" --> AbortJobOnError=%u\n"), script->abort_on_error); + sendit(sock, _(" --> RunWhen=%u\n"), script->when); + } + } if (res->res_job.pool) { sendit(sock, _(" --> ")); dump_resource(-R_POOL, (RES *)res->res_job.pool, sendit, sock); @@ -1096,21 +1103,6 @@ if (res->res_job.WriteBootstrap) { free(res->res_job.WriteBootstrap); } - if (res->res_job.RunBeforeJob) { - free(res->res_job.RunBeforeJob); - } - if (res->res_job.RunAfterJob) { - free(res->res_job.RunAfterJob); - } - if (res->res_job.RunAfterFailedJob) { - free(res->res_job.RunAfterFailedJob); - } - if (res->res_job.ClientRunBeforeJob) { - free(res->res_job.ClientRunBeforeJob); - } - if (res->res_job.ClientRunAfterJob) { - free(res->res_job.ClientRunAfterJob); - } if (res->res_job.selection_pattern) { free(res->res_job.selection_pattern); } @@ -1120,6 +1112,10 @@ if (res->res_job.storage) { delete res->res_job.storage; } + if (res->res_job.RunScripts) { + free_runscripts(res->res_job.RunScripts); + delete res->res_job.RunScripts; + } break; case R_MSGS: if (res->res_msgs.mail_cmd) { @@ -1255,6 +1251,7 @@ res->res_job.verify_job = res_all.res_job.verify_job; res->res_job.jobdefs = res_all.res_job.jobdefs; res->res_job.run_cmds = res_all.res_job.run_cmds; + res->res_job.RunScripts = res_all.res_job.RunScripts; break; case R_COUNTER: if ((res = (URES *)GetResWithName(R_COUNTER, res_all.res_counter.hdr.name)) == NULL) { @@ -1544,3 +1541,194 @@ } set_bit(index, res_all.hdr.item_present); } + + +/* Store a runscript->when in a bit field */ +static void store_runscript_when(LEX *lc, RES_ITEM *item, int index, int pass) +{ + lex_get_token(lc, T_NAME); + + if (strcasecmp(lc->str, "before") == 0) { + *(int *)(item->value) = SCRIPT_Before ; + } else if (strcasecmp(lc->str, "after") == 0) { + *(int *)(item->value) = SCRIPT_After; + } else if (strcasecmp(lc->str, "always") == 0) { + *(int *)(item->value) = SCRIPT_Any; + } else { + scan_err2(lc, _("Expect %s, got: %s"), "Before, After or Always", lc->str); + } + scan_to_eol(lc); +} + +/* Store a runscript->target + * + */ +static void store_runscript_target(LEX *lc, RES_ITEM *item, int index, int pass) +{ + lex_get_token(lc, T_STRING); + + if (pass == 2) { + if (strcmp(lc->str, "%c") == 0) { + ((RUNSCRIPT*) item->value)->set_target(lc->str); + } else if (strcmp(lc->str, "yes") == 0) { + ((RUNSCRIPT*) item->value)->set_target("%c"); + } else if (strcmp(lc->str, "no") == 0) { + /* store nothing, run on director */ + } else { + RES *res = GetResWithName(R_CLIENT, lc->str); + if (res == NULL) { + scan_err3(lc, _("Could not find config Resource %s referenced on line %d : %s\n"), + lc->str, lc->line_no, lc->line); + } + + ((RUNSCRIPT*) item->value)->set_target(lc->str); + } + } + scan_to_eol(lc); +} + +/* Store a runscript->command in a bit field + * + */ +static void store_runscript_cmd(LEX *lc, RES_ITEM *item, int index, int pass) +{ + lex_get_token(lc, T_STRING); + + if (pass == 2) { + ((RUNSCRIPT*) item->value)->set_command(lc->str); + } + scan_to_eol(lc); +} + +static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) +{ + lex_get_token(lc, T_STRING); + alist **runscripts = (alist **)(item->value) ; + + if (pass == 2) { + RUNSCRIPT *script = new_runscript(); + + script->set_command(lc->str); + + if (strcmp(item->name, "runbeforejob") == 0) { + script->when = SCRIPT_Before; + script->abort_on_error = true; + + } else if (strcmp(item->name, "runafterjob") == 0) { + script->when = SCRIPT_After; + script->on_success = true; + script->on_failure = false; + + } else if (strcmp(item->name, "clientrunafterjob") == 0) { + script->when = SCRIPT_After; + script->set_target("%c"); + script->on_success = true; + script->on_failure = false; + + } else if (strcmp(item->name, "clientrunbeforejob") == 0) { + script->when = SCRIPT_Before; + script->set_target("%c"); + script->abort_on_error = true; + + } else if (strcmp(item->name, "runafterfailedjob") == 0) { + script->when = SCRIPT_After; + script->on_failure = true; + script->on_success = false; + } + + if (*runscripts == NULL) { + *runscripts = New(alist(10, not_owned_by_alist)); + } + + (*runscripts)->append(script); + script->debug(); + } + + scan_to_eol(lc); +} + +static RUNSCRIPT res_runscript; + +/* + * new RunScript items + * name handler value code flags default_value + */ +static RES_ITEM runscript_items[] = { + {"command", store_runscript_cmd, (char **)&res_runscript, 0, ITEM_REQUIRED, 0}, + {"target", store_runscript_target, (char **)&res_runscript, 0, 0, 0}, + {"runsonsuccess", store_bool, (char **)&res_runscript.on_success, 0, 0, 0}, + {"runsonfailure", store_bool, (char **)&res_runscript.on_failure, 0, 0, 0}, + {"abortjobonerror", store_bool, (char **)&res_runscript.abort_on_error, 0, 0, 0}, + {"runswhen", store_runscript_when, (char **)&res_runscript.when, 0, 0, 0}, + {"runsonclient", store_runscript_target, (char **)&res_runscript, 0, 0, 0}, /* TODO */ + + {NULL, NULL, NULL, 0, 0, 0} +}; + +/* + * Store RunScript info + * + * Note, when this routine is called, we are inside a Job + * resource. We treat the RunScript like a sort of + * mini-resource within the Job resource. + */ +static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass) +{ + int token, i; + alist **runscripts = (alist **)(item->value) ; + + Dmsg1(200, "store_runscript: begin store_runscript pass=%i\n", pass); + + res_runscript.reset_default(); /* setting on_success, on_failure, abort_on_error */ + + token = lex_get_token(lc, T_SKIP_EOL); + + if (token != T_BOB) { + scan_err1(lc, _("Expecting open brace. Got %s"), lc->str); + } + + while ((token = lex_get_token(lc, T_SKIP_EOL)) != T_EOF) { + if (token == T_EOB) { + break; + } + if (token != T_IDENTIFIER) { + scan_err1(lc, _("Expecting keyword, got: %s\n"), lc->str); + } + for (i=0; runscript_items[i].name; i++) { + if (strcasecmp(runscript_items[i].name, lc->str) == 0) { + token = lex_get_token(lc, T_SKIP_EOL); + if (token != T_EQUALS) { + scan_err1(lc, _("expected an equals, got: %s"), lc->str); + } + + /* Call item handler */ + runscript_items[i].handler(lc, &runscript_items[i], i, pass); + i = -1; + break; + } + } + + if (i >=0) { + scan_err1(lc, _("Keyword %s not permitted in this resource"), lc->str); + } + } + + if (pass == 2) { + if (res_runscript.command == NULL) { + scan_err2(lc, _("%s item is required in %s resource, but not found.\n"), + "command", "runscript"); + } + RUNSCRIPT *script = new_runscript(); + memcpy(script, &res_runscript, sizeof(RUNSCRIPT)); + + if (*runscripts == NULL) { + *runscripts = New(alist(10, not_owned_by_alist)); + } + + (*runscripts)->append(script); + script->debug(); + } + + scan_to_eol(lc); + set_bit(index, res_all.hdr.item_present); +} Index: dird.h =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/dird.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- dird.h 22 Mar 2005 10:45:58 -0000 1.9 +++ dird.h 27 May 2006 09:35:37 -0000 1.10 @@ -37,6 +37,7 @@ #include "protos.h" #include "jobq.h" +#include "lib/runscript.h" /* Globals that dird.c exports */ extern DIRRES *director; /* Director resource */ Index: fd_cmds.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/fd_cmds.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -d -r1.83 -r1.84 --- fd_cmds.c 28 Apr 2006 13:19:33 -0000 1.83 +++ fd_cmds.c 27 May 2006 09:35:37 -0000 1.84 @@ -36,16 +36,15 @@ static char jobcmd[] = "JobId=%s Job=%s SDid=%u SDtime=%u Authorization=%s\n"; /* Note, mtime_only is not used here -- implemented as file option */ static char levelcmd[] = "level = %s%s mtime_only=%d\n"; -static char runbefore[] = "RunBeforeJob %s\n"; -static char runafter[] = "RunAfterJob %s\n"; - +static char runscript[] = "Run OnSuccess=%u OnFailure=%u AbortOnError=%u When=%u Command=%s\n"; +static char runbeforenow[]= "RunBeforeNow\n"; /* Responses received from File daemon */ -static char OKinc[] = "2000 OK include\n"; -static char OKjob[] = "2000 OK Job"; -static char OKlevel[] = "2000 OK level\n"; -static char OKRunBefore[] = "2000 OK RunBefore\n"; -static char OKRunAfter[] = "2000 OK RunAfter\n"; +static char OKinc[] = "2000 OK include\n"; +static char OKjob[] = "2000 OK Job"; +static char OKlevel[] = "2000 OK level\n"; +static char OKRunScript[] = "2000 OK RunScript\n"; +static char OKRunBeforeNow[] = "2000 OK RunBeforeNow\n"; /* Forward referenced functions */ @@ -458,33 +457,64 @@ } /* - * Send ClientRunBeforeJob and ClientRunAfterJob to File daemon + * Send RunScripts to File daemon */ -int send_run_before_and_after_commands(JCR *jcr) +int send_runscripts_commands(JCR *jcr) { POOLMEM *msg = get_pool_memory(PM_FNAME); BSOCK *fd = jcr->file_bsock; - if (jcr->job->ClientRunBeforeJob) { - pm_strcpy(msg, jcr->job->ClientRunBeforeJob); - bash_spaces(msg); - bnet_fsend(fd, runbefore, msg); - if (!response(jcr, fd, OKRunBefore, "ClientRunBeforeJob", DISPLAY_ERROR)) { - set_jcr_job_status(jcr, JS_ErrorTerminated); - free_pool_memory(msg); - return 0; - } + RUNSCRIPT *cmd; + bool launch_before_cmd = false; + POOLMEM *ehost = get_pool_memory(PM_FNAME); + + Dmsg0(120, "bdird: sending runscripts to fd\n"); + + foreach_alist(cmd, jcr->job->RunScripts) { + + if (cmd->can_run_at_level(jcr->JobLevel) && cmd->target) { + + ehost = edit_job_codes(jcr, ehost, cmd->target, ""); + Dmsg2(200, "bdird: runscript %s -> %s\n", cmd->target, ehost); + + if (strcmp(ehost, jcr->client->hdr.name) == 0) { + pm_strcpy(msg, cmd->command); + bash_spaces(msg); + bnet_fsend(fd, runscript, cmd->on_success, + cmd->on_failure, + cmd->abort_on_error, + cmd->when, + msg); + + Dmsg1(120, "bdird: sending runscripts to fd '%s'\n", cmd->command); + + if (!response(jcr, fd, OKRunScript, "RunScript", DISPLAY_ERROR)) { + set_jcr_job_status(jcr, JS_ErrorTerminated); + free_pool_memory(msg); + free_pool_memory(ehost); + return 0; + } + launch_before_cmd=true; + } + /* + else { + send command to an other client + } + */ + } } - if (jcr->job->ClientRunAfterJob) { - fd->msglen = pm_strcpy(msg, jcr->job->ClientRunAfterJob); - bash_spaces(msg); - bnet_fsend(fd, runafter, msg); - if (!response(jcr, fd, OKRunAfter, "ClientRunAfterJob", DISPLAY_ERROR)) { - set_jcr_job_status(jcr, JS_ErrorTerminated); - free_pool_memory(msg); - return 0; + + /* TODO : we have to play with other client */ + if (launch_before_cmd) { + bnet_fsend(fd, runbeforenow); + if (!response(jcr, fd, OKRunBeforeNow, "RunBeforeNow", DISPLAY_ERROR)) { + set_jcr_job_status(jcr, JS_ErrorTerminated); + free_pool_memory(msg); + free_pool_memory(ehost); + return 0; } } free_pool_memory(msg); + free_pool_memory(ehost); return 1; } Index: job.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/job.c,v retrieving revision 1.127 retrieving revision 1.128 diff -u -d -r1.127 -r1.128 --- job.c 28 Apr 2006 13:19:33 -0000 1.127 +++ job.c 27 May 2006 09:35:37 -0000 1.128 @@ -184,6 +184,13 @@ set_jcr_job_status(jcr, JS_Canceled); } + /* TODO : check if it is used somewhere */ + if (jcr->job->RunScripts == NULL) + { + Dmsg0(200, "Warning, job->RunScripts is empty\n"); + jcr->job->RunScripts = New(alist(10, not_owned_by_alist)); + } + /* * Note, we continue, even if the job is canceled above. This * will permit proper setting of the job start record and @@ -243,28 +250,9 @@ } else { - /* Run Job */ - if (jcr->job->RunBeforeJob) { - POOLMEM *before = get_pool_memory(PM_FNAME); - int status; - BPIPE *bpipe; - char line[MAXSTRING]; + /* Run any script BeforeJob on dird */ + run_scripts(jcr, jcr->job->RunScripts, "BeforeJob"); - before = edit_job_codes(jcr, before, jcr->job->RunBeforeJob, ""); - bpipe = open_bpipe(before, 0, "r"); - free_pool_memory(before); - while (fgets(line, sizeof(line), bpipe->rfd)) { - Jmsg(jcr, M_INFO, 0, _("RunBefore: %s"), line); - } - status = close_bpipe(bpipe); - if (status != 0) { - berrno be; - Jmsg(jcr, M_FATAL, 0, _("RunBeforeJob error: ERR=%s\n"), be.strerror(status)); - set_jcr_job_status(jcr, JS_FatalError); - update_job_end_record(jcr); - goto bail_out; - } - } /* * We re-update the job start record so that the start * time is set after the run before job. This avoids @@ -324,37 +312,9 @@ Pmsg1(0, _("Unimplemented job type: %d\n"), jcr->JobType); break; } - if ((jcr->job->RunAfterJob && jcr->JobStatus == JS_Terminated) || - (jcr->job->RunAfterFailedJob && jcr->JobStatus != JS_Terminated)) { - POOLMEM *after = get_pool_memory(PM_FNAME); - int status; - BPIPE *bpipe; - char line[MAXSTRING]; - if (jcr->JobStatus == JS_Terminated) { - after = edit_job_codes(jcr, after, jcr->job->RunAfterJob, ""); - } else { - after = edit_job_codes(jcr, after, jcr->job->RunAfterFailedJob, ""); - } - bpipe = open_bpipe(after, 0, "r"); - free_pool_memory(after); - while (fgets(line, sizeof(line), bpipe->rfd)) { - Jmsg(jcr, M_INFO, 0, _("RunAfter: %s"), line); - } - status = close_bpipe(bpipe); - /* - * Note, if we get an error here, do not mark the - * job in error, simply report the error condition. - */ - if (status != 0) { - berrno be; - if (jcr->JobStatus == JS_Terminated) { - Jmsg(jcr, M_WARNING, 0, _("RunAfterJob error: ERR=%s\n"), be.strerror(status)); - } else { - Jmsg(jcr, M_FATAL, 0, _("RunAfterFailedJob error: ERR=%s\n"), be.strerror(status)); - } - } - } + run_scripts(jcr, jcr->job->RunScripts, "AfterJob"); + /* Send off any queued messages */ if (jcr->msg_queue->size() > 0) { dequeue_messages(jcr); Index: protos.h =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/protos.h,v retrieving revision 1.85 retrieving revision 1.86 diff -u -d -r1.85 -r1.86 --- protos.h 17 Mar 2006 17:42:43 -0000 1.85 +++ protos.h 27 May 2006 09:35:37 -0000 1.86 @@ -79,7 +79,7 @@ extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, char *link, char *attr, int stream); extern void get_level_since_time(JCR *jcr, char *since, int since_len); -extern int send_run_before_and_after_commands(JCR *jcr); +extern int send_runscripts_commands(JCR *jcr); /* getmsg.c */ enum e_prtmsg { Index: restore.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/restore.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- restore.c 26 May 2006 21:02:29 -0000 1.60 +++ restore.c 27 May 2006 09:35:37 -0000 1.61 @@ -149,7 +149,7 @@ } - if (!send_run_before_and_after_commands(jcr)) { + if (!send_runscripts_commands(jcr)) { restore_cleanup(jcr, JS_ErrorTerminated); return false; } |