Imported Upstream version 3.3.1
[debian/amanda] / common-src / amxml.c
index 28b88aeea27b57fdc424913c7f05dfbe42a5959b..7aab3f6d41f4faae4c3347b1fe958aa5a855e7ac 100644 (file)
@@ -99,6 +99,8 @@ free_dle(
     free_sl(dle->exclude_list);
     free_sl(dle->include_file);
     free_sl(dle->include_list);
+    if (dle->property)
+       g_hash_table_destroy(dle->property);
     if (dle->application_property)
        g_hash_table_destroy(dle->application_property);
     for(scriptlist = dle->scriptlist; scriptlist != NULL;
@@ -149,6 +151,7 @@ init_dle(
     dle->include_list = NULL;
     dle->exclude_optional = 0;
     dle->include_optional = 0;
+    dle->property = NULL;
     dle->application_property = NULL;
     dle->scriptlist = NULL;
     dle->data_path = DATA_PATH_AMANDA;
@@ -250,7 +253,8 @@ amstart_element(
        data_user->has_optional = 0;
        data_user->property_name = NULL;
        data_user->property_data = NULL;
-       data_user->property = NULL;
+       data_user->property =
+                   g_hash_table_new_full(g_str_hash, g_str_equal, &g_free, &free_property_t);
        data_user->script = NULL;
        data_user->alevel = NULL;
        data_user->encoding = NULL;
@@ -363,8 +367,10 @@ amstart_element(
            return;
        }
     } else if(strcmp(element_name, "property") == 0) {
-       if (strcmp(last_element_name, "backup-program") != 0 &&
-           strcmp(last_element_name, "script") != 0) {
+       if (!last_element ||
+           (strcmp(last_element_name, "backup-program") != 0 &&
+            strcmp(last_element_name, "script") != 0 &&
+            strcmp(last_element_name, "dle") != 0)) {
            g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
                        "XML: Invalid %s element", element_name);
            return;
@@ -495,6 +501,7 @@ amend_element(
        if (dle->estimatelist == NULL)
            dle->estimatelist = g_slist_append(dle->estimatelist, ES_CLIENT);
 /* Add check of required field */
+       data_user->property = NULL;
        data_user->dle = NULL;
     } else if (strcmp(element_name, "backup-program") == 0) {
        if (dle->program == NULL) {
@@ -503,7 +510,7 @@ amend_element(
            return;
        }
        dle->application_property = data_user->property;
-       data_user->property = NULL;
+       data_user->property = dle->property;
     } else if (strcmp(element_name, "script") == 0) {
        if (data_user->script->plugin == NULL) {
            g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
@@ -511,7 +518,7 @@ amend_element(
            return;
        }
        data_user->script->property = data_user->property;
-       data_user->property = NULL;
+       data_user->property = dle->property;
        dle->scriptlist = g_slist_append(dle->scriptlist, data_user->script);
        data_user->script = NULL;
     } else if (strcmp(element_name, "level") == 0) {
@@ -540,7 +547,6 @@ amtext(
     GSList   *last_element2;
     char     *last_element2_name;
     dle_t    *dle = data_user->dle;
-    int       i;
 
     if (!last_element) {
        g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
@@ -860,7 +866,6 @@ amtext(
            error("bad list");
        }
     } else if(strcmp(last_element_name, "optional") == 0) {
-       i = atoi(tt);
        last_element2 = g_slist_nth(data_user->element_names, 1);
        if (!last_element2) {
            error("XML: optional");