From 3371166078c1b26d5c3416b13a4684cc93823d7a Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Dec 13 2005 20:44:36 +0000 Subject: - update to latest libsetrans - Fix potential memory leak --- diff --git a/libselinux-rhat.patch b/libselinux-rhat.patch index a75befa..03d4f3e 100644 --- a/libselinux-rhat.patch +++ b/libselinux-rhat.patch @@ -1,770 +1,17 @@ -diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux.py libselinux-1.27.28/src/selinux.py ---- nsalibselinux/src/selinux.py 2005-11-28 14:10:10.000000000 -0500 -+++ libselinux-1.27.28/src/selinux.py 2005-12-07 09:00:01.000000000 -0500 -@@ -87,8 +87,6 @@ - - security_setenforce = _selinux.security_setenforce - --security_disable = _selinux.security_disable -- - security_policyvers = _selinux.security_policyvers - - security_get_boolean_names = _selinux.security_get_boolean_names -diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinuxswig.i libselinux-1.27.28/src/selinuxswig.i ---- nsalibselinux/src/selinuxswig.i 2005-11-28 14:10:10.000000000 -0500 -+++ libselinux-1.27.28/src/selinuxswig.i 2005-12-07 08:59:48.000000000 -0500 -@@ -22,6 +22,15 @@ - %{ - #include "selinux/selinux.h" - %} -+%apply int *OUTPUT { int * }; -+%apply int *OUTPUT { size_t * }; -+ -+%typemap(in, numinputs=0) security_context_t *(security_context_t temp) { -+ $1 = &temp; -+} -+%typemap(argout) security_context_t * { -+ $result = t_output_helper($result, PyString_FromString(*$1)); -+} - - extern int is_selinux_enabled(void); - extern int is_selinux_mls_enabled(void); -@@ -51,7 +60,6 @@ - security_context_t *canoncon); - extern int security_getenforce(void); - extern int security_setenforce(int value); --extern int security_disable(void); - extern int security_policyvers(void); - extern int security_get_boolean_names(char ***names, int *len); - extern int security_get_boolean_pending(const char *name); -@@ -96,10 +104,16 @@ - - extern int is_context_customizable (security_context_t scontext); - --extern int selinux_trans_to_raw_context(security_context_t trans, -+extern int selinux_trans_to_raw_context(char *trans, - security_context_t *rawp); --extern int selinux_raw_to_trans_context(security_context_t raw, -+extern int selinux_raw_to_trans_context(char *raw, - security_context_t *transp); - -+%typemap(in, numinputs=0) char **(char *temp) { -+ $1 = &temp; -+} -+ -+%typemap(argout) char ** { -+ $result = t_output_helper($result, PyString_FromString(*$1)); -+} - extern int getseuserbyname(const char *linuxuser, char **seuser, char **level); -- -diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinuxswig_wrap.c libselinux-1.27.28/src/selinuxswig_wrap.c ---- nsalibselinux/src/selinuxswig_wrap.c 2005-11-28 14:10:10.000000000 -0500 -+++ libselinux-1.27.28/src/selinuxswig_wrap.c 2005-12-07 09:00:01.000000000 -0500 -@@ -1515,6 +1515,26 @@ - int getpeercon(int,security_context_t *); - int selinux_mkload_policy(int); - int selinux_init_load_policy(int *); -+ -+SWIGINTERN PyObject* -+t_output_helper(PyObject* target, PyObject* o) { -+ if (!target) { -+ target = o; -+ } else if (target == Py_None) { -+ Py_DECREF(target); -+ target = o; -+ } else { -+ if (!PyList_Check(target)) { -+ PyObject *o2 = target; -+ target = PyList_New(1); -+ PyList_SetItem(target, 0, o2); -+ } -+ PyList_Append(target,o); -+ } -+ return target; -+} -+ -+ - int security_set_boolean_list(size_t,SELboolean *,int); - - SWIGINTERN int -@@ -1569,7 +1589,6 @@ - int security_canonicalize_context(security_context_t,security_context_t *); - int security_getenforce(void); - int security_setenforce(int); --int security_disable(void); - int security_policyvers(void); - int security_get_boolean_names(char ***,int *); - int security_get_boolean_pending(char const *); -@@ -1688,8 +1707,8 @@ - int checkPasswdAccess(access_vector_t); - int rpm_execcon(unsigned int,char const *,char *const [],char *const []); - int is_context_customizable(security_context_t); --int selinux_trans_to_raw_context(security_context_t,security_context_t *); --int selinux_raw_to_trans_context(security_context_t,security_context_t *); -+int selinux_trans_to_raw_context(char *,security_context_t *); -+int selinux_raw_to_trans_context(char *,security_context_t *); - int getseuserbyname(char const *,char **,char **); - #ifdef __cplusplus - extern "C" { -@@ -1730,16 +1749,20 @@ - PyObject *resultobj; - security_context_t *arg1 = (security_context_t *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ security_context_t temp1 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:getcon",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ { -+ arg1 = &temp1; -+ } -+ if(!PyArg_ParseTuple(args,(char *)":getcon")) goto fail; - result = (int)getcon(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg1)); -+ } - return resultobj; - fail: - return NULL; -@@ -1779,10 +1802,13 @@ - pid_t arg1 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:getpidcon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:getpidcon",&obj0)) goto fail; - { - pid_t * argp; - SWIG_Python_ConvertPtr(obj0, (void **)&argp, SWIGTYPE_p_pid_t, SWIG_POINTER_EXCEPTION); -@@ -1793,13 +1819,14 @@ - if (SWIG_arg_fail(1)) SWIG_fail; - arg1 = *argp; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)getpidcon(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -1810,16 +1837,20 @@ - PyObject *resultobj; - security_context_t *arg1 = (security_context_t *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ security_context_t temp1 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:getprevcon",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ { -+ arg1 = &temp1; -+ } -+ if(!PyArg_ParseTuple(args,(char *)":getprevcon")) goto fail; - result = (int)getprevcon(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg1)); -+ } - return resultobj; - fail: - return NULL; -@@ -1830,16 +1861,20 @@ - PyObject *resultobj; - security_context_t *arg1 = (security_context_t *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ security_context_t temp1 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:getexeccon",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ { -+ arg1 = &temp1; -+ } -+ if(!PyArg_ParseTuple(args,(char *)":getexeccon")) goto fail; - result = (int)getexeccon(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg1)); -+ } - return resultobj; - fail: - return NULL; -@@ -1878,16 +1913,20 @@ - PyObject *resultobj; - security_context_t *arg1 = (security_context_t *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ security_context_t temp1 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:getfscreatecon",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ { -+ arg1 = &temp1; -+ } -+ if(!PyArg_ParseTuple(args,(char *)":getfscreatecon")) goto fail; - result = (int)getfscreatecon(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg1)); -+ } - return resultobj; - fail: - return NULL; -@@ -1927,20 +1966,24 @@ - char *arg1 = (char *) 0 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:getfilecon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:getfilecon",&obj0)) goto fail; - if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { - SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)getfilecon((char const *)arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -1952,20 +1995,24 @@ - char *arg1 = (char *) 0 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:lgetfilecon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:lgetfilecon",&obj0)) goto fail; - if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { - SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)lgetfilecon((char const *)arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -1977,21 +2024,25 @@ - int arg1 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:fgetfilecon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:fgetfilecon",&obj0)) goto fail; - { - arg1 = (int)(SWIG_As_int(obj0)); - if (SWIG_arg_fail(1)) SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)fgetfilecon(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2103,21 +2154,25 @@ - int arg1 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:getpeercon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:getpeercon",&obj0)) goto fail; - { - arg1 = (int)(SWIG_As_int(obj0)); - if (SWIG_arg_fail(1)) SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)getpeercon(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2150,16 +2205,18 @@ - PyObject *resultobj; - int *arg1 = (int *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ int temp1 ; -+ int res1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:selinux_init_load_policy",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_int, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ arg1 = &temp1; res1 = SWIG_NEWOBJ; -+ if(!PyArg_ParseTuple(args,(char *)":selinux_init_load_policy")) goto fail; - result = (int)selinux_init_load_policy(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ resultobj = t_output_helper(resultobj, ((res1 == SWIG_NEWOBJ) ? -+ SWIG_From_int((*arg1)) : SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, 0))); - return resultobj; - fail: - return NULL; -@@ -2252,10 +2309,13 @@ - security_context_t arg1 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:security_canonicalize_context",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:security_canonicalize_context",&obj0)) goto fail; - { - security_context_t * argp; - SWIG_Python_ConvertPtr(obj0, (void **)&argp, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION); -@@ -2266,13 +2326,14 @@ - if (SWIG_arg_fail(1)) SWIG_fail; - arg1 = *argp; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)security_canonicalize_context(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2317,22 +2378,6 @@ - } - - --static PyObject *_wrap_security_disable(PyObject *self, PyObject *args) { -- PyObject *resultobj; -- int result; -- -- if(!PyArg_ParseTuple(args,(char *)":security_disable")) goto fail; -- result = (int)security_disable(); -- -- { -- resultobj = SWIG_From_int((int)(result)); -- } -- return resultobj; -- fail: -- return NULL; --} -- -- - static PyObject *_wrap_security_policyvers(PyObject *self, PyObject *args) { - PyObject *resultobj; - int result; -@@ -2354,19 +2399,21 @@ - char ***arg1 = (char ***) 0 ; - int *arg2 = (int *) 0 ; - int result; -+ int temp2 ; -+ int res2 = 0 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:security_get_boolean_names",&obj0,&obj1)) goto fail; -+ arg2 = &temp2; res2 = SWIG_NEWOBJ; -+ if(!PyArg_ParseTuple(args,(char *)"O:security_get_boolean_names",&obj0)) goto fail; - SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_p_p_char, SWIG_POINTER_EXCEPTION | 0); - if (SWIG_arg_fail(1)) SWIG_fail; -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_int, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)security_get_boolean_names(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ resultobj = t_output_helper(resultobj, ((res2 == SWIG_NEWOBJ) ? -+ SWIG_From_int((*arg2)) : SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, 0))); - return resultobj; - fail: - return NULL; -@@ -2504,11 +2551,14 @@ - mode_t arg2 ; - security_context_t *arg3 = (security_context_t *) 0 ; - int result; -+ security_context_t temp3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; -- PyObject * obj2 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OOO:matchpathcon",&obj0,&obj1,&obj2)) goto fail; -+ { -+ arg3 = &temp3; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"OO:matchpathcon",&obj0,&obj1)) goto fail; - if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { - SWIG_arg_fail(1);SWIG_fail; - } -@@ -2522,13 +2572,14 @@ - if (SWIG_arg_fail(2)) SWIG_fail; - arg2 = *argp; - } -- SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(3)) SWIG_fail; - result = (int)matchpathcon((char const *)arg1,arg2,arg3); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg3)); -+ } - return resultobj; - fail: - return NULL; -@@ -2540,20 +2591,24 @@ - char *arg1 = (char *) 0 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:matchmediacon",&obj0,&obj1)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:matchmediacon",&obj0)) goto fail; - if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { - SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)matchmediacon((char const *)arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2564,16 +2619,18 @@ - PyObject *resultobj; - int *arg1 = (int *) 0 ; - int result; -- PyObject * obj0 = 0 ; -+ int temp1 ; -+ int res1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"O:selinux_getenforcemode",&obj0)) goto fail; -- SWIG_Python_ConvertPtr(obj0, (void **)&arg1, SWIGTYPE_p_int, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(1)) SWIG_fail; -+ arg1 = &temp1; res1 = SWIG_NEWOBJ; -+ if(!PyArg_ParseTuple(args,(char *)":selinux_getenforcemode")) goto fail; - result = (int)selinux_getenforcemode(arg1); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ resultobj = t_output_helper(resultobj, ((res1 == SWIG_NEWOBJ) ? -+ SWIG_From_int((*arg1)) : SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, 0))); - return resultobj; - fail: - return NULL; -@@ -2925,30 +2982,27 @@ - - static PyObject *_wrap_selinux_trans_to_raw_context(PyObject *self, PyObject *args) { - PyObject *resultobj; -- security_context_t arg1 ; -+ char *arg1 = (char *) 0 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:selinux_trans_to_raw_context",&obj0,&obj1)) goto fail; - { -- security_context_t * argp; -- SWIG_Python_ConvertPtr(obj0, (void **)&argp, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION); -- if (SWIG_arg_fail(1)) SWIG_fail; -- if (argp == NULL) { -- SWIG_null_ref("security_context_t"); -- } -- if (SWIG_arg_fail(1)) SWIG_fail; -- arg1 = *argp; -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:selinux_trans_to_raw_context",&obj0)) goto fail; -+ if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { -+ SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)selinux_trans_to_raw_context(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2957,30 +3011,27 @@ - - static PyObject *_wrap_selinux_raw_to_trans_context(PyObject *self, PyObject *args) { - PyObject *resultobj; -- security_context_t arg1 ; -+ char *arg1 = (char *) 0 ; - security_context_t *arg2 = (security_context_t *) 0 ; - int result; -+ security_context_t temp2 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OO:selinux_raw_to_trans_context",&obj0,&obj1)) goto fail; - { -- security_context_t * argp; -- SWIG_Python_ConvertPtr(obj0, (void **)&argp, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION); -- if (SWIG_arg_fail(1)) SWIG_fail; -- if (argp == NULL) { -- SWIG_null_ref("security_context_t"); -- } -- if (SWIG_arg_fail(1)) SWIG_fail; -- arg1 = *argp; -+ arg2 = &temp2; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:selinux_raw_to_trans_context",&obj0)) goto fail; -+ if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { -+ SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_security_context_t, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; - result = (int)selinux_raw_to_trans_context(arg1,arg2); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } - return resultobj; - fail: - return NULL; -@@ -2993,23 +3044,31 @@ - char **arg2 = (char **) 0 ; - char **arg3 = (char **) 0 ; - int result; -+ char *temp2 ; -+ char *temp3 ; - PyObject * obj0 = 0 ; -- PyObject * obj1 = 0 ; -- PyObject * obj2 = 0 ; - -- if(!PyArg_ParseTuple(args,(char *)"OOO:getseuserbyname",&obj0,&obj1,&obj2)) goto fail; -+ { -+ arg2 = &temp2; -+ } -+ { -+ arg3 = &temp3; -+ } -+ if(!PyArg_ParseTuple(args,(char *)"O:getseuserbyname",&obj0)) goto fail; - if (!SWIG_AsCharPtr(obj0, (char**)&arg1)) { - SWIG_arg_fail(1);SWIG_fail; - } -- SWIG_Python_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_p_char, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(2)) SWIG_fail; -- SWIG_Python_ConvertPtr(obj2, (void **)&arg3, SWIGTYPE_p_p_char, SWIG_POINTER_EXCEPTION | 0); -- if (SWIG_arg_fail(3)) SWIG_fail; - result = (int)getseuserbyname((char const *)arg1,arg2,arg3); - - { - resultobj = SWIG_From_int((int)(result)); - } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg2)); -+ } -+ { -+ resultobj = t_output_helper(resultobj, PyString_FromString(*arg3)); -+ } - return resultobj; - fail: - return NULL; -@@ -3042,7 +3101,6 @@ - { (char *)"security_canonicalize_context", _wrap_security_canonicalize_context, METH_VARARGS, NULL}, - { (char *)"security_getenforce", _wrap_security_getenforce, METH_VARARGS, NULL}, - { (char *)"security_setenforce", _wrap_security_setenforce, METH_VARARGS, NULL}, -- { (char *)"security_disable", _wrap_security_disable, METH_VARARGS, NULL}, - { (char *)"security_policyvers", _wrap_security_policyvers, METH_VARARGS, NULL}, - { (char *)"security_get_boolean_names", _wrap_security_get_boolean_names, METH_VARARGS, NULL}, - { (char *)"security_get_boolean_pending", _wrap_security_get_boolean_pending, METH_VARARGS, NULL}, -diff --exclude-from=exclude -N -u -r nsalibselinux/utils/getseuser.c libselinux-1.27.28/utils/getseuser.c ---- nsalibselinux/utils/getseuser.c 1969-12-31 19:00:00.000000000 -0500 -+++ libselinux-1.27.28/utils/getseuser.c 2005-12-07 08:58:59.000000000 -0500 -@@ -0,0 +1,27 @@ -+#include -+#include -+#include -+#include -+ -+int main(int argc, char **argv) -+{ -+ char *seuser, *range; -+ int rc, i; -+ -+ if (argc < 2) { -+ fprintf(stderr, "usage: %s path...\n", argv[0]); -+ exit(1); -+ } -+ -+ for (i = 1; i < argc; i++) { -+ rc = getseuserbyname(argv[i], &seuser, &range); -+ if (rc < 0) { -+ fprintf(stderr, "%s: getseuserbyname(%s) failed\n", argv[0], argv[i]); -+ exit(2); -+ } -+ printf("%s\t%s\t%s\n", argv[i], seuser, range); -+ freecon(seuser); -+ freecon(range); -+ } -+ exit(0); -+} -diff --exclude-from=exclude -N -u -r nsalibselinux/utils/setrans.c libselinux-1.27.28/utils/setrans.c ---- nsalibselinux/utils/setrans.c 1969-12-31 19:00:00.000000000 -0500 -+++ libselinux-1.27.28/utils/setrans.c 2005-12-07 08:58:59.000000000 -0500 -@@ -0,0 +1,26 @@ -+#include -+#include -+#include -+#include -+ -+int main(int argc, char **argv) -+{ -+ char *buf; -+ int rc, i; -+ -+ if (argc < 2) { -+ fprintf(stderr, "usage: %s context...\n", argv[0]); -+ exit(1); -+ } -+ -+ for (i = 1; i < argc; i++) { -+ rc = selinux_raw_to_trans_context(argv[i], &buf); -+ if (rc < 0) { -+ fprintf(stderr, "%s: selinux_raw_to_trans_context(%s) failed\n", argv[0], argv[i]); -+ exit(2); -+ } -+ printf("%s\t%s\t%s\n", argv[i], buf); -+ freecon(buf); -+ } -+ exit(0); -+} -diff --exclude-from=exclude -N -u -r nsalibselinux/utils/seuntrans.c libselinux-1.27.28/utils/seuntrans.c ---- nsalibselinux/utils/seuntrans.c 1969-12-31 19:00:00.000000000 -0500 -+++ libselinux-1.27.28/utils/seuntrans.c 2005-12-07 08:58:59.000000000 -0500 -@@ -0,0 +1,26 @@ -+#include -+#include -+#include -+#include -+ -+int main(int argc, char **argv) -+{ -+ char *buf; -+ int rc, i; -+ -+ if (argc < 2) { -+ fprintf(stderr, "usage: %s path...\n", argv[0]); -+ exit(1); -+ } -+ -+ for (i = 1; i < argc; i++) { -+ rc = selinux_trans_to_raw_context(argv[i], &buf); -+ if (rc < 0) { -+ fprintf(stderr, "%s: selinux_trans_to_raw_context(%s) failed\n", argv[0], argv[i]); -+ exit(2); -+ } -+ printf("%s\t%s\t%s\n", argv[i], buf); -+ freecon(buf); -+ } -+ exit(0); -+} +diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.29.1/src/init.c +--- nsalibselinux/src/init.c 2005-10-06 12:31:32.000000000 -0400 ++++ libselinux-1.29.1/src/init.c 2005-12-13 15:39:22.000000000 -0500 +@@ -118,6 +118,13 @@ + #ifdef SHARED + context_translations = 0; + if (translation_lib_handle) { ++ int (*lib_trans_finish)(void) = NULL; ++ ++ lib_trans_finish = dlsym(translation_lib_handle, ++ "finish_context_translations"); ++ if (! dlerror()) ++ lib_trans_finish(); ++ + dlclose(translation_lib_handle); + translation_lib_handle = NULL; + } diff --git a/libselinux.spec b/libselinux.spec index cd85e33..8d0bf04 100644 --- a/libselinux.spec +++ b/libselinux.spec @@ -3,11 +3,11 @@ Summary: SELinux library and simple utilities Name: libselinux Version: 1.29.1 -Release: 2 +Release: 3 License: Public domain (uncopyrighted) Group: System Environment/Libraries Source: http://www.nsa.gov/selinux/archives/%{name}-%{version}.tgz -#Patch: libselinux-rhat.patch +Patch: libselinux-rhat.patch Requires: libsepol >= %{libsepolver} Requires: libsetrans >= %{libsetransver} @@ -49,9 +49,10 @@ needed for developing SELinux applications. %prep %setup -q -#%patch -p1 -b .rhat +%patch -p1 -b .rhat %build +make clean make CFLAGS="-g %{optflags}" %install @@ -108,8 +109,9 @@ exit 0 %{_libdir}/python2.4/site-packages/selinux.py* %changelog -* Sun Dec 11 2005 Dan Walsh 1.29.1-2 +* Sun Dec 11 2005 Dan Walsh 1.29.1-3 - update to latest libsetrans +- Fix potential memory leak * Fri Dec 09 2005 Jesse Keating - rebuilt