]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix bug #1211 crash during reload with bad dird.conf file.
authorKern Sibbald <kern@sibbald.com>
Thu, 22 Jan 2009 14:41:02 +0000 (14:41 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 22 Jan 2009 14:41:02 +0000 (14:41 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8395 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/patches/2.4.4-bat-install.patch [new file with mode: 0644]
bacula/patches/2.4.4-reload.patch [new file with mode: 0644]
bacula/src/lib/parse_conf.c
bacula/src/version.h
bacula/technotes-2.5

diff --git a/bacula/patches/2.4.4-bat-install.patch b/bacula/patches/2.4.4-bat-install.patch
new file mode 100644 (file)
index 0000000..a3e95fa
--- /dev/null
@@ -0,0 +1,29 @@
+
+ This patch fixes bat.pro.in so that bat will install correctly.
+
+ Apply it to version 2.4.4 with:
+
+ cd <bacula-source>
+ patch -p0 <2.4.4-bat-install.patch
+ ./configure <your options>
+ make
+ ...
+ make install
+
+
+Index: src/qt-console/bat.pro.in
+===================================================================
+--- src/qt-console/bat.pro.in  (revision 8326)
++++ src/qt-console/bat.pro.in  (working copy)
+@@ -9,9 +9,9 @@
+ #    
+ CONFIG += qt debug @QWT@
+-bins.path = /$(DESTDIR)@sbindir@
++bins.path = $(DESTDIR)@sbindir@
+ bins.files = ./bat
+-confs.path = /$(DESTDIR)@sysconfdir@
++confs.path = $(DESTDIR)@sysconfdir@
+ confs.commands = ./install_conf_file   
+ TEMPLATE     = app
diff --git a/bacula/patches/2.4.4-reload.patch b/bacula/patches/2.4.4-reload.patch
new file mode 100644 (file)
index 0000000..72a6867
--- /dev/null
@@ -0,0 +1,152 @@
+Index: src/lib/parse_conf.c
+===================================================================
+--- src/lib/parse_conf.c       (revision 8393)
++++ src/lib/parse_conf.c       (working copy)
+@@ -284,6 +284,7 @@
+             }
+             if (token != T_EQUALS) {
+                scan_err1(lc, _("expected an =, got: %s"), lc->str);
++               return;
+             }
+             break;
+          }
+@@ -304,6 +305,7 @@
+          Dmsg1(900, "store_msgs dest=%s:\n", NPRT(dest));
+          if (token != T_EQUALS) {
+             scan_err1(lc, _("expected an =, got: %s"), lc->str);
++            return;
+          }
+          scan_types(lc, (MSGS *)(item->value), item->code, dest, NULL);
+          free_pool_memory(dest);
+@@ -312,7 +314,7 @@
+       default:
+          scan_err1(lc, _("Unknown item code: %d\n"), item->code);
+-         break;
++         return;
+       }
+    }
+    scan_to_eol(lc);
+@@ -352,7 +354,7 @@
+       }
+       if (!found) {
+          scan_err1(lc, _("message type: %s not found"), str);
+-         /* NOT REACHED */
++         return;
+       }
+       if (msg_type == M_MAX+1) {         /* all? */
+@@ -384,12 +386,14 @@
+    lex_get_token(lc, T_NAME);
+    if (!is_name_valid(lc->str, &msg)) {
+       scan_err1(lc, "%s\n", msg);
++      return;
+    }
+    free_pool_memory(msg);
+    /* Store the name both pass 1 and pass 2 */
+    if (*(item->value)) {
+       scan_err2(lc, _("Attempt to redefine name \"%s\" to \"%s\"."),
+          *(item->value), lc->str);
++      return;
+    }
+    *(item->value) = bstrdup(lc->str);
+    scan_to_eol(lc);
+@@ -481,10 +485,12 @@
+       if (res == NULL) {
+          scan_err3(lc, _("Could not find config Resource %s referenced on line %d : %s\n"),
+             lc->str, lc->line_no, lc->line);
++         return;
+       }
+       if (*(item->value)) {
+          scan_err3(lc, _("Attempt to redefine resource \"%s\" referenced on line %d : %s\n"),
+             item->name, lc->line_no, lc->line);
++         return;
+       }
+       *(item->value) = (char *)res;
+    }
+@@ -520,6 +526,7 @@
+          if (i >= count) {
+             scan_err4(lc, _("Too many %s directives. Max. is %d. line %d: %s\n"),
+                lc->str, count, lc->line_no, lc->line);
++            return;
+          }
+          list = New(alist(10, not_owned_by_alist));
+       }
+@@ -530,6 +537,7 @@
+          if (res == NULL) {
+             scan_err3(lc, _("Could not find config Resource \"%s\" referenced on line %d : %s\n"),
+                item->name, lc->line_no, lc->line);
++            return;
+          }
+          Dmsg5(900, "Append %p to alist %p size=%d i=%d %s\n", 
+                res, list, list->size(), i, item->name);
+@@ -592,6 +600,7 @@
+      if (res == NULL) {
+         scan_err3(lc, _("Missing config Resource \"%s\" referenced on line %d : %s\n"),
+            lc->str, lc->line_no, lc->line);
++        return;
+      }
+    }
+    scan_to_eol(lc);
+@@ -655,12 +664,13 @@
+       }
+       if (!size_to_uint64(bsize, strlen(bsize), &uvalue)) {
+          scan_err1(lc, _("expected a size number, got: %s"), lc->str);
++         return;
+       }
+       *(uint64_t *)(item->value) = uvalue;
+       break;
+    default:
+       scan_err1(lc, _("expected a size, got: %s"), lc->str);
+-      break;
++      return;
+    }
+    if (token != T_EOL) {
+       scan_to_eol(lc);
+@@ -697,12 +707,13 @@
+       }
+       if (!duration_to_utime(period, &utime)) {
+          scan_err1(lc, _("expected a time period, got: %s"), period);
++         return;
+       }
+       *(utime_t *)(item->value) = utime;
+       break;
+    default:
+       scan_err1(lc, _("expected a time period, got: %s"), lc->str);
+-      break;
++      return;
+    }
+    if (token != T_EOL) {
+       scan_to_eol(lc);
+@@ -721,6 +732,7 @@
+       *(uint32_t *)(item->value) &= ~(item->code);
+    } else {
+       scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */
++      return;
+    }
+    scan_to_eol(lc);
+    set_bit(index, res_all.hdr.item_present);
+@@ -736,6 +748,7 @@
+       *(bool *)(item->value) = false;
+    } else {
+       scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */
++      return;
+    }
+    scan_to_eol(lc);
+    set_bit(index, res_all.hdr.item_present);
+@@ -761,6 +774,7 @@
+    }
+    if (i != 0) {
+       scan_err1(lc, _("Expected a Tape Label keyword, got: %s"), lc->str);
++      return;
+    }
+    scan_to_eol(lc);
+    set_bit(index, res_all.hdr.item_present);
+@@ -910,6 +924,7 @@
+                Dmsg0(900, "T_EOB => define new resource\n");
+                if (res_all.hdr.name == NULL) {
+                   scan_err0(lc, _("Name not specified for resource"));
++                  return 0;
+                }
+                save_resource(res_type, items, pass);  /* save resource */
+                break;
index 52927627d07a7423bc08677dfe0cca86ce095f3a..f85798d8fcc9f432c7752d74395372fe7d57e239 100644 (file)
@@ -274,6 +274,7 @@ void store_msgs(LEX *lc, RES_ITEM *item, int index, int pass)
             }
             if (token != T_EQUALS) {
                scan_err1(lc, _("expected an =, got: %s"), lc->str);
+               return;
             }
             break;
          }
@@ -294,6 +295,7 @@ void store_msgs(LEX *lc, RES_ITEM *item, int index, int pass)
          Dmsg1(900, "store_msgs dest=%s:\n", NPRT(dest));
          if (token != T_EQUALS) {
             scan_err1(lc, _("expected an =, got: %s"), lc->str);
+            return;
          }
          scan_types(lc, (MSGS *)(item->value), item->code, dest, NULL);
          free_pool_memory(dest);
@@ -302,7 +304,7 @@ void store_msgs(LEX *lc, RES_ITEM *item, int index, int pass)
 
       default:
          scan_err1(lc, _("Unknown item code: %d\n"), item->code);
-         break;
+         return;
       }
    }
    scan_to_eol(lc);
@@ -342,7 +344,7 @@ static void scan_types(LEX *lc, MSGS *msg, int dest_code, char *where, char *cmd
       }
       if (!found) {
          scan_err1(lc, _("message type: %s not found"), str);
-         /* NOT REACHED */
+         return;
       }
 
       if (msg_type == M_MAX+1) {         /* all? */
@@ -374,12 +376,14 @@ void store_name(LEX *lc, RES_ITEM *item, int index, int pass)
    lex_get_token(lc, T_NAME);
    if (!is_name_valid(lc->str, &msg)) {
       scan_err1(lc, "%s\n", msg);
+      return;
    }
    free_pool_memory(msg);
    /* Store the name both pass 1 and pass 2 */
    if (*(item->value)) {
       scan_err2(lc, _("Attempt to redefine name \"%s\" to \"%s\"."),
          *(item->value), lc->str);
+      return;
    }
    *(item->value) = bstrdup(lc->str);
    scan_to_eol(lc);
@@ -471,10 +475,12 @@ void store_res(LEX *lc, RES_ITEM *item, int index, int pass)
       if (res == NULL) {
          scan_err3(lc, _("Could not find config Resource %s referenced on line %d : %s\n"),
             lc->str, lc->line_no, lc->line);
+         return;
       }
       if (*(item->value)) {
          scan_err3(lc, _("Attempt to redefine resource \"%s\" referenced on line %d : %s\n"),
             item->name, lc->line_no, lc->line);
+         return;
       }
       *(item->value) = (char *)res;
    }
