1 /* delete.c - ldbm backend delete routine */
6 #include <sys/socket.h>
10 extern Entry *dn2entry();
11 extern Attribute *attr_find();
21 struct ldbminfo *li = (struct ldbminfo *) be->be_private;
25 if ( (e = dn2entry( be, dn, &matched )) == NULL ) {
26 send_ldap_result( conn, op, LDAP_NO_SUCH_OBJECT, matched, "" );
27 if ( matched != NULL ) {
33 if ( has_children( be, e ) ) {
34 send_ldap_result( conn, op, LDAP_NOT_ALLOWED_ON_NONLEAF, "",
36 cache_return_entry( &li->li_cache, e );
40 if ( ! access_allowed( be, conn, op, e, "entry", NULL, op->o_dn,
42 send_ldap_result( conn, op, LDAP_INSUFFICIENT_ACCESS, "", "" );
43 cache_return_entry( &li->li_cache, e );
47 /* XXX delete from parent's id2children entry XXX */
49 /* delete from dn2id mapping */
50 if ( dn2id_delete( be, e->e_dn ) != 0 ) {
51 send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" );
52 cache_return_entry( &li->li_cache, e );
56 /* delete from disk and cache */
57 if ( id2entry_delete( be, e ) != 0 ) {
58 send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "", "" );
59 cache_return_entry( &li->li_cache, e );
62 cache_return_entry( &li->li_cache, e );
64 send_ldap_result( conn, op, LDAP_SUCCESS, "", "" );