]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/alias.c
Use dnIsSuffix
[openldap] / servers / slapd / back-ldbm / alias.c
index 5f44fb48416129d67f43e60c4dfb64d3b135bd5c..c2d4354fe1bb97a85ea9668f9a1d8b7f234f5a57 100644 (file)
@@ -31,7 +31,7 @@ static int dnlist_subordinate(
 Entry *deref_internal_r(
        Backend*        be,
        Entry*          alias,
-       const char*             dn_in,
+       struct berval*  dn_in,
        int*            err,
        Entry**         matched,
        const char**            text )
@@ -47,11 +47,11 @@ Entry *deref_internal_r(
                || ( alias == NULL && dn_in != NULL ) );
 
        *matched = NULL;
-       *err = LDAP_SUCCESS;
+       *err = LDAP_NO_SUCH_OBJECT;
        *text = NULL;
 
        if( alias == NULL ) {
-               dn = ch_strdup( dn_in );
+               dn = ch_strdup( dn_in->bv_val );
                entry = dn2entry_r( be, dn, &sup );
 
        } else {
@@ -219,9 +219,11 @@ static char* get_alias_dn(
        int *err,
        const char **errmsg )
 {      
-       char *dn;
+       int rc;
+       struct berval ndn;
        Attribute *a;
-       AttributeDescription *aliasedObjectName = slap_schema.si_ad_aliasedObjectName;
+       AttributeDescription *aliasedObjectName
+               = slap_schema.si_ad_aliasedObjectName;
 
        a = attr_find( e->e_attrs, aliasedObjectName );
 
@@ -252,19 +254,17 @@ static char* get_alias_dn(
                return NULL;
        }
 
-       dn = ch_strdup( a->a_vals[0]->bv_val );
-
-       if( dn_normalize(dn) == NULL ) {
-               ch_free( dn );
+       rc = dnNormalize2( NULL, a->a_vals[0], &ndn );
+       if( rc != LDAP_SUCCESS ) {
                *err = LDAP_ALIAS_PROBLEM;
                *errmsg = "alias aliasedObjectName value is invalid";
                return NULL;
        }
 
-       return dn;
+       return ndn.bv_val;
 }
 
-char* new_superior(
+static char* new_superior(
        const char *dn,
        const char *oldSup,
        const char *newSup )
@@ -279,8 +279,8 @@ char* new_superior(
 
        newDN = ch_malloc( dnlen - olen + nlen + 1 );
 
-       memcpy( newDN, dn, dnlen - olen );
-       memcpy( &newDN[dnlen - olen], newSup, nlen );
+       AC_MEMCPY( newDN, dn, dnlen - olen );
+       AC_MEMCPY( &newDN[dnlen - olen], newSup, nlen );
        newDN[dnlen - olen + nlen] = '\0';
 
        return newDN;