summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2006-11-06 20:51:32 +0000
committerNoriko Hosoi <nhosoi@redhat.com>2006-11-06 20:51:32 +0000
commit891043bf95a5973198fc42068adaf72ef2163e4d (patch)
treefdbec1a575d5108eebad9bcff5302e9a1173267f /ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
parent379091dfc02ea735b75764dbe50cfe17019f89be (diff)
downloadds-891043bf95a5973198fc42068adaf72ef2163e4d.tar.gz
ds-891043bf95a5973198fc42068adaf72ef2163e4d.tar.xz
ds-891043bf95a5973198fc42068adaf72ef2163e4d.zip
Resolves: #199923
Summary: subtree search fails to find items under a db containing special characters (Comment#16) Description: When dn contains rdn which includes '\\', it was escaped twice to generate a key for entrydn and caused mismatch in forming ancestorid index. It ends up the subtree search fail.
Diffstat (limited to 'ldap/servers/slapd/back-ldbm/ldbm_modrdn.c')
-rw-r--r--ldap/servers/slapd/back-ldbm/ldbm_modrdn.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
index eda6b091..60aa5b42 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
@@ -271,7 +271,7 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
}
/* Fetch and lock the parent of the entry that is moving */
- oldparent_addr.dn = (char*)slapi_sdn_get_ndn (&dn_parentdn);
+ oldparent_addr.dn = (char*)slapi_sdn_get_dn (&dn_parentdn);
oldparent_addr.uniqueid = NULL;
parententry = find_entry2modify_only( pb, be, &oldparent_addr, NULL );
modify_init(&parent_modify_context,parententry);
@@ -360,10 +360,17 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
if(!(slapi_dn_isbesuffix(pb,slapi_sdn_get_ndn(&dn_olddn)) && isroot))
{
/* Here means that we didn't find the parent */
- ldap_result_matcheddn = slapi_ch_strdup((char *) slapi_entry_get_dn(parententry->ep_entry));
+ if (parententry && parententry->ep_entry)
+ {
+ ldap_result_matcheddn = slapi_ch_strdup((char *) slapi_entry_get_dn(parententry->ep_entry));
+ }
+ else
+ {
+ ldap_result_matcheddn = "NULL";
+ }
ldap_result_code= LDAP_NO_SUCH_OBJECT;
LDAPDebug( LDAP_DEBUG_TRACE, "Parent does not exist matched %s, parentdn = %s\n",
- ldap_result_matcheddn == NULL ? "NULL" : ldap_result_matcheddn, slapi_sdn_get_ndn(&dn_parentdn), 0 );
+ ldap_result_matcheddn, slapi_sdn_get_ndn(&dn_parentdn), 0 );
goto error_return;
}
}
@@ -818,7 +825,8 @@ common_return:
moddn_unlock_and_return_entries(be,&e,&existingentry);
slapi_ch_free((void**)&child_entries);
slapi_ch_free((void**)&child_entry_copies);
- slapi_ch_free((void**)&ldap_result_matcheddn);
+ if (ldap_result_matcheddn && 0 != strcmp(ldap_result_matcheddn, "NULL"))
+ slapi_ch_free((void**)&ldap_result_matcheddn);
idl_free(children);
slapi_sdn_done(&dn_olddn);
slapi_sdn_done(&dn_newdn);