From: Pierangelo Masarati Date: Thu, 5 Feb 2009 18:44:52 +0000 (+0000) Subject: build entry's pretty DN from parent's (ITS#5326) X-Git-Tag: ACLCHECK_0~882 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=7cd382d9315796231cadb12b9f8aaa3f91809d7a;p=openldap build entry's pretty DN from parent's (ITS#5326) --- diff --git a/servers/slapd/back-bdb/add.c b/servers/slapd/back-bdb/add.c index 921c41d573..f9a42f7a61 100644 --- a/servers/slapd/back-bdb/add.c +++ b/servers/slapd/back-bdb/add.c @@ -284,6 +284,26 @@ retry: /* transaction retry */ /* free parent and reader lock */ if ( p != (Entry *)&slap_entry_root ) { + if ( p->e_nname.bv_len ) { + struct berval ppdn; + + /* ITS#5326: use parent's DN if differs from provided one */ + dnParent( &op->ora_e->e_name, &ppdn ); + if ( !dn_match( &p->e_name, &ppdn ) ) { + struct berval rdn; + struct berval newdn; + + dnRdn( &op->ora_e->e_name, &rdn ); + + build_new_dn( &newdn, &p->e_name, &rdn, NULL ); + ber_memfree( op->ora_e->e_name.bv_val ); + op->ora_e->e_name = newdn; + + /* FIXME: should check whether + * dnNormalize(newdn) == e->e_nname ... */ + } + } + bdb_unlocked_cache_return_entry_r( bdb, p ); } p = NULL;