From 7aa8edb1de31c4dc44122397248ea1faa9bb002b Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Thu, 27 Jul 2006 19:45:18 +0000 Subject: [PATCH] o add fix to get fd-1.3X work with new dir-1.4X runscript feature git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3194 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/dird/dird_conf.c | 4 ++++ bacula/src/dird/fd_cmds.c | 46 ++++++++++++++++++++++++++++++------- bacula/src/lib/runscript.c | 3 ++- bacula/src/lib/runscript.h | 2 ++ 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/bacula/src/dird/dird_conf.c b/bacula/src/dird/dird_conf.c index 59cb3873c3..c26b1a7fcf 100644 --- a/bacula/src/dird/dird_conf.c +++ b/bacula/src/dird/dird_conf.c @@ -1632,6 +1632,8 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) script->set_command(lc->str); + /* TODO: remove all script->old_proto with bacula 1.42 */ + if (strcmp(item->name, "runbeforejob") == 0) { script->when = SCRIPT_Before; script->abort_on_error = true; @@ -1642,12 +1644,14 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass) script->on_failure = false; } else if (strcmp(item->name, "clientrunafterjob") == 0) { + script->old_proto = true; script->when = SCRIPT_After; script->set_target("%c"); script->on_success = true; script->on_failure = false; } else if (strcmp(item->name, "clientrunbeforejob") == 0) { + script->old_proto = true; script->when = SCRIPT_Before; script->set_target("%c"); script->abort_on_error = true; diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 566428ee68..31a9775e7f 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -470,6 +470,26 @@ bool send_bootstrap_file(JCR *jcr, BSOCK *sock) return true; } +/* TODO: drop this with runscript.old_proto in bacula 1.42 */ +static char runbefore[] = "RunBeforeJob %s\n"; +static char runafter[] = "RunAfterJob %s\n"; +static char OKRunBefore[] = "2000 OK RunBefore\n"; +static char OKRunAfter[] = "2000 OK RunAfter\n"; + +int send_runscript_with_old_proto(JCR *jcr, int when, POOLMEM *msg) +{ + int ret; + Dmsg1(120, "bdird: sending old runcommand to fd '%s'\n",msg); + if (when & SCRIPT_Before) { + bnet_fsend(jcr->file_bsock, runbefore, msg); + ret = response(jcr, jcr->file_bsock, OKRunBefore, "ClientRunBeforeJob", DISPLAY_ERROR); + } else { + bnet_fsend(jcr->file_bsock, runafter, msg); + ret = response(jcr, jcr->file_bsock, OKRunAfter, "ClientRunAfterJob", DISPLAY_ERROR); + } + return ret; +} /* END OF TODO */ + /* * Send RunScripts to File daemon */ @@ -480,6 +500,7 @@ int send_runscripts_commands(JCR *jcr) RUNSCRIPT *cmd; bool launch_before_cmd = false; POOLMEM *ehost = get_pool_memory(PM_FNAME); + int result; Dmsg0(120, "bdird: sending runscripts to fd\n"); @@ -493,21 +514,30 @@ int send_runscripts_commands(JCR *jcr) 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)) { + + /* TODO: remove this with bacula 1.42 */ + if (cmd->old_proto) { + result = send_runscript_with_old_proto(jcr, cmd->when, msg); + + } else { + bnet_fsend(fd, runscript, cmd->on_success, + cmd->on_failure, + cmd->abort_on_error, + cmd->when, + msg); + + result = response(jcr, fd, OKRunScript, "RunScript", DISPLAY_ERROR); + launch_before_cmd=true; + } + + if (!result) { set_jcr_job_status(jcr, JS_ErrorTerminated); free_pool_memory(msg); free_pool_memory(ehost); return 0; } - launch_before_cmd=true; } /* else { diff --git a/bacula/src/lib/runscript.c b/bacula/src/lib/runscript.c index 4b851ed576..aeb99c4e8e 100644 --- a/bacula/src/lib/runscript.c +++ b/bacula/src/lib/runscript.c @@ -52,6 +52,7 @@ void RUNSCRIPT::reset_default(bool free_strings) on_failure = false; abort_on_error = true; when = SCRIPT_Never; + old_proto = false; /* TODO: drop this with bacula 1.42 */ } RUNSCRIPT *copy_runscript(RUNSCRIPT *src) @@ -120,7 +121,7 @@ int run_scripts(JCR *jcr, alist *runscripts, const char *label) script->on_success, script->on_failure, jcr->JobStatus ); - runit = true; + runit = true; } } diff --git a/bacula/src/lib/runscript.h b/bacula/src/lib/runscript.h index f6b2ed99a3..69fce04187 100644 --- a/bacula/src/lib/runscript.h +++ b/bacula/src/lib/runscript.h @@ -58,6 +58,8 @@ public: bool on_failure; /* executre command on job failure (After) */ bool abort_on_error; /* abort job on error (Before) */ int when; /* SCRIPT_Before|Script_After BEFORE/AFTER JOB*/ + /* TODO : drop this with bacula 1.42 */ + bool old_proto; /* used by old 1.3X protocol */ int run(JCR *job, const char *name=""); bool can_run_at_level(int JobLevel) { return true;}; /* TODO */ -- 2.39.5