]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/delete.c
error message from be_entry_put tool backend function
[openldap] / servers / slapd / back-ldbm / delete.c
index d1a53967bce98d09dd8db6afc042c5c5957c21ce..5d2f63ec7e51a4b4114eed8db3edb50b15f95ebb 100644 (file)
@@ -1,7 +1,7 @@
 /* delete.c - ldbm backend delete routine */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -27,7 +27,7 @@ ldbm_back_delete(
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
        Entry   *matched;
-       char    *pdn = NULL;
+       struct berval   pdn;
        Entry   *e, *p = NULL;
        int rootlock = 0;
        int     rc = -1;
@@ -42,9 +42,9 @@ ldbm_back_delete(
 #endif
 
        /* get entry with writer lock */
-       if ( (e = dn2entry_w( be, ndn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_w( be, ndn, &matched )) == NULL ) {
                char *matched_dn = NULL;
-               struct berval **refs;
+               BVarray refs;
 
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
@@ -69,7 +69,7 @@ ldbm_back_delete(
                send_ldap_result( conn, op, LDAP_REFERRAL,
                        matched_dn, NULL, refs, NULL );
 
-               ber_bvecfree( refs );
+               if ( refs ) bvarray_free( refs );
                free( matched_dn );
 
                return( -1 );
@@ -78,7 +78,7 @@ ldbm_back_delete(
     if ( !manageDSAit && is_entry_referral( e ) ) {
                /* parent is a referral, don't allow add */
                /* parent is an alias, don't allow add */
-               struct berval **refs = get_entry_referrals( be,
+               BVarray refs = get_entry_referrals( be,
                        conn, op, e );
 
 #ifdef NEW_LOGGING
@@ -93,7 +93,7 @@ ldbm_back_delete(
                send_ldap_result( conn, op, LDAP_REFERRAL,
                    e->e_dn, NULL, refs, NULL );
 
-               ber_bvecfree( refs );
+               if ( refs ) bvarray_free( refs );
 
                rc = 1;
                goto return_results;
@@ -103,10 +103,10 @@ ldbm_back_delete(
        if ( has_children( be, e ) ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
-                          "ldbm_back_delete: (%s) is a non-leaf node.\n", dn ));
+                          "ldbm_back_delete: (%s) is a non-leaf node.\n", dn->bv_val ));
 #else
                Debug(LDAP_DEBUG_ARGS, "<=- ldbm_back_delete: non leaf %s\n",
-                       dn, 0, 0);
+                       dn->bv_val, 0, 0);
 #endif
 
                send_ldap_result( conn, op, LDAP_NOT_ALLOWED_ON_NONLEAF,
@@ -115,8 +115,9 @@ ldbm_back_delete(
        }
 
        /* delete from parent's id2children entry */
-       if( (pdn = dn_parent( be, e->e_ndn )) != NULL && pdn[ 0 ] != '\0' ) {
-               if( (p = dn2entry_w( be, pdn, NULL )) == NULL) {
+       if( (pdn.bv_val = dn_parent( be, e->e_ndn )) != NULL && pdn.bv_val[ 0 ] != '\0' ) {
+               pdn.bv_len = e->e_nname.bv_len - (pdn.bv_val - e->e_ndn);
+               if( (p = dn2entry_w( be, &pdn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                                "ldbm_back_delete: parent of (%s) does not exist\n", dn ));
@@ -201,7 +202,7 @@ ldbm_back_delete(
        }
 
        /* delete from dn2id mapping */
-       if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                        "ldbm_back_delete: (%s) operations error\n",