X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fava.c;h=e0fdd8bb2e8decf242ae5c381d37f9d9d83996f9;hb=6e9c21cff8fc740dc6ed21c6f64d9a8899a33401;hp=6e87c07af5a562eb7d4e76882dc6e1457cf8bcfe;hpb=074be5fb5aa8cbd09cf88e00f5274a431d6ed344;p=openldap diff --git a/servers/slapd/ava.c b/servers/slapd/ava.c index 6e87c07af5..e0fdd8bb2e 100644 --- a/servers/slapd/ava.c +++ b/servers/slapd/ava.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* ava.c - routines for dealing with attribute value assertions */ @@ -14,7 +14,6 @@ #include "slap.h" -#ifdef SLAPD_SCHEMA_NOT_COMPAT void ava_free( @@ -22,8 +21,7 @@ ava_free( int freeit ) { - ad_free( ava->aa_desc, 1 ); - ber_bvfree( ava->aa_value ); + free( ava->aa_value.bv_val ); if ( freeit ) { ch_free( (char *) ava ); } @@ -34,82 +32,46 @@ get_ava( BerElement *ber, AttributeAssertion **ava, unsigned usage, - char **text + const char **text ) { int rc; - struct berval type, value, *nvalue; + ber_tag_t rtag; + struct berval type, value; AttributeAssertion *aa; - rc = ber_scanf( ber, "{oo}", &type, &value ); + rtag = ber_scanf( ber, "{mm}", &type, &value ); - if( rc == LBER_ERROR ) { + if( rtag == LBER_ERROR ) { +#ifdef NEW_LOGGING + LDAP_LOG( FILTER, ERR, "get_ava: ber_scanf failure\n", 0, 0, 0 ); +#else Debug( LDAP_DEBUG_ANY, " get_ava ber_scanf\n", 0, 0, 0 ); +#endif *text = "Error decoding attribute value assertion"; return SLAPD_DISCONNECT; } aa = ch_malloc( sizeof( AttributeAssertion ) ); aa->aa_desc = NULL; + aa->aa_value.bv_val = NULL; rc = slap_bv2ad( &type, &aa->aa_desc, text ); if( rc != LDAP_SUCCESS ) { - ch_free( type.bv_val ); - ch_free( value.bv_val ); ch_free( aa ); return rc; } - rc = value_normalize( aa->aa_desc, usage, &value, &nvalue, text ); - ch_free( value.bv_val ); + rc = value_validate_normalize( aa->aa_desc, usage, + &value, &aa->aa_value, text ); if( rc != LDAP_SUCCESS ) { - ch_free( type.bv_val ); - ad_free( aa->aa_desc, 1 ); ch_free( aa ); return rc; } - aa->aa_value = nvalue; *ava = aa; return LDAP_SUCCESS; } - -#else - -void -ava_free( - Ava *ava, - int freeit -) -{ - ch_free( (char *) ava->ava_type ); - ch_free( (char *) ava->ava_value.bv_val ); - if ( freeit ) { - ch_free( (char *) ava ); - } -} - -int -get_ava( - BerElement *ber, - Ava *ava, - char **text -) -{ - if ( ber_scanf( ber, "{ao}", &ava->ava_type, &ava->ava_value ) - == LBER_ERROR ) { - Debug( LDAP_DEBUG_ANY, " get_ava ber_scanf\n", 0, 0, 0 ); - *text = "Error decoding attribute value assertion"; - return SLAPD_DISCONNECT; - } - - attr_normalize( ava->ava_type ); - value_normalize( ava->ava_value.bv_val, attr_syntax( ava->ava_type ) ); - - return LDAP_SUCCESS; -} - -#endif