From: Pierangelo Masarati Date: Wed, 26 Jan 2005 10:28:37 +0000 (+0000) Subject: controls can be added in two passes (e.g. by backends that actually inherit their... X-Git-Tag: OPENLDAP_REL_ENG_2_3_BP~242 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5ec96848942679f8c7c0efcb499272720e4031f4;p=openldap controls can be added in two passes (e.g. by backends that actually inherit their controls from someone else) --- diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c index 62426a13c5..7fb2c42edd 100644 --- a/servers/slapd/backend.c +++ b/servers/slapd/backend.c @@ -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; + } + } + } } }