mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-28 10:39:34 -05:00
ITS#4614 - complain if glue/subordinate are attempted on the same backend
cleanup overlay list if overlay db_init fails.
This commit is contained in:
parent
6d601637c7
commit
4ccf65d9bc
2 changed files with 25 additions and 1 deletions
|
|
@ -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 )
|
||||
|
|
@ -775,6 +782,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 );
|
||||
|
|
@ -960,6 +974,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;
|
||||
|
|
|
|||
|
|
@ -1054,7 +1054,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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue