The branch, master has been updated
       via  7e3419f s4-pyldb: Handle internal errors in py_ldb_contains() 
properly
       via  38585a7 s4-pydsdb: py_dsdb_am_rodc() may call samdb_rodc() only 
once to get the job done :)
       via  d073c5f s4-pydsdb: py_dsdb_load_partition_usn() - simplify error 
handling in
       via  89440dd s4-pydsdb-py_samdb_ntds_objectGUID(): Avoid potential 
memory leak
       via  06b0596 s4-pydsdb-py_dsdb_get_oid_from_attid(): Avoid potential 
memory leak
       via  ad5a399 s4-pydsdb.c: Fix small memory leak in 
py_samdb_set_domain_sid()
      from  4b978b3 s4/syntax: Add tests for DN+String and DN+Binary

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7e3419f32f0a46cbd4926cbc98bf54da27749d31
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Tue Nov 9 00:21:57 2010 +0200

    s4-pyldb: Handle internal errors in py_ldb_contains() properly
    
    It is an exceptional condition for ldb_search() to return
    more than one results during SCOPE_BASE search on DN
    
    Autobuild-User: Kamen Mazdrashki <kame...@samba.org>
    Autobuild-Date: Wed Nov 10 09:02:00 UTC 2010 on sn-devel-104

commit 38585a74905185e87494c7326d248495b5e01e49
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Mon Nov 8 23:57:31 2010 +0200

    s4-pydsdb: py_dsdb_am_rodc() may call samdb_rodc() only once to get the job 
done :)

commit d073c5f23ae6563a65af73fd6dc88886099011da
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Mon Nov 8 23:50:23 2010 +0200

    s4-pydsdb: py_dsdb_load_partition_usn() - simplify error handling in
    
    and print on which partition error has occured

commit 89440dd617eb4ff64cda8bf97f1f22ddf94bf717
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Mon Nov 8 23:40:14 2010 +0200

    s4-pydsdb-py_samdb_ntds_objectGUID(): Avoid potential memory leak
    
    in case py_ldb is not a valid LDB

commit 06b0596537e66ed928b24af059ada0472a375f3b
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Mon Nov 8 23:36:09 2010 +0200

    s4-pydsdb-py_dsdb_get_oid_from_attid(): Avoid potential memory leak
    
    in case py_ldb is not a valid LDB

commit ad5a399d54fba103822ba9cbea4515d52eafd1fe
Author: Kamen Mazdrashki <kame...@samba.org>
Date:   Mon Nov 8 23:09:44 2010 +0200

    s4-pydsdb.c: Fix small memory leak in py_samdb_set_domain_sid()

-----------------------------------------------------------------------

Summary of changes:
 source4/dsdb/pydsdb.c   |   26 ++++++++++++++------------
 source4/lib/ldb/pyldb.c |   13 +++++++++----
 2 files changed, 23 insertions(+), 16 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c
index 2471548..16a4cd4 100644
--- a/source4/dsdb/pydsdb.c
+++ b/source4/dsdb/pydsdb.c
@@ -134,6 +134,7 @@ static PyObject *py_samdb_set_domain_sid(PyLdbObject *self, 
PyObject *args)
        sid = dom_sid_parse_talloc(NULL, PyString_AsString(py_sid));
 
        ret = samdb_set_domain_sid(ldb, sid);
+       talloc_free(sid);
        if (!ret) {
                PyErr_SetString(PyExc_RuntimeError, "set_domain_sid failed");
                return NULL;
@@ -244,14 +245,14 @@ static PyObject *py_dsdb_get_oid_from_attid(PyObject 
*self, PyObject *args)
        if (!PyArg_ParseTuple(args, "Oi", &py_ldb, &attid))
                return NULL;
 
+       PyErr_LDB_OR_RAISE(py_ldb, ldb);
+
        mem_ctx = talloc_new(NULL);
        if (mem_ctx == NULL) {
           PyErr_NoMemory();
           return NULL;
        }
 
-       PyErr_LDB_OR_RAISE(py_ldb, ldb);
-
        schema = dsdb_get_schema(ldb, NULL);
 
        if (!schema) {
@@ -413,19 +414,18 @@ static PyObject *py_samdb_ntds_objectGUID(PyObject *self, 
PyObject *args)
        TALLOC_CTX *mem_ctx;
        const struct GUID *guid;
 
-       mem_ctx = talloc_new(NULL);
-       if (mem_ctx == NULL) {
-               PyErr_NoMemory();
-               return NULL;
-       }
-
        if (!PyArg_ParseTuple(args, "O", &py_ldb)) {
-               talloc_free(mem_ctx);
                return NULL;
        }
 
        PyErr_LDB_OR_RAISE(py_ldb, ldb);
 
+       mem_ctx = talloc_new(NULL);
+       if (mem_ctx == NULL) {
+               PyErr_NoMemory();
+               return NULL;
+       }
+
        guid = samdb_ntds_objectGUID(ldb);
        if (guid == NULL) {
                PyErr_SetString(PyExc_RuntimeError, "Failed to find NTDS GUID");
@@ -483,8 +483,10 @@ static PyObject *py_dsdb_load_partition_usn(PyObject 
*self, PyObject *args)
 
        ret = dsdb_load_partition_usn(ldb, dn, &highest_uSN, &urgent_uSN);
        if (ret != LDB_SUCCESS) {
-          char *errstr = talloc_asprintf(mem_ctx, "Failed to load partition 
uSN - %s", ldb_errstring(ldb));
-          PyErr_SetString(PyExc_RuntimeError, errstr);
+          PyErr_Format(PyExc_RuntimeError,
+                       "Failed to load partition [%s] uSN - %s",
+                       ldb_dn_get_linearized(dn),
+                       ldb_errstring(ldb));
           talloc_free(mem_ctx);
           return NULL;
        }
@@ -634,7 +636,7 @@ static PyObject *py_dsdb_am_rodc(PyObject *self, PyObject 
*args)
        PyErr_LDB_OR_RAISE(py_ldb, ldb);
 
        ret = samdb_rodc(ldb, &am_rodc);
-       if (samdb_rodc(ldb, &am_rodc) != LDB_SUCCESS) {
+       if (ret != LDB_SUCCESS) {
                PyErr_SetString(PyExc_RuntimeError, ldb_errstring(ldb));
                return NULL;
        }
diff --git a/source4/lib/ldb/pyldb.c b/source4/lib/ldb/pyldb.c
index eddc56f..1f5bd1e 100644
--- a/source4/lib/ldb/pyldb.c
+++ b/source4/lib/ldb/pyldb.c
@@ -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 = {


-- 
Samba Shared Repository

Reply via email to