mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-29 11:09:34 -05:00
make sure sequence progresses correctly (ITS#5986)
This commit is contained in:
parent
6d1aa51604
commit
715b03d5ab
1 changed files with 28 additions and 3 deletions
|
|
@ -52,6 +52,8 @@ static slap_overinst glue;
|
|||
|
||||
static int glueMode;
|
||||
static BackendDB *glueBack;
|
||||
static BackendDB glueBackDone;
|
||||
#define GLUEBACK_DONE (&glueBackDone)
|
||||
|
||||
static slap_response glue_op_response;
|
||||
|
||||
|
|
@ -591,7 +593,7 @@ glue_tool_entry_close (
|
|||
{
|
||||
int rc = 0;
|
||||
|
||||
if (glueBack) {
|
||||
if (glueBack && glueBack != GLUEBACK_DONE) {
|
||||
if (!glueBack->be_entry_close)
|
||||
return 0;
|
||||
rc = glueBack->be_entry_close (glueBack);
|
||||
|
|
@ -740,6 +742,7 @@ glue_tool_entry_first (
|
|||
slap_overinst *on = glue_tool_inst( b0->bd_info );
|
||||
glueinfo *gi = on->on_bi.bi_private;
|
||||
int i;
|
||||
ID rc;
|
||||
|
||||
/* If we're starting from scratch, start at the most general */
|
||||
if (!glueBack) {
|
||||
|
|
@ -759,7 +762,26 @@ glue_tool_entry_first (
|
|||
glueBack->be_entry_open (glueBack, glueMode) != 0)
|
||||
return NOID;
|
||||
|
||||
return glueBack->be_entry_first (glueBack);
|
||||
rc = glueBack->be_entry_first (glueBack);
|
||||
while ( rc == NOID ) {
|
||||
if ( glueBack && glueBack->be_entry_close )
|
||||
glueBack->be_entry_close (glueBack);
|
||||
for (i=0; i<gi->gi_nodes; i++) {
|
||||
if (gi->gi_n[i].gn_be == glueBack)
|
||||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
glueBack = GLUEBACK_DONE;
|
||||
break;
|
||||
} else {
|
||||
glueBack = gi->gi_n[i-1].gn_be;
|
||||
rc = glue_tool_entry_first (b0);
|
||||
if ( glueBack == GLUEBACK_DONE ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
static ID
|
||||
|
|
@ -786,11 +808,14 @@ glue_tool_entry_next (
|
|||
break;
|
||||
}
|
||||
if (i == 0) {
|
||||
glueBack = NULL;
|
||||
glueBack = GLUEBACK_DONE;
|
||||
break;
|
||||
} else {
|
||||
glueBack = gi->gi_n[i-1].gn_be;
|
||||
rc = glue_tool_entry_first (b0);
|
||||
if ( glueBack == GLUEBACK_DONE ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue