]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/dn2id.c
Set lock detector to DEFAULT, not NORUN.
[openldap] / servers / slapd / back-bdb / dn2id.c
index 64b74aa9e7c593bf34ea37059fbd4e1015a38dc3..c05dcae2231238ae1742f843f3491ff8406a753c 100644 (file)
@@ -60,42 +60,52 @@ bdb_dn2id_add(
                        ptr, rc, 0 );
                        goto done;
                }
-       }
-
-       pdn = dn_parent( be, ptr );
-
-       if( pdn != NULL ) {
+               
+               rc = dnParent( ptr, (const char **)&pdn );
+               if ( rc != LDAP_SUCCESS ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "=> bdb_dn2id_add: dnParent(\"%s\") failed\n",
+                               ptr, 0, 0 );
+                       goto done;
+               }
+       
                key.size -= pdn - ptr;
                pdn[-1] = DN_ONE_PREFIX;
                key.data = pdn - 1;
+               ptr = pdn;
 
                rc = bdb_idl_insert_key( be, db, txn, &key, e->e_id );
 
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_dn2id_add: parent (%s) insert failed: %d\n",
-                                       pdn, rc, 0 );
+                                       ptr, rc, 0 );
                        goto done;
                }
        }
 
-       while( pdn != NULL ) {
-               if ( be_issuffix( be, pdn ))
-                       break;
-               pdn[-1] = DN_SUBTREE_PREFIX;
+       while( !be_issuffix( be, ptr )) {
+               ptr[-1] = DN_SUBTREE_PREFIX;
 
                rc = bdb_idl_insert_key( be, db, txn, &key, e->e_id );
 
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_dn2id_add: subtree (%s) insert failed: %d\n",
-                                       pdn, rc, 0 );
+                                       ptr, rc, 0 );
                        break;
                }
-               ptr = pdn;
-               pdn = dn_parent( be, pdn );
+               rc = dnParent( ptr, &pdn );
+               if ( rc != LDAP_SUCCESS ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "=> bdb_dn2id_add: dnParent(\"%s\") failed\n",
+                               ptr, 0, 0 );
+                       goto done;
+               }
+
                key.size -= pdn - ptr;
                key.data = pdn - 1;
+               ptr = pdn;
        }
 
 done:
@@ -146,42 +156,51 @@ bdb_dn2id_delete(
                        ptr, rc, 0 );
                        goto done;
                }
-       }
 
-       pdn = dn_parent( be, ptr );
+               rc = dnParent( ptr, &pdn );
+               if ( rc != LDAP_SUCCESS ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "=> bdb_dn2id_delete: dnParent(\"%s\") failed\n",
+                               ptr, 0, 0 );
+                       goto done;
+               }
 
-       if( pdn != NULL ) {
                key.size -= pdn - ptr;
                pdn[-1] = DN_ONE_PREFIX;
                key.data = pdn - 1;
+               ptr = pdn;
 
                rc = bdb_idl_delete_key( be, db, txn, &key, e->e_id );
 
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_dn2id_delete: parent (%s) delete failed: %d\n",
-                               pdn, rc, 0 );
+                               ptr, rc, 0 );
                        goto done;
                }
        }
 
-       while( pdn != NULL ) {
-               if ( be_issuffix( be, pdn ))
-                       break;
-
-               pdn[-1] = DN_SUBTREE_PREFIX;
+       while( !be_issuffix( be, ptr )) {
+               ptr[-1] = DN_SUBTREE_PREFIX;
 
                rc = bdb_idl_delete_key( be, db, txn, &key, e->e_id );
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_dn2id_delete: subtree (%s) delete failed: %d\n",
-                               pdn, rc, 0 );
+                               ptr, rc, 0 );
                        goto done;
                }
-               ptr = pdn;
-               pdn = dn_parent( be, pdn );
+               rc = dnParent( ptr, &pdn );
+               if ( rc != LDAP_SUCCESS ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "=> bdb_dn2id_delete: dnParent(\"%s\") failed\n",
+                               ptr, 0, 0 );
+                       goto done;
+               }
+
                key.size -= pdn - ptr;
                key.data = pdn - 1;
+               ptr = pdn;
        }
 
 done:
@@ -269,7 +288,17 @@ bdb_dn2id_matched(
                rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
 
                if( rc == DB_NOTFOUND ) {
-                       char *pdn = dn_parent( be, dn );
+                       char    *pdn = NULL;
+
+                       if ( ! be_issuffix( be, dn ) ) {
+                               rc = dnParent( dn, &pdn );
+                               if ( rc != LDAP_SUCCESS ) {
+                                       Debug( LDAP_DEBUG_TRACE,
+                                               "<= bdb_dn2id_matched: dnParent(\"%s\") failed\n",
+                                               dn, 0, 0 );
+                                       break;
+                               }
+                       }
 
                        if( pdn == NULL || *pdn == '\0' ) {
                                Debug( LDAP_DEBUG_TRACE,
@@ -344,7 +373,7 @@ bdb_dn2id_children(
        free( key.data );
 
        Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_children( %s ): %schildren (%d)\n",
-               dn,
+               dn->bv_val,
                rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " :
                        db_strerror(rc) ), rc );
 
@@ -470,7 +499,11 @@ node_rdn_cmp(
        idNode *b
 )
 {
+#if 0
        return strcmp(a->i_rdn->nrdn.bv_val, b->i_rdn->nrdn.bv_val);
+#endif
+       /* should be slightly better without ordering drawbacks */
+       return ber_bvcmp(&a->i_rdn->nrdn, &b->i_rdn->nrdn);
 }
 
 idNode * bdb_find_id_node(