From: Kurt Zeilenga Date: Fri, 28 Feb 2003 05:48:07 +0000 (+0000) Subject: bdb modrdn fix (ITS#2336) X-Git-Tag: OPENLDAP_REL_ENG_2_1_14~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05a8de771e5b012baf82db84972c1967a9b9852d;p=thirdparty%2Fopenldap.git bdb modrdn fix (ITS#2336) --- diff --git a/CHANGES b/CHANGES index c57bba2c38..2cb4437ca9 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,7 @@ OpenLDAP 2.1.14 Engineering Fixed back-bdb bdb_cache_find_entry* retry bug Fixed back-bdb log message bug Fixed back-bdb group/atttribute txn code (ITS#2122) + Fixed back-bdb modrdn subtree rename bug (ITS#2336) Fixed client tools krb4 handling Updated slapadd to complain about holes in the DIT Build Environment diff --git a/servers/slapd/back-bdb/modrdn.c b/servers/slapd/back-bdb/modrdn.c index 783bd70fc5..94745198f7 100644 --- a/servers/slapd/back-bdb/modrdn.c +++ b/servers/slapd/back-bdb/modrdn.c @@ -212,6 +212,41 @@ retry: /* transaction retry */ goto return_results; } +#ifndef BDB_HIER + rc = bdb_dn2id_children( be, ltid, &e->e_nname, 0 ); + if ( rc != DB_NOTFOUND ) { + switch( rc ) { + case DB_LOCK_DEADLOCK: + case DB_LOCK_NOTGRANTED: + goto retry; + case 0: +#ifdef NEW_LOGGING + LDAP_LOG ( OPERATION, DETAIL1, + "<=- bdb_modrdn: non-leaf %s\n", dn->bv_val, 0, 0 ); +#else + Debug(LDAP_DEBUG_ARGS, + "<=- bdb_modrdn: non-leaf %s\n", + dn->bv_val, 0, 0); +#endif + rc = LDAP_NOT_ALLOWED_ON_NONLEAF; + text = "subtree rename not supported"; + break; + default: +#ifdef NEW_LOGGING + LDAP_LOG ( OPERATION, ERR, + "<=- bdb_modrdn: has_children failed %s (%d)\n", + db_strerror(rc), rc, 0 ); +#else + Debug(LDAP_DEBUG_ARGS, + "<=- bdb_modrdn: has_children failed: %s (%d)\n", + db_strerror(rc), rc, 0 ); +#endif + rc = LDAP_OTHER; + text = "internal error"; + } + goto return_results; + } +#endif if (!manageDSAit && is_entry_referral( e ) ) { /* parent is a referral, don't allow add */ /* parent is an alias, don't allow add */ @@ -412,7 +447,7 @@ retry: /* transaction retry */ /* newSuperior == oldParent? */ if( dn_match( &p_ndn, nnewSuperior ) ) { #ifdef NEW_LOGGING - LDAP_LOG( BACK_LDBM, INFO, "bdb_back_modrdn: " + LDAP_LOG( BACK_BDB, INFO, "bdb_back_modrdn: " "new parent \"%s\" same as the old parent \"%s\"\n", newSuperior->bv_val, p_dn.bv_val, 0 ); #else