From ff4b4da61f160059bc1b23aca6c2d99a2021fc7f Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Apr 05 2007 15:57:35 +0000 Subject: - Make rpm_exec swig work --- diff --git a/libselinux-rhat.patch b/libselinux-rhat.patch index 7bee148..eeec055 100644 --- a/libselinux-rhat.patch +++ b/libselinux-rhat.patch @@ -1,6 +1,132 @@ -diff --exclude-from=exclude -N -u -r nsalibselinux/utils/getsebool.c libselinux-2.0.7/utils/getsebool.c +diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinuxswig.i libselinux-2.0.9/src/selinuxswig.i +--- nsalibselinux/src/selinuxswig.i 2007-02-22 08:53:23.000000000 -0500 ++++ libselinux-2.0.9/src/selinuxswig.i 2007-04-05 11:53:17.000000000 -0400 +@@ -115,9 +115,34 @@ + extern const char *selinux_path(void); + extern int selinux_check_passwd_access(access_vector_t requested); + extern int checkPasswdAccess(access_vector_t requested); ++ ++// This tells SWIG to treat char ** as a special case ++%typemap(in) char ** { ++ /* Check if is a list */ ++ if (PyList_Check($input)) { ++ int size = PyList_Size($input); ++ int i = 0; ++ $1 = (char **) malloc((size+1)*sizeof(char *)); ++ for (i = 0; i < size; i++) { ++ PyObject *o = PyList_GetItem($input,i); ++ if (PyString_Check(o)) ++ $1[i] = PyString_AsString(PyList_GetItem($input,i)); ++ else { ++ PyErr_SetString(PyExc_TypeError,"list must contain strings"); ++ free($1); ++ return NULL; ++ } ++ } ++ $1[i] = 0; ++ } else { ++ PyErr_SetString(PyExc_TypeError,"not a list"); ++ return NULL; ++ } ++} ++ + extern int rpm_execcon(unsigned int verified, + const char *filename, +- char *const argv[], char *const envp[]); ++ char **, char **); + + extern int is_context_customizable (security_context_t scontext); + +diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinuxswig_wrap.c libselinux-2.0.9/src/selinuxswig_wrap.c +--- nsalibselinux/src/selinuxswig_wrap.c 2007-02-22 08:53:23.000000000 -0500 ++++ libselinux-2.0.9/src/selinuxswig_wrap.c 2007-04-05 11:45:04.000000000 -0400 +@@ -4145,18 +4145,14 @@ + PyObject *resultobj = 0; + unsigned int arg1 ; + char *arg2 = (char *) 0 ; +- char **arg3 ; +- char **arg4 ; ++ char **arg3 = (char **) 0 ; ++ char **arg4 = (char **) 0 ; + int result; + unsigned int val1 ; + int ecode1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; +- void *argp3 = 0 ; +- int res3 = 0 ; +- void *argp4 = 0 ; +- int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; +@@ -4173,17 +4169,51 @@ + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "rpm_execcon" "', argument " "2"" of type '" "char const *""'"); + } + arg2 = (char *)(buf2); +- res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_p_char, 0 | 0 ); +- if (!SWIG_IsOK(res3)) { +- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "rpm_execcon" "', argument " "3"" of type '" "char *const []""'"); +- } +- arg3 = (char **)(argp3); +- res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_p_char, 0 | 0 ); +- if (!SWIG_IsOK(res4)) { +- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "rpm_execcon" "', argument " "4"" of type '" "char *const []""'"); +- } +- arg4 = (char **)(argp4); +- result = (int)rpm_execcon(arg1,(char const *)arg2,(char *const (*))arg3,(char *const (*))arg4); ++ { ++ /* Check if is a list */ ++ if (PyList_Check(obj2)) { ++ int size = PyList_Size(obj2); ++ int i = 0; ++ arg3 = (char **) malloc((size+1)*sizeof(char *)); ++ for (i = 0; i < size; i++) { ++ PyObject *o = PyList_GetItem(obj2,i); ++ if (PyString_Check(o)) ++ arg3[i] = PyString_AsString(PyList_GetItem(obj2,i)); ++ else { ++ PyErr_SetString(PyExc_TypeError,"list must contain strings"); ++ free(arg3); ++ return NULL; ++ } ++ } ++ arg3[i] = 0; ++ } else { ++ PyErr_SetString(PyExc_TypeError,"not a list"); ++ return NULL; ++ } ++ } ++ { ++ /* Check if is a list */ ++ if (PyList_Check(obj3)) { ++ int size = PyList_Size(obj3); ++ int i = 0; ++ arg4 = (char **) malloc((size+1)*sizeof(char *)); ++ for (i = 0; i < size; i++) { ++ PyObject *o = PyList_GetItem(obj3,i); ++ if (PyString_Check(o)) ++ arg4[i] = PyString_AsString(PyList_GetItem(obj3,i)); ++ else { ++ PyErr_SetString(PyExc_TypeError,"list must contain strings"); ++ free(arg4); ++ return NULL; ++ } ++ } ++ arg4[i] = 0; ++ } else { ++ PyErr_SetString(PyExc_TypeError,"not a list"); ++ return NULL; ++ } ++ } ++ result = (int)rpm_execcon(arg1,(char const *)arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +diff --exclude-from=exclude -N -u -r nsalibselinux/utils/getsebool.c libselinux-2.0.9/utils/getsebool.c --- nsalibselinux/utils/getsebool.c 2006-11-16 17:15:17.000000000 -0500 -+++ libselinux-2.0.7/utils/getsebool.c 2007-03-22 16:48:06.000000000 -0400 ++++ libselinux-2.0.9/utils/getsebool.c 2007-04-05 10:53:29.000000000 -0400 @@ -72,17 +72,23 @@ for (i = 0; i < len; i++) { active = security_get_boolean_active(names[i]); diff --git a/libselinux.spec b/libselinux.spec index 84796d7..673e9b4 100644 --- a/libselinux.spec +++ b/libselinux.spec @@ -2,7 +2,7 @@ Summary: SELinux library and simple utilities Name: libselinux Version: 2.0.9 -Release: 1%{?dist} +Release: 2%{?dist} License: Public domain (uncopyrighted) Group: System Environment/Libraries Source: http://www.nsa.gov/selinux/archives/%{name}-%{version}.tgz @@ -121,6 +121,9 @@ exit 0 %{_libdir}/python*/site-packages/selinux.py* %changelog +* Thu Apr 5 2007 Dan Walsh - 2.0.9-2 +- Make rpm_exec swig work + * Tue Mar 27 2007 Dan Walsh - 2.0.9-1 - Upgrade to upstream * Merged class/av string conversion and avc_compute_create patch from Eamon Walsh.