python: Port samba.registry module to Python 3 compatible form
authorLumir Balhar <lbalhar@redhat.com>
Wed, 11 Oct 2017 10:46:11 +0000 (12:46 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 18 Oct 2017 08:20:26 +0000 (10:20 +0200)
Signed-off-by: Lumir Balhar <lbalhar@redhat.com>
Reviewed-by: Andrew Bartlet <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source4/lib/registry/pyregistry.c
source4/lib/registry/wscript_build

index 78a0b1dc414d8104dd15fb678b34f4919f462d88..f36973feb35d438d67401babc6d907b350fa08ce 100644 (file)
@@ -19,6 +19,7 @@
 */
 
 #include <Python.h>
+#include "python/py3compat.h"
 #include "includes.h"
 #include "libcli/util/pyerrors.h"
 #include "lib/registry/registry.h"
@@ -31,8 +32,6 @@ extern PyTypeObject PyRegistryKey;
 extern PyTypeObject PyRegistry;
 extern PyTypeObject PyHiveKey;
 
-void initregistry(void);
-
 /*#define PyRegistryKey_AsRegistryKey(obj) pytalloc_get_type(obj, struct registry_key)*/
 #define PyRegistry_AsRegistryContext(obj) ((struct registry_context *)pytalloc_get_ptr(obj))
 #define PyHiveKey_AsHiveKey(obj) ((struct hive_key*)pytalloc_get_ptr(obj))
@@ -121,7 +120,7 @@ static PyObject *py_mount_hive(PyObject *self, PyObject *args)
                int i;
                elements = talloc_array(NULL, const char *, PyList_Size(py_elements));
                for (i = 0; i < PyList_Size(py_elements); i++)
-                       elements[i] = PyString_AsString(PyList_GetItem(py_elements, i));
+                       elements[i] = PyStr_AsString(PyList_GetItem(py_elements, i));
        }
 
        SMB_ASSERT(ctx != NULL);
@@ -412,7 +411,7 @@ static PyObject *py_str_regtype(PyObject *self, PyObject *args)
        if (!PyArg_ParseTuple(args, "i", &regtype))
                return NULL;
        
-       return PyString_FromString(str_regtype(regtype));
+       return PyStr_FromString(str_regtype(regtype));
 }
 
 static PyObject *py_get_predef_name(PyObject *self, PyObject *args)
@@ -426,7 +425,7 @@ static PyObject *py_get_predef_name(PyObject *self, PyObject *args)
        str = reg_get_predef_name(hkey);
        if (str == NULL)
                Py_RETURN_NONE;
-       return PyString_FromString(str);
+       return PyStr_FromString(str);
 }
 
 static PyMethodDef py_registry_methods[] = {
@@ -438,22 +437,30 @@ static PyMethodDef py_registry_methods[] = {
        { NULL }
 };
 
-void initregistry(void)
+static struct PyModuleDef moduledef = {
+    PyModuleDef_HEAD_INIT,
+    .m_name = "registry",
+    .m_doc = "Registry",
+    .m_size = -1,
+    .m_methods = py_registry_methods,
+};
+
+MODULE_INIT_FUNC(registry)
 {
        PyObject *m;
 
        if (pytalloc_BaseObject_PyType_Ready(&PyHiveKey) < 0)
-               return;
+               return NULL;
 
        if (pytalloc_BaseObject_PyType_Ready(&PyRegistry) < 0)
-               return;
+               return NULL;
 
        if (pytalloc_BaseObject_PyType_Ready(&PyRegistryKey) < 0)
-               return;
+               return NULL;
 
-       m = Py_InitModule3("registry", py_registry_methods, "Registry");
+       m = PyModule_Create(&moduledef);
        if (m == NULL)
-               return;
+               return NULL;
 
        PyModule_AddObject(m, "HKEY_CLASSES_ROOT", PyInt_FromLong(HKEY_CLASSES_ROOT));
        PyModule_AddObject(m, "HKEY_CURRENT_USER", PyInt_FromLong(HKEY_CURRENT_USER));
@@ -473,4 +480,6 @@ void initregistry(void)
 
        Py_INCREF(&PyRegistryKey);
        PyModule_AddObject(m, "RegistryKey", (PyObject *)&PyRegistryKey);
+
+       return m;
 }
index c558b225a3b197b28ba4df7f854835180f8229e3..06508fb38d577924d877b8076ab1698c8f9a8dc1 100644 (file)
@@ -59,10 +59,12 @@ bld.SAMBA_SUBSYSTEM('torture_registry',
        deps='torture registry'
        )
 
-
-bld.SAMBA_PYTHON('py_registry',
-       source='pyregistry.c',
-       public_deps='registry pytalloc-util pyparam_util',
-       realname='samba/registry.so'
-       )
-
+for env in bld.gen_python_environments():
+       pytalloc_util = bld.pyembed_libname('pytalloc-util')
+       pyparam_util = bld.pyembed_libname('pyparam_util')
+
+       bld.SAMBA_PYTHON('py_registry',
+               source='pyregistry.c',
+               public_deps='registry %s %s' % (pytalloc_util, pyparam_util),
+               realname='samba/registry.so'
+               )