X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fdn.c;h=7effba1534808bad1945ca07ea6d61a21de3f780;hb=0af1940f3fb59fe57b2281ef253fe1341c505c2c;hp=a47d1c418f25e8432cd8a82d8f89913f1d5b29c1;hpb=f07015dad2d6ccdbe5b8360bfbc601b13baae894;p=openldap diff --git a/servers/slapd/dn.c b/servers/slapd/dn.c index a47d1c418f..7effba1534 100644 --- a/servers/slapd/dn.c +++ b/servers/slapd/dn.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -73,7 +73,12 @@ LDAPRDN_validate( LDAPRDN rdn ) rc = slap_bv2ad( &ava->la_attr, &ad, &text ); if ( rc != LDAP_SUCCESS ) { - return LDAP_INVALID_SYNTAX; + rc = slap_bv2undef_ad( &ava->la_attr, + &ad, &text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); + if ( rc != LDAP_SUCCESS ) { + return LDAP_INVALID_SYNTAX; + } } ava->la_private = ( void * )ad; @@ -132,7 +137,12 @@ LDAPDN_validate( LDAPDN dn ) rc = slap_bv2ad( &ava->la_attr, &ad, &text ); if ( rc != LDAP_SUCCESS ) { - return LDAP_INVALID_SYNTAX; + rc = slap_bv2undef_ad( &ava->la_attr, + &ad, &text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); + if ( rc != LDAP_SUCCESS ) { + return LDAP_INVALID_SYNTAX; + } } ava->la_private = ( void * )ad; @@ -344,7 +354,12 @@ LDAPRDN_rewrite( LDAPRDN rdn, unsigned flags, void *ctx ) rc = slap_bv2ad( &ava->la_attr, &ad, &text ); if ( rc != LDAP_SUCCESS ) { - return LDAP_INVALID_SYNTAX; + rc = slap_bv2undef_ad( &ava->la_attr, + &ad, &text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); + if ( rc != LDAP_SUCCESS ) { + return LDAP_INVALID_SYNTAX; + } } ava->la_private = ( void * )ad; @@ -371,7 +386,9 @@ LDAPRDN_rewrite( LDAPRDN rdn, unsigned flags, void *ctx ) } else { /* normalization */ validf = ad->ad_type->sat_syntax->ssyn_validate; mr = ad->ad_type->sat_equality; - if( mr ) normf = mr->smr_normalize; + if( mr && (!( mr->smr_usage & SLAP_MR_MUTATION_NORMALIZER ))) { + normf = mr->smr_normalize; + } } if ( validf ) { @@ -469,7 +486,12 @@ LDAPDN_rewrite( LDAPDN dn, unsigned flags, void *ctx ) rc = slap_bv2ad( &ava->la_attr, &ad, &text ); if ( rc != LDAP_SUCCESS ) { - return LDAP_INVALID_SYNTAX; + rc = slap_bv2undef_ad( &ava->la_attr, + &ad, &text, + SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); + if ( rc != LDAP_SUCCESS ) { + return LDAP_INVALID_SYNTAX; + } } ava->la_private = ( void * )ad; @@ -496,7 +518,9 @@ LDAPDN_rewrite( LDAPDN dn, unsigned flags, void *ctx ) } else { /* normalization */ validf = ad->ad_type->sat_syntax->ssyn_validate; mr = ad->ad_type->sat_equality; - if( mr ) normf = mr->smr_normalize; + if( mr && (!( mr->smr_usage & SLAP_MR_MUTATION_NORMALIZER ))) { + normf = mr->smr_normalize; + } } if ( validf ) { @@ -1109,7 +1133,7 @@ dnParent( { char *p; - p = strchr( dn->bv_val, ',' ); + p = ber_bvchr( dn, ',' ); /* one-level dn */ if ( p == NULL ) { @@ -1141,7 +1165,7 @@ dnRdn( char *p; *rdn = *dn; - p = strchr( dn->bv_val, ',' ); + p = ber_bvchr( dn, ',' ); /* one-level dn */ if ( p == NULL ) { @@ -1187,7 +1211,7 @@ dnExtractRdn( /* * We can assume the input is a prettied or normalized DN */ -int +ber_len_t dn_rdnlen( Backend *be, struct berval *dn_in ) @@ -1208,7 +1232,7 @@ dn_rdnlen( return 0; } - p = strchr( dn_in->bv_val, ',' ); + p = ber_bvchr( dn_in, ',' ); return p ? p - dn_in->bv_val : dn_in->bv_len; } @@ -1232,7 +1256,7 @@ rdn_validate( struct berval *rdn ) { return LDAP_INVALID_SYNTAX; } - return strchr( rdn->bv_val, ',' ) == NULL + return ber_bvchr( rdn, ',' ) == NULL ? LDAP_SUCCESS : LDAP_INVALID_SYNTAX; #else @@ -1295,7 +1319,7 @@ build_new_dn( struct berval * new_dn, char *ptr; if ( parent_dn == NULL || parent_dn->bv_len == 0 ) { - ber_dupbv( new_dn, newrdn ); + ber_dupbv_x( new_dn, newrdn, memctx ); return; }