return rc;
}
}
- /* append global access controls */
- acl_append( &be->be_acl, frontendDB->be_acl, -1 );
return backend_startup_one( be, &cr );
}
"has no suffix\n",
i, be->bd_info->bi_type, 0 );
}
- /* append global access controls */
- acl_append( &be->be_acl, frontendDB->be_acl, -1 );
rc = backend_startup_one( be, &cr );
}
if ( be->bd_info->bi_db_close ) {
- be->bd_info->bi_db_close( be, NULL );
+ rc = be->bd_info->bi_db_close( be, NULL );
+ if ( rc ) return rc;
}
if( be->bd_info->bi_close ) {
- be->bd_info->bi_close( be->bd_info );
+ rc = be->bd_info->bi_close( be->bd_info );
+ if ( rc ) return rc;
}
return 0;
if ( !BER_BVISNULL( &bd->be_rootpw ) ) {
free( bd->be_rootpw.bv_val );
}
- acl_destroy( bd->be_acl, frontendDB->be_acl );
+ acl_destroy( bd->be_acl );
limits_destroy( bd->be_limits );
if ( !BER_BVISNULL( &bd->be_update_ndn ) ) {
ch_free( bd->be_update_ndn.bv_val );
if ( !BER_BVISNULL( &bd->be_rootpw ) ) {
free( bd->be_rootpw.bv_val );
}
- acl_destroy( bd->be_acl, frontendDB->be_acl );
+ acl_destroy( bd->be_acl );
+ frontendDB = NULL;
}
return 0;
}
be->bd_info = bi;
- be->bd_orig = be;
+ be->bd_self = be;
be->be_def_limit = frontendDB->be_def_limit;
be->be_dfltaccess = frontendDB->be_dfltaccess;
be->be_requires = frontendDB->be_requires;
be->be_ssf_set = frontendDB->be_ssf_set;
- be->be_pcl_mutexp = &be->be_pcl_mutex;
- ldap_pvt_thread_mutex_init( be->be_pcl_mutexp );
+ ldap_pvt_thread_mutex_init( &be->be_pcl_mutex );
/* assign a default depth limit for alias deref */
be->be_max_deref_depth = SLAPD_DEFAULT_MAXDEREFDEPTH;
case LDAP_COMPARE_FALSE:
if ( !op->o_bd->be_ctrls[cid] && (*ctrls)->ldctl_iscritical ) {
+#ifdef SLAP_CONTROL_X_WHATFAILED
+ if ( get_whatFailed( op ) ) {
+ char *oids[ 2 ];
+ oids[ 0 ] = (*ctrls)->ldctl_oid;
+ oids[ 1 ] = NULL;
+ slap_ctrl_whatFailed_add( op, rs, oids );
+ }
+#endif
/* RFC 4511 allows unavailableCriticalExtension to be
* returned when the server is unwilling to perform
* an operation extended by a recognized critical
if ( oex && ((OpExtraDB *)oex)->oe_db )
op->o_bd = ((OpExtraDB *)oex)->oe_db;
- else
+
+ if ( !op->o_bd || !SLAP_DBHIDDEN( op->o_bd ))
op->o_bd = select_backend( gr_ndn, 0 );
for ( g = op->o_groups; g; g = g->ga_next ) {
{
rc = 0;
}
- filter_free_x( op, filter );
+ filter_free_x( op, filter, 1 );
}
loopit:
ldap_free_urldesc( ludp );
return SLAPD_ABANDON;
}
- if ( op->o_bd && SLAP_ISOVERLAY( op->o_bd ))
- oex.oe_db = op->o_bd->bd_orig;
- else
- oex.oe_db = op->o_bd;
+ oex.oe_db = op->o_bd;
oex.oe.oe_key = (void *)backend_group;
LDAP_SLIST_INSERT_HEAD(&op->o_extra, &oex.oe, oe_next);
if ( oex && ((OpExtraDB *)oex)->oe_db )
op->o_bd = ((OpExtraDB *)oex)->oe_db;
- else
+
+ if ( !op->o_bd || !SLAP_DBHIDDEN( op->o_bd ))
op->o_bd = select_backend( edn, 0 );
if ( target && dn_match( &target->e_nname, edn ) ) {
BackendDB *be_orig;
OpExtraDB oex;
- if ( op->o_bd && SLAP_ISOVERLAY( op->o_bd ))
- oex.oe_db = op->o_bd->bd_orig;
- else
- oex.oe_db = op->o_bd;
+ oex.oe_db = op->o_bd;
oex.oe.oe_key = (void *)backend_attribute;
LDAP_SLIST_INSERT_HEAD(&op->o_extra, &oex.oe, oe_next);
assert( edn != NULL );
assert( access > ACL_NONE );
- if ( op->o_bd ) {
- if ( SLAP_ISOVERLAY( op->o_bd ))
- op->o_bd = op->o_bd->bd_orig;
- } else {
+ if ( !op->o_bd ) {
op->o_bd = select_backend( edn, 0 );
}
}
/* Let the overlays have a chance at this */
- if ( oex && ((OpExtraDB *)oex)->oe_db ) {
+ if ( oex && ((OpExtraDB *)oex)->oe_db )
op->o_bd = ((OpExtraDB *)oex)->oe_db;
- } else {
+
+ if ( !op->o_bd || !SLAP_DBHIDDEN( op->o_bd ))
op->o_bd = select_backend( &op->o_req_ndn, 0 );
- }
+
if ( op->o_bd != NULL && !be_match( op->o_bd, frontendDB ) &&
( SLAP_OPATTRS( rs->sr_attr_flags ) || rs->sr_attrs ) &&
op->o_bd->be_operational != NULL )
BackendDB *be_orig;
OpExtraDB oex;
- if ( op->o_bd && SLAP_ISOVERLAY( op->o_bd ))
- oex.oe_db = op->o_bd->bd_orig;
- else
- oex.oe_db = op->o_bd;
+ oex.oe_db = op->o_bd;
oex.oe.oe_key = (void *)backend_operational;
LDAP_SLIST_INSERT_HEAD(&op->o_extra, &oex.oe, oe_next);