X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fava.c;h=da6a2e3355ae37a296b8e9b24387ad04d394e690;hb=0f30fb0d8f0adbbb7b41fd455c57aa56d64c9853;hp=8b42b7eb6d999356f25bbedd55b4248f8d1f8247;hpb=59aba7711b70848c693e1fe46deeb5fc50b982df;p=openldap diff --git a/servers/slapd/ava.c b/servers/slapd/ava.c index 8b42b7eb6d..da6a2e3355 100644 --- a/servers/slapd/ava.c +++ b/servers/slapd/ava.c @@ -14,7 +14,6 @@ #include "slap.h" -#ifdef SLAPD_SCHEMA_NOT_COMPAT void ava_free( @@ -22,7 +21,6 @@ ava_free( int freeit ) { - ad_free( ava->aa_desc, 1 ); ber_bvfree( ava->aa_value ); if ( freeit ) { ch_free( (char *) ava ); @@ -32,68 +30,52 @@ ava_free( int get_ava( BerElement *ber, - AttributeAssertion **ava + AttributeAssertion **ava, + unsigned usage, + const char **text ) { int rc; - char *text; - struct berval type, *value; + struct berval type, value, *nvalue; AttributeAssertion *aa; - rc = ber_scanf( ber, "{oO}", &type, &value ); + rc = ber_scanf( ber, "{oo}", &type, &value ); if( rc == LBER_ERROR ) { +#ifdef NEW_LOGGING + LDAP_LOG(( "filter", LDAP_LEVEL_ERR, + "get_ava: ber_scanf failure\n" )); +#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 = NULL; - rc = slap_bv2ad( &type, &aa->aa_desc, &text ); + rc = slap_bv2ad( &type, &aa->aa_desc, text ); + ch_free( type.bv_val ); if( rc != LDAP_SUCCESS ) { - ch_free( type.bv_val ); - ber_bvfree( value ); + ch_free( value.bv_val ); ch_free( aa ); return rc; } - aa->aa_value = value; - - 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 ); - } -} + rc = value_normalize( aa->aa_desc, usage, &value, &nvalue, text ); + ch_free( value.bv_val ); -int -get_ava( - BerElement *ber, - Ava *ava -) -{ - 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 ); - return SLAPD_DISCONNECT; + if( rc != LDAP_SUCCESS ) { + ch_free( aa ); + return rc; } - attr_normalize( ava->ava_type ); - value_normalize( ava->ava_value.bv_val, attr_syntax( ava->ava_type ) ); + aa->aa_value = nvalue; + *ava = aa; return LDAP_SUCCESS; } -#endif