summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/ldb_ldap/ldb_ldap.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/ldb/ldb_ldap/ldb_ldap.c')
-rw-r--r--source4/lib/ldb/ldb_ldap/ldb_ldap.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/source4/lib/ldb/ldb_ldap/ldb_ldap.c b/source4/lib/ldb/ldb_ldap/ldb_ldap.c
index 031fd847e3..d671afb953 100644
--- a/source4/lib/ldb/ldb_ldap/ldb_ldap.c
+++ b/source4/lib/ldb/ldb_ldap/ldb_ldap.c
@@ -395,12 +395,15 @@ static int lldb_search_bytree(struct ldb_module *module, const struct ldb_dn *ba
ret = lldb_search_async(module, base, scope, tree, attrs, control_req,
res, &lldb_search_sync_callback, lldb->timeout, &handle);
- if (ret != LDB_SUCCESS)
- return ret;
+ if (ret == LDB_SUCCESS) {
+ ret = ldb_async_wait(module->ldb, handle, LDB_WAIT_ALL);
+ talloc_free(handle);
+ }
- ret = ldb_async_wait(module->ldb, handle, LDB_WAIT_ALL);
+ if (ret != LDB_SUCCESS) {
+ talloc_free(*res);
+ }
- talloc_free(handle);
return ret;
}
@@ -866,7 +869,7 @@ static int lldb_async_wait(struct ldb_module *module, struct ldb_async_handle *h
struct lldb_private *lldb = talloc_get_type(ac->module->private_data, struct lldb_private);
struct timeval timeout;
LDAPMessage *result;
- int ret;
+ int ret = LDB_ERR_OPERATIONS_ERROR;
if (!ac->msgid) {
return LDB_ERR_OPERATIONS_ERROR;
@@ -915,8 +918,6 @@ static int lldb_async_wait(struct ldb_module *module, struct ldb_async_handle *h
}
}
break;
- default:
- ret = LDB_ERR_OPERATIONS_ERROR;
}
return ret;