1*2d543d20SAndroid Build Coastguard Worker /* Author: Spencer Shimko <[email protected]> 2*2d543d20SAndroid Build Coastguard Worker * 3*2d543d20SAndroid Build Coastguard Worker * Copyright (C) 2004-2005 Tresys Technology, LLC 4*2d543d20SAndroid Build Coastguard Worker * Copyright (C) 2006 Red Hat, Inc 5*2d543d20SAndroid Build Coastguard Worker * 6*2d543d20SAndroid Build Coastguard Worker * This library is free software; you can redistribute it and/or 7*2d543d20SAndroid Build Coastguard Worker * modify it under the terms of the GNU Lesser General Public 8*2d543d20SAndroid Build Coastguard Worker * License as published by the Free Software Foundation; either 9*2d543d20SAndroid Build Coastguard Worker * version 2.1 of the License, or (at your option) any later version. 10*2d543d20SAndroid Build Coastguard Worker * 11*2d543d20SAndroid Build Coastguard Worker * This library is distributed in the hope that it will be useful, 12*2d543d20SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 13*2d543d20SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*2d543d20SAndroid Build Coastguard Worker * Lesser General Public License for more details. 15*2d543d20SAndroid Build Coastguard Worker * 16*2d543d20SAndroid Build Coastguard Worker * You should have received a copy of the GNU Lesser General Public 17*2d543d20SAndroid Build Coastguard Worker * License along with this library; if not, write to the Free Software 18*2d543d20SAndroid Build Coastguard Worker * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19*2d543d20SAndroid Build Coastguard Worker */ 20*2d543d20SAndroid Build Coastguard Worker 21*2d543d20SAndroid Build Coastguard Worker /** standard typemaps **/ 22*2d543d20SAndroid Build Coastguard Worker 23*2d543d20SAndroid Build Coastguard Worker %header %{ 24*2d543d20SAndroid Build Coastguard Worker #include <stdlib.h> 25*2d543d20SAndroid Build Coastguard Worker #include <semanage/semanage.h> 26*2d543d20SAndroid Build Coastguard Worker #include <sys/mman.h> 27*2d543d20SAndroid Build Coastguard Worker 28*2d543d20SAndroid Build Coastguard Worker #define STATUS_SUCCESS 0 29*2d543d20SAndroid Build Coastguard Worker #define STATUS_ERR -1 30*2d543d20SAndroid Build Coastguard Worker %} 31*2d543d20SAndroid Build Coastguard Worker 32*2d543d20SAndroid Build Coastguard Worker %include "stdint.i" 33*2d543d20SAndroid Build Coastguard Worker 34*2d543d20SAndroid Build Coastguard Worker %wrapper %{ 35*2d543d20SAndroid Build Coastguard Worker 36*2d543d20SAndroid Build Coastguard Worker 37*2d543d20SAndroid Build Coastguard Worker /* There are two ways to call this function: 38*2d543d20SAndroid Build Coastguard Worker * One is with a valid swig_type and destructor. 39*2d543d20SAndroid Build Coastguard Worker * Two is with a NULL swig_type and NULL destructor. 40*2d543d20SAndroid Build Coastguard Worker * 41*2d543d20SAndroid Build Coastguard Worker * In the first mode, the function converts 42*2d543d20SAndroid Build Coastguard Worker * an array of *cloned* objects [of the given pointer swig type] 43*2d543d20SAndroid Build Coastguard Worker * into a PyList, and destroys the array in the process 44*2d543d20SAndroid Build Coastguard Worker * (the objects pointers are preserved). 45*2d543d20SAndroid Build Coastguard Worker * 46*2d543d20SAndroid Build Coastguard Worker * In the second mode, the function converts 47*2d543d20SAndroid Build Coastguard Worker * an array of *constant* strings into a PyList, and destroys 48*2d543d20SAndroid Build Coastguard Worker * the array in the process 49*2d543d20SAndroid Build Coastguard Worker * (the strings are copied, originals not freed). */ 50*2d543d20SAndroid Build Coastguard Worker semanage_array2plist(semanage_handle_t * handle,void ** arr,unsigned int asize,swig_type_info * swig_type,void (* destructor)(void *),PyObject ** result)51*2d543d20SAndroid Build Coastguard Worker static int semanage_array2plist( 52*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 53*2d543d20SAndroid Build Coastguard Worker void** arr, 54*2d543d20SAndroid Build Coastguard Worker unsigned int asize, 55*2d543d20SAndroid Build Coastguard Worker swig_type_info* swig_type, 56*2d543d20SAndroid Build Coastguard Worker void (*destructor) (void*), 57*2d543d20SAndroid Build Coastguard Worker PyObject** result) { 58*2d543d20SAndroid Build Coastguard Worker 59*2d543d20SAndroid Build Coastguard Worker PyObject* plist = PyList_New(0); 60*2d543d20SAndroid Build Coastguard Worker unsigned int i; 61*2d543d20SAndroid Build Coastguard Worker 62*2d543d20SAndroid Build Coastguard Worker if (!plist) 63*2d543d20SAndroid Build Coastguard Worker goto err; 64*2d543d20SAndroid Build Coastguard Worker 65*2d543d20SAndroid Build Coastguard Worker for (i = 0; i < asize; i++) { 66*2d543d20SAndroid Build Coastguard Worker 67*2d543d20SAndroid Build Coastguard Worker PyObject* obj = NULL; 68*2d543d20SAndroid Build Coastguard Worker 69*2d543d20SAndroid Build Coastguard Worker /* NULL indicates string conversion, 70*2d543d20SAndroid Build Coastguard Worker * otherwise create an opaque pointer */ 71*2d543d20SAndroid Build Coastguard Worker if (!swig_type) 72*2d543d20SAndroid Build Coastguard Worker obj = SWIG_FromCharPtr(arr[i]); 73*2d543d20SAndroid Build Coastguard Worker else 74*2d543d20SAndroid Build Coastguard Worker obj = SWIG_NewPointerObj(arr[i], swig_type, 0); 75*2d543d20SAndroid Build Coastguard Worker 76*2d543d20SAndroid Build Coastguard Worker if (!obj) 77*2d543d20SAndroid Build Coastguard Worker goto err; 78*2d543d20SAndroid Build Coastguard Worker 79*2d543d20SAndroid Build Coastguard Worker if (PyList_Append(plist, obj) < 0) 80*2d543d20SAndroid Build Coastguard Worker goto err; 81*2d543d20SAndroid Build Coastguard Worker } 82*2d543d20SAndroid Build Coastguard Worker 83*2d543d20SAndroid Build Coastguard Worker free(arr); 84*2d543d20SAndroid Build Coastguard Worker 85*2d543d20SAndroid Build Coastguard Worker *result = plist; 86*2d543d20SAndroid Build Coastguard Worker return STATUS_SUCCESS; 87*2d543d20SAndroid Build Coastguard Worker 88*2d543d20SAndroid Build Coastguard Worker err: 89*2d543d20SAndroid Build Coastguard Worker for (i = 0; i < asize; i++) 90*2d543d20SAndroid Build Coastguard Worker if (destructor) 91*2d543d20SAndroid Build Coastguard Worker destructor(arr[i]); 92*2d543d20SAndroid Build Coastguard Worker free(arr); 93*2d543d20SAndroid Build Coastguard Worker return STATUS_ERR; 94*2d543d20SAndroid Build Coastguard Worker } 95*2d543d20SAndroid Build Coastguard Worker %} 96*2d543d20SAndroid Build Coastguard Worker /* a few helpful typemaps are available in this library */ 97*2d543d20SAndroid Build Coastguard Worker %include <typemaps.i> 98*2d543d20SAndroid Build Coastguard Worker /* wrap all int*'s so they can be used for results 99*2d543d20SAndroid Build Coastguard Worker if it becomes necessary to send in data this should be changed to INOUT */ 100*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { int * }; 101*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { size_t * }; 102*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { unsigned int * }; 103*2d543d20SAndroid Build Coastguard Worker %apply int *OUTPUT { uint16_t * }; 104*2d543d20SAndroid Build Coastguard Worker 105*2d543d20SAndroid Build Coastguard Worker %include <cstring.i> 106*2d543d20SAndroid Build Coastguard Worker /* This is needed to properly mmap binary data in SWIG */ 107*2d543d20SAndroid Build Coastguard Worker %cstring_output_allocate_size(void **mapped_data, size_t *data_len, munmap(*$1, *$2)); 108*2d543d20SAndroid Build Coastguard Worker 109*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) char **(char *temp=NULL) { 110*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 111*2d543d20SAndroid Build Coastguard Worker } 112*2d543d20SAndroid Build Coastguard Worker 113*2d543d20SAndroid Build Coastguard Worker %typemap(argout) char** { 114*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_FromCharPtr(*$1)); 115*2d543d20SAndroid Build Coastguard Worker free(*$1); 116*2d543d20SAndroid Build Coastguard Worker } 117*2d543d20SAndroid Build Coastguard Worker 118*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) char ***(char **temp=NULL) { 119*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 120*2d543d20SAndroid Build Coastguard Worker } 121*2d543d20SAndroid Build Coastguard Worker 122*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 123*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 124*2d543d20SAndroid Build Coastguard Worker const semanage_user_t* user, 125*2d543d20SAndroid Build Coastguard Worker const char*** roles_arr, 126*2d543d20SAndroid Build Coastguard Worker unsigned int* num_roles) { 127*2d543d20SAndroid Build Coastguard Worker 128*2d543d20SAndroid Build Coastguard Worker if ($result) { 129*2d543d20SAndroid Build Coastguard Worker int value; 130*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 131*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 132*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 133*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$3, *$4, 134*2d543d20SAndroid Build Coastguard Worker NULL, NULL, &plist) < 0) 135*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 136*2d543d20SAndroid Build Coastguard Worker else 137*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 138*2d543d20SAndroid Build Coastguard Worker } 139*2d543d20SAndroid Build Coastguard Worker } 140*2d543d20SAndroid Build Coastguard Worker } 141*2d543d20SAndroid Build Coastguard Worker 142*2d543d20SAndroid Build Coastguard Worker /** module typemaps**/ 143*2d543d20SAndroid Build Coastguard Worker 144*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 145*2d543d20SAndroid Build Coastguard Worker will not take the semanage_module_info_t ** parameter */ 146*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_module_info_t **(semanage_module_info_t *temp=NULL) { 147*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 148*2d543d20SAndroid Build Coastguard Worker } 149*2d543d20SAndroid Build Coastguard Worker 150*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_module_info_t ** { 151*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 152*2d543d20SAndroid Build Coastguard Worker } 153*2d543d20SAndroid Build Coastguard Worker 154*2d543d20SAndroid Build Coastguard Worker /** module key typemaps **/ 155*2d543d20SAndroid Build Coastguard Worker 156*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 157*2d543d20SAndroid Build Coastguard Worker will not take the semanage_module_key_t ** parameter */ 158*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_module_key_t **(semanage_module_key_t *temp=NULL) { 159*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 160*2d543d20SAndroid Build Coastguard Worker } 161*2d543d20SAndroid Build Coastguard Worker 162*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_module_key_t ** { 163*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 164*2d543d20SAndroid Build Coastguard Worker } 165*2d543d20SAndroid Build Coastguard Worker 166*2d543d20SAndroid Build Coastguard Worker /** context typemaps **/ 167*2d543d20SAndroid Build Coastguard Worker 168*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 169*2d543d20SAndroid Build Coastguard Worker will not take the semanage_context_t ** parameter */ 170*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_context_t **(semanage_context_t *temp=NULL) { 171*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 172*2d543d20SAndroid Build Coastguard Worker } 173*2d543d20SAndroid Build Coastguard Worker 174*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_context_t** { 175*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 176*2d543d20SAndroid Build Coastguard Worker } 177*2d543d20SAndroid Build Coastguard Worker 178*2d543d20SAndroid Build Coastguard Worker /** boolean typemaps **/ 179*2d543d20SAndroid Build Coastguard Worker 180*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 181*2d543d20SAndroid Build Coastguard Worker will not take the semanage_bool_t *** parameter */ 182*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_t ***(semanage_bool_t **temp=NULL) { 183*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 184*2d543d20SAndroid Build Coastguard Worker } 185*2d543d20SAndroid Build Coastguard Worker 186*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 187*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 188*2d543d20SAndroid Build Coastguard Worker semanage_bool_t*** records, 189*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 190*2d543d20SAndroid Build Coastguard Worker 191*2d543d20SAndroid Build Coastguard Worker if ($result) { 192*2d543d20SAndroid Build Coastguard Worker int value; 193*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 194*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 195*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 196*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_bool, 197*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_bool_free, &plist) < 0) 198*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 199*2d543d20SAndroid Build Coastguard Worker else 200*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 201*2d543d20SAndroid Build Coastguard Worker } 202*2d543d20SAndroid Build Coastguard Worker } 203*2d543d20SAndroid Build Coastguard Worker } 204*2d543d20SAndroid Build Coastguard Worker 205*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_t **(semanage_bool_t *temp=NULL) { 206*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 207*2d543d20SAndroid Build Coastguard Worker } 208*2d543d20SAndroid Build Coastguard Worker 209*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_bool_t ** { 210*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 211*2d543d20SAndroid Build Coastguard Worker } 212*2d543d20SAndroid Build Coastguard Worker 213*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_bool_key_t ** { 214*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 215*2d543d20SAndroid Build Coastguard Worker } 216*2d543d20SAndroid Build Coastguard Worker 217*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_bool_key_t **(semanage_bool_key_t *temp=NULL) { 218*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 219*2d543d20SAndroid Build Coastguard Worker } 220*2d543d20SAndroid Build Coastguard Worker 221*2d543d20SAndroid Build Coastguard Worker /** fcontext typemaps **/ 222*2d543d20SAndroid Build Coastguard Worker 223*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 224*2d543d20SAndroid Build Coastguard Worker will not take the semanage_fcontext_t *** parameter */ 225*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_t ***(semanage_fcontext_t **temp=NULL) { 226*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 227*2d543d20SAndroid Build Coastguard Worker } 228*2d543d20SAndroid Build Coastguard Worker 229*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 230*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 231*2d543d20SAndroid Build Coastguard Worker semanage_fcontext_t*** records, 232*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 233*2d543d20SAndroid Build Coastguard Worker 234*2d543d20SAndroid Build Coastguard Worker if ($result) { 235*2d543d20SAndroid Build Coastguard Worker int value; 236*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 237*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 238*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 239*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_fcontext, 240*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_fcontext_free, &plist) < 0) 241*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 242*2d543d20SAndroid Build Coastguard Worker else 243*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 244*2d543d20SAndroid Build Coastguard Worker } 245*2d543d20SAndroid Build Coastguard Worker } 246*2d543d20SAndroid Build Coastguard Worker } 247*2d543d20SAndroid Build Coastguard Worker 248*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_t **(semanage_fcontext_t *temp=NULL) { 249*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 250*2d543d20SAndroid Build Coastguard Worker } 251*2d543d20SAndroid Build Coastguard Worker 252*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_fcontext_t ** { 253*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 254*2d543d20SAndroid Build Coastguard Worker } 255*2d543d20SAndroid Build Coastguard Worker 256*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_fcontext_key_t ** { 257*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 258*2d543d20SAndroid Build Coastguard Worker } 259*2d543d20SAndroid Build Coastguard Worker 260*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_fcontext_key_t **(semanage_fcontext_key_t *temp=NULL) { 261*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 262*2d543d20SAndroid Build Coastguard Worker } 263*2d543d20SAndroid Build Coastguard Worker 264*2d543d20SAndroid Build Coastguard Worker /** interface typemaps **/ 265*2d543d20SAndroid Build Coastguard Worker 266*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 267*2d543d20SAndroid Build Coastguard Worker will not take the semanage_iface_t *** parameter */ 268*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_t ***(semanage_iface_t **temp=NULL) { 269*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 270*2d543d20SAndroid Build Coastguard Worker } 271*2d543d20SAndroid Build Coastguard Worker 272*2d543d20SAndroid Build Coastguard Worker 273*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 274*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 275*2d543d20SAndroid Build Coastguard Worker semanage_iface_t*** records, 276*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 277*2d543d20SAndroid Build Coastguard Worker 278*2d543d20SAndroid Build Coastguard Worker if ($result) { 279*2d543d20SAndroid Build Coastguard Worker int value; 280*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 281*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 282*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 283*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_iface, 284*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_iface_free, &plist) < 0) 285*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 286*2d543d20SAndroid Build Coastguard Worker else 287*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 288*2d543d20SAndroid Build Coastguard Worker } 289*2d543d20SAndroid Build Coastguard Worker } 290*2d543d20SAndroid Build Coastguard Worker } 291*2d543d20SAndroid Build Coastguard Worker 292*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_t **(semanage_iface_t *temp=NULL) { 293*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 294*2d543d20SAndroid Build Coastguard Worker } 295*2d543d20SAndroid Build Coastguard Worker 296*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_iface_t ** { 297*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 298*2d543d20SAndroid Build Coastguard Worker } 299*2d543d20SAndroid Build Coastguard Worker 300*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_iface_key_t ** { 301*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 302*2d543d20SAndroid Build Coastguard Worker } 303*2d543d20SAndroid Build Coastguard Worker 304*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_iface_key_t **(semanage_iface_key_t *temp=NULL) { 305*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 306*2d543d20SAndroid Build Coastguard Worker } 307*2d543d20SAndroid Build Coastguard Worker 308*2d543d20SAndroid Build Coastguard Worker /** seuser typemaps **/ 309*2d543d20SAndroid Build Coastguard Worker 310*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 311*2d543d20SAndroid Build Coastguard Worker will not take the semanage_seuser_t *** parameter */ 312*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_t ***(semanage_seuser_t **temp=NULL) { 313*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 314*2d543d20SAndroid Build Coastguard Worker } 315*2d543d20SAndroid Build Coastguard Worker 316*2d543d20SAndroid Build Coastguard Worker 317*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 318*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 319*2d543d20SAndroid Build Coastguard Worker semanage_seuser_t*** records, 320*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 321*2d543d20SAndroid Build Coastguard Worker 322*2d543d20SAndroid Build Coastguard Worker if ($result) { 323*2d543d20SAndroid Build Coastguard Worker int value; 324*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 325*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 326*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 327*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_seuser, 328*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_seuser_free, &plist) < 0) 329*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 330*2d543d20SAndroid Build Coastguard Worker else 331*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 332*2d543d20SAndroid Build Coastguard Worker } 333*2d543d20SAndroid Build Coastguard Worker } 334*2d543d20SAndroid Build Coastguard Worker } 335*2d543d20SAndroid Build Coastguard Worker 336*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_t **(semanage_seuser_t *temp=NULL) { 337*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 338*2d543d20SAndroid Build Coastguard Worker } 339*2d543d20SAndroid Build Coastguard Worker 340*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_seuser_t ** { 341*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 342*2d543d20SAndroid Build Coastguard Worker } 343*2d543d20SAndroid Build Coastguard Worker 344*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_seuser_key_t ** { 345*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 346*2d543d20SAndroid Build Coastguard Worker } 347*2d543d20SAndroid Build Coastguard Worker 348*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_seuser_key_t **(semanage_seuser_key_t *temp=NULL) { 349*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 350*2d543d20SAndroid Build Coastguard Worker } 351*2d543d20SAndroid Build Coastguard Worker 352*2d543d20SAndroid Build Coastguard Worker /** user typemaps **/ 353*2d543d20SAndroid Build Coastguard Worker 354*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 355*2d543d20SAndroid Build Coastguard Worker will not take the semanage_user_t *** parameter */ 356*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_t ***(semanage_user_t **temp=NULL) { 357*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 358*2d543d20SAndroid Build Coastguard Worker } 359*2d543d20SAndroid Build Coastguard Worker 360*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 361*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 362*2d543d20SAndroid Build Coastguard Worker semanage_user_t*** records, 363*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 364*2d543d20SAndroid Build Coastguard Worker 365*2d543d20SAndroid Build Coastguard Worker if ($result) { 366*2d543d20SAndroid Build Coastguard Worker int value; 367*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 368*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 369*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 370*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_user, 371*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_user_free, &plist) < 0) 372*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 373*2d543d20SAndroid Build Coastguard Worker else 374*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 375*2d543d20SAndroid Build Coastguard Worker } 376*2d543d20SAndroid Build Coastguard Worker } 377*2d543d20SAndroid Build Coastguard Worker } 378*2d543d20SAndroid Build Coastguard Worker 379*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_t **(semanage_user_t *temp=NULL) { 380*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 381*2d543d20SAndroid Build Coastguard Worker } 382*2d543d20SAndroid Build Coastguard Worker 383*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_user_t ** { 384*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 385*2d543d20SAndroid Build Coastguard Worker } 386*2d543d20SAndroid Build Coastguard Worker 387*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_user_key_t ** { 388*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 389*2d543d20SAndroid Build Coastguard Worker } 390*2d543d20SAndroid Build Coastguard Worker 391*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_user_key_t **(semanage_user_key_t *temp=NULL) { 392*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 393*2d543d20SAndroid Build Coastguard Worker } 394*2d543d20SAndroid Build Coastguard Worker 395*2d543d20SAndroid Build Coastguard Worker /** port typemaps **/ 396*2d543d20SAndroid Build Coastguard Worker 397*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 398*2d543d20SAndroid Build Coastguard Worker will not take the semanage_port_t *** parameter */ 399*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_t ***(semanage_port_t **temp=NULL) { 400*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 401*2d543d20SAndroid Build Coastguard Worker } 402*2d543d20SAndroid Build Coastguard Worker 403*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 404*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 405*2d543d20SAndroid Build Coastguard Worker semanage_port_t*** records, 406*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 407*2d543d20SAndroid Build Coastguard Worker 408*2d543d20SAndroid Build Coastguard Worker if ($result) { 409*2d543d20SAndroid Build Coastguard Worker int value; 410*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 411*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 412*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 413*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_port, 414*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_port_free, &plist) < 0) 415*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 416*2d543d20SAndroid Build Coastguard Worker else 417*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 418*2d543d20SAndroid Build Coastguard Worker } 419*2d543d20SAndroid Build Coastguard Worker } 420*2d543d20SAndroid Build Coastguard Worker } 421*2d543d20SAndroid Build Coastguard Worker 422*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_t **(semanage_port_t *temp=NULL) { 423*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 424*2d543d20SAndroid Build Coastguard Worker } 425*2d543d20SAndroid Build Coastguard Worker 426*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_port_t ** { 427*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 428*2d543d20SAndroid Build Coastguard Worker } 429*2d543d20SAndroid Build Coastguard Worker 430*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_port_key_t ** { 431*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 432*2d543d20SAndroid Build Coastguard Worker } 433*2d543d20SAndroid Build Coastguard Worker 434*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_port_key_t **(semanage_port_key_t *temp=NULL) { 435*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 436*2d543d20SAndroid Build Coastguard Worker } 437*2d543d20SAndroid Build Coastguard Worker 438*2d543d20SAndroid Build Coastguard Worker /** ibpkey typemaps **/ 439*2d543d20SAndroid Build Coastguard Worker 440*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 441*2d543d20SAndroid Build Coastguard Worker will not take the semanage_ibpkey_t *** parameter */ 442*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_t ***(semanage_ibpkey_t **temp=NULL) { 443*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 444*2d543d20SAndroid Build Coastguard Worker } 445*2d543d20SAndroid Build Coastguard Worker 446*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 447*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 448*2d543d20SAndroid Build Coastguard Worker semanage_ibpkey_t*** records, 449*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 450*2d543d20SAndroid Build Coastguard Worker 451*2d543d20SAndroid Build Coastguard Worker if ($result) { 452*2d543d20SAndroid Build Coastguard Worker int value; 453*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 454*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 455*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 456*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_ibpkey, 457*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_ibpkey_free, &plist) < 0) 458*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 459*2d543d20SAndroid Build Coastguard Worker else 460*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 461*2d543d20SAndroid Build Coastguard Worker } 462*2d543d20SAndroid Build Coastguard Worker } 463*2d543d20SAndroid Build Coastguard Worker } 464*2d543d20SAndroid Build Coastguard Worker 465*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_t **(semanage_ibpkey_t *temp=NULL) { 466*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 467*2d543d20SAndroid Build Coastguard Worker } 468*2d543d20SAndroid Build Coastguard Worker 469*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibpkey_t ** { 470*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 471*2d543d20SAndroid Build Coastguard Worker } 472*2d543d20SAndroid Build Coastguard Worker 473*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibpkey_key_t ** { 474*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 475*2d543d20SAndroid Build Coastguard Worker } 476*2d543d20SAndroid Build Coastguard Worker 477*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibpkey_key_t **(semanage_ibpkey_key_t *temp=NULL) { 478*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 479*2d543d20SAndroid Build Coastguard Worker } 480*2d543d20SAndroid Build Coastguard Worker 481*2d543d20SAndroid Build Coastguard Worker /** ibendport typemaps **/ 482*2d543d20SAndroid Build Coastguard Worker 483*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 484*2d543d20SAndroid Build Coastguard Worker will not take the semanage_ibendport_t *** parameter */ 485*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_t ***(semanage_ibendport_t **temp=NULL) { 486*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 487*2d543d20SAndroid Build Coastguard Worker } 488*2d543d20SAndroid Build Coastguard Worker 489*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 490*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 491*2d543d20SAndroid Build Coastguard Worker semanage_ibendport_t*** records, 492*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 493*2d543d20SAndroid Build Coastguard Worker 494*2d543d20SAndroid Build Coastguard Worker if ($result) { 495*2d543d20SAndroid Build Coastguard Worker int value; 496*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 497*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 498*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 499*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_ibendport, 500*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_ibendport_free, &plist) < 0) 501*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 502*2d543d20SAndroid Build Coastguard Worker else 503*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 504*2d543d20SAndroid Build Coastguard Worker } 505*2d543d20SAndroid Build Coastguard Worker } 506*2d543d20SAndroid Build Coastguard Worker } 507*2d543d20SAndroid Build Coastguard Worker 508*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_t **(semanage_ibendport_t *temp=NULL) { 509*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 510*2d543d20SAndroid Build Coastguard Worker } 511*2d543d20SAndroid Build Coastguard Worker 512*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibendport_t ** { 513*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 514*2d543d20SAndroid Build Coastguard Worker } 515*2d543d20SAndroid Build Coastguard Worker 516*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_ibendport_key_t ** { 517*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 518*2d543d20SAndroid Build Coastguard Worker } 519*2d543d20SAndroid Build Coastguard Worker 520*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_ibendport_key_t **(semanage_ibendport_key_t *temp=NULL) { 521*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 522*2d543d20SAndroid Build Coastguard Worker } 523*2d543d20SAndroid Build Coastguard Worker 524*2d543d20SAndroid Build Coastguard Worker /** node typemaps **/ 525*2d543d20SAndroid Build Coastguard Worker 526*2d543d20SAndroid Build Coastguard Worker /* the wrapper will setup this parameter for passing... the resulting python functions 527*2d543d20SAndroid Build Coastguard Worker will not take the semanage_node_t *** parameter */ 528*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_t ***(semanage_node_t **temp=NULL) { 529*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 530*2d543d20SAndroid Build Coastguard Worker } 531*2d543d20SAndroid Build Coastguard Worker 532*2d543d20SAndroid Build Coastguard Worker %typemap(argout) ( 533*2d543d20SAndroid Build Coastguard Worker semanage_handle_t* handle, 534*2d543d20SAndroid Build Coastguard Worker semanage_node_t*** records, 535*2d543d20SAndroid Build Coastguard Worker unsigned int* count) { 536*2d543d20SAndroid Build Coastguard Worker 537*2d543d20SAndroid Build Coastguard Worker if ($result) { 538*2d543d20SAndroid Build Coastguard Worker int value; 539*2d543d20SAndroid Build Coastguard Worker SWIG_AsVal_int($result, &value); 540*2d543d20SAndroid Build Coastguard Worker if (value >= 0) { 541*2d543d20SAndroid Build Coastguard Worker PyObject* plist = NULL; 542*2d543d20SAndroid Build Coastguard Worker if (semanage_array2plist($1, (void**) *$2, *$3, SWIGTYPE_p_semanage_node, 543*2d543d20SAndroid Build Coastguard Worker (void (*) (void*)) &semanage_node_free, &plist) < 0) 544*2d543d20SAndroid Build Coastguard Worker $result = SWIG_From_int(STATUS_ERR); 545*2d543d20SAndroid Build Coastguard Worker else 546*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, plist); 547*2d543d20SAndroid Build Coastguard Worker } 548*2d543d20SAndroid Build Coastguard Worker } 549*2d543d20SAndroid Build Coastguard Worker } 550*2d543d20SAndroid Build Coastguard Worker 551*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_t **(semanage_node_t *temp=NULL) { 552*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 553*2d543d20SAndroid Build Coastguard Worker } 554*2d543d20SAndroid Build Coastguard Worker 555*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_node_t ** { 556*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 557*2d543d20SAndroid Build Coastguard Worker } 558*2d543d20SAndroid Build Coastguard Worker 559*2d543d20SAndroid Build Coastguard Worker 560*2d543d20SAndroid Build Coastguard Worker %typemap(argout) semanage_node_key_t ** { 561*2d543d20SAndroid Build Coastguard Worker $result = SWIG_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); 562*2d543d20SAndroid Build Coastguard Worker } 563*2d543d20SAndroid Build Coastguard Worker 564*2d543d20SAndroid Build Coastguard Worker %typemap(in, numinputs=0) semanage_node_key_t **(semanage_node_key_t *temp=NULL) { 565*2d543d20SAndroid Build Coastguard Worker $1 = &temp; 566*2d543d20SAndroid Build Coastguard Worker } 567*2d543d20SAndroid Build Coastguard Worker 568*2d543d20SAndroid Build Coastguard Worker %include "semanageswig_python_exception.i" 569*2d543d20SAndroid Build Coastguard Worker %include "semanageswig.i" 570