|
Packit Service |
569379 |
/*
|
|
Packit Service |
569379 |
* Copyright 2013 Red Hat Inc., Durham, North Carolina.
|
|
Packit Service |
569379 |
* All Rights Reserved.
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
569379 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
569379 |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
569379 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
569379 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
569379 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
569379 |
* Lesser General Public License for more details.
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
569379 |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
569379 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
* Authors:
|
|
Packit Service |
569379 |
* Šimon Lukašík
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
569379 |
#include <config.h>
|
|
Packit Service |
569379 |
#endif
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#include "oval_definitions_impl.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static void _oval_definition_fill_vardef(struct oval_definition *definition, struct oval_string_map *vardef);
|
|
Packit Service |
569379 |
static void _oval_criteria_fill_vardef(struct oval_criteria_node *cnode, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _oval_test_fill_vardef(struct oval_test *test, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _oval_object_fill_vardef(struct oval_object *object, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _oval_setobject_fill_vardef(struct oval_setobject *set, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _oval_state_fill_vardef(struct oval_state *state, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _oval_entity_fill_vardef(struct oval_entity *entity, struct oval_string_map *vardef, const char *definition_id);
|
|
Packit Service |
569379 |
static void _vardef_insert(struct oval_string_map *vardef, const char *definition_id, const char *variable_id);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_string_map *oval_definition_model_build_vardef_mapping(struct oval_definition_model *model)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_string_map *vardef = oval_string_map_new();
|
|
Packit Service |
569379 |
struct oval_definition_iterator *def_it = oval_definition_model_get_definitions(model);
|
|
Packit Service |
569379 |
while (oval_definition_iterator_has_more(def_it)) {
|
|
Packit Service |
569379 |
struct oval_definition *definition = oval_definition_iterator_next(def_it);
|
|
Packit Service |
569379 |
_oval_definition_fill_vardef(definition, vardef);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_definition_iterator_free(def_it);
|
|
Packit Service |
569379 |
return vardef;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_definition_fill_vardef(struct oval_definition *definition, struct oval_string_map *vardef)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_criteria_node *cnode = oval_definition_get_criteria(definition);
|
|
Packit Service |
569379 |
if (cnode != NULL)
|
|
Packit Service |
569379 |
_oval_criteria_fill_vardef(cnode, vardef, oval_definition_get_id(definition));
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_criteria_fill_vardef(struct oval_criteria_node *cnode, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
switch (oval_criteria_node_get_type(cnode)) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
struct oval_test *test = oval_criteria_node_get_test(cnode);
|
|
Packit Service |
569379 |
if (test != NULL)
|
|
Packit Service |
569379 |
_oval_test_fill_vardef(test, vardef, definition_id);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
struct oval_criteria_node_iterator *cnode_it = oval_criteria_node_get_subnodes(cnode);
|
|
Packit Service |
569379 |
if (cnode_it != NULL) {
|
|
Packit Service |
569379 |
while (oval_criteria_node_iterator_has_more(cnode_it)) {
|
|
Packit Service |
569379 |
struct oval_criteria_node *node = oval_criteria_node_iterator_next(cnode_it);
|
|
Packit Service |
569379 |
if (node != NULL)
|
|
Packit Service |
569379 |
_oval_criteria_fill_vardef(node, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_criteria_node_iterator_free(cnode_it);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
struct oval_definition *definition = oval_criteria_node_get_definition(cnode);
|
|
Packit Service |
569379 |
if (definition != NULL) {
|
|
Packit Service |
569379 |
struct oval_criteria_node *node = oval_definition_get_criteria(definition);
|
|
Packit Service |
569379 |
if (node != NULL)
|
|
Packit Service |
569379 |
_oval_criteria_fill_vardef(node, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_UNKNOWN:
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
assert(false);
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_test_fill_vardef(struct oval_test *test, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_object *object = oval_test_get_object(test);
|
|
Packit Service |
569379 |
if (object != NULL)
|
|
Packit Service |
569379 |
_oval_object_fill_vardef(object, vardef, definition_id);
|
|
Packit Service |
569379 |
struct oval_state_iterator *ste_it = oval_test_get_states(test);
|
|
Packit Service |
569379 |
while (oval_state_iterator_has_more(ste_it)) {
|
|
Packit Service |
569379 |
struct oval_state *state = oval_state_iterator_next(ste_it);
|
|
Packit Service |
569379 |
if (state != NULL)
|
|
Packit Service |
569379 |
_oval_state_fill_vardef(state, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_state_iterator_free(ste_it);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_object_fill_vardef(struct oval_object *object, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_object_content_iterator *content_it = oval_object_get_object_contents(object);
|
|
Packit Service |
569379 |
while (oval_object_content_iterator_has_more(content_it)) {
|
|
Packit Service |
569379 |
struct oval_object_content *content = oval_object_content_iterator_next(content_it);
|
|
Packit Service |
569379 |
switch (oval_object_content_get_type(content)) {
|
|
Packit Service |
569379 |
case OVAL_OBJECTCONTENT_ENTITY:{
|
|
Packit Service |
569379 |
struct oval_entity *entity = oval_object_content_get_entity(content);
|
|
Packit Service |
569379 |
_oval_entity_fill_vardef(entity, vardef, definition_id);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_OBJECTCONTENT_SET:{
|
|
Packit Service |
569379 |
struct oval_setobject *set = oval_object_content_get_setobject(content);
|
|
Packit Service |
569379 |
_oval_setobject_fill_vardef(set, vardef, definition_id);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_object_content_iterator_free(content_it);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_setobject_fill_vardef(struct oval_setobject *set, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
switch (oval_setobject_get_type(set)) {
|
|
Packit Service |
569379 |
case OVAL_SET_AGGREGATE:{
|
|
Packit Service |
569379 |
struct oval_setobject_iterator *subset_it = oval_setobject_get_subsets(set);
|
|
Packit Service |
569379 |
while (oval_setobject_iterator_has_more(subset_it)) {
|
|
Packit Service |
569379 |
struct oval_setobject *subset = oval_setobject_iterator_next(subset_it);
|
|
Packit Service |
569379 |
_oval_setobject_fill_vardef(subset, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_setobject_iterator_free(subset_it);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_SET_COLLECTIVE:{
|
|
Packit Service |
569379 |
struct oval_object_iterator *object_it = oval_setobject_get_objects(set);
|
|
Packit Service |
569379 |
while (oval_object_iterator_has_more(object_it)) {
|
|
Packit Service |
569379 |
struct oval_object *object = oval_object_iterator_next(object_it);
|
|
Packit Service |
569379 |
_oval_object_fill_vardef(object, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_object_iterator_free(object_it);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_filter_iterator *filter_it = oval_setobject_get_filters(set);
|
|
Packit Service |
569379 |
while (oval_filter_iterator_has_more(filter_it)) {
|
|
Packit Service |
569379 |
struct oval_filter *filter = oval_filter_iterator_next(filter_it);
|
|
Packit Service |
569379 |
struct oval_state *state = oval_filter_get_state(filter);
|
|
Packit Service |
569379 |
_oval_state_fill_vardef(state, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_filter_iterator_free(filter_it);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_state_fill_vardef(struct oval_state *state, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_state_content_iterator *content_it = oval_state_get_contents(state);
|
|
Packit Service |
569379 |
while (oval_state_content_iterator_has_more(content_it)) {
|
|
Packit Service |
569379 |
struct oval_state_content *content = oval_state_content_iterator_next(content_it);
|
|
Packit Service |
569379 |
struct oval_entity *entity = oval_state_content_get_entity(content);
|
|
Packit Service |
569379 |
if (entity != NULL)
|
|
Packit Service |
569379 |
_oval_entity_fill_vardef(entity, vardef, definition_id);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_state_content_iterator_free(content_it);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _oval_entity_fill_vardef(struct oval_entity *entity, struct oval_string_map *vardef, const char *definition_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
if (oval_entity_get_varref_type(entity) == OVAL_ENTITY_VARREF_ATTRIBUTE ||
|
|
Packit Service |
569379 |
oval_entity_get_varref_type(entity) == OVAL_ENTITY_VARREF_ELEMENT) {
|
|
Packit Service |
569379 |
struct oval_variable *variable = oval_entity_get_variable(entity);
|
|
Packit Service |
569379 |
if (variable != NULL)
|
|
Packit Service |
569379 |
_vardef_insert(vardef, definition_id, oval_variable_get_id(variable));
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void _vardef_insert(struct oval_string_map *vardef, const char *definition_id, const char *variable_id)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
struct oval_string_map *def_list = (struct oval_string_map *) oval_string_map_get_value(vardef, variable_id);
|
|
Packit Service |
569379 |
if (def_list == NULL) {
|
|
Packit Service |
569379 |
def_list = oval_string_map_new();
|
|
Packit Service |
569379 |
oval_string_map_put(vardef, variable_id, def_list);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_string_map_put(def_list, definition_id, (void *) "");
|
|
Packit Service |
569379 |
}
|