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