+freeit: if ( e != target ) {
+ op->o_private = e_priv;
+ be_entry_release_r( op, e );
+ op->o_private = o_priv;
+ }
+ if ( freeattr ) {
+ attr_free( a );
+ }
+ }
+
+ op->o_bd = be;
+ return rc;
+}
+
+int
+backend_attribute(
+ Operation *op,
+ Entry *target,
+ struct berval *edn,
+ AttributeDescription *entry_at,
+ BerVarray *vals,
+ slap_access_t access )
+{
+ int rc;
+ BackendDB *be_orig;
+
+ 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;
+}
+
+int
+backend_access(
+ Operation *op,
+ Entry *target,
+ struct berval *edn,
+ AttributeDescription *entry_at,
+ struct berval *nval,
+ slap_access_t access,
+ slap_mask_t *mask )
+{
+ Entry *e = NULL;
+ void *o_priv = op->o_private, *e_priv = NULL;
+ int rc = LDAP_INSUFFICIENT_ACCESS;
+ Backend *be = op->o_bd;
+
+ /* pedantic */
+ assert( op != NULL );
+ assert( op->o_conn != NULL );
+ assert( edn != NULL );
+ assert( access > ACL_NONE );
+
+ op->o_bd = select_backend( edn, 0, 0 );