]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/modrdn.c
error message from be_entry_put tool backend function
[openldap] / servers / slapd / modrdn.c
index 628f68497f2b992db9d992977432dc83dbae0678..60889b7a543cbe6a4b70f9363233a9e7925c42e5 100644 (file)
@@ -1,6 +1,6 @@
 /* $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
  */
 /*
@@ -51,11 +51,11 @@ do_modrdn(
 
        struct berval pdn = { 0, NULL };
        struct berval pnewrdn = { 0, NULL };
-       struct berval pnewSuperior = { 0, NULL };
+       struct berval pnewSuperior = { 0, NULL }, *pnewS = NULL;
 
        struct berval ndn = { 0, NULL };
        struct berval nnewrdn = { 0, NULL };
-       struct berval nnewSuperior = { 0, NULL };
+       struct berval nnewSuperior = { 0, NULL }, *nnewS = NULL;
 
        Backend *be;
        Backend *newSuperior_be = NULL;
@@ -83,7 +83,7 @@ do_modrdn(
         *      }
         */
 
-       if ( ber_scanf( op->o_ber, "{oob", &dn, &newrdn, &deloldrdn )
+       if ( ber_scanf( op->o_ber, "{mmb", &dn, &newrdn, &deloldrdn )
            == LBER_ERROR )
        {
 #ifdef NEW_LOGGING
@@ -120,14 +120,14 @@ do_modrdn(
                        goto cleanup;
                }
 
-               if ( ber_scanf( op->o_ber, "o", &newSuperior ) 
+               if ( ber_scanf( op->o_ber, "m", &newSuperior ) 
                     == LBER_ERROR ) {
 
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
-                               "do_modrdn: ber_scanf(\"a\") failed\n" ));
+                               "do_modrdn: ber_scanf(\"m\") failed\n" ));
 #else
-                       Debug( LDAP_DEBUG_ANY, "ber_scanf(\"a\") failed\n",
+                       Debug( LDAP_DEBUG_ANY, "ber_scanf(\"m\") failed\n",
                                0, 0, 0 );
 #endif
 
@@ -136,6 +136,8 @@ do_modrdn(
                        rc = SLAPD_DISCONNECT;
                        goto cleanup;
                }
+               pnewS = &pnewSuperior;
+               nnewS = &nnewSuperior;
        }
 
 #ifdef NEW_LOGGING
@@ -249,7 +251,7 @@ do_modrdn(
                goto cleanup;
        }
 
-       if( newSuperior.bv_len ) {
+       if( pnewS ) {
                rc = dnPrettyNormal( NULL, &newSuperior, &pnewSuperior,
                        &nnewSuperior );
                if( rc != LDAP_SUCCESS ) {
@@ -279,13 +281,13 @@ do_modrdn(
         * if we don't hold it.
         */
        if ( (be = select_backend( &ndn, manageDSAit, 0 )) == NULL ) {
-               struct berval **ref = referral_rewrite( default_referral,
+               BVarray ref = referral_rewrite( default_referral,
                        NULL, &pdn, LDAP_SCOPE_DEFAULT );
 
                send_ldap_result( conn, op, rc = LDAP_REFERRAL,
                        NULL, NULL, ref ? ref : default_referral, NULL );
 
-               ber_bvecfree( ref );
+               bvarray_free( ref );
                goto cleanup;
        }
 
@@ -306,7 +308,7 @@ do_modrdn(
        /* Make sure that the entry being changed and the newSuperior are in 
         * the same backend, otherwise we return an error.
         */
-       if( newSuperior.bv_len ) {
+       if( pnewS ) {
                newSuperior_be = select_backend( &nnewSuperior, 0, 0 );
 
                if ( newSuperior_be != be ) {
@@ -341,7 +343,7 @@ do_modrdn(
                {
                        if ( (*be->be_modrdn)( be, conn, op, &pdn, &ndn,
                                &pnewrdn, &nnewrdn, deloldrdn,
-                               &pnewSuperior, &nnewSuperior ) == 0
+                               pnewS, nnewS ) == 0
 #ifdef SLAPD_MULTIMASTER
                                && ( !be->be_update_ndn.bv_len || !repl_user )
 #endif
@@ -355,15 +357,15 @@ do_modrdn(
                        }
 #ifndef SLAPD_MULTIMASTER
                } else {
-                       struct berval **defref = be->be_update_refs
+                       BVarray defref = be->be_update_refs
                                ? be->be_update_refs : default_referral;
-                       struct berval **ref = referral_rewrite( defref,
+                       BVarray ref = referral_rewrite( defref,
                                NULL, &pdn, LDAP_SCOPE_DEFAULT );
 
                        send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
                                ref ? ref : defref, NULL );
 
-                       ber_bvecfree( ref );
+                       bvarray_free( ref );
 #endif
                }
        } else {
@@ -373,17 +375,14 @@ do_modrdn(
        }
 
 cleanup:
-       free( dn.bv_val );
        free( pdn.bv_val );
        free( ndn.bv_val );
 
-       free( newrdn.bv_val );  
        free( pnewrdn.bv_val ); 
        free( nnewrdn.bv_val ); 
 
-       free( newSuperior.bv_val );
-       free( pnewSuperior.bv_val );
-       free( nnewSuperior.bv_val );
+       if ( pnewSuperior.bv_val ) free( pnewSuperior.bv_val );
+       if ( nnewSuperior.bv_val ) free( nnewSuperior.bv_val );
 
        return rc;
 }