return dle;
}
+void
+free_dle(
+ dle_t *dle)
+{
+ scriptlist_t scriptlist;
+
+ amfree(dle->disk);
+ amfree(dle->device);
+ amfree(dle->program);
+ g_slist_free(dle->estimatelist);
+ slist_free_full(dle->levellist, g_free);
+ amfree(dle->dumpdate);
+ amfree(dle->compprog);
+ amfree(dle->srv_encrypt);
+ amfree(dle->clnt_encrypt);
+ amfree(dle->srv_decrypt_opt);
+ amfree(dle->clnt_decrypt_opt);
+ amfree(dle->auth);
+ free_sl(dle->exclude_file);
+ free_sl(dle->exclude_list);
+ free_sl(dle->include_file);
+ free_sl(dle->include_list);
+ if (dle->application_property)
+ g_hash_table_destroy(dle->application_property);
+ for(scriptlist = dle->scriptlist; scriptlist != NULL;
+ scriptlist = scriptlist->next) {
+ free_script_data((script_t *)scriptlist->data);
+ }
+ slist_free_full(dle->scriptlist, g_free);
+ slist_free_full(dle->directtcp_list, g_free);
+ amfree(dle);
+}
+
+void
+free_script_data(
+ script_t *script)
+{
+ amfree(script->plugin);
+ if (script->property)
+ g_hash_table_destroy(script->property);
+}
+
void
init_dle(
dle_t *dle)
} else {
data_user->has_backup_program = 1;
data_user->property =
- g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
+ g_hash_table_new_full(g_str_hash, g_str_equal, &g_free, &free_property_t);
data_user->has_plugin = 0;
}
} else if (strcmp(element_name, "script") == 0) {
data_user->property =
- g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
+ g_hash_table_new_full(g_str_hash, g_str_equal, &g_free, &free_property_t);
data_user->script = malloc(sizeof(script_t));
data_user->script->plugin = NULL;
data_user->script->execute_on = 0;
strcmp(last_element_name, "include") == 0) {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: %s doesn't have text '%s'", last_element_name, tt);
+ amfree(tt);
return;
} else if(strcmp(last_element_name, "disk") == 0) {
if (dle->disk != NULL) {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: multiple text in %s", last_element_name);
+ amfree(tt);
return;
}
dle->disk = tt;
if (dle->device != NULL) {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: multiple text in %s", last_element_name);
+ amfree(tt);
return;
}
dle->device = tt;
if (dle->program != NULL) {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: multiple text in %s", last_element_name);
+ amfree(tt);
return;
}
- dle->program = tt;
if (strcmp(tt, "APPLICATION") == 0) {
dle->program_is_application_api = 1;
dle->program = NULL;
+ amfree(tt);
+ } else {
+ dle->program = tt;
}
} else if(strcmp(last_element_name, "plugin") == 0) {
last_element2 = g_slist_nth(data_user->element_names, 1);
} else {
error("priority outside of property");
}
+ amfree(tt);
} else if(strcmp(last_element_name, "value") == 0) {
last_element2 = g_slist_nth(data_user->element_names, 1);
if (!last_element2) {
} else {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: Invalid %s (%s)", last_element_name, tt);
+ amfree(tt);
return;
}
+ amfree(tt);
} else if(strcmp(last_element_name, "spindle") == 0) {
dle->spindle = atoi(tt);
+ amfree(tt);
} else if(strcmp(last_element_name, "compress") == 0) {
if (strcmp(tt, "FAST") == 0) {
dle->compress = COMP_FAST;
error("XML: optional");
}
last_element2_name = last_element2->data;
- dle->clnt_encrypt = tt;
+ if (dle->encrypt == ENCRYPT_SERV_CUST)
+ dle->srv_encrypt = tt;
+ else
+ dle->clnt_encrypt = tt;
} else if(strcmp(last_element_name, "decrypt-option") == 0) {
last_element2 = g_slist_nth(data_user->element_names, 1);
if (!last_element2) {
error("XML: optional");
}
last_element2_name = last_element2->data;
- dle->clnt_decrypt_opt = tt;
+ if (dle->encrypt == ENCRYPT_SERV_CUST)
+ dle->srv_decrypt_opt = tt;
+ else
+ dle->clnt_decrypt_opt = tt;
} else if(strcmp(last_element_name, "exclude") == 0 ||
strcmp(last_element_name, "include") == 0) {
data_user->has_optional = 0;
+ amfree(tt);
} else if(strcmp(last_element_name, "file") == 0) {
last_element2 = g_slist_nth(data_user->element_names, 1);
if (!last_element2) {
data_user->has_optional = 1;
amfree(tt);
} else if(strcmp(last_element_name, "script") == 0) {
+ amfree(tt);
} else if(strcmp(last_element_name, "execute_on") == 0) {
char *sep;
char *tt1 = tt;
} else {
data_user->script->execute_where = ES_SERVER;
}
+ amfree(tt);
} else if(strcmp(last_element_name, "datapath") == 0) {
if (strcmp(tt, "AMANDA") == 0) {
dle->data_path = DATA_PATH_AMANDA;
} else {
g_set_error(gerror, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
"XML: amtext not defined for '%s'", last_element_name);
+ amfree(tt);
return;
}
}