]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/fd_cmds.c
Minor tweaks to Migration
[bacula/bacula] / bacula / src / dird / fd_cmds.c
index febd1873d82c44b4dfb6ccd09ae672327e9046f5..31a9775e7f835994912c03f85c076bb98c912902 100644 (file)
@@ -49,7 +49,6 @@ static char OKRunBeforeNow[] = "2000 OK RunBeforeNow\n";
 /* Forward referenced functions */
 
 /* External functions */
-extern int debug_level;
 extern DIRRES *director;
 extern int FDConnectTimeout;
 
@@ -161,14 +160,14 @@ void get_level_since_time(JCR *jcr, char *since, int since_len)
       if (!db_find_job_start_time(jcr, jcr->db, &jcr->jr, &jcr->stime)) {
          /* No job found, so upgrade this one to Full */
          Jmsg(jcr, M_INFO, 0, "%s", db_strerror(jcr->db));
-         Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found. Doing FULL backup.\n"));
+         Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found in catalog. Doing FULL backup.\n"));
          bsnprintf(since, since_len, _(" (upgraded from %s)"),
             level_to_str(jcr->JobLevel));
          jcr->JobLevel = jcr->jr.JobLevel = L_FULL;
       } else {
          if (jcr->job->rerun_failed_levels) {
             if (db_find_failed_job_since(jcr, jcr->db, &jcr->jr, jcr->stime, JobLevel)) {
-               Jmsg(jcr, M_INFO, 0, _("Prior failed job found. Upgrading to %s.\n"),
+               Jmsg(jcr, M_INFO, 0, _("Prior failed job found in catalog. Upgrading to %s.\n"),
                   level_to_str(JobLevel));
                bsnprintf(since, since_len, _(" (upgraded from %s)"),
                   level_to_str(jcr->JobLevel));
@@ -275,6 +274,15 @@ static bool send_fileset(JCR *jcr)
          for (j=0; j<ie->num_opts; j++) {
             FOPTS *fo = ie->opts_list[j];
             bnet_fsend(fd, "O %s\n", fo->opts);
+
+            bool enhanced_wild = false;
+            for (k=0; fo->opts[k]!='\0'; k++) {
+               if (fo->opts[k]=='W') {
+                  enhanced_wild = true;
+                  break;
+               }
+            }
+
             for (k=0; k<fo->regex.size(); k++) {
                bnet_fsend(fd, "R %s\n", fo->regex.get(k));
             }
@@ -293,12 +301,18 @@ static bool send_fileset(JCR *jcr)
             for (k=0; k<fo->wildfile.size(); k++) {
                bnet_fsend(fd, "WF %s\n", fo->wildfile.get(k));
             }
+            for (k=0; k<fo->wildbase.size(); k++) {
+               bnet_fsend(fd, "W%c %s\n", enhanced_wild ? 'B' : 'F', fo->wildbase.get(k));
+            }
             for (k=0; k<fo->base.size(); k++) {
                bnet_fsend(fd, "B %s\n", fo->base.get(k));
             }
             for (k=0; k<fo->fstype.size(); k++) {
                bnet_fsend(fd, "X %s\n", fo->fstype.get(k));
             }
+            for (k=0; k<fo->drivetype.size(); k++) {
+               bnet_fsend(fd, "XD %s\n", fo->drivetype.get(k));
+            }
             if (fo->reader) {
                bnet_fsend(fd, "D %s\n", fo->reader);
             }
@@ -341,7 +355,7 @@ static bool send_fileset(JCR *jcr)
                break;
             case '<':
                p++;                      /* skip over < */
-               if ((ffd = fopen(p, "r")) == NULL) {
+               if ((ffd = fopen(p, "rb")) == NULL) {
                   berrno be;
                   Jmsg(jcr, M_FATAL, 0, _("Cannot open included file: %s. ERR=%s\n"),
                      p, be.strerror());
@@ -435,7 +449,7 @@ bool send_bootstrap_file(JCR *jcr, BSOCK *sock)
    if (!jcr->RestoreBootstrap) {
       return true;
    }
-   bs = fopen(jcr->RestoreBootstrap, "r");
+   bs = fopen(jcr->RestoreBootstrap, "rb");
    if (!bs) {
       berrno be;
       Jmsg(jcr, M_FATAL, 0, _("Could not open bootstrap file %s: ERR=%s\n"),
@@ -456,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
  */
@@ -466,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");
    
@@ -479,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 {