Sean Burford wrote:
On Tue, May 5, 2009 at 12:52 PM, Howard Chu <hyc@symas.com<mailto:hyc@symas.com>> wrote:
Sean Burford wrote:
slapcat shows no problems with the entry on the 2.4.16 host.
Since the database looks fine I wonder if this is just a logging
issue.
Should this Debug statement in syncrepl.c actually use
op->ora_e->e_name.bv_val or some other attribute?
Looks like a side-effect of ITS#5326. And no, you can't use
op->ora_e because the backend may free it before returning
(back-bdb/hdb definitely do).
Do you agree that this looks like a logging issue rather than a database
issue?
Yes, and it is fixed now in HEAD.
Possible patch for "Occasional corrupt DN in be_add logs under 2.4.16" from OpenLDAP CVS. Should already be provided in upstream 2.4.17+. --- servers/slapd/back-bdb/add.c.orig 2009-03-05 10:40:00.000000000 -0800 +++ servers/slapd/back-bdb/add.c 2009-05-05 13:19:06.728827000 -0700 @@ -1,5 +1,5 @@ /* add.c - ldap BerkeleyDB back-end add routine */ -/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/add.c,v 1.152.2.17 2009/03/05 18:40:00 quanah Exp $ */ +/* $OpenLDAP: /servers/slapd/back-bdb/add.c,v 1.183 2009/05/05 19:54:01 hyc Exp $ */ /* This work is part of OpenLDAP Software <http://www.openldap.org/>. * * Copyright 2000-2009 The OpenLDAP Foundation. @@ -293,6 +293,27 @@ 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 ); + if ( op->ora_e->e_name.bv_val != op->o_req_dn.bv_val ) + 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;