]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
pyldb: adapt some simple dn methods to use LDB_DN_OR_RAISE()
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 14 Mar 2024 03:38:14 +0000 (16:38 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 10 Apr 2024 05:13:32 +0000 (05:13 +0000)
We treat self as PyObject, and only trust its DN once it has been
laundered by PyErr_LDB_DN_OR_RAISE().

There are more of these to come in the next few commits, but these are
the simplest ones (on a textual level -- the others are simple too, but
look different).

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/pyldb.c

index 0edad9afc97969d50bcd19d6431e59f1b8c2a8c0..2d713ea00f4cf7491346801601d8c89ab95531a2 100644 (file)
@@ -437,10 +437,12 @@ static PyObject *PyLdbResult_FromResult(struct ldb_result *result, PyLdbObject *
        return (PyObject *)ret;
 }
 
-static PyObject *py_ldb_dn_validate(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_validate(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       return PyBool_FromLong(ldb_dn_validate(self->dn));
+       struct ldb_dn *dn = NULL;
+       PyErr_LDB_DN_OR_RAISE(self, dn);
+       return PyBool_FromLong(ldb_dn_validate(dn));
 }
 
 static PyObject *py_ldb_dn_is_valid(PyLdbDnObject *self,
@@ -455,10 +457,12 @@ static PyObject *py_ldb_dn_is_special(PyLdbDnObject *self,
        return PyBool_FromLong(ldb_dn_is_special(self->dn));
 }
 
-static PyObject *py_ldb_dn_is_null(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_is_null(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       return PyBool_FromLong(ldb_dn_is_null(self->dn));
+       struct ldb_dn *dn = NULL;
+       PyErr_LDB_DN_OR_RAISE(self, dn);
+       return PyBool_FromLong(ldb_dn_is_null(dn));
 }
 
 static PyObject *py_ldb_dn_get_casefold(PyLdbDnObject *self,
@@ -472,22 +476,28 @@ static PyObject *py_ldb_dn_get_casefold(PyLdbDnObject *self,
        return PyUnicode_FromString(s);
 }
 
-static PyObject *py_ldb_dn_get_linearized(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_get_linearized(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       return PyUnicode_FromString(ldb_dn_get_linearized(self->dn));
+       struct ldb_dn *dn = NULL;
+       PyErr_LDB_DN_OR_RAISE(self, dn);
+       return PyUnicode_FromString(ldb_dn_get_linearized(dn));
 }
 
-static PyObject *py_ldb_dn_canonical_str(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_canonical_str(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       return PyUnicode_FromString(ldb_dn_canonical_string(self->dn, self->dn));
+       struct ldb_dn *dn = NULL;
+       PyErr_LDB_DN_OR_RAISE(self, dn);
+       return PyUnicode_FromString(ldb_dn_canonical_string(dn, dn));
 }
 
-static PyObject *py_ldb_dn_canonical_ex_str(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_canonical_ex_str(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       return PyUnicode_FromString(ldb_dn_canonical_ex_string(self->dn, self->dn));
+       struct ldb_dn *dn = NULL;
+       PyErr_LDB_DN_OR_RAISE(self, dn);
+       return PyUnicode_FromString(ldb_dn_canonical_ex_string(dn, dn));
 }
 
 static PyObject *py_ldb_dn_extended_str(PyLdbDnObject *self, PyObject *args, PyObject *kwargs)
@@ -663,15 +673,15 @@ static PyObject *py_ldb_dn_add_base(PyLdbDnObject *self, PyObject *args)
        Py_RETURN_TRUE;
 }
 
-static PyObject *py_ldb_dn_remove_base_components(PyLdbDnObject *self, PyObject *args)
+static PyObject *py_ldb_dn_remove_base_components(PyObject *self, PyObject *args)
 {
-       struct ldb_dn *dn;
+       struct ldb_dn *dn = NULL;
        int i;
        bool ok;
        if (!PyArg_ParseTuple(args, "i", &i))
                return NULL;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        ok = ldb_dn_remove_base_components(dn, i);
        if (!ok) {
@@ -682,14 +692,14 @@ static PyObject *py_ldb_dn_remove_base_components(PyLdbDnObject *self, PyObject
        Py_RETURN_TRUE;
 }
 
-static PyObject *py_ldb_dn_is_child_of(PyLdbDnObject *self, PyObject *args)
+static PyObject *py_ldb_dn_is_child_of(PyObject *self, PyObject *args)
 {
        PyObject *py_base;
        struct ldb_dn *dn, *base;
        if (!PyArg_ParseTuple(args, "O", &py_base))
                return NULL;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        if (!pyldb_Object_AsDn(NULL, py_base, ldb_dn_get_ldb_context(dn), &base))
                return NULL;
@@ -697,16 +707,16 @@ static PyObject *py_ldb_dn_is_child_of(PyLdbDnObject *self, PyObject *args)
        return PyBool_FromLong(ldb_dn_compare_base(base, dn) == 0);
 }
 
-static PyObject *py_ldb_dn_get_component_name(PyLdbDnObject *self, PyObject *args)
+static PyObject *py_ldb_dn_get_component_name(PyObject *self, PyObject *args)
 {
-       struct ldb_dn *dn;
+       struct ldb_dn *dn = NULL;
        const char *name;
        unsigned int num = 0;
 
        if (!PyArg_ParseTuple(args, "I", &num))
                return NULL;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        name = ldb_dn_get_component_name(dn, num);
        if (name == NULL) {
@@ -716,16 +726,16 @@ static PyObject *py_ldb_dn_get_component_name(PyLdbDnObject *self, PyObject *arg
        return PyUnicode_FromString(name);
 }
 
-static PyObject *py_ldb_dn_get_component_value(PyLdbDnObject *self, PyObject *args)
+static PyObject *py_ldb_dn_get_component_value(PyObject *self, PyObject *args)
 {
-       struct ldb_dn *dn;
+       struct ldb_dn *dn = NULL;
        const struct ldb_val *val;
        unsigned int num = 0;
 
        if (!PyArg_ParseTuple(args, "I", &num))
                return NULL;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        val = ldb_dn_get_component_val(dn, num);
        if (val == NULL) {
@@ -735,13 +745,16 @@ static PyObject *py_ldb_dn_get_component_value(PyLdbDnObject *self, PyObject *ar
        return PyStr_FromLdbValue(val);
 }
 
-static PyObject *py_ldb_dn_set_component(PyLdbDnObject *self, PyObject *args)
+static PyObject *py_ldb_dn_set_component(PyObject *self, PyObject *args)
 {
        unsigned int num = 0;
        char *name = NULL, *value = NULL;
        struct ldb_val val = { 0 };
        int err;
        Py_ssize_t size = 0;
+       struct ldb_dn *dn = NULL;
+
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        if (!PyArg_ParseTuple(args, "Iss#", &num, &name, &value, &size))
                return NULL;
@@ -749,7 +762,7 @@ static PyObject *py_ldb_dn_set_component(PyLdbDnObject *self, PyObject *args)
        val.data = (unsigned char*) value;
        val.length = size;
 
-       err = ldb_dn_set_component(self->dn, num, name, val);
+       err = ldb_dn_set_component(dn, num, name, val);
        if (err != LDB_SUCCESS) {
                PyErr_SetString(PyExc_TypeError, "Failed to set component");
                return NULL;
@@ -758,13 +771,13 @@ static PyObject *py_ldb_dn_set_component(PyLdbDnObject *self, PyObject *args)
        Py_RETURN_NONE;
 }
 
-static PyObject *py_ldb_dn_get_rdn_name(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_get_rdn_name(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       struct ldb_dn *dn;
+       struct ldb_dn *dn = NULL;
        const char *name;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        name = ldb_dn_get_rdn_name(dn);
        if (name == NULL) {
@@ -774,13 +787,13 @@ static PyObject *py_ldb_dn_get_rdn_name(PyLdbDnObject *self,
        return PyUnicode_FromString(name);
 }
 
-static PyObject *py_ldb_dn_get_rdn_value(PyLdbDnObject *self,
+static PyObject *py_ldb_dn_get_rdn_value(PyObject *self,
                PyObject *Py_UNUSED(ignored))
 {
-       struct ldb_dn *dn;
+       struct ldb_dn *dn = NULL;
        const struct ldb_val *val;
 
-       dn = pyldb_Dn_AS_DN((PyObject *)self);
+       PyErr_LDB_DN_OR_RAISE(self, dn);
 
        val = ldb_dn_get_rdn_val(dn);
        if (val == NULL) {