|
Packit Service |
569379 |
/*
|
|
Packit Service |
569379 |
* Open Vulnerability and Assessment Language
|
|
Packit Service |
569379 |
* (http://oval.mitre.org/)
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/*
|
|
Packit Service |
569379 |
* Copyright 2009--2014 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 |
* Maros Barabas <mbarabas@redhat.com>
|
|
Packit Service |
569379 |
*
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/* Define OSCAP_API as an empty string */
|
|
Packit Service |
569379 |
/* Prevents 'Syntax error in input(1).' message */
|
|
Packit Service |
569379 |
#define OSCAP_API
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/* Convert a tuple element to a C array */
|
|
Packit Service |
569379 |
/* SWIG can't understand __attribute__(x), so we make it go away */
|
|
Packit Service |
569379 |
#define __attribute__(x)
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#if defined(SWIGPYTHON)
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/* Definitions for PYTHON */
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%exception xccdf_policy_evaluate {
|
|
Packit Service |
569379 |
Py_BEGIN_ALLOW_THREADS
|
|
Packit Service |
569379 |
$action
|
|
Packit Service |
569379 |
Py_END_ALLOW_THREADS
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(in) time_t
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
if (PyLong_Check($input))
|
|
Packit Service |
569379 |
$1 = (time_t) PyLong_AsLong($input);
|
|
Packit Service |
569379 |
else if (PyInt_Check($input))
|
|
Packit Service |
569379 |
$1 = (time_t) PyInt_AsLong($input);
|
|
Packit Service |
569379 |
else if (PyFloat_Check($input))
|
|
Packit Service |
569379 |
$1 = (time_t) PyFloat_AsDouble($input);
|
|
Packit Service |
569379 |
else {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_TypeError,"Expected a large number");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(out) time_t
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
$result = PyLong_FromLong((long)$1);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(in) void * {
|
|
Packit Service |
569379 |
$result = SWIG_ConvertPtr($input,%as_voidptrptr(&$1), 0, $disown);
|
|
Packit Service |
569379 |
if (!SWIG_IsOK($result)) {
|
|
Packit Service |
569379 |
%argument_fail($result, "$type", $symname, $argnum);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(in) char ** {
|
|
Packit Service |
569379 |
if (PyList_Check($input)) {
|
|
Packit Service |
569379 |
int size = PyList_Size($input);
|
|
Packit Service |
569379 |
int i = 0;
|
|
Packit Service |
569379 |
$1 = (char **) malloc((size+1)*sizeof(char *));
|
|
Packit Service |
569379 |
for (i = 0; i < size; i++) {
|
|
Packit Service |
569379 |
PyObject *o = PyList_GetItem($input,i);
|
|
Packit Service |
569379 |
/*if (PyString_Check(o))*/
|
|
Packit Service |
569379 |
$1[i] = PyString_AsString(PyList_GetItem($input,i));
|
|
Packit Service |
569379 |
/*else {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_TypeError,"list must contain strings");
|
|
Packit Service |
569379 |
free($1);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}*/
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
$1[i] = 0;
|
|
Packit Service |
569379 |
} else {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_TypeError,"not a list");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(freearg) char ** {
|
|
Packit Service |
569379 |
free((char *) $1);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%typemap(in) struct cpe_name ** {
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int i;
|
|
Packit Service |
569379 |
int a_size = 0;
|
|
Packit Service |
569379 |
int res_o = 0;
|
|
Packit Service |
569379 |
a_size = (int) PySequence_Length($input);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
if (!PySequence_Check($input)) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected a sequence");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
if (a_size <= 0) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected not empty sequence");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
$1 = (struct cpe_name **) malloc(a_size*sizeof(struct cpe_name *));
|
|
Packit Service |
569379 |
for (i = 0; i < a_size; i++) {
|
|
Packit Service |
569379 |
void *arg = 0;
|
|
Packit Service |
569379 |
PyObject *obj = PySequence_GetItem($input,i);
|
|
Packit Service |
569379 |
if (obj == NULL) {
|
|
Packit Service |
569379 |
SWIG_exception_fail(SWIG_ArgError(res_o), "in argument '" "cpe_name" "' substitution '" "', can't access sequence");
|
|
Packit Service |
569379 |
SWIG_fail; /*5956*/
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
res_o = SWIG_ConvertPtr(obj, &arg, SWIGTYPE_p_cpe_name, 0 );
|
|
Packit Service |
569379 |
if (!SWIG_IsOK(res_o)) {
|
|
Packit Service |
569379 |
SWIG_exception_fail(SWIG_ArgError(res_o), "in argument '" "cpe_name" "' substitution invalid types");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
$1[i] = (struct cpe_name *) arg;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
%typemap(in) struct oval_syschar_model ** {
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int i;
|
|
Packit Service |
569379 |
int a_size = 0;
|
|
Packit Service |
569379 |
int res_o = 0;
|
|
Packit Service |
569379 |
a_size = (int) PySequence_Length($input);
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
if (!PySequence_Check($input)) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected a sequence");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
if (a_size <= 0) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected not empty sequence");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
$1 = (struct oval_syschar_model **) malloc(a_size*sizeof(struct oval_syschar_model *));
|
|
Packit Service |
569379 |
for (i = 0; i < a_size; i++) {
|
|
Packit Service |
569379 |
void *arg = 0;
|
|
Packit Service |
569379 |
PyObject *obj = PySequence_GetItem($input,i);
|
|
Packit Service |
569379 |
if (obj == NULL) {
|
|
Packit Service |
569379 |
SWIG_exception_fail(SWIG_ArgError(res_o), "in argument '" "oval_syschar_model" "' substitution '" "', can't access sequence");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
res_o = SWIG_ConvertPtr(obj, &arg, SWIGTYPE_p_oval_syschar_model, 0 );
|
|
Packit Service |
569379 |
if (!SWIG_IsOK(res_o)) {
|
|
Packit Service |
569379 |
SWIG_exception_fail(SWIG_ArgError(res_o), "in argument '" "oval_syschar_model" "' substitution invalid types");
|
|
Packit Service |
569379 |
SWIG_fail;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
$1[i] = (struct oval_syschar_model *) arg;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
%typemap(freearg) struct oval_syschar_model ** {
|
|
Packit Service |
569379 |
free($1);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
#elif defined(SWIGPERL)
|
|
Packit Service |
569379 |
/* Definitions for PERL */
|
|
Packit Service |
569379 |
#endif
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/common/public/oscap.h"
|
|
Packit Service |
569379 |
#include "../../src/common/public/oscap_error.h"
|
|
Packit Service |
569379 |
#include "../../src/common/public/oscap_text.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#include "../../src/DS/public/scap_ds.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%include "../../src/common/public/oscap.h"
|
|
Packit Service |
569379 |
%include "../../src/common/public/oscap_error.h"
|
|
Packit Service |
569379 |
%include "../../src/common/public/oscap_text.h"
|
|
Packit Service |
569379 |
%include "../../src/common/public/oscap_reference.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%include "../../src/DS/public/scap_ds.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/CPE/public/cpe_name.h"
|
|
Packit Service |
569379 |
#include "../../src/CPE/public/cpe_dict.h"
|
|
Packit Service |
569379 |
#include "../../src/CPE/public/cpe_lang.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/CPE/public/cpe_name.h"
|
|
Packit Service |
569379 |
%include "../../src/CPE/public/cpe_dict.h"
|
|
Packit Service |
569379 |
%include "../../src/CPE/public/cpe_lang.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/CVE/public/cve_nvd.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/CVE/public/cve_nvd.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/CVSS/public/cvss_score.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/CVSS/public/cvss_score.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/DS/public/ds_rds_session.h"
|
|
Packit Service |
569379 |
#include "../../src/DS/public/ds_sds_session.h"
|
|
Packit Service |
569379 |
#include "../../src/DS/public/scap_ds.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/DS/public/ds_rds_session.h"
|
|
Packit Service |
569379 |
%include "../../src/DS/public/ds_sds_session.h"
|
|
Packit Service |
569379 |
%include "../../src/DS/public/scap_ds.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/XCCDF/public/xccdf_benchmark.h"
|
|
Packit Service |
569379 |
#include "../../src/XCCDF/public/xccdf_session.h"
|
|
Packit Service |
569379 |
#include "../../src/XCCDF_POLICY/public/xccdf_policy.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/XCCDF/public/xccdf_benchmark.h"
|
|
Packit Service |
569379 |
%include "../../src/XCCDF/public/xccdf_session.h"
|
|
Packit Service |
569379 |
%include "../../src/XCCDF_POLICY/public/xccdf_policy.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_adt.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_agent_api.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_definitions.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_directives.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_system_characteristics.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_results.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_schema_version.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_session.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_types.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_variables.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_probe.h"
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_probe_session.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_adt.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_agent_api.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_definitions.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_directives.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_system_characteristics.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_results.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_schema_version.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_session.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_types.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_variables.h"
|
|
Packit Service |
569379 |
#if defined(ENABLE_PROBES)
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_probe.h"
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_probe_session.h"
|
|
Packit Service |
569379 |
#endif
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/OVAL/public/oval_agent_xccdf_api.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/OVAL/public/oval_agent_xccdf_api.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%module openscap
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
#include "../../src/source/public/oscap_source.h"
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
%include "../../src/source/public/oscap_source.h"
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/*%typemap(in) value[ANY] {
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int i;
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected a sequence");
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
if (!PySequence_Check($input)) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Expected a sequence");
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
if (PySequence_Length($input) != $1_dim0) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Size mismatch. Expected $1_dim0 elements");
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
$1 = (void **) malloc($1_dim0*sizeof( Py_TYPE(PySequence_GetItem($input, 0)) ));
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
for (i = 0; i < $1_dim0; i++) {
|
|
Packit Service |
569379 |
PyObject *o = PySequence_GetItem($input,i);
|
|
Packit Service |
569379 |
if (Py_TYPE(PySequence_GetItem($input,i)) != Py_TYPE(PySequence_GetItem($input,0)) {
|
|
Packit Service |
569379 |
PyErr_SetString(PyExc_ValueError,"Type mismatch");
|
|
Packit Service |
569379 |
free($1);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
$1[i] = (PyTYPE(PySequence_GetItem($input, i))) o;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
#if defined(SWIGPYTHON)
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%{
|
|
Packit Service |
569379 |
struct internal_usr {
|
|
Packit Service |
569379 |
PyObject *func;
|
|
Packit Service |
569379 |
PyObject *usr;
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int rule_result_output_callback_wrapper(struct xccdf_rule_result* rule_result, void *arg)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
PyGILState_STATE state;
|
|
Packit Service |
569379 |
PyObject *py_rule_result;
|
|
Packit Service |
569379 |
PyObject *arglist;
|
|
Packit Service |
569379 |
PyObject *func, *usrdata;
|
|
Packit Service |
569379 |
struct internal_usr *data;
|
|
Packit Service |
569379 |
PyObject *result;
|
|
Packit Service |
569379 |
double dres = 0;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
state = PyGILState_Ensure();
|
|
Packit Service |
569379 |
py_rule_result = SWIG_NewPointerObj(rule_result, SWIGTYPE_p_xccdf_rule_result, 1);
|
|
Packit Service |
569379 |
data = (struct internal_usr *) arg;
|
|
Packit Service |
569379 |
func = data->func;
|
|
Packit Service |
569379 |
usrdata = data->usr;
|
|
Packit Service |
569379 |
arglist = Py_BuildValue("OO", py_rule_result, usrdata);
|
|
Packit Service |
569379 |
if (!PyCallable_Check(func)) {
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
result = PyEval_CallObject(func,arglist);
|
|
Packit Service |
569379 |
if (result == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return -1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
dres = PyInt_AsLong(result);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return dres;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int rule_start_callback_wrapper(struct xccdf_rule* rule, void *arg)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
PyGILState_STATE state;
|
|
Packit Service |
569379 |
PyObject *py_rule;
|
|
Packit Service |
569379 |
PyObject *arglist;
|
|
Packit Service |
569379 |
PyObject *func, *usrdata;
|
|
Packit Service |
569379 |
struct internal_usr *data;
|
|
Packit Service |
569379 |
PyObject *result;
|
|
Packit Service |
569379 |
double dres = 0;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
state = PyGILState_Ensure();
|
|
Packit Service |
569379 |
py_rule = SWIG_NewPointerObj(rule, SWIGTYPE_p_xccdf_rule, 1);
|
|
Packit Service |
569379 |
data = (struct internal_usr *) arg;
|
|
Packit Service |
569379 |
func = data->func;
|
|
Packit Service |
569379 |
usrdata = data->usr;
|
|
Packit Service |
569379 |
arglist = Py_BuildValue("OO", py_rule, usrdata);
|
|
Packit Service |
569379 |
if (!PyCallable_Check(func)) {
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
result = PyEval_CallObject(func,arglist);
|
|
Packit Service |
569379 |
if (result == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return -1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
dres = PyInt_AsLong(result);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return dres;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int agent_reporter_callback_wrapper(const struct oval_result_definition* res_def, void *arg)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
PyGILState_STATE state;
|
|
Packit Service |
569379 |
PyObject *py_res_def;
|
|
Packit Service |
569379 |
PyObject *arglist;
|
|
Packit Service |
569379 |
PyObject *func, *usrdata;
|
|
Packit Service |
569379 |
struct internal_usr *data;
|
|
Packit Service |
569379 |
PyObject *result;
|
|
Packit Service |
569379 |
double dres = 0;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
state = PyGILState_Ensure();
|
|
Packit Service |
569379 |
py_res_def = SWIG_NewPointerObj(res_def, SWIGTYPE_p_oval_result_definition, 1);
|
|
Packit Service |
569379 |
data = (struct internal_usr *) arg;
|
|
Packit Service |
569379 |
func = data->func;
|
|
Packit Service |
569379 |
usrdata = data->usr;
|
|
Packit Service |
569379 |
arglist = Py_BuildValue("OO", py_res_def, usrdata);
|
|
Packit Service |
569379 |
if (!PyCallable_Check(func)) {
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
result = PyEval_CallObject(func,arglist);
|
|
Packit Service |
569379 |
if (result == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return -1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
dres = PyInt_AsLong(result);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return dres;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int validate_callback_wrapper(const char* file, int line, const char* msg, void *arg)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
PyGILState_STATE state;
|
|
Packit Service |
569379 |
PyObject *arglist;
|
|
Packit Service |
569379 |
PyObject *func, *usrdata;
|
|
Packit Service |
569379 |
struct internal_usr *data;
|
|
Packit Service |
569379 |
PyObject *result;
|
|
Packit Service |
569379 |
double dres = 0;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
state = PyGILState_Ensure();
|
|
Packit Service |
569379 |
data = (struct internal_usr *) arg;
|
|
Packit Service |
569379 |
func = data->func;
|
|
Packit Service |
569379 |
usrdata = data->usr;
|
|
Packit Service |
569379 |
arglist = Py_BuildValue("sisO", file, line, msg, usrdata);
|
|
Packit Service |
569379 |
if (!PyCallable_Check(func)) {
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
result = PyEval_CallObject(func,arglist);
|
|
Packit Service |
569379 |
if (result == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return -1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
dres = PyInt_AsLong(result);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return dres;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
char * sub_callback_wrapper(xccdf_subst_type_t type, const char *id, void *arg)
|
|
Packit Service |
569379 |
{
|
|
Packit Service |
569379 |
PyGILState_STATE state;
|
|
Packit Service |
569379 |
PyObject *arglist;
|
|
Packit Service |
569379 |
PyObject *func, *usrdata;
|
|
Packit Service |
569379 |
struct internal_usr *data;
|
|
Packit Service |
569379 |
PyObject *result;
|
|
Packit Service |
569379 |
char *dres = NULL;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
state = PyGILState_Ensure();
|
|
Packit Service |
569379 |
data = (struct internal_usr *) arg;
|
|
Packit Service |
569379 |
func = data->func;
|
|
Packit Service |
569379 |
usrdata = data->usr;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
arglist = Py_BuildValue("isO", type, id, usrdata);
|
|
Packit Service |
569379 |
if (!PyCallable_Check(func)) {
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return 1;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
result = PyEval_CallObject(func, arglist);
|
|
Packit Service |
569379 |
if (result == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
dres = PyString_AsString(result);
|
|
Packit Service |
569379 |
if (dres == NULL) {
|
|
Packit Service |
569379 |
if (PyErr_Occurred() != NULL)
|
|
Packit Service |
569379 |
PyErr_PrintEx(0);
|
|
Packit Service |
569379 |
PyErr_Print();
|
|
Packit Service |
569379 |
Py_DECREF(arglist);
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return NULL;
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
Py_XDECREF(result);
|
|
Packit Service |
569379 |
PyGILState_Release(state);
|
|
Packit Service |
569379 |
return strdup(dres);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%inline %{
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool xccdf_policy_model_register_output_callback_py(struct xccdf_policy_model *model, PyObject *func, PyObject *usr) {
|
|
Packit Service |
569379 |
struct internal_usr *new_usrdata;
|
|
Packit Service |
569379 |
PyEval_InitThreads();
|
|
Packit Service |
569379 |
Py_INCREF(func);
|
|
Packit Service |
569379 |
Py_INCREF(usr);
|
|
Packit Service |
569379 |
new_usrdata = malloc(sizeof(struct internal_usr));
|
|
Packit Service |
569379 |
if (new_usrdata == NULL) return false;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
new_usrdata->func = func;
|
|
Packit Service |
569379 |
new_usrdata->usr = usr;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return xccdf_policy_model_register_output_callback(model, rule_result_output_callback_wrapper, (void *)new_usrdata);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
bool xccdf_policy_model_register_start_callback_py(struct xccdf_policy_model *model, PyObject *func, PyObject *usr) {
|
|
Packit Service |
569379 |
struct internal_usr *new_usrdata;
|
|
Packit Service |
569379 |
PyEval_InitThreads();
|
|
Packit Service |
569379 |
Py_INCREF(func);
|
|
Packit Service |
569379 |
Py_INCREF(usr);
|
|
Packit Service |
569379 |
new_usrdata = malloc(sizeof(struct internal_usr));
|
|
Packit Service |
569379 |
if (new_usrdata == NULL) return false;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
new_usrdata->func = func;
|
|
Packit Service |
569379 |
new_usrdata->usr = usr;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return xccdf_policy_model_register_start_callback(model, rule_start_callback_wrapper, (void *)new_usrdata);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
int oval_agent_eval_system_py(oval_agent_session_t * asess, PyObject * func, PyObject *usr) {
|
|
Packit Service |
569379 |
struct internal_usr *new_usrdata;
|
|
Packit Service |
569379 |
PyEval_InitThreads();
|
|
Packit Service |
569379 |
Py_INCREF(func);
|
|
Packit Service |
569379 |
Py_INCREF(usr);
|
|
Packit Service |
569379 |
new_usrdata = malloc(sizeof(struct internal_usr));
|
|
Packit Service |
569379 |
if (new_usrdata == NULL) return false;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
new_usrdata->func = func;
|
|
Packit Service |
569379 |
new_usrdata->usr = usr;
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
return oval_agent_eval_system(asess, agent_reporter_callback_wrapper, (void *) new_usrdata);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
/* we only recopy the first part of the struct, in order to free the rule property
|
|
Packit Service |
569379 |
* since it's defined in xccdf_session.c and not xccdf_session.h, this struct is unknown
|
|
Packit Service |
569379 |
* and so it's not possible to access to the rule property without defining it
|
|
Packit Service |
569379 |
*/
|
|
Packit Service |
569379 |
struct xccdf_session {
|
|
Packit Service |
569379 |
char *filename;
|
|
Packit Service |
569379 |
char *rule;
|
|
Packit Service |
569379 |
};
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void xccdf_session_set_rule_py(struct xccdf_session *sess, char *rule) {
|
|
Packit Service |
569379 |
char *n_rule = strdup(rule);
|
|
Packit Service |
569379 |
xccdf_session_set_rule(sess, n_rule);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
void xccdf_session_free_py(struct xccdf_session *sess){
|
|
Packit Service |
569379 |
free(sess->rule);
|
|
Packit Service |
569379 |
xccdf_session_free(sess);
|
|
Packit Service |
569379 |
}
|
|
Packit Service |
569379 |
|
|
Packit Service |
569379 |
%}
|
|
Packit Service |
569379 |
#endif
|