1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-03 04:22:09 +03:00

s4/ldap: Refactor the fix for ldap nested searches

Current implementation synchronizes processing for
all types of LDAP request, not only LDAP_Search ones.

Synchronization for ldap replies processing is done
locally in ldb_ildap module as this concerns only
ildb_callback() function.

Signed-off-by: Anatoliy Atanasov <anatoliy.atanasov@postpath.com>
This commit is contained in:
Kamen Mazdrashki
2010-01-29 19:05:51 +02:00
committed by Anatoliy Atanasov
parent d07cd37b99
commit 8078614814
2 changed files with 15 additions and 13 deletions

View File

@ -61,6 +61,10 @@ struct ildb_context {
struct ildb_private *ildb;
struct ldap_request *ireq;
/* indicate we are already processing
* the ldap_request in ildb_callback() */
bool in_ildb_callback;
bool done;
struct ildb_destructor_ctx *dc;
@ -223,6 +227,13 @@ static void ildb_callback(struct ldap_request *req)
request_done = false;
controls = NULL;
/* check if we are already processing this request */
if (ac->in_ildb_callback) {
return;
}
/* mark the request as being in process */
ac->in_ildb_callback = true;
if (!NT_STATUS_IS_OK(req->status)) {
ret = ildb_map_error(ac->module, req->status);
ildb_request_done(ac, NULL, ret);
@ -278,13 +289,6 @@ 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++) {
@ -359,8 +363,6 @@ static void ildb_callback(struct ldap_request *req)
}
}
req->in_dispatch_replies = false;
talloc_free(req->replies);
req->replies = NULL;
req->num_replies = 0;
@ -384,6 +386,10 @@ static void ildb_callback(struct ldap_request *req)
if (request_done) {
ildb_request_done(ac, controls, ret);
}
/* unmark the request as beign in progress */
ac->in_ildb_callback = false;
return;
}

View File

@ -37,10 +37,6 @@ struct ldap_request {
int num_replies;
struct ldap_message **replies;
/* mark while we are processing replies
* in request of type LDAP_TAG_SearchRequest */
bool in_dispatch_replies;
NTSTATUS status;
DATA_BLOB data;
struct {