ldb: Update ldb.get_opaque() to return talloc‐managed opaque values
authorJo Sutton <josutton@catalyst.net.nz>
Fri, 1 Mar 2024 03:23:58 +0000 (16:23 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Sun, 3 Mar 2024 23:33:44 +0000 (23:33 +0000)
Signed-off-by: Jo Sutton <josutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Sun Mar  3 23:33:44 UTC 2024 on atb-devel-224

lib/ldb/pyldb.c
selftest/knownfail.d/pyldb-opaque [deleted file]

index 6f273cfd2d53b27874e56f533e2a0eb593640e8c..435f2477672d8484005e28f5dc4ce969bcfb3579 100644 (file)
@@ -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 (file)
index 23d639d..0000000
+++ /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\)$