s4-pyldb: Handle internal errors in py_ldb_contains() properly
authorKamen Mazdrashki <kamenim@samba.org>
Mon, 8 Nov 2010 22:21:57 +0000 (00:21 +0200)
committerKamen Mazdrashki <kamenim@samba.org>
Wed, 10 Nov 2010 09:02:00 +0000 (09:02 +0000)
It is an exceptional condition for ldb_search() to return
more than one results during SCOPE_BASE search on DN

Autobuild-User: Kamen Mazdrashki <kamenim@samba.org>
Autobuild-Date: Wed Nov 10 09:02:00 UTC 2010 on sn-devel-104

source4/lib/ldb/pyldb.c

index eddc56f777c2cbcd6928c9f00a14af7afb2a4214..1f5bd1e58d51c27349cc0be027a5a9c045fc1fd6 100644 (file)
@@ -1428,8 +1428,9 @@ static int py_ldb_contains(PyLdbObject *self, PyObject *obj)
        unsigned int count;
        int ret;
 
-       if (!PyObject_AsDn(ldb_ctx, obj, ldb_ctx, &dn))
+       if (!PyObject_AsDn(ldb_ctx, obj, ldb_ctx, &dn)) {
                return -1;
+       }
 
        ret = ldb_search(ldb_ctx, ldb_ctx, &result, dn, LDB_SCOPE_BASE, NULL,
                         NULL);
@@ -1442,11 +1443,15 @@ static int py_ldb_contains(PyLdbObject *self, PyObject *obj)
 
        talloc_free(result);
 
-       if (count == 0) {
-               return 0;
+       if (count > 1) {
+               PyErr_Format(PyExc_RuntimeError,
+                            "Searching for [%s] dn gave %u results!",
+                            ldb_dn_get_linearized(dn),
+                            count);
+               return -1;
        }
 
-       return 1;
+       return count;
 }
 
 static PySequenceMethods py_ldb_seq = {