]> git.sur5r.net Git - bacula/bacula/commitdiff
o add fix to get fd-1.3X work with new dir-1.4X runscript feature
authorEric Bollengier <eric@eb.homelinux.org>
Thu, 27 Jul 2006 19:45:18 +0000 (19:45 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 27 Jul 2006 19:45:18 +0000 (19:45 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3194 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/dird/dird_conf.c
bacula/src/dird/fd_cmds.c
bacula/src/lib/runscript.c
bacula/src/lib/runscript.h

index 59cb3873c3926b1af0c719ae2ff77d092912b305..c26b1a7fcf707a09a14c5221c3d626e8907ed9c1 100644 (file)
@@ -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;
index 566428ee680b516d28ef50b57a7866d29302bcbd..31a9775e7f835994912c03f85c076bb98c912902 100644 (file)
@@ -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 {
index 4b851ed5767e7252e8a73c308f3c9eea6225ab26..aeb99c4e8ef7ec416b77f7136970ada885b9f847 100644 (file)
@@ -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;
         }
       }
 
index f6b2ed99a3d520ef894d9d77dde2c0d6bd3fa73c..69fce04187d6fe9badca9888f1a474ba3776b07c 100644 (file)
@@ -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 */