@@ -510,6 +516,7 @@ void store_alist_res(LEX *lc, RES_ITEM *item, int index, int pass)
          if (i >= count) {
             scan_err4(lc, _("Too many %s directives. Max. is %d. line %d: %s\n"),
                lc->str, count, lc->line_no, lc->line);
+            return;
          }
          list = New(alist(10, not_owned_by_alist));
       }
@@ -520,6 +527,7 @@ void store_alist_res(LEX *lc, RES_ITEM *item, int index, int pass)
          if (res == NULL) {
             scan_err3(lc, _("Could not find config Resource \"%s\" referenced on line %d : %s\n"),
                item->name, lc->line_no, lc->line);
+            return;
          }
          Dmsg5(900, "Append %p to alist %p size=%d i=%d %s\n", 
                res, list, list->size(), i, item->name);
@@ -582,6 +590,7 @@ void store_defs(LEX *lc, RES_ITEM *item, int index, int pass)
      if (res == NULL) {
         scan_err3(lc, _("Missing config Resource \"%s\" referenced on line %d : %s\n"),
            lc->str, lc->line_no, lc->line);
+        return;
      }
    }
    scan_to_eol(lc);
@@ -645,12 +654,13 @@ void store_size(LEX *lc, RES_ITEM *item, int index, int pass)
       }
       if (!size_to_uint64(bsize, strlen(bsize), &uvalue)) {
          scan_err1(lc, _("expected a size number, got: %s"), lc->str);
+         return;
       }
       *(uint64_t *)(item->value) = uvalue;
       break;
    default:
       scan_err1(lc, _("expected a size, got: %s"), lc->str);
-      break;
+      return;
    }
    if (token != T_EOL) {
       scan_to_eol(lc);
@@ -687,12 +697,13 @@ void store_time(LEX *lc, RES_ITEM *item, int index, int pass)
       }
       if (!duration_to_utime(period, &utime)) {
          scan_err1(lc, _("expected a time period, got: %s"), period);
+         return;
       }
       *(utime_t *)(item->value) = utime;
       break;
    default:
       scan_err1(lc, _("expected a time period, got: %s"), lc->str);
-      break;
+      return;
    }
    if (token != T_EOL) {
       scan_to_eol(lc);
@@ -711,6 +722,7 @@ void store_bit(LEX *lc, RES_ITEM *item, int index, int pass)
       *(uint32_t *)(item->value) &= ~(item->code);
    } else {
       scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */
+      return;
    }
    scan_to_eol(lc);
    set_bit(index, res_all.hdr.item_present);
@@ -726,6 +738,7 @@ void store_bool(LEX *lc, RES_ITEM *item, int index, int pass)
       *(bool *)(item->value) = false;
    } else {
       scan_err2(lc, _("Expect %s, got: %s"), "YES, NO, TRUE, or FALSE", lc->str); /* YES and NO must not be translated */
+      return;
    }
    scan_to_eol(lc);
    set_bit(index, res_all.hdr.item_present);
@@ -751,6 +764,7 @@ void store_label(LEX *lc, RES_ITEM *item, int index, int pass)
    }
    if (i != 0) {
       scan_err1(lc, _("Expected a Tape Label keyword, got: %s"), lc->str);
+      return;
    }
    scan_to_eol(lc);
    set_bit(index, res_all.hdr.item_present);
@@ -947,6 +961,7 @@ bool CONFIG::parse_config()
                Dmsg0(900, "T_EOB => define new resource\n");
                if (res_all.hdr.name == NULL) {
                   scan_err0(lc, _("Name not specified for resource"));
+                  return 0;
                }
                save_resource(res_type, items, pass);  /* save resource */
                break;
index a755ba410bff4538d360020c848b8b14d8669926..1b36cb8e468ac8fa3a198ba5f114859ac5fa0b5f 100644 (file)
@@ -3,9 +3,9 @@
  */
 
 #undef  VERSION
-#define VERSION "2.5.29"
-#define BDATE   "18 January 2009"
-#define LSMDATE "18Jan09"
+#define VERSION "2.5.30"
+#define BDATE   "22 January 2009"
+#define LSMDATE "22Jan09"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2009"       /* year for copyright messages in progs */
index 8bcdfa561b33874725b1b7f147eb23e5b16463ad..8dcd2ce6d7a1ebb2bd95f8553743c9a4dcbc8a23 100644 (file)
@@ -10,6 +10,8 @@ filepattern (restore with regex in bsr)
 mixed priorities
 
 General:
+22Jan09
+kes  Fix bug #1211 crash during reload with bad dird.conf file.
 21Jan09
 ebl  Add detection of intptr_t and uintptr_t to configure process
 20Jan09