From a4d0ed5a1027f4cb58732c78cb63464dbf9cc287 Mon Sep 17 00:00:00 2001 From: Kamen Mazdrashki Date: Mon, 25 Jan 2010 12:22:39 +0200 Subject: s4/ldap: Fix nested searches SEGFAULT bug Signed-off-by: Stefan Metzmacher --- source4/lib/ldb/ldb_ildap/ldb_ildap.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source4/lib') diff --git a/source4/lib/ldb/ldb_ildap/ldb_ildap.c b/source4/lib/ldb/ldb_ildap/ldb_ildap.c index 53257a1ab0..6eb2e1719c 100644 --- a/source4/lib/ldb/ldb_ildap/ldb_ildap.c +++ b/source4/lib/ldb/ldb_ildap/ldb_ildap.c @@ -278,6 +278,13 @@ static void ildb_callback(struct ldap_request *req) break; case LDAP_TAG_SearchRequest: + /* check if we are already processing this request */ + if (req->in_dispatch_replies) { + return; + } + + req->in_dispatch_replies = true; + /* loop over all messages */ for (i = 0; i < req->num_replies; i++) { @@ -327,6 +334,7 @@ static void ildb_callback(struct ldap_request *req) if (ret != LDB_SUCCESS) { callback_failed = true; } + break; case LDAP_TAG_SearchResultReference: @@ -337,6 +345,7 @@ static void ildb_callback(struct ldap_request *req) if (ret != LDB_SUCCESS) { callback_failed = true; } + break; default: @@ -350,6 +359,8 @@ static void ildb_callback(struct ldap_request *req) } } + req->in_dispatch_replies = false; + talloc_free(req->replies); req->replies = NULL; req->num_replies = 0; -- cgit