ldap/servers/slapd/dn.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
New commits:
commit 1ebcfd4538948335594a2a7cff178a90e5d6b335
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Tue May 25 16:54:46 2010 -0700
595893 - Base DN in SASL mapping is not normalized
https://bugzilla.redhat.com/show_bug.cgi?id=595893
Fix Description: It must be guaranteed that ndn returned
from slapi_sdn_get_ndn is normalized. Putting back the
normalization code in slapi_sdn_get_ndn.
diff --git a/ldap/servers/slapd/dn.c b/ldap/servers/slapd/dn.c
index fc3695c..108c165 100644
--- a/ldap/servers/slapd/dn.c
+++ b/ldap/servers/slapd/dn.c
@@ -1919,10 +1919,26 @@ slapi_sdn_get_ndn(const Slapi_DN *sdn)
if(sdn->dn!=NULL)
{
char *p= slapi_ch_strdup(sdn->dn);
+ char *normed = NULL;
+ size_t dnlen = 0;
+ int rc = 0;
+
Slapi_DN *ncsdn= (Slapi_DN*)sdn; /* non-const Slapi_DN */
- slapi_dn_ignore_case(p); /* dn is normalized; just ignore case */
- ncsdn->ndn= p;
- ncsdn->ndn_len=strlen(p);
+ rc = slapi_dn_normalize_case_ext(p, 0, &normed, &dnlen);
+ if (rc < 0) {
+ /* we give up, just set dn to ndn */
+ slapi_dn_ignore_case(p); /* ignore case */
+ ncsdn->ndn = p;
+ ncsdn->ndn_len = strlen(p);
+ } else if (rc == 0) { /* p is passed in */
+ *(normed + dnlen) = '\0';
+ ncsdn->ndn = normed;
+ ncsdn->ndn_len = dnlen;
+ } else { /* rc > 0 */
+ slapi_ch_free_string(&p);
+ ncsdn->ndn = normed;
+ ncsdn->ndn_len = dnlen;
+ }
ncsdn->flag= slapi_setbit_uchar(sdn->flag,FLAG_NDN);
PR_INCREMENT_COUNTER(slapi_sdn_counter_ndn_created);
PR_INCREMENT_COUNTER(slapi_sdn_counter_ndn_exist);