diff options
Diffstat (limited to 'source4/lib')
-rw-r--r-- | source4/lib/ldb/ldb_ildap/ldb_ildap.c | 11 |
1 files changed, 11 insertions, 0 deletions
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; |