diff --git a/lib/ldb-samba/pyldb.c b/lib/ldb-samba/pyldb.c index 6c0d2a76b2e..dfcb5510e6d 100644 --- a/lib/ldb-samba/pyldb.c +++ b/lib/ldb-samba/pyldb.c @@ -20,6 +20,7 @@ */ #include +#include "python/py3compat.h" #include "includes.h" #include #include @@ -29,7 +30,6 @@ #include "lib/ldb-samba/ldif_handlers.h" #include "auth/pyauth.h" -void init_ldb(void); static PyObject *pyldb_module; static PyObject *py_ldb_error; @@ -237,6 +237,14 @@ static PyMethodDef py_samba_ldb_methods[] = { { NULL }, }; +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + .m_name = "_ldb", + .m_doc = "Samba-specific LDB python bindings", + .m_size = -1, + .m_methods = py_samba_ldb_methods, +}; + static PyTypeObject PySambaLdb = { .tp_name = "samba._ldb.Ldb", .tp_doc = "Connection to a LDB database.", @@ -244,27 +252,29 @@ static PyTypeObject PySambaLdb = { .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, }; -void init_ldb(void) +MODULE_INIT_FUNC(_ldb) { PyObject *m; pyldb_module = PyImport_ImportModule("ldb"); if (pyldb_module == NULL) - return; + return NULL; PySambaLdb.tp_base = (PyTypeObject *)PyObject_GetAttrString(pyldb_module, "Ldb"); if (PySambaLdb.tp_base == NULL) - return; + return NULL; py_ldb_error = PyObject_GetAttrString(pyldb_module, "LdbError"); if (PyType_Ready(&PySambaLdb) < 0) - return; + return NULL; - m = Py_InitModule3("_ldb", NULL, "Samba-specific LDB python bindings"); + m = PyModule_Create(&moduledef); if (m == NULL) - return; + return NULL; Py_INCREF(&PySambaLdb); PyModule_AddObject(m, "Ldb", (PyObject *)&PySambaLdb); + + return m; } diff --git a/lib/ldb-samba/wscript_build b/lib/ldb-samba/wscript_build index d35b2277da7..c538b5a1260 100644 --- a/lib/ldb-samba/wscript_build +++ b/lib/ldb-samba/wscript_build @@ -18,10 +18,12 @@ bld.SAMBA_SUBSYSTEM('ldbwrap', deps='ldb samba-util ldbsamba samba-hostconfig' ) - -bld.SAMBA_PYTHON('python_samba__ldb', 'pyldb.c', - deps='ldbsamba pyparam_util ldbwrap pyldb-util pyauth', - realname='samba/_ldb.so') +for env in bld.gen_python_environments(): + pyparam_util = bld.pyembed_libname('pyparam_util') + pyldb_util = bld.pyembed_libname('pyldb-util') + bld.SAMBA_PYTHON('python_samba__ldb', 'pyldb.c', + deps='ldbsamba %s ldbwrap %s pyauth' % (pyparam_util, pyldb_util), + realname='samba/_ldb.so') bld.SAMBA_MODULE('ldbsamba_extensions', source='samba_extensions.c', diff --git a/python/samba/__init__.py b/python/samba/__init__.py index a5db0f0353e..29f4378e756 100644 --- a/python/samba/__init__.py +++ b/python/samba/__init__.py @@ -29,11 +29,7 @@ import ldb from samba.compat import PY3 import samba.param from samba import _glue -if not PY3: - from samba._ldb import Ldb as _Ldb -else: - # samba._ldb is not yet ported to Python 3 - _Ldb = object +from samba._ldb import Ldb as _Ldb def source_tree_topdir():