X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsuffixalias.c;h=faf68b95b4ce3ffecc4a170bbfcf4d8802cf491e;hb=62139b6ef3634529c6d1ff726c337e685ea38cf8;hp=64cd7f451880aefbc85cd85e8afc3a5efdc536dc;hpb=ffcdc6d11d7e86260be64e47229ca75bc7b7ac20;p=openldap diff --git a/servers/slapd/suffixalias.c b/servers/slapd/suffixalias.c index 64cd7f4518..faf68b95b4 100644 --- a/servers/slapd/suffixalias.c +++ b/servers/slapd/suffixalias.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1999-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1999-2002 The OpenLDAP Foundation, All Rights Reserved. * * COPYING RESTRICTIONS APPLY, see COPYRIGHT file in the top level * directory of this package. @@ -28,29 +28,29 @@ * given a normalized uppercased dn (or root part), * return an aliased dn if any of the alias suffixes match */ -char *suffix_alias( +void suffix_alias( Backend *be, - char *dn ) + struct berval *dn ) { - int i, dnLength; + int i, dnLength; - if(dn == NULL) return NULL; - if(be == NULL) return dn; + if(dn == NULL || be == NULL || dn->bv_len == 0) + return; - dnLength = strlen ( dn ); + dnLength = dn->bv_len; for ( i = 0; - be->be_suffixAlias != NULL && be->be_suffixAlias[i] != NULL; + be->be_suffixAlias != NULL && be->be_suffixAlias[i].bv_val != NULL; i += 2 ) { - int aliasLength = strlen (be->be_suffixAlias[i]); + int aliasLength = be->be_suffixAlias[i].bv_len; int diff = dnLength - aliasLength; if ( diff < 0 ) { /* alias is longer than dn */ continue; } else if ( diff > 0 ) { - if ( ! DN_SEPARATOR(dn[diff-1]) ) { + if ( ! DN_SEPARATOR(dn->bv_val[diff-1]) ) { /* boundary is not at a DN separator */ continue; } @@ -58,25 +58,24 @@ char *suffix_alias( /* XXX or an escaped separator... oh well */ } - if (!strcmp(be->be_suffixAlias[i], &dn[diff])) { - char *oldDN = dn; - dn = ch_malloc( diff + strlen(be->be_suffixAlias[i+1]) + 1 ); - strncpy( dn, oldDN, diff ); - strcpy( &dn[diff], be->be_suffixAlias[i+1] ); + if (!strcmp(be->be_suffixAlias[i].bv_val, &dn->bv_val[diff])) { + char *oldDN = dn->bv_val; + dn->bv_len = diff + be->be_suffixAlias[i+1].bv_len; + dn->bv_val = ch_malloc( dn->bv_len + 1 ); + strncpy( dn->bv_val, oldDN, diff ); + strcpy( &dn->bv_val[diff], be->be_suffixAlias[i+1].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_INFO, - "suffix_alias: converted \"%s\" to \"%s\"\n", - oldDN, dn )); + LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + "suffix_alias: converted \"%s\" to \"%s\"\n", + oldDN, dn->bv_val )); #else Debug( LDAP_DEBUG_ARGS, "suffix_alias: converted \"%s\" to \"%s\"\n", - oldDN, dn, 0); + oldDN, dn->bv_val, 0); #endif free (oldDN); break; } } - - return dn; }