diff --exclude-from=exclude -N -u -r nsalibselinux/man/man8/matchpathcon.8 libselinux-2.0.9/man/man8/matchpathcon.8 --- nsalibselinux/man/man8/matchpathcon.8 2007-01-17 11:11:35.000000000 -0500 +++ libselinux-2.0.9/man/man8/matchpathcon.8 2007-04-05 13:20:43.000000000 -0400 @@ -28,4 +28,4 @@ .SH "SEE ALSO" .BR selinux "(8), " -.BR mathpathcon "(3), " +.BR matchpathcon "(3), " 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 16:47:42.000000000 -0400 @@ -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); 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.9/utils/getsebool.c 2007-04-05 16:57:51.000000000 -0400 @@ -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;