Blame swig/openscap.i

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