static bool _some_oval_result_exists(struct oscap_source *xccdf_source) { struct xccdf_benchmark *benchmark = NULL; struct xccdf_policy_model *policy_model = NULL; struct oscap_file_entry_list *files = NULL; struct oscap_file_entry_iterator *files_it = NULL; char *oval_result = NULL; bool result = false; benchmark = xccdf_benchmark_import_source(xccdf_source); if (benchmark == NULL) return false; policy_model = xccdf_policy_model_new(benchmark); files = xccdf_policy_model_get_systems_and_files(policy_model); files_it = oscap_file_entry_list_get_files(files); oval_result = malloc(PATH_MAX * sizeof(char)); while (oscap_file_entry_iterator_has_more(files_it)) { struct oscap_file_entry *file_entry = (struct oscap_file_entry *) oscap_file_entry_iterator_next(files_it);; struct stat sb; if (strcmp(oscap_file_entry_get_system(file_entry), "http://oval.mitre.org/XMLSchema/oval-definitions-5")) continue; snprintf(oval_result, PATH_MAX, "./%s.result.xml", oscap_file_entry_get_file(file_entry)); if (stat(oval_result, &sb) == 0) { result = true; break; } } free(oval_result); oscap_file_entry_iterator_free(files_it); oscap_file_entry_list_free(files); xccdf_policy_model_free(policy_model); return result; }
static inline void _print_xccdf_referenced_files(struct xccdf_policy_model *policy_model, const char *prefix) { struct oscap_file_entry_list *referenced_files = xccdf_policy_model_get_systems_and_files(policy_model); struct oscap_file_entry_iterator *files_it = oscap_file_entry_list_get_files(referenced_files); printf("%sReferenced check files:\n", prefix); while (oscap_file_entry_iterator_has_more(files_it)) { struct oscap_file_entry *file_entry = (struct oscap_file_entry *) oscap_file_entry_iterator_next(files_it); printf("%s\t%s\n", prefix, oscap_file_entry_get_file(file_entry)); printf("%s\t\tsystem: %s\n", prefix, oscap_file_entry_get_system(file_entry)); } oscap_file_entry_iterator_free(files_it); oscap_file_entry_list_free(referenced_files); }