X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fmodrdn.c;h=60889b7a543cbe6a4b70f9363233a9e7925c42e5;hb=f8fb4aca7668c722f41941be719203aa8c298e12;hp=628f68497f2b992db9d992977432dc83dbae0678;hpb=0039cb2a37ad6ee7ec40b6e29e35698329476098;p=openldap diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c index 628f68497f..60889b7a54 100644 --- a/servers/slapd/modrdn.c +++ b/servers/slapd/modrdn.c @@ -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; }