r15176: Ensure we don't segfault when we try and delete @FOO records.
authorAndrew Bartlett <abartlet@samba.org>
Sun, 23 Apr 2006 11:25:02 +0000 (11:25 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:04:12 +0000 (14:04 -0500)
Don't try and steal the result of a search on failure, it has already
been talloc_free()'ed by the ildb code.

Andrew Bartlett

source/lib/ldb/common/ldb.c

index eef02bd760d5e611ec8313d1efb11f5173ab6ef6..a681811cb953563e9d6a8f94063b59bab9c39de2 100644 (file)
@@ -244,6 +244,10 @@ int ldb_transaction_cancel(struct ldb_context *ldb)
 
 int ldb_async_wait(struct ldb_async_handle *handle, enum ldb_async_wait_type type)
 {
+       if (!handle) {
+               return LDB_SUCCESS;
+       }
+
        return handle->module->ops->async_wait(handle, type);
 }
 
@@ -308,9 +312,9 @@ int ldb_request(struct ldb_context *ldb, struct ldb_request *req)
 /*
   search the database given a LDAP-like search expression
 
-  return the number of records found, or -1 on error
+  returns an LDB error code
 
-  Use talloc_free to free the ldb_message returned in 'res'
+  Use talloc_free to free the ldb_message returned in 'res', if successful
 
 */
 int ldb_search(struct ldb_context *ldb, 
@@ -346,9 +350,10 @@ int ldb_search(struct ldb_context *ldb,
        req->controls = NULL;
 
        ret = ldb_request(ldb, req);
-
-       (*res) = talloc_steal(ldb, req->op.search.res);
-
+       
+       if (ret == LDB_SUCCESS) {
+               (*res) = talloc_steal(ldb, req->op.search.res);
+       }
        talloc_free(req);
        return ret;
 }