Re: This patch adds python3 bindings.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/13/2010 01:25 PM, Daniel J Walsh wrote:
> diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
> index bf665ab..8aeb7a1 100644
> --- a/libselinux/src/Makefile
> +++ b/libselinux/src/Makefile
> @@ -1,9 +1,10 @@
>  # Installation directories.
> +PYTHON ?= python
>  PREFIX ?= $(DESTDIR)/usr
>  LIBDIR ?= $(PREFIX)/lib
>  SHLIBDIR ?= $(DESTDIR)/lib
>  INCLUDEDIR ?= $(PREFIX)/include
> -PYLIBVER ?= $(shell python -c 'import sys;print "python%d.%d" % sys.version_info[0:2]')
> +PYLIBVER ?= $(shell $(PYTHON) -c 'import sys;print("python%d.%d" % sys.version_info[0:2])')
>  PYINC ?= /usr/include/$(PYLIBVER)
>  PYLIB ?= /usr/lib/$(PYLIBVER)
>  PYTHONLIBDIR ?= $(LIBDIR)/$(PYLIBVER)
> @@ -23,13 +24,13 @@ SWIGIF= selinuxswig_python.i selinuxswig_python_exception.i
>  SWIGRUBYIF= selinuxswig_ruby.i
>  SWIGCOUT= selinuxswig_wrap.c
>  SWIGRUBYCOUT= selinuxswig_ruby_wrap.c
> -SWIGLOBJ:= $(patsubst %.c,%.lo,$(SWIGCOUT)) 
> +SWIGLOBJ:= $(patsubst %.c,$(PYPREFIX)%.lo,$(SWIGCOUT)) 
>  SWIGRUBYLOBJ:= $(patsubst %.c,%.lo,$(SWIGRUBYCOUT)) 
> -SWIGSO=_selinux.so
> +SWIGSO=$(PYPREFIX)_selinux.so
>  SWIGFILES=$(SWIGSO) selinux.py selinuxswig_python_exception.i
>  SWIGRUBYSO=_rubyselinux.so
>  LIBSO=$(TARGET).$(LIBVERSION)
> -AUDIT2WHYSO=audit2why.so
> +AUDIT2WHYSO=$(PYPREFIX)audit2why.so
>  
>  ifeq ($(DISABLE_AVC),y)
>  	UNUSED_SRCS+=avc.c avc_internal.c avc_sidtab.c mapping.c stringrep.c checkAccess.c
> @@ -91,10 +92,10 @@ $(LIBPC): $(LIBPC).in
>  selinuxswig_python_exception.i: ../include/selinux/selinux.h
>  	bash exception.sh > $@ 
>  
> -audit2why.lo: audit2why.c
> +$(PYPREFIX)audit2why.lo: audit2why.c
>  	$(CC) $(CFLAGS) -I$(PYINC) -fPIC -DSHARED -c -o $@ $<
>  
> -$(AUDIT2WHYSO): audit2why.lo
> +$(AUDIT2WHYSO): $(PYPREFIX)audit2why.lo
>  	$(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -L. -lselinux ${LIBDIR}/libsepol.a -L$(LIBDIR) -Wl,-soname,$@
>  
>  %.o:  %.c policy.h
> @@ -123,8 +124,8 @@ install: all
>  
>  install-pywrap: pywrap
>  	test -d $(PYTHONLIBDIR)/site-packages/selinux || install -m 755 -d $(PYTHONLIBDIR)/site-packages/selinux
> -	install -m 755 $(SWIGSO) $(PYTHONLIBDIR)/site-packages/selinux
> -	install -m 755 $(AUDIT2WHYSO) $(PYTHONLIBDIR)/site-packages/selinux
> +	install -m 755 $(SWIGSO) $(PYTHONLIBDIR)/site-packages/selinux/_selinux.so
> +	install -m 755 $(AUDIT2WHYSO) $(PYTHONLIBDIR)/site-packages/selinux/audit2why.so
>  	install -m 644  selinux.py $(PYTHONLIBDIR)/site-packages/selinux/__init__.py
>  
>  install-rubywrap: rubywrap
> diff --git a/libselinux/src/audit2why.c b/libselinux/src/audit2why.c
> index 691bc67..12e8614 100644
> --- a/libselinux/src/audit2why.c
> +++ b/libselinux/src/audit2why.c
> @@ -1,3 +1,6 @@
> +/* Workaround for http://bugs.python.org/issue4835 */
> +#define SIZEOF_SOCKET_T SIZEOF_INT
> +
>  #include <Python.h>
>  #include <unistd.h>
>  #include <stdlib.h>
> @@ -287,8 +292,10 @@ static int __policy_init(const char *init_path)
>  static PyObject *init(PyObject *self __attribute__((unused)), PyObject *args) {
>    int result;
>    char *init_path=NULL;
> -  if (PyArg_ParseTuple(args,(char *)"|s:policy_init",&init_path)) 
> -	  result = __policy_init(init_path);
> +  if (!PyArg_ParseTuple(args,(char *)"|s:policy_init",&init_path)) {
> +    return NULL;
> +  }
> +  result = __policy_init(init_path);
>    return Py_BuildValue("i", result);
>  }
>  
> @@ -353,7 +360,11 @@ static PyObject *analyze(PyObject *self __attribute__((unused)) , PyObject *args
>  		strObj = PyList_GetItem(listObj, i); /* Can't fail */
>  		
>  		/* make it a string */
> +#if PY_MAJOR_VERSION >= 3
> +		permstr = _PyUnicode_AsString( strObj );
> +#else
>  		permstr = PyString_AsString( strObj );
> +#endif
>  		
>  		perm = string_to_av_perm(tclass, permstr);
>  		if (!perm) {
> @@ -423,10 +434,39 @@ static PyMethodDef audit2whyMethods[] = {
>      {NULL, NULL, 0, NULL}        /* Sentinel */
>  };
>  
> +#if PY_MAJOR_VERSION >= 3
> +/* Module-initialization logic specific to Python 3 */
> +struct module_state {
> +	/* empty for now */
> +};
> +static struct PyModuleDef moduledef = {
> +	PyModuleDef_HEAD_INIT,
> +	"audit2why",
> +	NULL,
> +	sizeof(struct module_state),
> +	audit2whyMethods,
> +	NULL,
> +	NULL,
> +	NULL,
> +	NULL
> +};
> +
> +PyMODINIT_FUNC
> +PyInit_audit2why(void)
> +#else
>  PyMODINIT_FUNC
>  initaudit2why(void)
> +#endif
>  {
> -	PyObject *m = Py_InitModule("audit2why", audit2whyMethods);
> +	PyObject *m;
> +#if PY_MAJOR_VERSION >= 3
> +	m = PyModule_Create(&moduledef);
> +	if (m == NULL) {
> +		return NULL;
> +	}
> +#else
> +	m  = Py_InitModule("audit2why", audit2whyMethods);
> +#endif
>  	PyModule_AddIntConstant(m,"UNKNOWN", UNKNOWN);
>  	PyModule_AddIntConstant(m,"BADSCON", BADSCON);
>  	PyModule_AddIntConstant(m,"BADTCON", BADTCON);
> @@ -440,4 +480,8 @@ initaudit2why(void)
>  	PyModule_AddIntConstant(m,"BOOLEAN", BOOLEAN);
>  	PyModule_AddIntConstant(m,"CONSTRAINT", CONSTRAINT);
>  	PyModule_AddIntConstant(m,"RBAC", RBAC);
> +
> +#if PY_MAJOR_VERSION >= 3
> +	return m;
> +#endif
>  }
> diff --git a/libselinux/src/selinuxswig_python.i b/libselinux/src/selinuxswig_python.i
> index dea0e80..bb227e9 100644
> --- a/libselinux/src/selinuxswig_python.i
> +++ b/libselinux/src/selinuxswig_python.i
> @@ -45,7 +45,7 @@ def install(src, dest):
>  	PyObject* list = PyList_New(*$2);
>  	int i;
>  	for (i = 0; i < *$2; i++) {
> -		PyList_SetItem(list, i, PyString_FromString((*$1)[i]));
> +		PyList_SetItem(list, i, PyBytes_FromString((*$1)[i]));
>  	}
>  	$result = SWIG_Python_AppendOutput($result, list);
>  }
> @@ -74,7 +74,9 @@ def install(src, dest):
>  			len++;
>  		plist = PyList_New(len);
>  		for (i = 0; i < len; i++) {
> -			PyList_SetItem(plist, i, PyString_FromString((*$1)[i]));
> +			PyList_SetItem(plist, i, 
> +                                       PyBytes_FromString((*$1)[i])
> +                                       );
>  		}
>  	} else {
>  		plist = PyList_New(0);
> @@ -91,7 +93,9 @@ def install(src, dest):
>  	if (*$1) {
>  		plist = PyList_New(result);
>  		for (i = 0; i < result; i++) {
> -			PyList_SetItem(plist, i, PyString_FromString((*$1)[i]));
> +			PyList_SetItem(plist, i, 
> +                                       PyBytes_FromString((*$1)[i])
> +                                       );
>  		}
>  	} else {
>  		plist = PyList_New(0);
> @@ -144,16 +148,20 @@ def install(src, dest):
>  	$1 = (char**) malloc(size + 1);
>  
>  	for(i = 0; i < size; i++) {
> -		if (!PyString_Check(PySequence_GetItem($input, i))) {
> -			PyErr_SetString(PyExc_ValueError, "Sequence must contain only strings");
> +		if (!PyBytes_Check(PySequence_GetItem($input, i))) {
> +			PyErr_SetString(PyExc_ValueError, "Sequence must contain only bytes");
> +
>  			return NULL;
>  		}
> +
>  	}
>  		
>  	for(i = 0; i < size; i++) {
>  		s = PySequence_GetItem($input, i);
> -		$1[i] = (char*) malloc(PyString_Size(s) + 1);
> -		strcpy($1[i], PyString_AsString(s));
> +
> +		$1[i] = (char*) malloc(PyBytes_Size(s) + 1);
> +		strcpy($1[i], PyBytes_AsString(s));
> +
>  	}
>  	$1[size] = NULL;
>  }

This fails to compile for me:

make PYTHON=/usr/bin/python3 PYPREFIX=python3
pywrap cc -Werror -Wall -W -Wundef -Wshadow -Wmissing-noreturn
-Wmissing-format-attribute -I../include -I/usr/include -D_GNU_SOURCE
-D_FILE_OFFSET_BITS=64  -I/usr/include/python3.1 -fPIC -DSHARED -c -o
python3audit2why.lo audit2why.c
cc1: warnings being treated as errors
audit2why.c:441:2: error: missing initializer
audit2why.c:441:2: error: (near initialization for
‘moduledef.m_base.m_init’)

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux