return rc;
}
}
+ /* append global access controls */
+ acl_append( &be->be_acl, frontendDB->be_acl, -1 );
return backend_startup_one( be );
}
Backend *be, *b2 = NULL;
LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
- if ( be->be_nsuffix == NULL ) {
+ if ( be->be_nsuffix == NULL || SLAP_DBHIDDEN( be )) {
continue;
}
int
be_shadow_update( Operation *op )
{
- return ( SLAP_SYNC_SHADOW( op->o_bd ) ||
+ /* This assumes that all internal ops (connid == -1) on a syncrepl
+ * database are syncrepl operations.
+ */
+ return (( SLAP_SYNC_SHADOW( op->o_bd ) && op->o_connid == -1 ) ||
( SLAP_SHADOW( op->o_bd ) && be_isupdate_dn( op->o_bd, &op->o_ndn ) ) );
}
/* unrecognized control */
if ( (*ctrls)->ldctl_iscritical ) {
/* should not be reachable */
- Debug( LDAP_DEBUG_ANY,
- "backend_check_controls: unrecognized control: %s\n",
+ Debug( LDAP_DEBUG_ANY, "backend_check_controls: "
+ "unrecognized critical control: %s\n",
(*ctrls)->ldctl_oid, 0, 0 );
assert( 0 );
+ } else {
+ Debug( LDAP_DEBUG_TRACE, "backend_check_controls: "
+ "unrecognized non-critical control: %s\n",
+ (*ctrls)->ldctl_oid, 0, 0 );
}
break;
}
}
- /* temporarily removed */
-#if 0
+#if 0 /* temporarily removed */
/* check should be generalized */
- if( get_manageDIT(op) && !be_isroot(op)) {
+ if( get_relax(op) && !be_isroot(op)) {
rs->sr_text = "requires manager authorization";
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
}
be_orig = op->o_bd;
op->o_bd = frontendDB;
-#ifdef SLAP_OVERLAY_ACCESS
rc = frontendDB->be_group( op, target, gr_ndn,
op_ndn, group_oc, group_at );
-#else /* ! SLAP_OVERLAY_ACCESS */
- rc = fe_acl_group( op, target, gr_ndn,
- op_ndn, group_oc, group_at );
-#endif /* ! SLAP_OVERLAY_ACCESS */
op->o_bd = be_orig;
return rc;
be_orig = op->o_bd;
op->o_bd = frontendDB;
-#ifdef SLAP_OVERLAY_ACCESS
rc = frontendDB->be_attribute( op, target, edn,
entry_at, vals, access );
-#else /* !SLAP_OVERLAY_ACCESS */
- rc = fe_acl_attribute( op, target, edn,
- entry_at, vals, access );
-#endif /* !SLAP_OVERLAY_ACCESS */
op->o_bd = be_orig;
return rc;
* and the backend supports specific operational attributes,
* add them to the attribute list
*/
- if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs &&
- ad_inlist( slap_schema.si_ad_entryDN, rs->sr_attrs ) ) )
+ if ( !( rs->sr_flags & REP_NO_ENTRYDN )
+ && ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs &&
+ ad_inlist( slap_schema.si_ad_entryDN, rs->sr_attrs ) ) ) )
{
*ap = slap_operational_entryDN( rs->sr_entry );
ap = &(*ap)->a_next;
}
- if ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs &&
- ad_inlist( slap_schema.si_ad_subschemaSubentry, rs->sr_attrs ) ) )
+ if ( !( rs->sr_flags & REP_NO_SUBSCHEMA)
+ && ( SLAP_OPATTRS( rs->sr_attr_flags ) || ( rs->sr_attrs &&
+ ad_inlist( slap_schema.si_ad_subschemaSubentry, rs->sr_attrs ) ) ) )
{
*ap = slap_operational_subschemaSubentry( op->o_bd );
ap = &(*ap)->a_next;