Reset target DN when generated UUID is used as RDN

When the UUID plug-in generates a value that is used in the RDN
of the entry being added, the old DN is free'd and replaced with
the new DN.  The problem is that the operation in the pblock holds
a pointer to the old DN address.  This can cause other plug-ins to
reference garbage, leading to incorrect results or crashes.  This
was causing the attribute uniqueness plug-in to not work correctly,
resulting in duplicate netgroup entries.

The fix is to have the UUID plug-in reset the target DN after
changing the DN of the entry to be added.

ticket 963
This commit is contained in:
Nathan Kinder 2011-02-17 16:37:39 -08:00 committed by Rob Crittenden
parent eab4e36ee5
commit 27532f5468

View File

@ -1109,6 +1109,10 @@ static int ipauuid_pre_op(Slapi_PBlock *pb, int modtype)
slapi_ch_free_string(&nrdn);
slapi_sdn_set_rdn(sdn, rdn);
slapi_entry_set_sdn(e, sdn);
/* reset the target DN since we've changed it. */
slapi_pblock_set(pb, SLAPI_ADD_TARGET,
(char*)slapi_sdn_get_ndn(slapi_entry_get_sdn_const(e)));
}
slapi_rdn_free(&rdn);
slapi_sdn_free(&sdn);