From: <ssm...@us...> - 2007-04-12 18:13:18
|
Revision: 2340 http://svn.sourceforge.net/selinux/?rev=2340&view=rev Author: ssmalley Date: 2007-04-12 11:13:16 -0700 (Thu, 12 Apr 2007) Log Message: ----------- Author: Daniel J Walsh Email: dw...@re... Subject: libselinux patch with corrected call to get_all Date: Wed, 11 Apr 2007 14:35:57 -0400 Modified Paths: -------------- trunk/libselinux/man/man8/matchpathcon.8 trunk/libselinux/src/selinuxswig.i trunk/libselinux/src/selinuxswig_wrap.c trunk/libselinux/utils/getsebool.c Modified: trunk/libselinux/man/man8/matchpathcon.8 =================================================================== --- trunk/libselinux/man/man8/matchpathcon.8 2007-04-12 16:19:56 UTC (rev 2339) +++ trunk/libselinux/man/man8/matchpathcon.8 2007-04-12 18:13:16 UTC (rev 2340) @@ -28,4 +28,4 @@ .SH "SEE ALSO" .BR selinux "(8), " -.BR mathpathcon "(3), " +.BR matchpathcon "(3), " Modified: trunk/libselinux/src/selinuxswig.i =================================================================== --- trunk/libselinux/src/selinuxswig.i 2007-04-12 16:19:56 UTC (rev 2339) +++ trunk/libselinux/src/selinuxswig.i 2007-04-12 18:13:16 UTC (rev 2340) @@ -115,9 +115,38 @@ 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(python,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 *)); + if ($1 == NULL) { + PyErr_SetString(PyExc_MemoryError,"Out of memory"); + return NULL; + } + 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); Modified: trunk/libselinux/src/selinuxswig_wrap.c =================================================================== --- trunk/libselinux/src/selinuxswig_wrap.c 2007-04-12 16:19:56 UTC (rev 2339) +++ trunk/libselinux/src/selinuxswig_wrap.c 2007-04-12 18:13:16 UTC (rev 2340) @@ -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,59 @@ 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 *)); + if (arg3 == NULL) { + PyErr_SetString(PyExc_MemoryError,"Out of memory"); + return NULL; + } + 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 *)); + if (arg4 == NULL) { + PyErr_SetString(PyExc_MemoryError,"Out of memory"); + return NULL; + } + 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; Modified: trunk/libselinux/utils/getsebool.c =================================================================== --- trunk/libselinux/utils/getsebool.c 2007-04-12 16:19:56 UTC (rev 2339) +++ trunk/libselinux/utils/getsebool.c 2007-04-12 18:13:16 UTC (rev 2340) @@ -14,7 +14,7 @@ int main(int argc, char **argv) { - int i, rc = 0, active, pending, len = 0, opt; + int i, get_all = 0, rc = 0, active, pending, len = 0, opt; char **names; while ((opt = getopt(argc, argv, "a")) > 0) { @@ -39,6 +39,7 @@ printf("No booleans\n"); return 0; } + get_all = 1; break; default: usage(argv[0]); @@ -72,6 +73,8 @@ for (i = 0; i < len; i++) { active = security_get_boolean_active(names[i]); if (active < 0) { + if (get_all && errno == EACCES) + continue; fprintf(stderr, "Error getting active value for %s\n", names[i]); rc = -1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |