Skip to content
Snippets Groups Projects
Commit 3c03b13d authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

ITS#4614 fix from HEAD

parent b83f76b5
No related branches found
No related tags found
No related merge requests found
......@@ -262,6 +262,13 @@ glue_chk_controls ( Operation *op, SlapReply *rs )
return rc;
}
/* ITS#4615 - overlays configured above the glue overlay should be
* invoked for the entire glued tree. Overlays configured below the
* glue overlay should only be invoked on the master backend.
* So, if we're searching on any subordinates, we need to force the
* current overlay chain to stop processing, without stopping the
* overall callback flow.
*/
static int
glue_sub_search( Operation *op, SlapReply *rs, BackendDB *b0,
slap_overinst *on )
......@@ -769,6 +776,13 @@ glue_db_init(
BackendInfo *bi = oi->oi_orig;
glueinfo *gi;
if ( SLAP_GLUE_SUBORDINATE( be )) {
Debug( LDAP_DEBUG_ANY, "glue: backend %s is already subordinate, "
"cannot have glue overlay!\n",
be->be_suffix[0].bv_val, 0, 0 );
return LDAP_OTHER;
}
gi = ch_calloc( 1, sizeof(glueinfo));
on->on_bi.bi_private = gi;
dnParent( be->be_nsuffix, &gi->gi_pdn );
......@@ -954,6 +968,12 @@ glue_sub_add( BackendDB *be, int advert, int online )
glue_Addrec *ga;
int rc = 0;
if ( overlay_is_inst( be, "glue" )) {
Debug( LDAP_DEBUG_ANY, "glue: backend %s already has glue overlay, "
"cannot be a subordinate!\n",
be->be_suffix[0].bv_val, 0, 0 );
return LDAP_OTHER;
}
SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_SUBORDINATE;
if ( advert )
SLAP_DBFLAGS( be ) |= SLAP_DBFLAG_GLUE_ADVERTISE;
......
......@@ -958,7 +958,11 @@ overlay_config( BackendDB *be, const char *ov )
be->bd_info = (BackendInfo *)on2;
rc = on2->on_bi.bi_db_init( be );
be->bd_info = (BackendInfo *)oi;
if ( rc ) return rc;
if ( rc ) {
oi->oi_list = on2->on_next;
ch_free( on2 );
return rc;
}
}
return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment