blob: 267250d4125378a7db906b940a3a3fab3990c25f [file] [log] [blame]
/**
* SWIG declarations for libqpol.
*
* @author Jeremy A. Mowery jmowery@tresys.com
* @author Jason Tang jtang@tresys.com
*
* Copyright (C) 2006-2008 Tresys Technology, LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
%module qpol
%{
#include <sys/stat.h>
#include <arpa/inet.h>
#include <sepol/policydb.h>
#include <sepol/policydb/policydb.h>
#include "include/qpol/avrule_query.h"
#include "include/qpol/bool_query.h"
#include "include/qpol/class_perm_query.h"
#include "include/qpol/cond_query.h"
#include "include/qpol/constraint_query.h"
#include "include/qpol/context_query.h"
#include "include/qpol/fs_use_query.h"
#include "include/qpol/genfscon_query.h"
#include "include/qpol/isid_query.h"
#include "include/qpol/iterator.h"
#include "include/qpol/mls_query.h"
#include "include/qpol/mlsrule_query.h"
#include "include/qpol/module.h"
#include "include/qpol/netifcon_query.h"
#include "include/qpol/nodecon_query.h"
#include "include/qpol/policy.h"
#include "include/qpol/policy_extend.h"
#include "include/qpol/portcon_query.h"
#include "include/qpol/rbacrule_query.h"
#include "include/qpol/role_query.h"
#include "include/qpol/syn_rule_query.h"
#include "include/qpol/terule_query.h"
#include "include/qpol/type_query.h"
#include "include/qpol/user_query.h"
#include "include/qpol/util.h"
#include "include/qpol/xen_query.h"
/* Provide hooks so that language-specific modules can define the
* callback function, used by the handler in
* qpol_policy_open_from_file().
*/
SWIGEXPORT qpol_callback_fn_t qpol_swig_message_callback = NULL;
SWIGEXPORT void * qpol_swig_message_callback_arg = NULL;
%}
%include exception.i
%include stdint.i
/* handle size_t as architecture dependent */
#ifdef SWIGWORDSIZE64
typedef uint64_t size_t;
#else
typedef uint32_t size_t;
#endif
%inline %{
/* cast void * to char * as it can't have a constructor */
const char * to_str(void *x) {
return (const char *)x;
}
/* cast a void * to int, while freeing the pointer */
int to_int_with_free(void *x) {
int i = *(int *)x;
free(x);
return i;
}
%}
%{
/* C Bridge to Python logging callback */
__attribute__ ((format(printf, 4, 0)))
static void qpol_log_callback(void *varg,
const qpol_policy_t * p __attribute__ ((unused)),
int level,
const char *fmt,
va_list va_args)
{
/* Expand to a full string to avoid any C format string
* or variable args handling when passing to Python
*/
PyObject *py_callback, *rc;
char *str = NULL;
if(vasprintf(&str, fmt, va_args) < 0)
return;
py_callback = (PyObject *) varg;
/* this char* casting doesn't make sense, but this runs afoul of -Werror
* otherwise as the Python library doesn't do const char* */
rc = PyObject_CallFunction(py_callback, (char*)"(is)", level, str);
Py_XDECREF(rc);
free(str);
}
%}
%pythoncode %{
import logging
from functools import wraps
def QpolGenerator(cast):
"""
A decorator which converts qpol iterators into Python generators.
Qpol iterators use void* to be generic about their contents.
The purpose of the _from_void functions below is to wrap
the pointer casting, hence the "cast" variable name here.
Decorator parameter:
cast A wrapper function which casts the qpol iterator return pointer
to the proper C data type pointer. The Python function
reference to the C Python extension is used, for example:
@QpolGenerator(_qpol.qpol_type_from_void)
"""
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
qpol_iter = func(*args)
while not qpol_iter.isend():
yield cast(qpol_iter.item())
qpol_iter.next_()
return wrapper
return decorate
def qpol_logger(level, msg):
"""Log qpol messages via Python logging."""
logging.getLogger(__name__).debug(msg)
def qpol_policy_factory(path):
"""Factory function for qpol policy objects."""
# The main purpose here is to hook in the
# above logger callback.
return qpol_policy_t(path, 0, qpol_logger)
%}
/* qpol_policy */
#define QPOL_POLICY_OPTION_NO_NEVERALLOWS 0x00000001
#define QPOL_POLICY_OPTION_NO_RULES 0x00000002
#define QPOL_POLICY_OPTION_MATCH_SYSTEM 0x00000004
/* add maximum and minimum policy versions supported by the statically linked libsepol */
%constant int QPOL_POLICY_MAX_VERSION = POLICYDB_VERSION_MAX;
%constant int QPOL_POLICY_MIN_VERSION = POLICYDB_VERSION_MIN;
typedef struct qpol_policy {} qpol_policy_t;
typedef void (*qpol_callback_fn_t) (void *varg, struct qpol_policy * policy, int level, const char *fmt, va_list va_args);
typedef enum qpol_capability
{
QPOL_CAP_ATTRIB_NAMES,
QPOL_CAP_SYN_RULES,
QPOL_CAP_LINE_NUMBERS,
QPOL_CAP_CONDITIONALS,
QPOL_CAP_MLS,
QPOL_CAP_MODULES,
QPOL_CAP_RULES_LOADED,
QPOL_CAP_SOURCE,
QPOL_CAP_NEVERALLOW,
QPOL_CAP_POLCAPS,
QPOL_CAP_BOUNDS,
QPOL_CAP_DEFAULT_OBJECTS,
QPOL_CAP_DEFAULT_TYPE,
QPOL_CAP_PERMISSIVE,
QPOL_CAP_FILENAME_TRANS,
QPOL_CAP_ROLETRANS,
QPOL_CAP_XPERM_IOCTL
} qpol_capability_e;
%exception qpol_policy {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_SyntaxError, "Invalid policy.");
} else {
PyErr_SetFromErrnoWithFilename(PyExc_OSError, arg1);
}
return NULL;
}
}
%extend qpol_policy {
qpol_policy(const char *path, const int options, PyObject *py_callback) {
qpol_policy_t *p;
if (!PyCallable_Check(py_callback)) {
PyErr_SetString(PyExc_TypeError, "Callback parameter must be callable");
return NULL;
}
qpol_policy_open_from_file(path, &p, qpol_log_callback, (void*)py_callback, options);
return p;
}
~qpol_policy() {
qpol_policy_destroy(&self);
};
int version () {
unsigned int v;
(void)qpol_policy_get_policy_version(self, &v); /* only error is on null parameters neither can be here */
return (int) v;
};
const char *handle_unknown () {
unsigned int h;
qpol_policy_get_policy_handle_unknown(self, &h);
switch (h) {
case SEPOL_DENY_UNKNOWN: return "deny";
case SEPOL_REJECT_UNKNOWN: return "reject";
case SEPOL_ALLOW_UNKNOWN: return "allow";
default: return "unknown";
}
};
/* This is whether SELinux or XEN policy */
const char *target_platform () {
int t;
(void)qpol_policy_get_target_platform(self, &t);
switch (t) {
case SEPOL_TARGET_SELINUX: return "selinux";
case SEPOL_TARGET_XEN: return "xen";
default: return "unknown";
}
};
int capability (qpol_capability_e cap) {
return qpol_policy_has_capability(self, cap);
};
%newobject type_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_type_from_void) %}
qpol_iterator_t *type_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_type_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t type_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_type_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject role_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_role_from_void) %}
qpol_iterator_t *role_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_role_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t role_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_role_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject level_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_level_from_void) %}
qpol_iterator_t *level_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_level_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t level_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_level_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject cat_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_cat_from_void) %}
qpol_iterator_t *cat_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_cat_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t cat_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_cat_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject user_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_user_from_void) %}
qpol_iterator_t *user_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_user_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t user_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_user_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject bool_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_bool_from_void) %}
qpol_iterator_t *bool_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_bool_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t bool_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_bool_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject class_iter(char*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_class_from_void) %}
qpol_iterator_t *class_iter(char *perm=NULL) {
qpol_iterator_t *iter;
if (perm) {
if (qpol_perm_get_class_iter(self, perm, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get class iterator");
}
} else {
if (qpol_policy_get_class_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
}
return iter;
fail:
return NULL;
};
size_t class_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_class_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject common_iter(char*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_common_from_void) %}
qpol_iterator_t *common_iter(char *perm=NULL) {
qpol_iterator_t *iter;
if (perm) {
if (qpol_perm_get_common_iter(self, perm, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get common iterator");
}
} else {
if (qpol_policy_get_common_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
}
return iter;
fail:
return NULL;
};
size_t common_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_common_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject fs_use_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_fs_use_from_void) %}
qpol_iterator_t *fs_use_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_fs_use_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t fs_use_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_fs_use_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject genfscon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_genfscon_from_void) %}
qpol_iterator_t *genfscon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_genfscon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t genfscon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_genfscon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject isid_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_isid_from_void) %}
qpol_iterator_t *isid_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_isid_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t isid_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_isid_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject netifcon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_netifcon_from_void) %}
qpol_iterator_t *netifcon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_netifcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t netifcon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_netifcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject nodecon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_nodecon_from_void) %}
qpol_iterator_t *nodecon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_nodecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t nodecon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_nodecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject portcon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_portcon_from_void) %}
qpol_iterator_t *portcon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_portcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t portcon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_portcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject constraint_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_constraint_from_void) %}
qpol_iterator_t *constraint_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_constraint_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t constraint_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_constraint_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject validatetrans_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_validatetrans_from_void) %}
qpol_iterator_t *validatetrans_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_validatetrans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t validatetrans_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_validatetrans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject role_allow_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_role_allow_from_void) %}
qpol_iterator_t *role_allow_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_role_allow_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t role_allow_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_role_allow_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject role_trans_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_role_trans_from_void) %}
qpol_iterator_t *role_trans_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_role_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t role_trans_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_role_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject range_trans_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_range_trans_from_void) %}
qpol_iterator_t *range_trans_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_range_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t range_trans_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_range_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject avrule_iter(int);
%pythoncode %{ @QpolGenerator(_qpol.qpol_avrule_from_void) %}
qpol_iterator_t *avrule_iter() {
qpol_iterator_t *iter;
uint32_t rule_types = QPOL_RULE_ALLOW | QPOL_RULE_AUDITALLOW | QPOL_RULE_DONTAUDIT;
if (qpol_policy_has_capability(self, QPOL_CAP_NEVERALLOW))
rule_types |= QPOL_RULE_NEVERALLOW;
if (qpol_policy_get_avrule_iter(self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t avrule_allow_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_ALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t avrule_auditallow_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_AUDITALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t avrule_neverallow_count() {
if (qpol_policy_has_capability(self, QPOL_CAP_NEVERALLOW)) {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_NEVERALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
} else {
return 0;
}
fail:
return 0;
};
size_t avrule_dontaudit_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_DONTAUDIT, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject avulex_iter(int);
%pythoncode %{ @QpolGenerator(_qpol.qpol_avrule_from_void) %}
qpol_iterator_t *avrulex_iter() {
qpol_iterator_t *iter;
uint32_t rule_types = QPOL_RULE_XPERMS_ALLOW | QPOL_RULE_XPERMS_AUDITALLOW | QPOL_RULE_XPERMS_DONTAUDIT;
if (qpol_policy_has_capability(self, QPOL_CAP_NEVERALLOW))
rule_types |= QPOL_RULE_XPERMS_NEVERALLOW;
if (qpol_policy_get_avrule_iter(self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t avrule_allowx_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_XPERMS_ALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t avrule_auditallowx_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_XPERMS_AUDITALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t avrule_neverallowx_count() {
if (qpol_policy_has_capability(self, QPOL_CAP_NEVERALLOW)) {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_XPERMS_NEVERALLOW, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
} else {
return 0;
}
fail:
return 0;
};
size_t avrule_dontauditx_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_avrule_iter(self, QPOL_RULE_XPERMS_DONTAUDIT, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject terule_iter(int);
%pythoncode %{ @QpolGenerator(_qpol.qpol_terule_from_void) %}
qpol_iterator_t *terule_iter() {
qpol_iterator_t *iter;
uint32_t rule_types = QPOL_RULE_TYPE_TRANS | QPOL_RULE_TYPE_CHANGE | QPOL_RULE_TYPE_MEMBER;
if (qpol_policy_get_terule_iter(self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t terule_trans_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_terule_iter(self, QPOL_RULE_TYPE_TRANS, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t terule_change_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_terule_iter(self, QPOL_RULE_TYPE_CHANGE, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
size_t terule_member_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_terule_iter(self, QPOL_RULE_TYPE_MEMBER, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject cond_iter();
qpol_iterator_t *cond_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_cond_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t cond_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_cond_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject filename_trans_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_filename_trans_from_void) %}
qpol_iterator_t *filename_trans_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_filename_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t filename_trans_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_filename_trans_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject permissive_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_type_from_void) %}
qpol_iterator_t *permissive_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_permissive_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t permissive_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_permissive_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject typebounds_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_typebounds_from_void) %}
qpol_iterator_t *typebounds_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_typebounds_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
%newobject polcap_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_polcap_from_void) %}
qpol_iterator_t *polcap_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_polcap_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t polcap_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_polcap_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject default_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_default_object_from_void) %}
qpol_iterator_t *default_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_default_object_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
%newobject iomemcon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_iomemcon_from_void) %}
qpol_iterator_t *iomemcon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_iomemcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t iomemcon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_iomemcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject ioportcon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_ioportcon_from_void) %}
qpol_iterator_t *ioportcon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_ioportcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t ioportcon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_ioportcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject pcidevicecon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_pcidevicecon_from_void) %}
qpol_iterator_t *pcidevicecon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_pcidevicecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t pcidevicecon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_pcidevicecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject pirqcon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_pirqcon_from_void) %}
qpol_iterator_t *pirqcon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_pirqcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t pirqcon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_pirqcon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
%newobject devicetreecon_iter();
%pythoncode %{ @QpolGenerator(_qpol.qpol_devicetreecon_from_void) %}
qpol_iterator_t *devicetreecon_iter() {
qpol_iterator_t *iter;
if (qpol_policy_get_devicetreecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
return iter;
fail:
return NULL;
};
size_t devicetreecon_count() {
qpol_iterator_t *iter;
size_t count = 0;
if (qpol_policy_get_devicetreecon_iter(self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
qpol_iterator_get_size(iter, &count);
return count;
fail:
return 0;
};
};
/* qpol iterator */
typedef struct qpol_iterator {} qpol_iterator_t;
%extend qpol_iterator {
/* user never directly creates, but SWIG expects a constructor */
qpol_iterator() {
SWIG_exception(SWIG_TypeError, "User may not create iterators difectly");
fail:
return NULL;
};
~qpol_iterator() {
qpol_iterator_destroy(&self);
};
void *item() {
void *i;
if (qpol_iterator_get_item(self, &i)) {
SWIG_exception(SWIG_RuntimeError, "Could not get item");
}
return i;
fail:
return NULL;
};
void next_() {
if (qpol_iterator_next(self)) {
SWIG_exception(SWIG_RuntimeError, "Error advancing iterator");
}
fail:
return;
};
int isend() {
return qpol_iterator_end(self);
};
size_t size() {
size_t s;
if (qpol_iterator_get_size(self, &s)) {
SWIG_exception(SWIG_ValueError, "Could not get iterator size");
}
return s;
fail:
return 0;
};
};
/* qpol type */
typedef struct qpol_type {} qpol_type_t;
%extend qpol_type {
%exception qpol_type {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Invalid type or attribute.");
return NULL;
}
}
qpol_type(qpol_policy_t *p, const char *name) {
const qpol_type_t *t;
qpol_policy_get_type_by_name(p, name, &t);
return (qpol_type_t*)t;
};
~qpol_type() {
/* no op */
return;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_type_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get type name");
}
return name;
fail:
return NULL;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_type_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get type value");
}
fail:
return (int) v;
};
int isalias(qpol_policy_t *p) {
unsigned char i;
if (qpol_type_get_isalias(p, self, &i)) {
SWIG_exception(SWIG_ValueError, "Could not determine whether type is an alias");
}
fail:
return (int)i;
};
int isattr(qpol_policy_t *p) {
unsigned char i;
if (qpol_type_get_isattr(p, self, &i)) {
SWIG_exception(SWIG_ValueError, "Could not determine whether type is an attribute");
}
fail:
return (int)i;
};
int ispermissive(qpol_policy_t *p) {
unsigned char i;
if (qpol_type_get_ispermissive(p, self, &i)) {
SWIG_exception(SWIG_ValueError, "Could not determine whether type is permissive");
}
fail:
return (int)i;
};
%newobject type_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_type_from_void) %}
qpol_iterator_t *type_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
int retv = qpol_type_get_type_iter(p, self, &iter);
if (retv < 0) {
SWIG_exception(SWIG_RuntimeError, "Could not get attribute types");
} else if (retv > 0) {
SWIG_exception(SWIG_TypeError, "Type is not an attribute");
}
fail:
return iter;
};
%newobject attr_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_type_from_void) %}
qpol_iterator_t *attr_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
int retv = qpol_type_get_attr_iter(p, self, &iter);
if (retv < 0) {
SWIG_exception(SWIG_RuntimeError, "Could not get type attributes");
} else if (retv > 0) {
SWIG_exception(SWIG_TypeError, "Type is an attribute");
}
fail:
return iter;
};
%newobject alias_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *alias_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_type_get_alias_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get type aliases");
}
fail:
return iter;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_permissive_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get permissive type name");
}
return name;
fail:
return NULL;
};
};
%inline %{
qpol_type_t *qpol_type_from_void(void *x) {
return (qpol_type_t*)x;
};
%}
/* qpol role */
typedef struct qpol_role {} qpol_role_t;
%extend qpol_role {
%exception qpol_role {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Invalid type or attribute.");
return NULL;
}
}
qpol_role(qpol_policy_t *p, const char *name) {
const qpol_role_t *r;
qpol_policy_get_role_by_name(p, name, &r);
return (qpol_role_t*)r;
};
~qpol_role() {
/* no op */
return;
};
int value (qpol_policy_t *p) {
uint32_t v;
if (qpol_role_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get role value");
}
fail:
return (int) v;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_role_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get role name");
}
return name;
fail:
return NULL;
};
%newobject type_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_type_from_void) %}
qpol_iterator_t *type_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_role_get_type_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get role types");
}
fail:
return iter;
};
%newobject dominate_iter(qpol_policy_t*);
qpol_iterator_t *dominate_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_role_get_dominate_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get dominated roles");
}
fail:
return iter;
};
};
%inline %{
qpol_role_t *qpol_role_from_void(void *x) {
return (qpol_role_t*)x;
};
%}
/* qpol level */
typedef struct qpol_level {} qpol_level_t;
%extend qpol_level {
%exception qpol_level {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid level.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_level(qpol_policy_t *p, const char *name) {
const qpol_level_t *l;
qpol_policy_get_level_by_name(p, name, &l);
return (qpol_level_t*)l;
};
~qpol_level() {
/* no op */
return;
};
int isalias(qpol_policy_t *p) {
unsigned char i;
if (qpol_level_get_isalias(p, self, &i)) {
SWIG_exception(SWIG_ValueError, "Could not determine whether level is an alias");
}
fail:
return (int)i;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_level_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get level sensitivity value");
}
fail:
return (int) v;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_level_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get level sensitivity name");
}
return name;
fail:
return NULL;
};
%newobject cat_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_cat_from_void) %}
qpol_iterator_t *cat_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_level_get_cat_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get level categories");
}
fail:
return iter;
};
%newobject alias_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *alias_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_level_get_alias_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get level aliases");
}
fail:
return iter;
};
};
%inline %{
qpol_level_t *qpol_level_from_void(void *x) {
return (qpol_level_t*)x;
};
%}
/* qpol cat */
typedef struct qpol_cat {} qpol_cat_t;
%extend qpol_cat {
%exception qpol_cat {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid category.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_cat(qpol_policy_t *p, const char *name) {
const qpol_cat_t *c;
qpol_policy_get_cat_by_name(p, name, &c);
return (qpol_cat_t*)c;
};
~qpol_cat() {
/* no op */
return;
};
int isalias(qpol_policy_t *p) {
unsigned char i;
if (qpol_cat_get_isalias(p, self, &i)) {
SWIG_exception(SWIG_ValueError, "Could not determine whether category is an alias");
}
fail:
return (int)i;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_cat_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get category value");
}
fail:
return (int) v;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_cat_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get category name");
}
return name;
fail:
return NULL;
};
%newobject alias_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *alias_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_cat_get_alias_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get category aliases");
}
fail:
return iter;
};
};
%inline %{
qpol_cat_t *qpol_cat_from_void(void *x) {
return (qpol_cat_t*)x;
};
%}
/* qpol mls range */
typedef struct qpol_mls_range {} qpol_mls_range_t;
%extend qpol_mls_range {
/*
* TODO: determine how to conditionally destroy this range.
* It should only be destroyed if it was looked up (user-entered)
* Otherwise qpol will destroy the others when the policy closes.
*/
%exception qpol_mls_range {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid range.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_mls_range(qpol_policy_t *p, qpol_mls_level_t *l, qpol_mls_level_t *h) {
qpol_mls_range_t *range;
qpol_policy_get_mls_range_from_mls_levels(p, l, h, &range);
return range;
}
~qpol_mls_range() {
/* no op */
return;
};
const qpol_mls_level_t *high_level(qpol_policy_t *p) {
const qpol_mls_level_t *l;
if (qpol_mls_range_get_high_level(p, self, &l)) {
SWIG_exception(SWIG_ValueError, "Could not get range high levl");
}
fail:
return l;
};
const qpol_mls_level_t *low_level(qpol_policy_t *p) {
const qpol_mls_level_t *l;
if (qpol_mls_range_get_low_level(p, self, &l)) {
SWIG_exception(SWIG_ValueError, "Could not get range low levl");
}
fail:
return l;
};
};
%inline %{
qpol_mls_range_t *qpol_mls_range_from_void(void *x) {
return (qpol_mls_range_t*)x;
};
%}
/* qpol semantic mls level */
typedef struct qpol_semantic_level {} qpol_semantic_level_t;
%extend qpol_semantic_level {
%exception qpol_semantic_level {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Invalid sensitivity name.");
return NULL;
}
}
qpol_semantic_level(qpol_policy_t *p, const char *name) {
const qpol_semantic_level_t *l;
qpol_policy_get_semantic_level_by_name(p, name, &l);
return (qpol_semantic_level_t*)l;
};
~qpol_semantic_level() {
qpol_semantic_level_destroy(self);
return;
};
%exception add_cats {
$action
if (result) {
PyErr_SetString(PyExc_ValueError, "Invalid category name or category range.");
return NULL;
}
}
int add_cats(qpol_policy_t *p, const char *low, const char *high) {
return qpol_semantic_level_add_cats_by_name(p, self, low, high);
}
};
/* qpol mls level */
typedef struct qpol_mls_level {} qpol_mls_level_t;
%extend qpol_mls_level {
%exception qpol_mls_level {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Invalid level.");
return NULL;
}
}
qpol_mls_level(qpol_policy_t *p, qpol_semantic_level_t *l) {
qpol_mls_level_t *level;
qpol_mls_level_from_semantic_level(p, l, &level);
return level;
}
~qpol_mls_level() {
/* no op */
return;
};
const char *sens_name(qpol_policy_t *p) {
const char *name;
if (qpol_mls_level_get_sens_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get level sensitivity name");
}
fail:
return name;
};
%newobject cat_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_cat_from_void) %}
qpol_iterator_t *cat_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_mls_level_get_cat_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get level categories");
}
fail:
return iter;
};
};
%inline %{
qpol_mls_level_t *qpol_mls_level_from_void(void *x) {
return (qpol_mls_level_t*)x;
};
%}
/* qpol user */
typedef struct qpol_user {} qpol_user_t;
%extend qpol_user {
%exception qpol_user {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Invalid user.");
return NULL;
}
}
qpol_user(qpol_policy_t *p, const char *name) {
const qpol_user_t *u;
qpol_policy_get_user_by_name(p, name, &u);
return (qpol_user_t*)u;
};
~qpol_user() {
/* no op */
return;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_user_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get user value");
}
fail:
return (int) v;
};
%newobject role_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_role_from_void) %}
qpol_iterator_t *role_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_user_get_role_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of Memory");
}
fail:
return iter;
};
const qpol_mls_range_t *range(qpol_policy_t *p) {
const qpol_mls_range_t *r;
if (qpol_user_get_range(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get user range");
}
fail:
return r;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_user_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get user name");
}
fail:
return name;
};
const qpol_mls_level_t *dfltlevel(qpol_policy_t *p) {
const qpol_mls_level_t *l;
if (qpol_user_get_dfltlevel(p, self, &l)) {
SWIG_exception(SWIG_ValueError, "Could not get user default level");
}
fail:
return l;
};
};
%inline %{
qpol_user_t *qpol_user_from_void(void *x) {
return (qpol_user_t*)x;
};
%}
/* qpol bool */
typedef struct qpol_bool {} qpol_bool_t;
%extend qpol_bool {
qpol_bool(qpol_policy_t *p, const char *name) {
qpol_bool_t *b;
if (qpol_policy_get_bool_by_name(p, name, &b)) {
SWIG_exception(SWIG_RuntimeError, "Boolean does not exist");
}
fail:
return b;
};
~qpol_bool() {
/* no op */
return;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_bool_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get boolean value");
}
fail:
return (int) v;
};
int state(qpol_policy_t *p) {
int s;
if (qpol_bool_get_state(p, self, &s)) {
SWIG_exception(SWIG_ValueError, "Could not get boolean state");
}
fail:
return s;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_bool_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get boolean name");
}
fail:
return name;
};
};
%inline %{
qpol_bool_t *qpol_bool_from_void(void *x) {
return (qpol_bool_t*)x;
};
%}
/* qpol context */
typedef struct qpol_context {} qpol_context_t;
%extend qpol_context {
qpol_context() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_context_t objects");
fail:
return NULL;
};
~qpol_context() {
/* no op */
return;
};
const qpol_user_t *user(qpol_policy_t *p) {
const qpol_user_t *u;
if (qpol_context_get_user(p, self, &u)) {
SWIG_exception(SWIG_ValueError, "Could not get user from context");
}
fail:
return u;
};
const qpol_role_t *role(qpol_policy_t *p) {
const qpol_role_t *r;
if (qpol_context_get_role(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get role from context");
}
fail:
return r;
};
const qpol_type_t *type_(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_context_get_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get type from context");
}
fail:
return t;
};
const qpol_mls_range_t *range(qpol_policy_t *p) {
const qpol_mls_range_t *r;
if (qpol_context_get_range(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get range from context");
}
fail:
return r;
};
};
%inline %{
qpol_context_t *qpol_context_from_void(void *x) {
return (qpol_context_t*)x;
};
%}
/* qpol class */
typedef struct qpol_class {} qpol_class_t;
%extend qpol_class {
%exception qpol_class {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid class.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_class(qpol_policy_t *p, const char *name) {
const qpol_class_t *c;
qpol_policy_get_class_by_name(p, name, &c);
return (qpol_class_t*)c;
};
~qpol_class() {
/* no op */
return;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_class_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get value for class");
}
fail:
return (int) v;
};
%exception common {
$action
if (!result) {
PyErr_SetString(PyExc_ValueError, "Class does not inherit a common.");
return NULL;
}
}
const qpol_common_t *common(qpol_policy_t *p) {
const qpol_common_t *c;
if(qpol_class_get_common(p, self, &c)) {
SWIG_exception(SWIG_ValueError, "Could not get common for class");
}
fail:
return c;
};
%newobject perm_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *perm_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if(qpol_class_get_perm_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get class permissions");
}
fail:
return iter;
};
%newobject constraint_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_constraint_from_void) %}
qpol_iterator_t *constraint_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if(qpol_class_get_constraint_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get class constraints");
}
fail:
return iter;
};
%newobject validatetrans_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_validatetrans_from_void) %}
qpol_iterator_t *validatetrans_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if(qpol_class_get_validatetrans_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get class validatetrans statements");
}
fail:
return iter;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_class_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get class name");
}
fail:
return name;
};
};
%inline %{
qpol_class_t *qpol_class_from_void(void *x) {
return (qpol_class_t*)x;
};
%}
/* qpol common */
typedef struct qpol_common {} qpol_common_t;
%extend qpol_common {
%exception qpol_common {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid common.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_common(qpol_policy_t *p, const char *name) {
const qpol_common_t *c;
qpol_policy_get_common_by_name(p, name, &c);
return (qpol_common_t*)c;
};
~qpol_common() {
/* no op */
return;
};
int value(qpol_policy_t *p) {
uint32_t v;
if (qpol_common_get_value(p, self, &v)) {
SWIG_exception(SWIG_ValueError, "Could not get value for common");
}
fail:
return (int) v;
};
%newobject perm_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *perm_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if(qpol_common_get_perm_iter(p, self, &iter)) {
SWIG_exception(SWIG_RuntimeError, "Could not get common permissions");
}
fail:
return iter;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_common_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get common name");
}
fail:
return name;
};
};
%inline %{
qpol_common_t *qpol_common_from_void(void *x) {
return (qpol_common_t*)x;
};
%}
/* qpol fs_use */
/* The defines QPOL_FS_USE_XATTR through QPOL_FS_USE_NONE are
* copied from sepol/policydb/services.h.
* QPOL_FS_USE_PSID is an extension to support v12 policies. */
#define QPOL_FS_USE_XATTR 1U
#define QPOL_FS_USE_TRANS 2U
#define QPOL_FS_USE_TASK 3U
#define QPOL_FS_USE_GENFS 4U
#define QPOL_FS_USE_NONE 5U
#define QPOL_FS_USE_PSID 6U
typedef struct qpol_fs_use {} qpol_fs_use_t;
%extend qpol_fs_use {
qpol_fs_use(qpol_policy_t *p, const char *name) {
const qpol_fs_use_t *f;
if (qpol_policy_get_fs_use_by_name(p, name, &f)) {
SWIG_exception(SWIG_RuntimeError, "FS Use Statement does not exist");
}
fail:
return (qpol_fs_use_t*)f;
};
~qpol_fs_use() {
/* no op */
return;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_fs_use_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get file system name");
}
fail:
return name;
};
int behavior(qpol_policy_t *p) {
uint32_t behav;
if (qpol_fs_use_get_behavior(p, self, &behav)) {
SWIG_exception(SWIG_ValueError, "Could not get file system labeling behavior");
}
fail:
return (int) behav;
};
const qpol_context_t *context(qpol_policy_t *p) {
uint32_t behav;
const qpol_context_t *ctx = NULL;
qpol_fs_use_get_behavior(p, self, &behav);
if (behav == QPOL_FS_USE_PSID) {
SWIG_exception(SWIG_TypeError, "Cannot get context for fs_use_psid statements");
} else if (qpol_fs_use_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get file system context");
}
fail:
return ctx;
};
};
%inline %{
qpol_fs_use_t *qpol_fs_use_from_void(void *x) {
return (qpol_fs_use_t*)x;
};
%}
/* qpol genfscon */
/* values from flask do not change */
#define QPOL_CLASS_ALL 0U
#define QPOL_CLASS_BLK_FILE 11U
#define QPOL_CLASS_CHR_FILE 10U
#define QPOL_CLASS_DIR 7U
#define QPOL_CLASS_FIFO_FILE 13U
#define QPOL_CLASS_FILE 6U
#define QPOL_CLASS_LNK_FILE 9U
#define QPOL_CLASS_SOCK_FILE 12U
typedef struct qpol_genfscon {} qpol_genfscon_t;
%extend qpol_genfscon {
qpol_genfscon(qpol_policy_t *p, const char *name, const char *path) {
qpol_genfscon_t *g;
if (qpol_policy_get_genfscon_by_name(p, name, path, &g)) {
SWIG_exception(SWIG_RuntimeError, "Genfscon statement does not exist");
}
fail:
return g;
};
~qpol_genfscon() {
free(self);
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_genfscon_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get file system name");
}
fail:
return name;
};
const char *path(qpol_policy_t *p) {
const char *path;
if (qpol_genfscon_get_path(p, self, &path)) {
SWIG_exception(SWIG_ValueError, "Could not get file system path");
}
fail:
return path;
};
unsigned int object_class(qpol_policy_t *p) {
uint32_t cls;
if (qpol_genfscon_get_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get genfscon statement class");
}
switch (cls) {
case QPOL_CLASS_BLK_FILE: return S_IFBLK;
case QPOL_CLASS_CHR_FILE: return S_IFCHR;
case QPOL_CLASS_DIR: return S_IFDIR;
case QPOL_CLASS_FIFO_FILE: return S_IFIFO;
case QPOL_CLASS_FILE: return S_IFREG;
case QPOL_CLASS_LNK_FILE: return S_IFLNK;
case QPOL_CLASS_SOCK_FILE: return S_IFSOCK;
default: return 0; /* all file types */
}
fail:
return 0;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_genfscon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for genfscon statement");
}
fail:
return ctx;
};
};
%inline %{
qpol_genfscon_t *qpol_genfscon_from_void(void *x) {
return (qpol_genfscon_t*)x;
};
%}
/* qpol isid */
typedef struct qpol_isid {} qpol_isid_t;
%extend qpol_isid {
%exception qpol_isid {
$action
if (!result) {
if (errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid initial sid name.");
} else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
}
qpol_isid(qpol_policy_t *p, const char *name) {
const qpol_isid_t *i;
qpol_policy_get_isid_by_name(p, name, &i);
return (qpol_isid_t*)i;
};
~qpol_isid() {
/* no op */
return;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_isid_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get name for initial sid");
}
fail:
return name;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_isid_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for initial sid");
}
fail:
return ctx;
};
};
%inline %{
qpol_isid_t *qpol_isid_from_void(void *x) {
return (qpol_isid_t*)x;
};
%}
/* qpol netifcon */
typedef struct qpol_netifcon {} qpol_netifcon_t;
%extend qpol_netifcon {
qpol_netifcon(qpol_policy_t *p, const char *name) {
const qpol_netifcon_t *n;
if (qpol_policy_get_netifcon_by_name(p, name, &n)) {
SWIG_exception(SWIG_RuntimeError, "Netifcon statement does not exist");
}
fail:
return (qpol_netifcon_t*)n;
};
~qpol_netifcon() {
/* no op */
return;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_netifcon_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get name for netifcon statement");
}
fail:
return name;
};
const qpol_context_t *msg_con(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_netifcon_get_msg_con(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get message context for netifcon statement");
}
fail:
return ctx;
};
const qpol_context_t *if_con(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_netifcon_get_if_con(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get interface context for netifcon statement");
}
fail:
return ctx;
};
};
%inline %{
qpol_netifcon_t *qpol_netifcon_from_void(void *x) {
return (qpol_netifcon_t*)x;
};
%}
/* qpol nodecon */
#define QPOL_IPV4 0
#define QPOL_IPV6 1
typedef struct qpol_nodecon {} qpol_nodecon_t;
%extend qpol_nodecon {
qpol_nodecon(qpol_policy_t *p, int addr[4], int mask[4], int protocol) {
uint32_t a[4], m[4];
qpol_nodecon_t *n;
a[0] = (uint32_t) addr[0]; a[1] = (uint32_t) addr[1];
a[2] = (uint32_t) addr[2]; a[3] = (uint32_t) addr[3];
m[0] = (uint32_t) mask[0]; m[1] = (uint32_t) mask[1];
m[2] = (uint32_t) mask[2]; m[3] = (uint32_t) mask[3];
if (qpol_policy_get_nodecon_by_node(p, a, m, protocol, &n)) {
SWIG_exception(SWIG_RuntimeError, "Nodecon statement does not exist");
}
fail:
return n;
}
~qpol_nodecon() {
free(self);
};
char *addr(qpol_policy_t *p) {
uint32_t *a;
unsigned char proto;
char *addr = NULL;
addr = malloc(INET6_ADDRSTRLEN * sizeof(char));
if(!addr)
SWIG_exception(SWIG_MemoryError, "Out of memory");
if (qpol_nodecon_get_addr(p, self, &a, &proto)) {
SWIG_exception(SWIG_ValueError, "Could not get address of nodecon statement");
}
if(proto == QPOL_IPV4) {
inet_ntop(AF_INET, a, addr, INET6_ADDRSTRLEN);
} else {
inet_ntop(AF_INET6, a, addr, INET6_ADDRSTRLEN);
}
fail:
return addr;
};
char *mask(qpol_policy_t *p) {
uint32_t *m;
unsigned char proto;
char *mask;
mask = malloc(INET6_ADDRSTRLEN * sizeof(char));
if (!mask)
SWIG_exception(SWIG_MemoryError, "Out of memory");
if (qpol_nodecon_get_mask(p, self, &m, &proto)) {
SWIG_exception(SWIG_ValueError, "Could not get mask of nodecon statement");
}
if(proto == QPOL_IPV4) {
inet_ntop(AF_INET, m, mask, INET6_ADDRSTRLEN);
} else {
inet_ntop(AF_INET6, m, mask, INET6_ADDRSTRLEN);
}
fail:
return mask;
};
int protocol(qpol_policy_t *p) {
unsigned char proto;
if (qpol_nodecon_get_protocol(p, self, &proto)) {
SWIG_exception(SWIG_ValueError, "Could not get protocol for nodecon statement");
}
fail:
if(proto == QPOL_IPV4) {
return AF_INET;
} else {
return AF_INET6;
}
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_nodecon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for nodecon statement");
}
fail:
return ctx;
};
};
%inline %{
qpol_nodecon_t *qpol_nodecon_from_void(void *x) {
return (qpol_nodecon_t*)x;
};
%}
/* qpol portcon */
/* from netinet/in.h */
#define IPPROTO_TCP 6
#define IPPROTO_UDP 17
typedef struct qpol_portcon {} qpol_portcon_t;
%extend qpol_portcon {
qpol_portcon(qpol_policy_t *p, uint16_t low, uint16_t high, uint8_t protocol) {
const qpol_portcon_t *qp;
if (qpol_policy_get_portcon_by_port(p, low, high, protocol, &qp)) {
SWIG_exception(SWIG_RuntimeError, "Portcon statement does not exist");
}
fail:
return (qpol_portcon_t*)qp;
};
~qpol_portcon() {
/* no op */
return;
};
uint16_t low_port(qpol_policy_t *p) {
uint16_t port = 0;
if(qpol_portcon_get_low_port(p, self, &port)) {
SWIG_exception(SWIG_RuntimeError, "Could not get low port for portcon statement");
}
fail:
return port;
};
uint16_t high_port(qpol_policy_t *p) {
uint16_t port = 0;
if(qpol_portcon_get_high_port(p, self, &port)) {
SWIG_exception(SWIG_RuntimeError, "Could not get high port for portcon statement");
}
fail:
return port;
};
uint8_t protocol(qpol_policy_t *p) {
uint8_t proto = 0;
if (qpol_portcon_get_protocol(p, self, &proto)) {
SWIG_exception(SWIG_RuntimeError, "Could not get protocol for portcon statement");
}
fail:
return proto;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_portcon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for portcon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_portcon_t *qpol_portcon_from_void(void *x) {
return (qpol_portcon_t*)x;
};
%}
/* qpol constraint */
typedef struct qpol_constraint {} qpol_constraint_t;
%extend qpol_constraint {
qpol_constraint() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_constraint_t objects");
fail:
return NULL;
};
~qpol_constraint() {
free(self);
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_constraint_get_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for constraint");
}
fail:
return cls;
};
%newobject perm_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *perm_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_constraint_get_perm_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
%newobject expr_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_constraint_expr_node_from_void) %}
qpol_iterator_t *expr_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_constraint_get_expr_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
};
%inline %{
qpol_constraint_t *qpol_constraint_from_void(void *x) {
return (qpol_constraint_t*)x;
};
%}
/* qpol validatetrans */
typedef struct qpol_validatetrans {} qpol_validatetrans_t;
%extend qpol_validatetrans {
qpol_validatetrans() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_validatetrans_t objects");
fail:
return NULL;
};
~qpol_validatetrans() {
free(self);
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_validatetrans_get_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for validatetrans");
}
fail:
return cls;
};
%newobject expr_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_constraint_expr_node_from_void) %}
qpol_iterator_t *expr_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_validatetrans_get_expr_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
};
%inline %{
qpol_validatetrans_t *qpol_validatetrans_from_void(void *x) {
return (qpol_validatetrans_t*)x;
};
%}
/* qpol constraint expression node */
/* expr_type values */
#define QPOL_CEXPR_TYPE_NOT 1
#define QPOL_CEXPR_TYPE_AND 2
#define QPOL_CEXPR_TYPE_OR 3
#define QPOL_CEXPR_TYPE_ATTR 4
#define QPOL_CEXPR_TYPE_NAMES 5
/* symbol type values */
#define QPOL_CEXPR_SYM_USER 1
#define QPOL_CEXPR_SYM_ROLE 2
#define QPOL_CEXPR_SYM_TYPE 4
#define QPOL_CEXPR_SYM_TARGET 8
#define QPOL_CEXPR_SYM_XTARGET 16
#define QPOL_CEXPR_SYM_L1L2 32
#define QPOL_CEXPR_SYM_L1H2 64
#define QPOL_CEXPR_SYM_H1L2 128
#define QPOL_CEXPR_SYM_H1H2 256
#define QPOL_CEXPR_SYM_L1H1 512
#define QPOL_CEXPR_SYM_L2H2 1024
/* op values */
#define QPOL_CEXPR_OP_EQ 1
#define QPOL_CEXPR_OP_NEQ 2
#define QPOL_CEXPR_OP_DOM 3
#define QPOL_CEXPR_OP_DOMBY 4
#define QPOL_CEXPR_OP_INCOMP 5
typedef struct qpol_constraint_expr_node {} qpol_constraint_expr_node_t;
%extend qpol_constraint_expr_node {
qpol_constraint_expr_node() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_constraint_expr_node_t objects");
fail:
return NULL;
};
~qpol_constraint_expr_node() {
/* no op */
return;
};
int expr_type(qpol_policy_t *p) {
uint32_t et;
if (qpol_constraint_expr_node_get_expr_type(p, self, &et)) {
SWIG_exception(SWIG_ValueError, "Could not get expression type for node");
}
fail:
return (int) et;
};
int sym_type(qpol_policy_t *p) {
uint32_t st;
if (qpol_constraint_expr_node_get_sym_type(p, self, &st)) {
SWIG_exception(SWIG_ValueError, "Could not get symbol type for node");
}
fail:
return (int) st;
};
int op(qpol_policy_t *p) {
uint32_t op;
if (qpol_constraint_expr_node_get_op(p, self, &op)) {
SWIG_exception(SWIG_ValueError, "Could not get operator for node");
}
fail:
return (int) op;
};
%newobject names_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *names_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_constraint_expr_node_get_names_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
};
%inline %{
qpol_constraint_expr_node_t *qpol_constraint_expr_node_from_void(void *x) {
return (qpol_constraint_expr_node_t*)x;
};
%}
/* qpol role allow */
typedef struct qpol_role_allow {} qpol_role_allow_t;
%extend qpol_role_allow {
qpol_role_allow() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_role_allow_t objects");
fail:
return NULL;
};
~qpol_role_allow() {
/* no op */
return;
};
%pythoncode %{
def rule_type(self,policy):
return "allow"
%}
const qpol_role_t *source_role(qpol_policy_t *p) {
const qpol_role_t *r;
if (qpol_role_allow_get_source_role(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get source for role allow rule");
}
fail:
return r;
};
const qpol_role_t *target_role(qpol_policy_t *p) {
const qpol_role_t *r;
if (qpol_role_allow_get_target_role(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get target for role allow rule");
}
fail:
return r;
};
};
%inline %{
qpol_role_allow_t *qpol_role_allow_from_void(void *x) {
return (qpol_role_allow_t*)x;
};
%}
/* qpol role trans */
typedef struct qpol_role_trans {} qpol_role_trans_t;
%extend qpol_role_trans {
qpol_role_trans() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_role_trans_t objects");
fail:
return NULL;
};
~qpol_role_trans() {
/* no op */
return;
};
%pythoncode %{
def rule_type(self,policy):
return "role_transition"
%}
const qpol_role_t *source_role(qpol_policy_t *p) {
const qpol_role_t *r;
if (qpol_role_trans_get_source_role(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get source for role_transition rule");
}
fail:
return r;
};
const qpol_type_t *target_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_role_trans_get_target_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get target for role_transition rule");
}
fail:
return t;
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *c;
if (qpol_role_trans_get_object_class(p, self, &c)) {
SWIG_exception(SWIG_ValueError, "Could not get class for role_transition rule");
}
fail:
return c;
};
const qpol_role_t *default_role(qpol_policy_t *p) {
const qpol_role_t *r;
if (qpol_role_trans_get_default_role(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get default for role_transition rule");
}
fail:
return r;
};
};
%inline %{
qpol_role_trans_t *qpol_role_trans_from_void(void *x) {
return (qpol_role_trans_t*)x;
};
%}
/* qpol range trans */
typedef struct qpol_range_trans {} qpol_range_trans_t;
%extend qpol_range_trans {
qpol_range_trans() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_range_trans_t objects");
fail:
return NULL;
};
~qpol_range_trans() {
/* no op */
return;
};
%pythoncode %{
def rule_type(self,policy):
return "range_transition"
%}
const qpol_type_t *source_type (qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_range_trans_get_source_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get source for range_transition rule");
}
fail:
return t;
};
const qpol_type_t *target_type (qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_range_trans_get_target_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get target for range_transition rule"); }
fail:
return t;
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_range_trans_get_target_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for range_transition rule"); }
fail:
return cls;
};
const qpol_mls_range_t *range(qpol_policy_t *p) {
const qpol_mls_range_t *r;
if (qpol_range_trans_get_range(p, self, &r)) {
SWIG_exception(SWIG_ValueError, "Could not get range for range_transition rule");
}
fail:
return r;
};
};
%inline %{
qpol_range_trans_t *qpol_range_trans_from_void(void *x) {
return (qpol_range_trans_t*)x;
};
%}
/* qpol av rule */
#define QPOL_RULE_ALLOW 0x0001
#define QPOL_RULE_NEVERALLOW 0x0080
#define QPOL_RULE_AUDITALLOW 0x0002
#define QPOL_RULE_DONTAUDIT 0x0004
#define QPOL_RULE_XPERMS_ALLOW 0x0100
#define QPOL_RULE_XPERMS_AUDITALLOW 0x0200
#define QPOL_RULE_XPERMS_DONTAUDIT 0x0400
#define QPOL_RULE_XPERMS_NEVERALLOW 0x0800
typedef struct qpol_avrule {} qpol_avrule_t;
%extend qpol_avrule {
qpol_avrule() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_avrule_t objects");
fail:
return NULL;
};
~qpol_avrule() {
/* no op */
return;
};
const char * rule_type(qpol_policy_t *p) {
uint32_t rt;
if (qpol_avrule_get_rule_type(p, self, &rt)) {
SWIG_exception(SWIG_ValueError, "Could not get rule type for av rule");
}
switch (rt) {
case QPOL_RULE_ALLOW: return "allow"; break;
case QPOL_RULE_NEVERALLOW: return "neverallow"; break;
case QPOL_RULE_AUDITALLOW: return "auditallow"; break;
case QPOL_RULE_DONTAUDIT: return "dontaudit"; break;
case QPOL_RULE_XPERMS_ALLOW: return "allowxperm"; break;
case QPOL_RULE_XPERMS_NEVERALLOW: return "neverallowxperm"; break;
case QPOL_RULE_XPERMS_AUDITALLOW: return "auditallowxperm"; break;
case QPOL_RULE_XPERMS_DONTAUDIT: return "dontauditxperm"; break;
}
fail:
return NULL;
};
const qpol_type_t *source_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_avrule_get_source_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get source for av rule");
}
fail:
return t;
};
const qpol_type_t *target_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_avrule_get_target_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get target for av rule");
}
fail:
return t;
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_avrule_get_object_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for av rule");
}
fail:
return cls;
};
%newobject perm_iter(qpol_policy_t *p);
%pythoncode %{ @QpolGenerator(_qpol.to_str) %}
qpol_iterator_t *perm_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_avrule_get_perm_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
/* TODO, do I need an exception (similar to cond) that is thrown if you ask this on a non extended avrule? Likewise for asking for prems an an extended rule */
%newobject xperm_iter(qpol_policy_t *p);
%pythoncode %{ @QpolGenerator(_qpol.to_int_with_free) %}
qpol_iterator_t *xperm_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_avrule_get_xperm_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
int is_extended(qpol_policy_t *p) {
uint32_t e;
if (qpol_avrule_get_is_extended(p, self, &e)) {
SWIG_exception(SWIG_ValueError, "Could not determine if av rule is extended");
}
fail:
return (int) e;
};
const char * xperm_type(qpol_policy_t *p) {
char *xt;
if (qpol_avrule_get_xperm_type(p, self, &xt)) {
SWIG_exception(SWIG_ValueError, "Could not get xperm type for av rule");
}
fail:
return xt;
};
%exception cond {
$action
if (!result) {
PyErr_SetString(PyExc_AttributeError, "Rule is not conditional.");
return NULL;
}
}
const qpol_cond_t *cond(qpol_policy_t *p) {
const qpol_cond_t *c;
qpol_avrule_get_cond(p, self, &c);
return c;
};
int is_enabled(qpol_policy_t *p) {
uint32_t e;
if (qpol_avrule_get_is_enabled(p, self, &e)) {
SWIG_exception(SWIG_ValueError, "Could not determine if av rule is enabled");
}
fail:
return (int) e;
};
%exception which_list {
$action
if (result < 0) {
PyErr_SetString(PyExc_AttributeError, "Rule is not conditional.");
return NULL;
}
}
int which_list(qpol_policy_t *p) {
const qpol_cond_t *c;
uint32_t which = 0;
qpol_avrule_get_cond(p, self, &c);
if (c == NULL) {
return -1;
} else if (qpol_avrule_get_which_list(p, self, &which)) {
return -1;
}
return (int) which;
};
%newobject syn_avrule_iter(qpol_policy_t*);
qpol_iterator_t *syn_avrule_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_avrule_get_syn_avrule_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
};
%inline %{
qpol_avrule_t *qpol_avrule_from_void(void *x) {
return (qpol_avrule_t*)x;
};
%}
/* qpol te rule */
#define QPOL_RULE_TYPE_TRANS 16
#define QPOL_RULE_TYPE_CHANGE 64
#define QPOL_RULE_TYPE_MEMBER 32
typedef struct qpol_terule {} qpol_terule_t;
%extend qpol_terule {
qpol_terule() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_terule_t objects");
fail:
return NULL;
};
~qpol_terule() {
/* no op */
return;
};
const char * rule_type(qpol_policy_t *p) {
uint32_t rt;
if (qpol_terule_get_rule_type(p, self, &rt)) {
SWIG_exception(SWIG_ValueError, "Could not get rule type for te rule");
}
switch (rt) {
case QPOL_RULE_TYPE_TRANS: return "type_transition"; break;
case QPOL_RULE_TYPE_CHANGE: return "type_change"; break;
case QPOL_RULE_TYPE_MEMBER: return "type_member"; break;
}
fail:
return NULL;
};
const qpol_type_t *source_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_terule_get_source_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get source for te rule");
}
fail:
return t;
};
const qpol_type_t *target_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_terule_get_target_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get target for te rule");
}
fail:
return t;
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_terule_get_object_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for te rule");
}
fail:
return cls;
};
const qpol_type_t *default_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_terule_get_default_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get default for te rule");
}
fail:
return t;
};
%exception cond {
$action
if (!result) {
PyErr_SetString(PyExc_AttributeError, "Rule is not conditional.");
return NULL;
}
}
const qpol_cond_t *cond(qpol_policy_t *p) {
const qpol_cond_t *c;
qpol_terule_get_cond(p, self, &c);
return c;
};
int is_enabled(qpol_policy_t *p) {
uint32_t e;
if (qpol_terule_get_is_enabled(p, self, &e)) {
SWIG_exception(SWIG_ValueError, "Could not determine if te rule is enabled");
}
fail:
return (int) e;
};
%exception which_list {
$action
if (result < 0) {
PyErr_SetString(PyExc_AttributeError, "Rule is not conditional.");
return NULL;
}
}
int which_list(qpol_policy_t *p) {
const qpol_cond_t *c;
uint32_t which = 0;
qpol_terule_get_cond(p, self, &c);
if (c == NULL) {
return -1;
} else if (qpol_terule_get_which_list(p, self, &which)) {
return -1;
}
return (int) which;
};
%newobject syn_terule_iter(qpol_policy_t*);
qpol_iterator_t *syn_terule_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_terule_get_syn_terule_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
};
%inline %{
qpol_terule_t *qpol_terule_from_void(void *x) {
return (qpol_terule_t*)x;
};
%}
/* qpol conditional */
typedef struct qpol_cond {} qpol_cond_t;
%extend qpol_cond {
qpol_cond() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_cond_t objects");
fail:
return NULL;
};
~qpol_cond() {
/* no op */
return;
};
%newobject expr_node_iter(qpol_policy_t*);
%pythoncode %{ @QpolGenerator(_qpol.qpol_cond_expr_node_from_void) %}
qpol_iterator_t *expr_node_iter(qpol_policy_t *p) {
qpol_iterator_t *iter;
if (qpol_cond_get_expr_node_iter(p, self, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
%newobject av_true_iter(qpol_policy_t*, int);
qpol_iterator_t *av_true_iter(qpol_policy_t *p, int rule_types) {
qpol_iterator_t *iter;
if (qpol_cond_get_av_true_iter(p, self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
%newobject av_false_iter(qpol_policy_t*, int);
qpol_iterator_t *av_false_iter(qpol_policy_t *p, int rule_types) {
qpol_iterator_t *iter;
if (qpol_cond_get_av_false_iter(p, self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
%newobject te_true_iter(qpol_policy_t*, int);
qpol_iterator_t *te_true_iter(qpol_policy_t *p, int rule_types) {
qpol_iterator_t *iter;
if (qpol_cond_get_te_true_iter(p, self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
%newobject te_false_iter(qpol_policy_t*, int);
qpol_iterator_t *te_false_iter(qpol_policy_t *p, int rule_types) {
qpol_iterator_t *iter;
if (qpol_cond_get_te_false_iter(p, self, rule_types, &iter)) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
}
fail:
return iter;
};
int evaluate(qpol_policy_t *p) {
uint32_t e;
if (qpol_cond_eval(p, self, &e)) {
SWIG_exception(SWIG_RuntimeError, "Could not evaluate conditional");
}
fail:
return (int) e;
};
};
%inline %{
qpol_cond_t *qpol_cond_from_void(void *x) {
return (qpol_cond_t*)x;
};
%}
/* qpol conditional expression node */
#define QPOL_COND_EXPR_BOOL 1 /* plain bool */
#define QPOL_COND_EXPR_NOT 2 /* !bool */
#define QPOL_COND_EXPR_OR 3 /* bool || bool */
#define QPOL_COND_EXPR_AND 4 /* bool && bool */
#define QPOL_COND_EXPR_XOR 5 /* bool ^ bool */
#define QPOL_COND_EXPR_EQ 6 /* bool == bool */
#define QPOL_COND_EXPR_NEQ 7 /* bool != bool */
typedef struct qpol_cond_expr_node {} qpol_cond_expr_node_t;
%extend qpol_cond_expr_node {
qpol_cond_expr_node() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_cond_expr_node_t objects");
fail:
return NULL;
};
~qpol_cond_expr_node() {
/* no op */
return;
};
int expr_type(qpol_policy_t *p) {
uint32_t et;
if (qpol_cond_expr_node_get_expr_type(p, self, &et)) {
SWIG_exception(SWIG_ValueError, "Could not get node expression type");
}
fail:
return (int) et;
};
qpol_bool_t *get_boolean(qpol_policy_t *p) {
uint32_t et;
qpol_bool_t *b = NULL;
qpol_cond_expr_node_get_expr_type(p, self, &et);
if (et != QPOL_COND_EXPR_BOOL) {
SWIG_exception(SWIG_TypeError, "Node does not contain a boolean");
} else if (qpol_cond_expr_node_get_bool(p, self, &b)) {
SWIG_exception(SWIG_ValueError, "Could not get boolean for node");
}
fail:
return b;
};
};
%inline %{
qpol_cond_expr_node_t *qpol_cond_expr_node_from_void(void *x) {
return (qpol_cond_expr_node_t*)x;
};
%}
/* qpol filename trans */
typedef struct qpol_filename_trans {} qpol_filename_trans_t;
%extend qpol_filename_trans {
qpol_filename_trans() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_filename_trans_t objects");
fail:
return NULL;
};
~qpol_filename_trans() {
/* no op */
return;
};
%pythoncode %{
def rule_type(self,policy):
return "type_transition"
%}
const qpol_type_t *source_type (qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_filename_trans_get_source_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get source for filename transition rule");
}
fail:
return t;
};
const qpol_type_t *target_type (qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_filename_trans_get_target_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get target for filename transition rule"); }
fail:
return t;
};
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_filename_trans_get_object_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class for filename transition rule"); }
fail:
return cls;
};
const qpol_type_t *default_type(qpol_policy_t *p) {
const qpol_type_t *t;
if (qpol_filename_trans_get_default_type(p, self, &t)) {
SWIG_exception(SWIG_ValueError, "Could not get default for filename transition rule");
}
fail:
return t;
};
const char *filename(qpol_policy_t *p) {
const char *name;
if (qpol_filename_trans_get_filename(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get file for filename transition rule");
}
fail:
return name;
};
};
%inline %{
qpol_filename_trans_t *qpol_filename_trans_from_void(void *x) {
return (qpol_filename_trans_t*)x;
};
%}
/* qpol polcap */
typedef struct qpol_polcap {} qpol_polcap_t;
%extend qpol_polcap {
qpol_polcap() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_polcap_t objects");
fail:
return NULL;
};
~qpol_polcap() {
/* no op */
return;
};
const char *name(qpol_policy_t *p) {
const char *name;
if (qpol_polcap_get_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get polcap name rule");
}
fail:
return name;
};
};
%inline %{
qpol_polcap_t *qpol_polcap_from_void(void *x) {
return (qpol_polcap_t*)x;
};
%}
/* qpol typebounds */
typedef struct qpol_typebounds {} qpol_typebounds_t;
%extend qpol_typebounds {
qpol_typebounds() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_typebounds_t objects");
fail:
return NULL;
};
~qpol_typebounds() {
/* no op */
return;
};
const char *parent_name(qpol_policy_t *p) {
const char *name;
if (qpol_typebounds_get_parent_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get parent name");
}
fail:
return name;
};
const char *child_name(qpol_policy_t *p) {
const char *name;
if (qpol_typebounds_get_child_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get child name");
}
fail:
return name;
};
};
%inline %{
qpol_typebounds_t *qpol_typebounds_from_void(void *x) {
return (qpol_typebounds_t*)x;
};
%}
/* qpol rolebounds */
typedef struct qpol_rolebounds {} qpol_rolebounds_t;
%extend qpol_rolebounds {
qpol_rolebounds() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_rolebounds_t objects");
fail:
return NULL;
};
~qpol_rolebounds() {
/* no op */
return;
};
const char *parent_name(qpol_policy_t *p) {
const char *name;
if (qpol_rolebounds_get_parent_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get parent name");
}
fail:
return name;
};
const char *child_name(qpol_policy_t *p) {
const char *name;
if (qpol_rolebounds_get_child_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get child name");
}
fail:
return name;
};
};
%inline %{
qpol_rolebounds_t *qpol_rolebounds_from_void(void *x) {
return (qpol_rolebounds_t*)x;
};
%}
/* qpol userbounds */
typedef struct qpol_userbounds {} qpol_userbounds_t;
%extend qpol_userbounds {
qpol_userbounds() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_userbounds_t objects");
fail:
return NULL;
};
~qpol_userbounds() {
/* no op */
return;
};
const char *parent_name(qpol_policy_t *p) {
const char *name;
if (qpol_userbounds_get_parent_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get parent name");
}
fail:
return name;
};
const char *child_name(qpol_policy_t *p) {
const char *name;
if (qpol_userbounds_get_child_name(p, self, &name)) {
SWIG_exception(SWIG_ValueError, "Could not get child name");
}
fail:
return name;
};
};
%inline %{
qpol_userbounds_t *qpol_userbounds_from_void(void *x) {
return (qpol_userbounds_t*)x;
};
%}
/* qpol default_object */
typedef struct qpol_default_object {} qpol_default_object_t;
%extend qpol_default_object {
qpol_default_object() {
SWIG_exception(SWIG_RuntimeError, "Cannot directly create qpol_default_object_t objects");
fail:
return NULL;
};
~qpol_default_object() {
/* no op */
return;
};
%newobject object_class();
const qpol_class_t *object_class(qpol_policy_t *p) {
const qpol_class_t *cls;
if (qpol_default_object_get_class(p, self, &cls)) {
SWIG_exception(SWIG_ValueError, "Could not get class");
}
fail:
return cls;
};
const char *user_default(qpol_policy_t *p) {
const char *value;
if (qpol_default_object_get_user_default(p, self, &value)) {
SWIG_exception(SWIG_ValueError, "Could not get user default");
}
fail:
return value;
};
const char *role_default(qpol_policy_t *p) {
const char *value;
if (qpol_default_object_get_role_default(p, self, &value)) {
SWIG_exception(SWIG_ValueError, "Could not get role default");
}
fail:
return value;
};
const char *type_default(qpol_policy_t *p) {
const char *value;
if (qpol_default_object_get_type_default(p, self, &value)) {
SWIG_exception(SWIG_ValueError, "Could not get type default");
}
fail:
return value;
};
const char *range_default(qpol_policy_t *p) {
const char *value;
if (qpol_default_object_get_range_default(p, self, &value)) {
SWIG_exception(SWIG_ValueError, "Could not get range defaults");
}
fail:
return value;
};
};
%inline %{
qpol_default_object_t *qpol_default_object_from_void(void *x) {
return (qpol_default_object_t*)x;
};
%}
/* qpol iomemcon */
typedef struct qpol_iomemcon {} qpol_iomemcon_t;
%extend qpol_iomemcon {
qpol_iomemcon(qpol_policy_t *p, uint64_t low, uint64_t high) {
const qpol_iomemcon_t *qp;
if (qpol_policy_get_iomemcon_by_addr(p, low, high, &qp)) {
SWIG_exception(SWIG_RuntimeError, "iomemcon statement does not exist");
}
fail:
return (qpol_iomemcon_t*)qp;
};
~qpol_iomemcon() {
/* no op */
return;
};
uint64_t low_addr(qpol_policy_t *p) {
uint64_t addr = 0;
if(qpol_iomemcon_get_low_addr(p, self, &addr)) {
SWIG_exception(SWIG_RuntimeError, "Could not get low addr for iomemcon statement");
}
fail:
return addr;
};
uint64_t high_addr(qpol_policy_t *p) {
uint64_t addr = 0;
if(qpol_iomemcon_get_high_addr(p, self, &addr)) {
SWIG_exception(SWIG_RuntimeError, "Could not get high addr for iomemcon statement");
}
fail:
return addr;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_iomemcon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for iomemcon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_iomemcon_t *qpol_iomemcon_from_void(void *x) {
return (qpol_iomemcon_t*)x;
};
%}
/* qpol ioportcon */
typedef struct qpol_ioportcon {} qpol_ioportcon_t;
%extend qpol_ioportcon {
qpol_ioportcon(qpol_policy_t *p, uint32_t low, uint32_t high) {
const qpol_ioportcon_t *qp;
if (qpol_policy_get_ioportcon_by_port(p, low, high, &qp)) {
SWIG_exception(SWIG_RuntimeError, "ioportcon statement does not exist");
}
fail:
return (qpol_ioportcon_t*)qp;
};
~qpol_ioportcon() {
/* no op */
return;
};
uint32_t low_port(qpol_policy_t *p) {
uint32_t port = 0;
if(qpol_ioportcon_get_low_port(p, self, &port)) {
SWIG_exception(SWIG_RuntimeError, "Could not get low port for ioportcon statement");
}
fail:
return port;
};
uint32_t high_port(qpol_policy_t *p) {
uint32_t port = 0;
if(qpol_ioportcon_get_high_port(p, self, &port)) {
SWIG_exception(SWIG_RuntimeError, "Could not get high port for ioportcon statement");
}
fail:
return port;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_ioportcon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for ioportcon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_ioportcon_t *qpol_ioportcon_from_void(void *x) {
return (qpol_ioportcon_t*)x;
};
%}
/* qpol pcidevicecon */
typedef struct qpol_pcidevicecon {} qpol_pcidevicecon_t;
%extend qpol_pcidevicecon {
qpol_pcidevicecon() {
SWIG_exception(SWIG_RuntimeError, "pcidevicecon statement does not exist");
fail:
return NULL;
};
~qpol_pcidevicecon() {
return;
};
uint32_t device(qpol_policy_t *p) {
uint32_t device = 0;
if(qpol_pcidevicecon_get_device(p, self, &device)) {
SWIG_exception(SWIG_RuntimeError, "Could not get device for pcidevicecon statement");
}
fail:
return device;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_pcidevicecon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for pcidevicecon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_pcidevicecon_t *qpol_pcidevicecon_from_void(void *x) {
return (qpol_pcidevicecon_t*)x;
};
%}
/* qpol pirqcon */
typedef struct qpol_pirqcon {} qpol_pirqcon_t;
%extend qpol_pirqcon {
qpol_pirqcon() {
SWIG_exception(SWIG_RuntimeError, "pirqcon statement does not exist");
fail:
return NULL;
};
~qpol_pirqcon() {
return;
};
uint32_t irq(qpol_policy_t *p) {
uint16_t irq = 0;
if(qpol_pirqcon_get_irq(p, self, &irq)) {
SWIG_exception(SWIG_RuntimeError, "Could not get irq for pirqcon statement");
}
fail:
return irq;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_pirqcon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for pirqcon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_pirqcon_t *qpol_pirqcon_from_void(void *x) {
return (qpol_pirqcon_t*)x;
};
%}
/* qpol devicetreecon */
typedef struct qpol_devicetreecon {} qpol_devicetreecon_t;
%extend qpol_devicetreecon {
qpol_devicetreecon() {
SWIG_exception(SWIG_RuntimeError, "devicetreecon statement does not exist");
fail:
return NULL;
};
char *path(qpol_policy_t *p) {
char *path = NULL;
if(qpol_devicetreecon_get_path(p, self, &path)) {
SWIG_exception(SWIG_RuntimeError, "Could not get path for devicetreecon statement");
}
fail:
return path;
};
const qpol_context_t *context(qpol_policy_t *p) {
const qpol_context_t *ctx;
if (qpol_devicetreecon_get_context(p, self, &ctx)) {
SWIG_exception(SWIG_ValueError, "Could not get context for devicetreecon statement");
}
fail:
return ctx;
};
}
%inline %{
qpol_devicetreecon_t *qpol_devicetreecon_from_void(void *x) {
return (qpol_devicetreecon_t*)x;
};
%}