]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Fix #6891 Handle empty PluginConfig files
authorEric Bollengier <eric@baculasystems.com>
Mon, 26 Oct 2020 17:30:03 +0000 (18:30 +0100)
committerEric Bollengier <eric@baculasystems.com>
Thu, 24 Mar 2022 08:02:58 +0000 (09:02 +0100)
bacula/src/dird/ua_run.c
bacula/src/lib/ini.c

index c6de5c2fdfe4b731d2967e43666cfe9cec7b1e7e..33e1b737066a08430b28f44b7e01d7ee4ab9a4a1 100644 (file)
@@ -871,8 +871,11 @@ static void plugin_config_save_jcr(UAContext *ua, JCR *jcr,
    elt = (plugin_config_item *) malloc (sizeof(plugin_config_item));
    elt->plugin_name = bstrdup(pname);
    elt->content = get_pool_memory(PM_FNAME);
-   ini->dump_results(&elt->content);
-   jcr->plugin_config->append(elt);
+   if (ini->dump_results(&elt->content) > 0) {
+      jcr->plugin_config->append(elt); /* Is not empty */
+   } else {
+      free_plugin_config_item(elt);
+   }
 }
 
 /* TODO: Allow to have sub-menus Advanced.restore_mode can be
index 0c9b0ab3284b73df1bfd27d50f483fdf988b7d36..8191ba701882809ede45bdf1d2d4c45e4c59f050 100644 (file)
@@ -267,13 +267,13 @@ int ConfigFile::serialize(POOLMEM **buf)
 /* Dump the item table content to a text file (used by director) */
 int ConfigFile::dump_results(POOLMEM **buf)
 {
-   int len;
+   int len, len_header;
    POOLMEM *tmp, *tmp2;
    if (!items) {
       **buf = 0;
       return 0;
    }
-   len = Mmsg(buf, "# Plugin configuration file\n# Version %d\n", version);
+   len_header = len = Mmsg(buf, "# Plugin configuration file\n# Version %d\n", version);
 
    tmp = get_pool_memory(PM_MESSAGE);
    tmp2 = get_pool_memory(PM_MESSAGE);
@@ -309,13 +309,16 @@ int ConfigFile::dump_results(POOLMEM **buf)
    free_pool_memory(tmp);
    free_pool_memory(tmp2);
 
+   if (len_header == len) {     /* Nothing was generated */
+      return 0;
+   }
    return len ;
 }
 
 bool ConfigFile::parse()
 {
    int token, i;
-   bool ret = false;
+   bool ret = true; /* If the file is empty and we don't have required fields, it's ok */
    bool found;
 
    lc->options |= LOPT_NO_EXTERN;