]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird_conf.c
Minor runscript tweaks
[bacula/bacula] / bacula / src / dird / dird_conf.c
index 43fe648a4e4440eefe1263dda002ccb810df583a..6f0f63d99c89e06a2d23216d02a87382fbce9776 100644 (file)
@@ -7,8 +7,8 @@
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
    modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -121,6 +121,7 @@ static RES_ITEM dir_items[] = {
    {"password",    store_password, ITEM(res_dir.password), 0, ITEM_REQUIRED, 0},
    {"fdconnecttimeout", store_time,ITEM(res_dir.FDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30},
    {"sdconnecttimeout", store_time,ITEM(res_dir.SDConnectTimeout), 0, ITEM_DEFAULT, 60 * 30},
+   {"heartbeatinterval", store_time, ITEM(res_dir.heartbeat_interval), 0, ITEM_DEFAULT, 0},
    {"tlsenable",            store_bool,      ITEM(res_dir.tls_enable), 0, 0, 0},
    {"tlsrequire",           store_bool,      ITEM(res_dir.tls_require), 0, 0, 0},
    {"tlsverifypeer",        store_bool,      ITEM(res_dir.tls_verify_peer), 0, ITEM_DEFAULT, true},
@@ -182,6 +183,7 @@ static RES_ITEM cli_items[] = {
    {"catalog",  store_res,        ITEM(res_client.catalog),  R_CATALOG, ITEM_REQUIRED, 0},
    {"fileretention", store_time,  ITEM(res_client.FileRetention), 0, ITEM_DEFAULT, 60*60*24*60},
    {"jobretention",  store_time,  ITEM(res_client.JobRetention),  0, ITEM_DEFAULT, 60*60*24*180},
+   {"heartbeatinterval", store_time, ITEM(res_client.heartbeat_interval), 0, ITEM_DEFAULT, 0},
    {"autoprune", store_bool,      ITEM(res_client.AutoPrune), 0, ITEM_DEFAULT, true},
    {"maximumconcurrentjobs", store_pint, ITEM(res_client.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1},
    {"tlsenable",            store_bool,      ITEM(res_client.tls_enable), 0, 0, 0},
@@ -210,6 +212,7 @@ static RES_ITEM store_items[] = {
    {"mediatype",   store_strname,  ITEM(res_store.media_type), 0, ITEM_REQUIRED, 0},
    {"autochanger", store_bool,     ITEM(res_store.autochanger), 0, ITEM_DEFAULT, 0},
    {"enabled",     store_bool,     ITEM(res_store.enabled),     0, ITEM_DEFAULT, true},
+   {"heartbeatinterval", store_time, ITEM(res_store.heartbeat_interval), 0, ITEM_DEFAULT, 0},
    {"maximumconcurrentjobs", store_pint, ITEM(res_store.MaxConcurrentJobs), 0, ITEM_DEFAULT, 1},
    {"sddport", store_pint, ITEM(res_store.SDDport), 0, 0, 0}, /* deprecated */
    {"tlsenable",            store_bool,      ITEM(res_store.tls_enable), 0, 0, 0},
@@ -268,7 +271,7 @@ RES_ITEM job_items[] = {
    {"run",       store_alist_str, ITEM(res_job.run_cmds), 0, 0, 0},
    /* Root of where to restore files */
    {"where",    store_dir,      ITEM(res_job.RestoreWhere), 0, 0, 0},
-   {"whereuseregexp", store_bool, ITEM(res_job.where_use_regexp), 0, 0, 0},
+   {"regexwhere",    store_str,   ITEM(res_job.RegexWhere), 0, 0, 0},
    {"stripprefix",    store_str,  ITEM(res_job.strip_prefix), 0, 0, 0},
    {"addprefix",    store_str,  ITEM(res_job.add_prefix), 0, 0, 0},
    {"addsuffix",    store_str,  ITEM(res_job.add_suffix), 0, 0, 0},
@@ -612,11 +615,11 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
          sendit(sock, _("  --> "));
          dump_resource(-R_SCHEDULE, (RES *)res->res_job.schedule, sendit, sock);
       }
-      if (res->res_job.RestoreWhere) {
-         sendit(sock, _("  --> Where=%s\n"), NPRT(res->res_job.RestoreWhere));
+      if (res->res_job.RestoreWhere && !res->res_job.RegexWhere) {
+           sendit(sock, _("  --> Where=%s\n"), NPRT(res->res_job.RestoreWhere));
       }
-      if (res->res_job.where_use_regexp) {
-         sendit(sock, _("  --> RWhere=%u\n"), res->res_job.where_use_regexp);
+      if (res->res_job.RegexWhere) {
+           sendit(sock, _("  --> RegexWhere=%s\n"), NPRT(res->res_job.RegexWhere));
       }
       if (res->res_job.RestoreBootstrap) {
          sendit(sock, _("  --> Bootstrap=%s\n"), NPRT(res->res_job.RestoreBootstrap));
@@ -639,7 +642,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
            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, _("  --> FailJobOnError=%u\n"),  script->fail_on_error);
            sendit(sock, _("  --> RunWhen=%u\n"),  script->when);
         }
       }
@@ -1150,6 +1153,9 @@ void free_resource(RES *sres, int type)
       if (res->res_job.RestoreWhere) {
          free(res->res_job.RestoreWhere);
       }
+      if (res->res_job.RegexWhere) {
+         free(res->res_job.RegexWhere);
+      }
       if (res->res_job.strip_prefix) {
          free(res->res_job.strip_prefix);
       }
@@ -1315,25 +1321,36 @@ void save_resource(int type, RES_ITEM *items, int pass)
          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;
-        if (res->res_job.strip_prefix ||
-            res->res_job.add_suffix   ||
-            res->res_job.add_prefix)
-        {
-           if (res->res_job.RestoreWhere) {
-              free(res->res_job.RestoreWhere);
-           }
-           int len = bregexp_get_build_where_size(res->res_job.strip_prefix,
-                                                  res->res_job.add_prefix,
-                                                  res->res_job.add_suffix);
-           res->res_job.RestoreWhere = (char *) bmalloc (len * sizeof(char));
-           bregexp_build_where(res->res_job.RestoreWhere, len,
-                               res->res_job.strip_prefix,
-                               res->res_job.add_prefix,
-                               res->res_job.add_suffix);
-           res->res_job.where_use_regexp = true;
-
-           /* TODO: test bregexp */
-        }
+
+         /* TODO: JobDefs where/regexwhere doesn't work well (but this
+          * is not very useful) 
+          * We have to set_bit(index, res_all.hdr.item_present);
+          * or something like that
+          */
+
+         /* we take RegexWhere before all other options */
+         if (!res->res_job.RegexWhere 
+             &&
+             (res->res_job.strip_prefix ||
+              res->res_job.add_suffix   ||
+              res->res_job.add_prefix))
+         {
+            int len = bregexp_get_build_where_size(res->res_job.strip_prefix,
+                                                   res->res_job.add_prefix,
+                                                   res->res_job.add_suffix);
+            res->res_job.RegexWhere = (char *) bmalloc (len * sizeof(char));
+            bregexp_build_where(res->res_job.RegexWhere, len,
+                                res->res_job.strip_prefix,
+                                res->res_job.add_prefix,
+                                res->res_job.add_suffix);
+            /* TODO: test bregexp */
+         }
+
+         if (res->res_job.RegexWhere && res->res_job.RestoreWhere) {
+            free(res->res_job.RestoreWhere);
+            res->res_job.RestoreWhere = NULL;
+         }
+
          break;
       case R_COUNTER:
          if ((res = (URES *)GetResWithName(R_COUNTER, res_all.res_counter.hdr.name)) == NULL) {
@@ -1700,7 +1717,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
 
       if (strcmp(item->name, "runbeforejob") == 0) {
          script->when = SCRIPT_Before;
-         script->abort_on_error = true;
+         script->fail_on_error = true;
          script->set_target("");
 
       } else if (strcmp(item->name, "runafterjob") == 0) {
@@ -1720,7 +1737,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
          script->old_proto = true;
          script->when = SCRIPT_Before;
          script->set_target("%c");
-         script->abort_on_error = true;
+         script->fail_on_error = true;
 
       } else if (strcmp(item->name, "runafterfailedjob") == 0) {
          script->when = SCRIPT_After;
@@ -1765,7 +1782,8 @@ static RES_ITEM runscript_items[] = {
  {"target",         store_runscript_target,{(char **)&res_runscript},          0,  0, 0}, 
  {"runsonsuccess",  store_runscript_bool, {(char **)&res_runscript.on_success},0,  0, 0},
  {"runsonfailure",  store_runscript_bool, {(char **)&res_runscript.on_failure},0,  0, 0},
- {"abortjobonerror",store_runscript_bool, {(char **)&res_runscript.abort_on_error},0, 0, 0},
+ {"failjobonerror",store_runscript_bool, {(char **)&res_runscript.fail_on_error},0, 0, 0},
+ {"abortjobonerror",store_runscript_bool, {(char **)&res_runscript.fail_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, {0}, 0, 0, 0}
@@ -1785,7 +1803,7 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
 
    Dmsg1(200, "store_runscript: begin store_runscript pass=%i\n", pass);
 
-   res_runscript.reset_default();      /* setting on_success, on_failure, abort_on_error */
+   res_runscript.reset_default();      /* setting on_success, on_failure, fail_on_error */
    
    token = lex_get_token(lc, T_SKIP_EOL);