]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:param: replace calls to deprecated Python methods
authorDmitry Antipov <dantipov@cloudlinux.com>
Thu, 30 Mar 2023 11:04:37 +0000 (14:04 +0300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 21 Jul 2023 01:25:36 +0000 (01:25 +0000)
Replace calls to (obsolete but still stable)
PyEval_CallObjectWithKeywords() with PyObject_Call()
by using trivial wrapper.

Signed-off-by: Dmitry Antipov <dantipov@cloudlinux.com>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
[abartlet@samba.org Adjusted to always use the PyObject_Call()
 as it is available in all of Samba's supported python versions]

source4/param/provision.c

index e0b7c690e0795d2cdbb918e29ebb8a6302e97c07..d6d120647e6a5c62b38f33e521513c71c6f0d145 100644 (file)
@@ -101,6 +101,18 @@ static PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx)
        return (PyObject *)ret;
 }
 
+static PyObject *call_wrapper(PyObject *callable, PyObject *kwargs)
+{
+       /*
+        * Helper for calls with zero non-keyword arguments.
+        */
+       PyObject *empty = PyTuple_New(0), *result = NULL;
+       SMB_ASSERT(empty);
+       result = PyObject_Call(callable, empty, kwargs);
+       Py_XDECREF(empty);
+       return result;
+}
+
 NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                        struct provision_settings *settings, 
                        struct provision_result *result)
@@ -265,7 +277,7 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx,
                goto out;
        }
 
-       py_result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters);
+       py_result = call_wrapper(provision_fn, parameters);
 
        if (py_result == NULL) {
                status = NT_STATUS_UNSUCCESSFUL;
@@ -453,7 +465,7 @@ NTSTATUS provision_store_self_join(TALLOC_CTX *mem_ctx, struct loadparm_context
                goto out;
        }
 
-       py_result = PyEval_CallObjectWithKeywords(provision_fn, NULL, parameters);
+       py_result = call_wrapper(provision_fn, parameters);
 
        if (py_result == NULL) {
                ldb_transaction_cancel(ldb);
@@ -538,7 +550,7 @@ struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx,
                }
        }
 
-       py_result = PyEval_CallObjectWithKeywords(schema_fn, NULL, parameters);
+       py_result = call_wrapper(schema_fn, parameters);
 
        Py_DECREF(parameters);