python: Move PyList_AsStringList to common code so we can reuse
authorAndrew Bartlett <abartlet@samba.org>
Fri, 21 Jul 2023 02:31:30 +0000 (14:31 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 21 Jul 2023 05:23:32 +0000 (05:23 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15289

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
python/modules.c
python/modules.h
python/pyglue.c
source4/auth/pyauth.c
source4/auth/wscript_build

index d8b330b6b287e8b56e44e4c4d213d85157f8b4a5..83dc91c08a1303b0c7300b7f5a5c4021dc96c323 100644 (file)
@@ -71,3 +71,38 @@ error:
        Py_XDECREF(mod_sys);
        return false;
 }
+
+const char **PyList_AsStringList(TALLOC_CTX *mem_ctx, PyObject *list, 
+                                const char *paramname)
+{
+       const char **ret;
+       Py_ssize_t i;
+       if (!PyList_Check(list)) {
+               PyErr_Format(PyExc_TypeError, "%s is not a list", paramname);
+               return NULL;
+       }
+       ret = talloc_array(NULL, const char *, PyList_Size(list)+1);
+       if (ret == NULL) {
+               PyErr_NoMemory();
+               return NULL;
+       }
+
+       for (i = 0; i < PyList_Size(list); i++) {
+               const char *value;
+               Py_ssize_t size;
+               PyObject *item = PyList_GetItem(list, i);
+               if (!PyUnicode_Check(item)) {
+                       PyErr_Format(PyExc_TypeError, "%s should be strings", paramname);
+                       return NULL;
+               }
+               value = PyUnicode_AsUTF8AndSize(item, &size);
+               if (value == NULL) {
+                       talloc_free(ret);
+                       return NULL;
+               }
+               ret[i] = talloc_strndup(ret, value, size);
+       }
+       ret[i] = NULL;
+       return ret;
+}
+
index 75108d779073e0208bbcb1a909e7fe3e581c4e22..331adde0230dca839cdeaf048e698756af49f6bf 100644 (file)
 #ifndef __SAMBA_PYTHON_MODULES_H__
 #define __SAMBA_PYTHON_MODULES_H__
 
+#include <talloc.h>
+
 bool py_update_path(void);
 /* discard signature of 'func' in favour of 'target_sig' */
 #define PY_DISCARD_FUNC_SIG(target_sig, func) (target_sig)(void(*)(void))func
+
+const char **PyList_AsStringList(TALLOC_CTX *mem_ctx, PyObject *list,
+                                const char *paramname);
+
 #endif /* __SAMBA_PYTHON_MODULES_H__ */ 
+
index 90c3d6e28955ef07e2acf4da05c22a388077d117..6b9814072e7cfe9902fc664b2b72480e2f773e14 100644 (file)
@@ -20,6 +20,7 @@
 #include <Python.h>
 #include "python/py3compat.h"
 #include "includes.h"
+#include "python/modules.h"
 #include "version.h"
 #include "param/pyparam.h"
 #include "lib/socket/netif.h"
index ec6065d7d0aa583777e6c6f3ba29ae1d8ba99489..ee36b5e5efa62809dff4918ae9db535ae96dc423 100644 (file)
@@ -350,40 +350,6 @@ static PyObject *py_session_info_set_unix(PyObject *module,
 }
 
 
-static const char **PyList_AsStringList(TALLOC_CTX *mem_ctx, PyObject *list, 
-                                       const char *paramname)
-{
-       const char **ret;
-       Py_ssize_t i;
-       if (!PyList_Check(list)) {
-               PyErr_Format(PyExc_TypeError, "%s is not a list", paramname);
-               return NULL;
-       }
-       ret = talloc_array(NULL, const char *, PyList_Size(list)+1);
-       if (ret == NULL) {
-               PyErr_NoMemory();
-               return NULL;
-       }
-
-       for (i = 0; i < PyList_Size(list); i++) {
-               const char *value;
-               Py_ssize_t size;
-               PyObject *item = PyList_GetItem(list, i);
-               if (!PyUnicode_Check(item)) {
-                       PyErr_Format(PyExc_TypeError, "%s should be strings", paramname);
-                       return NULL;
-               }
-               value = PyUnicode_AsUTF8AndSize(item, &size);
-               if (value == NULL) {
-                       talloc_free(ret);
-                       return NULL;
-               }
-               ret[i] = talloc_strndup(ret, value, size);
-       }
-       ret[i] = NULL;
-       return ret;
-}
-
 static PyObject *PyAuthContext_FromContext(struct auth4_context *auth_context)
 {
        return pytalloc_reference(&PyAuthContext, auth_context);
index 9b94143ba7c31b9e2a5116cfe8dfab57c883b736..57bb9f751c6a70ad74dc7443f805bf8f09f1b6e9 100644 (file)
@@ -85,10 +85,12 @@ pytalloc_util = bld.pyembed_libname('pytalloc-util')
 pyparam_util = bld.pyembed_libname('pyparam_util')
 pyldb_util = bld.pyembed_libname('pyldb-util')
 pycredentials = 'pycredentials'
+libpython = bld.pyembed_libname('LIBPYTHON')
+
 bld.SAMBA_PYTHON('pyauth',
         source='pyauth.c',
         public_deps='auth_system_session',
-        deps='samdb %s %s %s %s auth4' % (pytalloc_util, pyparam_util, pyldb_util, pycredentials),
+        deps=f'samdb {pytalloc_util} {pyparam_util} {pyldb_util} {pycredentials} {libpython} auth4',
         realname='samba/auth.so'
         )