From: Jo Sutton Date: Fri, 1 Mar 2024 03:23:58 +0000 (+1300) Subject: ldb: Update ldb.get_opaque() to return talloc‐managed opaque values X-Git-Tag: tdb-1.4.11~1530 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ee94d7085570da981b0772c141a76a899c7b0e66;p=thirdparty%2Fsamba.git ldb: Update ldb.get_opaque() to return talloc‐managed opaque values Signed-off-by: Jo Sutton Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Sun Mar 3 23:33:44 UTC 2024 on atb-devel-224 --- diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c index 6f273cfd2d5..435f2477672 100644 --- a/lib/ldb/pyldb.c +++ b/lib/ldb/pyldb.c @@ -2414,9 +2414,42 @@ static PyObject *py_ldb_get_opaque(PyLdbObject *self, PyObject *args) if (data == NULL) Py_RETURN_NONE; - /* FIXME: More interpretation */ + if (data == (void *)1) { + /* + * This value is sometimes used to indicate that a opaque is + * set. + */ + Py_RETURN_TRUE; + } - Py_RETURN_TRUE; + { + /* + * Let’s hope the opaque data is actually a talloc pointer, + * otherwise calling this would be Very Bad. + */ + const bool *opaque = talloc_get_type(data, bool); + if (opaque != NULL) { + return PyBool_FromLong(*opaque); + } + } + + { + const unsigned long long *opaque = talloc_get_type( + data, unsigned long long); + if (opaque != NULL) { + return PyLong_FromUnsignedLongLong(*opaque); + } + } + + { + const char *opaque = talloc_get_type(data, char); + if (opaque != NULL) { + return PyUnicode_FromString(opaque); + } + } + + PyErr_SetString(PyExc_ValueError, "Unsupported type for opaque"); + return NULL; } static PyObject *py_ldb_set_opaque(PyLdbObject *self, PyObject *args) diff --git a/selftest/knownfail.d/pyldb-opaque b/selftest/knownfail.d/pyldb-opaque deleted file mode 100644 index 23d639d1cd9..00000000000 --- a/selftest/knownfail.d/pyldb-opaque +++ /dev/null @@ -1,8 +0,0 @@ -^ldb\.python\.api\.SimpleLdb\.test_opaque_bool\(none\)$ -^ldb\.python\.api\.SimpleLdb\.test_opaque_int\(none\)$ -^ldb\.python\.api\.SimpleLdb\.test_opaque_none\(none\)$ -^ldb\.python\.api\.SimpleLdb\.test_opaque_string\(none\)$ -^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_bool\(none\)$ -^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_int\(none\)$ -^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_none\(none\)$ -^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_string\(none\)$