Commit 5ec96848 authored by Pierangelo Masarati's avatar Pierangelo Masarati
Browse files

controls can be added in two passes (e.g. by backends that actually inherit...

controls can be added in two passes (e.g. by backends that actually inherit their controls from someone else)
parent e047657f
......@@ -164,7 +164,8 @@ int backend_add(BackendInfo *aBackendInfo)
/* startup a specific backend database */
int backend_startup_one(Backend *be)
{
int rc = 0;
int rc = 0;
BackendInfo *bi = be->bd_info;
assert(be);
......@@ -173,6 +174,17 @@ int backend_startup_one(Backend *be)
LDAP_TAILQ_INIT( be->be_pending_csn_list );
/* back-relay takes care of itself; so may do other */
if ( be->be_controls == NULL ) {
if ( overlay_is_over( be ) ) {
bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig;
}
if ( bi->bi_controls ) {
be->be_controls = ldap_charray_dup( bi->bi_controls );
}
}
Debug( LDAP_DEBUG_TRACE,
"backend_startup: starting \"%s\"\n",
be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)",
......@@ -187,15 +199,27 @@ int backend_startup_one(Backend *be)
}
/* back-relay takes care of itself; so may do other */
if ( be->be_controls == NULL ) {
BackendInfo *bi = be->bd_info;
if ( overlay_is_over( be ) ) {
bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig;
}
bi = be->bd_info;
if ( overlay_is_over( be ) ) {
bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig;
}
if ( bi->bi_controls ) {
if ( bi->bi_controls ) {
if ( be->be_controls == NULL ) {
be->be_controls = ldap_charray_dup( bi->bi_controls );
} else {
int i;
/* maybe not efficient, but it's startup and few dozens of controls... */
for ( i = 0; bi->bi_controls[ i ]; i++ ) {
if ( !ldap_charray_inlist( be->be_controls, bi->bi_controls[ i ] ) ) {
rc = ldap_charray_add( &be->be_controls, bi->bi_controls[ i ] );
if ( rc != 0 ) {
break;
}
}
}
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment