X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=common-src%2Famxml.c;h=7aab3f6d41f4faae4c3347b1fe958aa5a855e7ac;hb=refs%2Ftags%2Fupstream%2F3.3.1;hp=28b88aeea27b57fdc424913c7f05dfbe42a5959b;hpb=cd0b924f27312d57bd42f6c4fae2b795139e2d0b;p=debian%2Famanda diff --git a/common-src/amxml.c b/common-src/amxml.c index 28b88ae..7aab3f6 100644 --- a/common-src/amxml.c +++ b/common-src/amxml.c @@ -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");