ObjectClass* group_oc,
AttributeDescription* group_at));
+extern int ldbm_back_attribute LDAP_P(( BackendDB *bd,
+ Connection *conn, Operation *op,
+ Entry *target,
+ const char* e_ndn,
+ AttributeDescription* entry_at,
+ const char ***vals));
+
/* hooks for slap tools */
extern int ldbm_tool_entry_open LDAP_P(( BackendDB *be, int mode ));
bi->bi_entry_release_rw = ldbm_back_entry_release_rw;
bi->bi_acl_group = ldbm_back_group;
+ bi->bi_acl_attribute = ldbm_back_attribute;
bi->bi_chk_referrals = ldbm_back_referrals;
/*
return LDAP_UNWILLING_TO_PERFORM;
}
+int
+backend_attribute(
+ Backend *be,
+ Connection *conn,
+ Operation *op,
+ Entry *target,
+ const char *e_ndn,
+ AttributeDescription *entry_at,
+ const char ***vals
+)
+{
+ if( target == NULL || strcmp( target->e_ndn, e_ndn ) != 0 ) {
+ /* we won't attempt to send it to a different backend */
+
+ be = select_backend(e_ndn);
+
+ if (be == NULL) {
+ return LDAP_NO_SUCH_OBJECT;
+ }
+ }
+
+ if( be->be_attribute ) {
+ return be->be_attribute( be, conn, op, target, e_ndn,
+ entry_at, vals );
+ }
+
+ return LDAP_UNWILLING_TO_PERFORM;
+}
+
Attribute *backend_operational(
Backend *be,
Entry *e )
AttributeDescription *group_at
));
+LDAP_SLAPD_F (int) backend_attribute LDAP_P((Backend *be,
+ Connection *conn,
+ Operation *op,
+ Entry *target,
+ const char *e_ndn,
+ AttributeDescription *entry_at,
+ const char ***vals
+));
+
LDAP_SLAPD_F (Attribute *) backend_operational( Backend *, Entry * );
#define be_release bd_info->bi_entry_release_rw
#define be_chk_referrals bd_info->bi_chk_referrals
#define be_group bd_info->bi_acl_group
+#define be_attribute bd_info->bi_acl_attribute
#define be_controls bd_info->bi_controls
Entry *e, const char *bdn, const char *edn,
ObjectClass *group_oc,
AttributeDescription *group_at ));
+ int (*bi_acl_attribute) LDAP_P((Backend *bd,
+ struct slap_conn *c, struct slap_op *o,
+ Entry *e, const char *edn,
+ AttributeDescription *entry_at,
+ const char ***vals ));
int (*bi_connection_init) LDAP_P((BackendDB *bd,
struct slap_conn *c));