X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fbackend.c;h=f64e661ea75ba9fcd7ff92e61a44acbb2121ac16;hb=ac3ad635ef0883d96b5424f96b2c43e13b0ad659;hp=02e41b82ad1c286bd960b76a67be9e6648b5b033;hpb=ff89b2c14c38216f58fed97efb5b720131c85c39;p=openldap diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c index 02e41b82ad..f64e661ea7 100644 --- a/servers/slapd/backend.c +++ b/servers/slapd/backend.c @@ -62,9 +62,6 @@ BackendInfo *backendInfo = NULL; int nBackendDB = 0; BackendDB *backendDB = NULL; -ldap_pvt_thread_pool_t syncrepl_pool; -int syncrepl_pool_max = SLAP_MAX_SYNCREPL_THREADS; - static int backend_init_controls( BackendInfo *bi ) { @@ -95,8 +92,6 @@ int backend_init(void) { int rc = -1; - ldap_pvt_thread_pool_init( &syncrepl_pool, syncrepl_pool_max, 0 ); - if((nBackendInfo != 0) || (backendInfo != NULL)) { /* already initialized */ Debug( LDAP_DEBUG_ANY, @@ -190,67 +185,69 @@ int backend_add(BackendInfo *aBackendInfo) } } +static int +backend_set_controls( BackendDB *be ) +{ + BackendInfo *bi = be->bd_info; + + /* back-relay takes care of itself; so may do other */ + if ( overlay_is_over( be ) ) { + bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig; + } + + if ( bi->bi_controls ) { + if ( be->be_ctrls[ SLAP_MAX_CIDS ] == 0 ) { + AC_MEMCPY( be->be_ctrls, bi->bi_ctrls, + sizeof( be->be_ctrls ) ); + be->be_ctrls[ SLAP_MAX_CIDS ] = 1; + + } else { + int i; + + for ( i = 0; i < SLAP_MAX_CIDS; i++ ) { + if ( bi->bi_ctrls[ i ] ) { + be->be_ctrls[ i ] = bi->bi_ctrls[ i ]; + } + } + } + + } + + return 0; +} + /* startup a specific backend database */ int backend_startup_one(Backend *be) { int rc = 0; - BackendInfo *bi = be->bd_info; - assert(be); + assert( be ); be->be_pending_csn_list = (struct be_pcl *) ch_calloc( 1, sizeof( struct be_pcl )); LDAP_TAILQ_INIT( be->be_pending_csn_list ); - /* back-relay takes care of itself; so may do other */ - if ( be->be_ctrls[ SLAP_MAX_CIDS ] == 0 ) { - if ( overlay_is_over( be ) ) { - bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig; - } - - if ( bi->bi_controls ) { - AC_MEMCPY( be->be_ctrls, bi->bi_ctrls, sizeof( be->be_ctrls ) ); - } - - be->be_ctrls[ SLAP_MAX_CIDS ] = 1; - } - Debug( LDAP_DEBUG_TRACE, "backend_startup_one: starting \"%s\"\n", be->be_suffix ? be->be_suffix[0].bv_val : "(unknown)", 0, 0 ); + + /* set database controls */ + (void)backend_set_controls( be ); + if ( be->bd_info->bi_db_open ) { rc = be->bd_info->bi_db_open( be ); - if ( rc != 0 ) { + if ( rc == 0 ) { + (void)backend_set_controls( be ); + + } else { Debug( LDAP_DEBUG_ANY, "backend_startup_one: bi_db_open failed! (%d)\n", rc, 0, 0 ); } } - /* back-relay takes care of itself; so may do other */ - bi = be->bd_info; - if ( overlay_is_over( be ) ) { - bi = ((slap_overinfo *)be->bd_info->bi_private)->oi_orig; - } - - if ( bi->bi_controls ) { - if ( be->be_ctrls[ SLAP_MAX_CIDS ] == 0 ) { - AC_MEMCPY( be->be_ctrls, bi->bi_ctrls, sizeof( be->be_ctrls ) ); - be->be_ctrls[ SLAP_MAX_CIDS ] = 1; - - } else { - int i; - - for ( i = 0; i < SLAP_MAX_CIDS; i++ ) { - if ( bi->bi_ctrls[ i ] ) { - be->be_ctrls[ i ] = 1; - } - } - } - } - return rc; } @@ -441,8 +438,6 @@ int backend_destroy(void) BackendDB *bd; struct slap_csn_entry *csne; - ldap_pvt_thread_pool_destroy( &syncrepl_pool, 1 ); - /* destroy each backend database */ for( i = 0, bd = backendDB; i < nBackendDB; i++, bd++ ) { @@ -862,7 +857,7 @@ backend_connection_destroy( return 0; } -static int +int backend_check_controls( Operation *op, SlapReply *rs ) @@ -909,7 +904,7 @@ backend_check_controls( default: /* unreachable */ - rs->sr_err = "unable to check control"; + rs->sr_text = "unable to check control"; rs->sr_err = LDAP_OTHER; goto done; } @@ -1807,18 +1802,7 @@ int backend_operational( if (( SLAP_OPATTRS( rs->sr_attr_flags ) || rs->sr_attrs ) && op->o_bd && op->o_bd->be_operational != NULL ) { - Attribute *a; - - a = rs->sr_operational_attrs; - rs->sr_operational_attrs = NULL; rc = op->o_bd->be_operational( op, rs ); - *ap = rs->sr_operational_attrs; - if ( a != NULL ) { - rs->sr_operational_attrs = a; - } - - for ( ; *ap; ap = &(*ap)->a_next ) - /* just count them */ ; } op->o_bd = be_orig;