mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
controls can be added in two passes (e.g. by backends that actually inherit their controls from someone else)
This commit is contained in:
parent
e047657f06
commit
5ec9684894
@ -164,7 +164,8 @@ int backend_add(BackendInfo *aBackendInfo)
|
|||||||
/* startup a specific backend database */
|
/* startup a specific backend database */
|
||||||
int backend_startup_one(Backend *be)
|
int backend_startup_one(Backend *be)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
BackendInfo *bi = be->bd_info;
|
||||||
|
|
||||||
assert(be);
|
assert(be);
|
||||||
|
|
||||||
@ -173,6 +174,17 @@ int backend_startup_one(Backend *be)
|
|||||||
|
|
||||||
LDAP_TAILQ_INIT( be->be_pending_csn_list );
|
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,
|
Debug( LDAP_DEBUG_TRACE,
|
||||||
"backend_startup: starting \"%s\"\n",
|
"backend_startup: starting \"%s\"\n",
|
||||||
be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)",
|
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 */
|
/* back-relay takes care of itself; so may do other */
|
||||||
if ( be->be_controls == NULL ) {
|
bi = be->bd_info;
|
||||||
BackendInfo *bi = be->bd_info;
|
if ( overlay_is_over( be ) ) {
|
||||||
|
bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig;
|
||||||
|
}
|
||||||
|
|
||||||
if ( overlay_is_over( be ) ) {
|
if ( bi->bi_controls ) {
|
||||||
bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig;
|
if ( be->be_controls == NULL ) {
|
||||||
}
|
|
||||||
|
|
||||||
if ( bi->bi_controls ) {
|
|
||||||
be->be_controls = ldap_charray_dup( bi->bi_controls );
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user