[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Patch to fix bug in modrdn
Hi,
If you specify a newrdn that is the same as the existing rdn, with
deleteoldrdn true, the ldbm backend will perform the operation without
checking for a possible schema violation. The attribute for the RDN
is set to the same value and then removed; the entry is then declared
invalid and vanishes from the directory.
The following patch catches this case and prints an error message. Is it
okay?
On another note, is anybody working to make modrdn (with ldbm) move the
child nodes of the entry being moved? At the moment it doesn't seem to
work - moving a node with children moves the node, but the children vanish.
I can't see any code in place to attempt this.
If nobody is working on this, I can have a look at it.
The attached patch is against the OpenLDAP 2.0.7 source. It applies to
servers/slapd/back-ldbm/modrdn.c
Cheers,
Grahame
--
Grahame Bowland
University Communications Services, The University of Western Australia
Phone: +61 8 9380 1175
--- ../../../../openldap-2.0.7/servers/slapd/back-ldbm/modrdn.c Wed Sep 6 03:55:53 2000
+++ modrdn.c Fri Feb 23 00:36:56 2001
@@ -375,6 +375,15 @@
NULL, "could not parse value from old RDN", NULL, NULL );
goto return_results;
}
+ if ((!strcasecmp(old_rdn_val, new_rdn_val))) {
+ Debug( LDAP_DEBUG_TRACE,
+ "ldbm_back_modrdn: new RDN is the same as previous and deletion requested - avoiding schema violation\n",
+ 0, 0, 0 );
+ send_ldap_result( conn, op, LDAP_OTHER,
+ NULL, "new RDN same as old RDN, aborting before schema violation", NULL, NULL);
+ goto return_results;
+ }
+
del_bvals[0] = &del_bv; /* Array of bervals */
del_bvals[1] = NULL;