]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/ava.c
Use "uri" directive (instead of "server") to specify server. Add "bin
[openldap] / servers / slapd / ava.c
index 6b11ba04a8ff7805f3fa784568e8489d11068e11..5b9bcaf295fcda6e607b1923eeb78f068fa19bbb 100644 (file)
@@ -33,14 +33,15 @@ int
 get_ava(
     BerElement *ber,
     AttributeAssertion **ava,
-       char **text
+       unsigned usage,
+       const char **text
 )
 {
        int rc;
-       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 ) {
                Debug( LDAP_DEBUG_ANY, "  get_ava ber_scanf\n", 0, 0, 0 );
@@ -50,17 +51,28 @@ get_ava(
 
        aa = ch_malloc( sizeof( AttributeAssertion ) );
        aa->aa_desc = NULL;
+       aa->aa_value = NULL;
 
        rc = slap_bv2ad( &type, &aa->aa_desc, text );
 
        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;
+       rc = value_normalize( aa->aa_desc, usage, &value, &nvalue, text );
+       ch_free( value.bv_val );
+
+       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;
@@ -85,7 +97,7 @@ int
 get_ava(
     BerElement *ber,
     Ava                *ava,
-       char **text
+       const char **text
 )
 {
        if ( ber_scanf( ber, "{ao}", &ava->ava_type, &ava->ava_value )