]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/modrdn.c
Add a default case with assert() just in case.
[openldap] / servers / slapd / back-ldbm / modrdn.c
index f4b60495f13846fff73ff3aa6297e1a0e369cdf4..d8a80509a4c6b87baf843ada3bf4678b073dc3d5 100644 (file)
@@ -1,7 +1,7 @@
 /* modrdn.c - ldbm backend modrdn 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
  */
 
@@ -89,9 +89,9 @@ ldbm_back_modrdn(
 #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;
+               BerVarray refs;
 
                if( matched != NULL ) {
                        matched_dn = strdup( matched->e_dn );
@@ -107,7 +107,7 @@ ldbm_back_modrdn(
                send_ldap_result( conn, op, LDAP_REFERRAL,
                        matched_dn, NULL, refs, NULL );
 
-               ber_bvecfree( refs );
+               if ( refs ) ber_bvarray_free( refs );
                free( matched_dn );
 
                return( -1 );
@@ -116,7 +116,7 @@ ldbm_back_modrdn(
        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,
+               BerVarray refs = get_entry_referrals( be,
                        conn, op, e );
 
 #ifdef NEW_LOGGING
@@ -130,7 +130,7 @@ ldbm_back_modrdn(
                send_ldap_result( conn, op, LDAP_REFERRAL,
                    e->e_dn, NULL, refs, NULL );
 
-               ber_bvecfree( refs );
+               if ( refs ) ber_bvarray_free( refs );
                goto return_results;
        }
 
@@ -159,7 +159,7 @@ ldbm_back_modrdn(
                 * children.
                 */
 
-               if( (p = dn2entry_w( be, p_ndn.bv_val, NULL )) == NULL) {
+               if( (p = dn2entry_w( be, &p_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
                                "ldbm_back_modrdn: parent of %s does not exist\n", e->e_ndn ));
@@ -291,8 +291,7 @@ ldbm_back_modrdn(
                np_ndn = nnewSuperior;
 
                /* newSuperior == oldParent? */
-               if ( p_ndn.bv_len == np_ndn->bv_len &&
-                       strcmp( p_ndn.bv_val, np_ndn->bv_val ) == 0 ) {
+               if ( dn_match( &p_ndn, np_ndn ) ) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_INFO, "ldbm_back_modrdn: "
                                "new parent\"%s\" seems to be the same as the "
@@ -314,7 +313,7 @@ ldbm_back_modrdn(
                /* Get Entry with dn=newSuperior. Does newSuperior exist? */
 
                if ( nnewSuperior->bv_len ) {
-                       if( (np = dn2entry_w( be, np_ndn->bv_val, NULL )) == NULL) {
+                       if( (np = dn2entry_w( be, np_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                                        "ldbm_back_modrdn: newSup(ndn=%s) not found.\n", np_ndn->bv_val ));
@@ -475,7 +474,7 @@ ldbm_back_modrdn(
        }
 
        ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
-       if ( ( rc_id = dn2id ( be, new_ndn.bv_val, &id ) ) || id != NOID ) {
+       if ( ( rc_id = dn2id ( be, &new_ndn, &id ) ) || id != NOID ) {
                /* if (rc_id) something bad happened to ldbm cache */
                send_ldap_result( conn, op, 
                        rc_id ? LDAP_OPERATIONS_ERROR : LDAP_ALREADY_EXISTS,
@@ -496,7 +495,9 @@ ldbm_back_modrdn(
        /* Get attribute types and values of our new rdn, we will
         * need to add that to our new entry
         */
-       if ( ldap_str2rdn( newrdn->bv_val, &new_rdn, &text, LDAP_DN_FORMAT_LDAP ) ) {
+       if ( ldap_str2rdn( newrdn->bv_val, &new_rdn, (char **)&text,
+               LDAP_DN_FORMAT_LDAP ) )
+       {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
                        "ldbm_back_modrdn: can't figure out type(s)/value(s) of newrdn\n" ));
@@ -522,7 +523,9 @@ ldbm_back_modrdn(
 #endif
 
        /* Retrieve the old rdn from the entry's dn */
-       if ( ldap_str2rdn( dn->bv_val, &old_rdn, &text, LDAP_DN_FORMAT_LDAP ) ) {
+       if ( ldap_str2rdn( dn->bv_val, &old_rdn, (char **)&text,
+               LDAP_DN_FORMAT_LDAP ) )
+       {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
                           "ldbm_back_modrdn: can't figure out the old_rdn type(s)/value(s).\n" ));
@@ -608,11 +611,11 @@ ldbm_back_modrdn(
                }
 
                mod_tmp = (Modifications *)ch_malloc( sizeof( Modifications )
-                       + 2 * sizeof( struct berval ) );
+                       + 2 * sizeof( struct berval ) );
                mod_tmp->sml_desc = desc;
-               mod_tmp->sml_bvalues = (struct berval **)( mod_tmp + 1 );
-               mod_tmp->sml_bvalues[0] = &new_rdn[0][a_cnt]->la_value;
-               mod_tmp->sml_bvalues[1] = NULL;
+               mod_tmp->sml_bvalues = (BerVarray)( mod_tmp + 1 );
+               mod_tmp->sml_bvalues[0] = new_rdn[0][a_cnt]->la_value;
+               mod_tmp->sml_bvalues[1].bv_val = NULL;
                mod_tmp->sml_op = SLAP_MOD_SOFTADD;
                mod_tmp->sml_next = mod;
                mod = mod_tmp;
@@ -682,11 +685,11 @@ ldbm_back_modrdn(
 
                        /* Remove old value of rdn as an attribute. */
                        mod_tmp = (Modifications *)ch_malloc( sizeof( Modifications )
-                               + 2 * sizeof( struct berval ) );
+                               + 2 * sizeof( struct berval ) );
                        mod_tmp->sml_desc = desc;
-                       mod_tmp->sml_bvalues = (struct berval **)(mod_tmp+1);
-                       mod_tmp->sml_bvalues[0] = &old_rdn[0][d_cnt]->la_value;
-                       mod_tmp->sml_bvalues[1] = NULL;
+                       mod_tmp->sml_bvalues = (BerVarray)(mod_tmp+1);
+                       mod_tmp->sml_bvalues[0] = old_rdn[0][d_cnt]->la_value;
+                       mod_tmp->sml_bvalues[1].bv_val = NULL;
                        mod_tmp->sml_op = LDAP_MOD_DELETE;
                        mod_tmp->sml_next = mod;
                        mod = mod_tmp;
@@ -712,7 +715,7 @@ ldbm_back_modrdn(
        ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
 
        /* delete old one */
-       if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
                send_ldap_result( conn, op, LDAP_OTHER,
                        NULL, "DN index delete fail", NULL, NULL );
                goto return_results;
@@ -731,7 +734,7 @@ ldbm_back_modrdn(
        new_ndn.bv_val = NULL;
 
        /* add new one */
-       if ( dn2id_add( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_add( be, &e->e_nname, e->e_id ) != 0 ) {
                send_ldap_result( conn, op, LDAP_OTHER,
                        NULL, "DN index add failed", NULL, NULL );
                goto return_results;
@@ -748,7 +751,7 @@ ldbm_back_modrdn(
                }
 
                /* here we may try to delete the newly added dn */
-               if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+               if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
                        /* we already are in trouble ... */
                        ;
                }