|
Packit Service |
569379 |
/**
|
|
Packit Service |
569379 |
* @file oval_resultCriteriaNode.c
|
|
Packit Service |
569379 |
* \brief Open Vulnerability and Assessment Language
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
* See more details at http://oval.mitre.org/
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/*
|
|
Packit Service |
569379 |
* Copyright 2009--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 |
* "David Niemoller" <David.Niemoller@g2-inc.com>
|
|
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 <stdlib.h>
|
|
Packit Service |
569379 |
#include <stdio.h>
|
|
Packit Service |
569379 |
#include <stdarg.h>
|
|
Packit Service |
569379 |
#include <string.h>
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#include "oval_agent_api_impl.h"
|
|
Packit Service |
569379 |
#include "results/oval_results_impl.h"
|
|
Packit Service |
569379 |
#include "adt/oval_collection_impl.h"
|
|
Packit Service |
569379 |
#include "common/util.h"
|
|
Packit Service |
569379 |
#include "common/debug_priv.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
typedef struct oval_result_criteria_node {
|
|
Packit Service |
569379 |
struct oval_result_system *sys;
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type;
|
|
Packit Service |
569379 |
oval_result_t result;
|
|
Packit Service |
569379 |
int negate;
|
|
Packit Service |
569379 |
int applicability_check;
|
|
Packit Service |
569379 |
} oval_result_criteria_node_t;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
typedef struct oval_result_criteria_node_CRITERIA {
|
|
Packit Service |
569379 |
struct oval_result_system *sys;
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type;
|
|
Packit Service |
569379 |
oval_result_t result;
|
|
Packit Service |
569379 |
int negate;
|
|
Packit Service |
569379 |
int applicability_check;
|
|
Packit Service |
569379 |
oval_operator_t operator;
|
|
Packit Service |
569379 |
struct oval_collection *subnodes;
|
|
Packit Service |
569379 |
} oval_result_criteria_node_CRITERIA_t;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
typedef struct oval_result_criteria_node_CRITERION {
|
|
Packit Service |
569379 |
struct oval_result_system *sys;
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type;
|
|
Packit Service |
569379 |
oval_result_t result;
|
|
Packit Service |
569379 |
int negate;
|
|
Packit Service |
569379 |
int applicability_check;
|
|
Packit Service |
569379 |
int variable_instance;
|
|
Packit Service |
569379 |
struct oval_result_test *test;
|
|
Packit Service |
569379 |
} oval_result_criteria_node_CRITERION_t;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
typedef struct oval_result_criteria_node_EXTENDDEF {
|
|
Packit Service |
569379 |
struct oval_result_system *sys;
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type;
|
|
Packit Service |
569379 |
oval_result_t result;
|
|
Packit Service |
569379 |
int negate;
|
|
Packit Service |
569379 |
int applicability_check;
|
|
Packit Service |
569379 |
int variable_instance;
|
|
Packit Service |
569379 |
struct oval_result_definition *extends;
|
|
Packit Service |
569379 |
} oval_result_criteria_node_EXTENDDEF_t;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *oval_result_criteria_node_new(struct oval_result_system *sys,
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type,
|
|
Packit Service |
569379 |
int negate,
|
|
Packit Service |
569379 |
int applicability_check,
|
|
Packit Service |
569379 |
...) {
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_criteria_node_t *node = NULL;
|
|
Packit Service |
569379 |
va_list ap;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
va_start(ap, applicability_check);
|
|
Packit Service |
569379 |
switch (type) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
/*(NODETYPE_CRITERIA, negate, applicability_check, operator); */
|
|
Packit Service |
569379 |
node = (oval_result_criteria_node_t *)
|
|
Packit Service |
569379 |
malloc(sizeof(oval_result_criteria_node_CRITERIA_t));
|
|
Packit Service |
569379 |
if (node == NULL) {
|
|
Packit Service |
569379 |
va_end(ap);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_criteria_node_CRITERIA_t *criteria = (oval_result_criteria_node_CRITERIA_t *) node;
|
|
Packit Service |
569379 |
criteria->operator =(oval_operator_t) va_arg(ap, int);
|
|
Packit Service |
569379 |
criteria->subnodes = oval_collection_new();
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
/*(NODETYPE_CRITERION, negate, applicability_check, test, variable_instance); */
|
|
Packit Service |
569379 |
node = (oval_result_criteria_node_t *)
|
|
Packit Service |
569379 |
malloc(sizeof(oval_result_criteria_node_CRITERION_t));
|
|
Packit Service |
569379 |
if (node == NULL) {
|
|
Packit Service |
569379 |
va_end(ap);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_criteria_node_CRITERION_t *criterion =
|
|
Packit Service |
569379 |
(oval_result_criteria_node_CRITERION_t *) node;
|
|
Packit Service |
569379 |
criterion->test = (struct oval_result_test *)va_arg(ap, void *);
|
|
Packit Service |
569379 |
criterion->variable_instance = va_arg(ap, int);
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
/*(NODETYPE_EXTENDDEF, negate, applicability_check, definition, variable_instance); */
|
|
Packit Service |
569379 |
node = (oval_result_criteria_node_t *)
|
|
Packit Service |
569379 |
malloc(sizeof(oval_result_criteria_node_EXTENDDEF_t));
|
|
Packit Service |
569379 |
if (node == NULL) {
|
|
Packit Service |
569379 |
va_end(ap);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_criteria_node_EXTENDDEF_t *extenddef =
|
|
Packit Service |
569379 |
(oval_result_criteria_node_EXTENDDEF_t *) node;
|
|
Packit Service |
569379 |
extenddef->extends = (struct oval_result_definition *)va_arg(ap, void *);
|
|
Packit Service |
569379 |
extenddef->variable_instance = va_arg(ap, int);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
va_end(ap);
|
|
Packit Service |
569379 |
dE("Unsupported criteria node type: %d.", type);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
node->sys = sys;
|
|
Packit Service |
569379 |
node->negate = negate;
|
|
Packit Service |
569379 |
node->applicability_check = applicability_check;
|
|
Packit Service |
569379 |
node->result = OVAL_RESULT_NOT_EVALUATED;
|
|
Packit Service |
569379 |
node->type = type;
|
|
Packit Service |
569379 |
va_end(ap);
|
|
Packit Service |
569379 |
return node;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *oval_result_criteria_node_clone
|
|
Packit Service |
569379 |
(struct oval_result_system *new_system, struct oval_result_criteria_node *old_node) {
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type = oval_result_criteria_node_get_type(old_node);
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *new_node = NULL;
|
|
Packit Service |
569379 |
bool negate = oval_result_criteria_node_get_negate(old_node);
|
|
Packit Service |
569379 |
bool applicability_check = oval_result_criteria_node_get_applicability_check(old_node);
|
|
Packit Service |
569379 |
switch (type) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
oval_operator_t operator = oval_result_criteria_node_get_operator(old_node);
|
|
Packit Service |
569379 |
new_node = oval_result_criteria_node_new(new_system,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_CRITERIA,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
operator);
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_iterator *old_subs =
|
|
Packit Service |
569379 |
oval_result_criteria_node_get_subnodes(old_node);
|
|
Packit Service |
569379 |
while (oval_result_criteria_node_iterator_has_more(old_subs)) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *old_sub =
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator_next(old_subs);
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *new_sub =
|
|
Packit Service |
569379 |
oval_result_criteria_node_clone(new_system, old_sub);
|
|
Packit Service |
569379 |
oval_result_criteria_node_add_subnode(new_node, new_sub);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator_free(old_subs);
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
struct oval_result_test *old_test = oval_result_criteria_node_get_test(old_node);
|
|
Packit Service |
569379 |
struct oval_result_test *new_test = oval_result_test_clone(new_system, old_test);
|
|
Packit Service |
569379 |
new_node = oval_result_criteria_node_new(new_system,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_CRITERION,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
new_test,
|
|
Packit Service |
569379 |
1);
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
struct oval_result_definition *old_def = oval_result_criteria_node_get_extends(old_node);
|
|
Packit Service |
569379 |
struct oval_result_definition *new_def = oval_result_definition_clone(new_system, old_def);
|
|
Packit Service |
569379 |
new_node = oval_result_criteria_node_new(new_system,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_EXTENDDEF,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
new_def, 1);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_result_criteria_node_set_result(old_node, oval_result_criteria_node_get_result(old_node));
|
|
Packit Service |
569379 |
return new_node;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_free(struct oval_result_criteria_node *node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
switch (node->type) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
oval_result_criteria_node_CRITERIA_t *criteria = (oval_result_criteria_node_CRITERIA_t *) node;
|
|
Packit Service |
569379 |
criteria->operator = OVAL_OPERATOR_UNKNOWN;
|
|
Packit Service |
569379 |
oval_collection_free_items
|
|
Packit Service |
569379 |
(criteria->subnodes, (oscap_destruct_func) oval_result_criteria_node_free);
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
oval_result_criteria_node_CRITERION_t *criterion =
|
|
Packit Service |
569379 |
(oval_result_criteria_node_CRITERION_t *) node;
|
|
Packit Service |
569379 |
criterion->test = NULL;
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
oval_result_criteria_node_EXTENDDEF_t *extenddef =
|
|
Packit Service |
569379 |
(oval_result_criteria_node_EXTENDDEF_t *) node;
|
|
Packit Service |
569379 |
extenddef->extends = NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
node->result = OVAL_RESULT_UNKNOWN;
|
|
Packit Service |
569379 |
node->type = OVAL_NODETYPE_UNKNOWN;
|
|
Packit Service |
569379 |
free(node);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *make_result_criteria_node_from_oval_criteria_node
|
|
Packit Service |
569379 |
(struct oval_result_system *sys, struct oval_criteria_node *oval_node, int variable_instance) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *rslt_node = NULL;
|
|
Packit Service |
569379 |
if (oval_node) {
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type = oval_criteria_node_get_type(oval_node);
|
|
Packit Service |
569379 |
bool negate = oval_criteria_node_get_negate(oval_node);
|
|
Packit Service |
569379 |
bool applicability_check = oval_criteria_node_get_applicability_check(oval_node);
|
|
Packit Service |
569379 |
switch (type) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
oval_operator_t operator = oval_criteria_node_get_operator(oval_node);
|
|
Packit Service |
569379 |
rslt_node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
type,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
operator);
|
|
Packit Service |
569379 |
struct oval_criteria_node_iterator *oval_subnodes
|
|
Packit Service |
569379 |
= oval_criteria_node_get_subnodes(oval_node);
|
|
Packit Service |
569379 |
while (oval_criteria_node_iterator_has_more(oval_subnodes)) {
|
|
Packit Service |
569379 |
struct oval_criteria_node *oval_subnode
|
|
Packit Service |
569379 |
= oval_criteria_node_iterator_next(oval_subnodes);
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *rslt_subnode
|
|
Packit Service |
569379 |
= make_result_criteria_node_from_oval_criteria_node(sys, oval_subnode, variable_instance);
|
|
Packit Service |
569379 |
oval_result_criteria_node_add_subnode(rslt_node, rslt_subnode);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_criteria_node_iterator_free(oval_subnodes);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
struct oval_test *oval_test = oval_criteria_node_get_test(oval_node);
|
|
Packit Service |
569379 |
struct oval_result_test *rslt_test = oval_result_system_get_new_test(sys, oval_test, variable_instance);
|
|
Packit Service |
569379 |
rslt_node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
type,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
rslt_test, 1);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
struct oval_definition *oval_definition = oval_criteria_node_get_definition(oval_node);
|
|
Packit Service |
569379 |
struct oval_result_definition *rslt_definition
|
|
Packit Service |
569379 |
= oval_result_system_get_new_definition(sys, oval_definition, variable_instance);
|
|
Packit Service |
569379 |
rslt_node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
type,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
rslt_definition, 1);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
rslt_node = NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return rslt_node;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool oval_result_criteria_node_iterator_has_more(struct oval_result_criteria_node_iterator * oc_result_criteria_node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
return oval_collection_iterator_has_more((struct oval_iterator *)
|
|
Packit Service |
569379 |
oc_result_criteria_node);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *oval_result_criteria_node_iterator_next(struct
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator
|
|
Packit Service |
569379 |
*oc_result_criteria_node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
return (struct oval_result_criteria_node *)
|
|
Packit Service |
569379 |
oval_collection_iterator_next((struct oval_iterator *)
|
|
Packit Service |
569379 |
oc_result_criteria_node);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_iterator_free(struct
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator
|
|
Packit Service |
569379 |
*oc_result_criteria_node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
oval_collection_iterator_free((struct oval_iterator *)
|
|
Packit Service |
569379 |
oc_result_criteria_node);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_criteria_node_type_t oval_result_criteria_node_get_type(struct oval_result_criteria_node *node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_criteria_node_type_t type = ((struct oval_result_criteria_node *)node)->type;
|
|
Packit Service |
569379 |
return type;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static struct oval_result_system *oval_result_criteria_get_system(struct oval_result_criteria_node *node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node->sys;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_t oval_result_criteria_node_negate(struct oval_result_criteria_node *node, oval_result_t result)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
bool negate = node->negate;
|
|
Packit Service |
569379 |
return (negate && result == OVAL_RESULT_TRUE) ? OVAL_RESULT_FALSE :
|
|
Packit Service |
569379 |
(negate && result == OVAL_RESULT_FALSE) ? OVAL_RESULT_TRUE : result;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static oval_result_t _oval_result_criteria_node_result(struct oval_result_criteria_node *node) {
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_t result;
|
|
Packit Service |
569379 |
switch (node->type) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:{
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_iterator *subnodes
|
|
Packit Service |
569379 |
= oval_result_criteria_node_get_subnodes(node);
|
|
Packit Service |
569379 |
oval_operator_t operator = oval_result_criteria_node_get_operator(node);
|
|
Packit Service |
569379 |
struct oresults node_res;
|
|
Packit Service |
569379 |
ores_clear(&node_res);
|
|
Packit Service |
569379 |
while (oval_result_criteria_node_iterator_has_more(subnodes)) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *subnode
|
|
Packit Service |
569379 |
= oval_result_criteria_node_iterator_next(subnodes);
|
|
Packit Service |
569379 |
oval_result_t subres = oval_result_criteria_node_eval(subnode);
|
|
Packit Service |
569379 |
ores_add_res(&node_res, subres);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator_free(subnodes);
|
|
Packit Service |
569379 |
result = ores_get_result_byopr(&node_res, operator);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:{
|
|
Packit Service |
569379 |
struct oval_result_test *test = oval_result_criteria_node_get_test(node);
|
|
Packit Service |
569379 |
result = oval_result_test_eval(test);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:{
|
|
Packit Service |
569379 |
struct oval_result_definition *extends = oval_result_criteria_node_get_extends(node);
|
|
Packit Service |
569379 |
const char *def_id = oval_result_definition_get_id(extends);
|
|
Packit Service |
569379 |
dI("Criteria are extended by definition '%s'.", def_id);
|
|
Packit Service |
569379 |
result = oval_result_definition_eval(extends);
|
|
Packit Service |
569379 |
} break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
abort ();
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
result = oval_result_criteria_node_negate(node, result);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return result;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_t oval_result_criteria_node_eval(struct oval_result_criteria_node * node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
if (node->result == OVAL_RESULT_NOT_EVALUATED) {
|
|
Packit Service |
569379 |
node->result = _oval_result_criteria_node_result(node);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return node->result;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_t oval_result_criteria_node_get_result(struct oval_result_criteria_node * node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node->result;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool oval_result_criteria_node_get_negate(struct oval_result_criteria_node * node) {
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node->negate;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool oval_result_criteria_node_get_applicability_check(struct oval_result_criteria_node * node) {
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node->applicability_check;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_operator_t oval_result_criteria_node_get_operator(struct oval_result_criteria_node * node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERIA */
|
|
Packit Service |
569379 |
oval_operator_t operator = OVAL_OPERATOR_UNKNOWN;
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERIA) {
|
|
Packit Service |
569379 |
operator =((struct oval_result_criteria_node_CRITERIA *)node)->operator;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return operator;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_iterator *oval_result_criteria_node_get_subnodes(struct
|
|
Packit Service |
569379 |
oval_result_criteria_node
|
|
Packit Service |
569379 |
*node)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERIA */
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_iterator *subnodes = NULL;
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERIA) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_CRITERIA *criteria = (struct oval_result_criteria_node_CRITERIA *)node;
|
|
Packit Service |
569379 |
subnodes = (struct oval_result_criteria_node_iterator *)
|
|
Packit Service |
569379 |
oval_collection_iterator(criteria->subnodes);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return subnodes;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_test *oval_result_criteria_node_get_test(struct oval_result_criteria_node *node) {
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERION */
|
|
Packit Service |
569379 |
struct oval_result_test *test = NULL;
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERION) {
|
|
Packit Service |
569379 |
test = ((struct oval_result_criteria_node_CRITERION *)node)->test;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return test;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_definition *oval_result_criteria_node_get_extends(struct oval_result_criteria_node *node) {
|
|
Packit Service |
569379 |
/*type==NODETYPE_EXTENDDEF */
|
|
Packit Service |
569379 |
struct oval_result_definition *extends = NULL;
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_EXTENDDEF) {
|
|
Packit Service |
569379 |
extends = ((struct oval_result_criteria_node_EXTENDDEF *)node)->extends;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return extends;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_result(struct oval_result_criteria_node *node, oval_result_t result)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
node->result = result;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_negate(struct oval_result_criteria_node *node, bool negate)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
node->negate = negate;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_applicability_check(struct oval_result_criteria_node *node,
|
|
Packit Service |
569379 |
bool applicability_check)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
node->applicability_check = applicability_check;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_add_subnode(struct oval_result_criteria_node *node, struct oval_result_criteria_node *subnode)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERIA */
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERIA) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_CRITERIA *criteria = ((struct oval_result_criteria_node_CRITERIA *)node);
|
|
Packit Service |
569379 |
oval_collection_add(criteria->subnodes, subnode);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_operator(struct oval_result_criteria_node *node, oval_operator_t operator)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERIA */
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERIA) {
|
|
Packit Service |
569379 |
((struct oval_result_criteria_node_CRITERIA *)node)->operator = operator;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_test(struct oval_result_criteria_node *node, struct oval_result_test *test)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
/*type==NODETYPE_CRITERION */
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_CRITERION) {
|
|
Packit Service |
569379 |
((struct oval_result_criteria_node_CRITERION *)node)->test = test;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void oval_result_criteria_node_set_extends(struct oval_result_criteria_node *node, struct oval_result_definition *extends)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
__attribute__nonnull__(node);
|
|
Packit Service |
569379 |
/*type==NODETYPE_EXTENDDEF */
|
|
Packit Service |
569379 |
if (oval_result_criteria_node_get_type(node) == OVAL_NODETYPE_EXTENDDEF) {
|
|
Packit Service |
569379 |
((struct oval_result_criteria_node_EXTENDDEF *)node)->extends = extends;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static void _oval_result_criteria_consume_subnode(struct oval_result_criteria_node *subnode, struct oval_result_criteria_node *node) {
|
|
Packit Service |
569379 |
oval_result_criteria_node_add_subnode(node, subnode);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static int _oval_result_criteria_parse(xmlTextReaderPtr reader, struct oval_parser_context *context, void *usr) {
|
|
Packit Service |
569379 |
struct oval_result_system *sys = oval_result_criteria_get_system(usr);
|
|
Packit Service |
569379 |
return oval_result_criteria_node_parse(reader, context, sys, (oscap_consumer_func) _oval_result_criteria_consume_subnode, usr);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int oval_result_criteria_node_parse(xmlTextReaderPtr reader,
|
|
Packit Service |
569379 |
struct oval_parser_context *context,
|
|
Packit Service |
569379 |
struct oval_result_system *sys,
|
|
Packit Service |
569379 |
oscap_consumer_func consumer,
|
|
Packit Service |
569379 |
void *client)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
xmlChar *localName = xmlTextReaderLocalName(reader);
|
|
Packit Service |
569379 |
int rc = 0;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *node = NULL;
|
|
Packit Service |
569379 |
if (strcmp((const char *)localName, "criteria") == 0) {
|
|
Packit Service |
569379 |
oval_operator_t operator = oval_operator_parse(reader, "operator", OVAL_OPERATOR_UNKNOWN);
|
|
Packit Service |
569379 |
int negate = oval_parser_boolean_attribute(reader, "negate", false);
|
|
Packit Service |
569379 |
int applicability_check = oval_parser_boolean_attribute(reader, "applicability_check", false);
|
|
Packit Service |
569379 |
node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_CRITERIA,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
operator);
|
|
Packit Service |
569379 |
rc = oval_parser_parse_tag(reader, context, _oval_result_criteria_parse, node);
|
|
Packit Service |
569379 |
} else if (strcmp((const char *)localName, "criterion") == 0) {
|
|
Packit Service |
569379 |
xmlChar *test_ref = xmlTextReaderGetAttribute(reader, BAD_CAST "test_ref");
|
|
Packit Service |
569379 |
int variable_instance = oval_parser_int_attribute(reader, "variable_instance", 1);
|
|
Packit Service |
569379 |
int negate = oval_parser_boolean_attribute(reader, "negate", false);
|
|
Packit Service |
569379 |
int applicability_check = oval_parser_boolean_attribute(reader, "applicability_check", false);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_syschar_model *syschar_model = oval_result_system_get_syschar_model(sys);
|
|
Packit Service |
569379 |
struct oval_definition_model *definition_model = oval_syschar_model_get_definition_model(syschar_model);
|
|
Packit Service |
569379 |
struct oval_test *oval_test = oval_definition_model_get_new_test(definition_model, (char *)test_ref);
|
|
Packit Service |
569379 |
struct oval_result_test *rslt_test = oval_result_system_get_new_test(sys, oval_test, variable_instance);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_CRITERION,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
rslt_test,
|
|
Packit Service |
569379 |
variable_instance);
|
|
Packit Service |
569379 |
free(test_ref);
|
|
Packit Service |
569379 |
} else if (strcmp((const char *)localName, "extend_definition") == 0) {
|
|
Packit Service |
569379 |
xmlChar *definition_ref = xmlTextReaderGetAttribute(reader, BAD_CAST "definition_ref");
|
|
Packit Service |
569379 |
int variable_instance = oval_parser_int_attribute(reader, "variable_instance", 1);
|
|
Packit Service |
569379 |
int negate = oval_parser_boolean_attribute(reader, "negate", false);
|
|
Packit Service |
569379 |
int applicability_check = oval_parser_boolean_attribute(reader, "applicability_check", false);
|
|
Packit Service |
569379 |
struct oval_syschar_model *syschar_model = oval_result_system_get_syschar_model(sys);
|
|
Packit Service |
569379 |
struct oval_definition_model *definition_model = oval_syschar_model_get_definition_model(syschar_model);
|
|
Packit Service |
569379 |
struct oval_definition *oval_definition = oval_definition_model_get_new_definition(definition_model, (char *)definition_ref);
|
|
Packit Service |
569379 |
struct oval_result_definition *rslt_definition = oval_result_system_get_new_definition(sys, oval_definition, variable_instance);
|
|
Packit Service |
569379 |
node = oval_result_criteria_node_new(sys,
|
|
Packit Service |
569379 |
OVAL_NODETYPE_EXTENDDEF,
|
|
Packit Service |
569379 |
negate,
|
|
Packit Service |
569379 |
applicability_check,
|
|
Packit Service |
569379 |
rslt_definition,
|
|
Packit Service |
569379 |
variable_instance);
|
|
Packit Service |
569379 |
free(definition_ref);
|
|
Packit Service |
569379 |
} else {
|
|
Packit Service |
569379 |
dW("unhandled criteria node: <%s>.",(char *)localName);
|
|
Packit Service |
569379 |
oval_parser_skip_tag(reader, context);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
if (node==NULL || rc==-1) {
|
|
Packit Service |
569379 |
dE("Can't parse result criteria node.");
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_result_t result = oval_result_parse(reader, "result", 0);
|
|
Packit Service |
569379 |
oval_result_criteria_node_set_result(node, result);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
(*consumer) (node, client);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
free(localName);
|
|
Packit Service |
569379 |
return rc;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static xmlNode *_oval_result_CRITERIA_to_dom(struct oval_result_criteria_node *node, xmlDocPtr doc, xmlNode * parent) {
|
|
Packit Service |
569379 |
xmlNs *ns_results = xmlSearchNsByHref(doc, parent, OVAL_RESULTS_NAMESPACE);
|
|
Packit Service |
569379 |
xmlNode *node_root = xmlNewTextChild(parent, ns_results, BAD_CAST "criteria", NULL);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
oval_operator_t operator = oval_result_criteria_node_get_operator(node);
|
|
Packit Service |
569379 |
const char *operator_att = oval_operator_get_text(operator);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "operator", BAD_CAST operator_att);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_criteria_node_iterator *subnodes = oval_result_criteria_node_get_subnodes(node);
|
|
Packit Service |
569379 |
while (oval_result_criteria_node_iterator_has_more(subnodes)) {
|
|
Packit Service |
569379 |
struct oval_result_criteria_node *subnode = oval_result_criteria_node_iterator_next(subnodes);
|
|
Packit Service |
569379 |
oval_result_criteria_node_to_dom(subnode, doc, node_root);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
oval_result_criteria_node_iterator_free(subnodes);
|
|
Packit Service |
569379 |
return node_root;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static xmlNode *_oval_result_CRITERION_to_dom(struct oval_result_criteria_node *node, xmlDocPtr doc, xmlNode * parent) {
|
|
Packit Service |
569379 |
xmlNs *ns_results = xmlSearchNsByHref(doc, parent, OVAL_RESULTS_NAMESPACE);
|
|
Packit Service |
569379 |
xmlNode *node_root = xmlNewTextChild(parent, ns_results, BAD_CAST "criterion", NULL);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_test *rslt_test = oval_result_criteria_node_get_test(node);
|
|
Packit Service |
569379 |
struct oval_test *oval_test = oval_result_test_get_test(rslt_test);
|
|
Packit Service |
569379 |
char *test_ref = oval_test_get_id(oval_test);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "test_ref", BAD_CAST test_ref);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
char version[10];
|
|
Packit Service |
569379 |
*version = '\0';
|
|
Packit Service |
569379 |
snprintf(version, sizeof(version), "%d", oval_test_get_version(oval_test));
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "version", BAD_CAST version);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int instance = ((struct oval_result_criteria_node_CRITERION *) node)->variable_instance;
|
|
Packit Service |
569379 |
if (instance != 1) {
|
|
Packit Service |
569379 |
char instance_att[10] = "";
|
|
Packit Service |
569379 |
snprintf(instance_att, sizeof (instance_att), "%d", instance);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "variable_instance", BAD_CAST instance_att);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node_root;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
static xmlNode *_oval_result_EXTENDDEF_to_dom(struct oval_result_criteria_node *node, xmlDocPtr doc, xmlNode * parent) {
|
|
Packit Service |
569379 |
xmlNs *ns_results = xmlSearchNsByHref(doc, parent, OVAL_RESULTS_NAMESPACE);
|
|
Packit Service |
569379 |
xmlNode *node_root = xmlNewTextChild(parent, ns_results, BAD_CAST "extend_definition", NULL);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
struct oval_result_definition *rslt_definition = oval_result_criteria_node_get_extends(node);
|
|
Packit Service |
569379 |
struct oval_definition *oval_definition = oval_result_definition_get_definition(rslt_definition);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
char *definition_ref = oval_definition_get_id(oval_definition);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "definition_ref", BAD_CAST definition_ref);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int version = oval_definition_get_version(oval_definition);
|
|
Packit Service |
569379 |
char version_att[10] = "";
|
|
Packit Service |
569379 |
snprintf(version_att, sizeof(version_att), "%d", version);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "version", BAD_CAST version_att);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int instance = ((struct oval_result_criteria_node_EXTENDDEF *) node)->variable_instance;
|
|
Packit Service |
569379 |
if (instance != 1) {
|
|
Packit Service |
569379 |
char instance_att[10] = "";
|
|
Packit Service |
569379 |
snprintf(instance_att, sizeof (instance_att), "%d", instance);
|
|
Packit Service |
569379 |
xmlNewProp(node_root, BAD_CAST "variable_instance", BAD_CAST instance_att);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return node_root;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
xmlNode *oval_result_criteria_node_to_dom(struct oval_result_criteria_node * node, xmlDocPtr doc, xmlNode * parent) {
|
|
Packit Service |
569379 |
xmlNode *criteria_node = NULL;
|
|
Packit Service |
569379 |
switch (oval_result_criteria_node_get_type(node)) {
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERIA:
|
|
Packit Service |
569379 |
criteria_node = _oval_result_CRITERIA_to_dom(node, doc, parent);
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_CRITERION:
|
|
Packit Service |
569379 |
criteria_node = _oval_result_CRITERION_to_dom(node, doc, parent);
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
case OVAL_NODETYPE_EXTENDDEF:
|
|
Packit Service |
569379 |
criteria_node = _oval_result_EXTENDDEF_to_dom(node, doc, parent);
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
default:
|
|
Packit Service |
569379 |
break;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
if (criteria_node) {
|
|
Packit Service |
569379 |
oval_result_t result = oval_result_criteria_node_get_result(node);
|
|
Packit Service |
569379 |
const char *result_att = oval_result_get_text(result);
|
|
Packit Service |
569379 |
xmlNewProp(criteria_node, BAD_CAST "result", BAD_CAST result_att);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool negate = oval_result_criteria_node_get_negate(node);
|
|
Packit Service |
569379 |
if (negate != false) {
|
|
Packit Service |
569379 |
xmlNewProp(criteria_node, BAD_CAST "negate", BAD_CAST "true");
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool applicability_check = oval_result_criteria_node_get_applicability_check(node);
|
|
Packit Service |
569379 |
if (applicability_check != false) {
|
|
Packit Service |
569379 |
xmlNewProp(criteria_node, BAD_CAST "applicability_check", BAD_CAST "true");
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
return criteria_node;
|
|
Packit Service |
569379 |
}
|