From: Kurt Zeilenga Date: Fri, 25 Oct 2002 01:09:50 +0000 (+0000) Subject: Make sure that newSuperior isn't old superior X-Git-Tag: NO_SLAP_OP_BLOCKS~859 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2b2e406b46485d31fffa386cffd823fb421b1ae5;p=openldap Make sure that newSuperior isn't old superior --- diff --git a/servers/slapd/back-bdb/modrdn.c b/servers/slapd/back-bdb/modrdn.c index 6017044122..d55d0cb70c 100644 --- a/servers/slapd/back-bdb/modrdn.c +++ b/servers/slapd/back-bdb/modrdn.c @@ -71,14 +71,6 @@ bdb_modrdn( newSuperior ? newSuperior->bv_val : "NULL" ); #endif -#if 0 - if( newSuperior != NULL ) { - rc = LDAP_UNWILLING_TO_PERFORM; - text = "newSuperior not implemented (yet)"; - goto return_results; - } -#endif - if( 0 ) { retry: /* transaction retry */ if (e != NULL) { @@ -384,6 +376,21 @@ retry: /* transaction retry */ newSuperior->bv_val, 0, 0 ); #endif + /* newSuperior == oldParent? */ + if( dn_match( &p_ndn, nnewSuperior ) ) { +#ifdef NEW_LOGGING + LDAP_LOG( BACK_LDBM, INFO, "bdb_back_modrdn: " + "new parent \"%s\" same as the old parent \"%s\"\n", + newSuperior->bv_val, p_dn.bv_val, 0 ); +#else + Debug( LDAP_DEBUG_TRACE, "bdb_back_modrdn: " + "new parent \"%s\" same as the old parent \"%s\"\n", + newSuperior->bv_val, p_dn.bv_val, 0 ); +#endif + newSuperior = NULL; /* ignore newSuperior */ + } + } + if ( newSuperior != NULL ) { if ( newSuperior->bv_len ) { np_dn = newSuperior; np_ndn = nnewSuperior; @@ -392,7 +399,8 @@ retry: /* transaction retry */ /* newSuperior == entry being moved?, if so ==> ERROR */ /* Get Entry with dn=newSuperior. Does newSuperior exist? */ - rc = bdb_dn2entry_r( be, ltid, nnewSuperior, &np, NULL, 0, locker, &lock ); + rc = bdb_dn2entry_r( be, + ltid, nnewSuperior, &np, NULL, 0, locker, &lock ); switch( rc ) { case 0: