+ if (jcr->unlink_bsr) {
+ unlink(jcr->RestoreBootstrap);
+ jcr->unlink_bsr = false;
+ }
+ 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
+ * 1) We send all runscript to FD, they can be executed Before, After, or twice
+ * 2) Then, we send a "RunBeforeNow" command to the FD to tell him to do the
+ * first run_script() call. (ie ClientRunBeforeJob)
+ */
+int send_runscripts_commands(JCR *jcr)
+{
+ POOLMEM *msg = get_pool_memory(PM_FNAME);
+ BSOCK *fd = jcr->file_bsock;
+ RUNSCRIPT *cmd;
+ bool launch_before_cmd = false;
+ POOLMEM *ehost = get_pool_memory(PM_FNAME);
+ int result;
+
+ 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->name()) == 0) {
+ pm_strcpy(msg, cmd->command);
+ bash_spaces(msg);
+
+ Dmsg1(120, "bdird: sending runscripts to fd '%s'\n", cmd->command);
+
+ /* TODO: remove this with bacula 1.42 */
+ if (cmd->old_proto) {
+ result = send_runscript_with_old_proto(jcr, cmd->when, msg);
+
+ } else {
+ fd->fsend(runscript, cmd->on_success,
+ cmd->on_failure,
+ cmd->fail_on_error,
+ cmd->when,
+ msg);
+
+ result = response(jcr, fd, OKRunScript, "RunScript", DISPLAY_ERROR);
+ launch_before_cmd = true;
+ }
+
+ if (!result) {
+ goto bail_out;
+ }
+ }
+ /* TODO : we have to play with other client */
+ /*
+ else {
+ send command to an other client
+ }
+ */
+ }
+ }
+
+ /* Tell the FD to execute the ClientRunBeforeJob */
+ if (launch_before_cmd) {
+ fd->fsend(runbeforenow);
+ if (!response(jcr, fd, OKRunBeforeNow, "RunBeforeNow", DISPLAY_ERROR)) {
+ goto bail_out;
+ }