]> git.sur5r.net Git - openldap/commitdiff
Fix IA5 indexer
authorKurt Zeilenga <kurt@openldap.org>
Wed, 10 Jul 2002 03:37:00 +0000 (03:37 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 10 Jul 2002 03:37:00 +0000 (03:37 +0000)
servers/slapd/proto-slap.h
servers/slapd/schema_init.c

index 98aab651f7b26ad8f3a933c2cd9b47b5cce6ce0b..3e75823e0d78d97a1c7cde13915ba00da26370ce 100644 (file)
@@ -539,6 +539,7 @@ LDAP_SLAPD_F( int ) slap_mods_check(
        char *textbuf, size_t textlen );
 
 LDAP_SLAPD_F( int ) slap_mods_opattrs(
+       Backend *be,
        Operation *op,
        Modifications *mods,
        Modifications **modlist,
index f37cbf19ce1681609367b90f9ab616738ea42322..f0ad77cb51a3daab777728a7a8a8e0c6735e00a0 100644 (file)
@@ -2797,6 +2797,7 @@ static int caseIgnoreIA5Indexer(
        BerVarray *keysp )
 {
        int i;
+       int rc = LDAP_SUCCESS;
        size_t slen, mlen;
        BerVarray keys;
        HASH_CONTEXT   HASHcontext;
@@ -2819,7 +2820,21 @@ static int caseIgnoreIA5Indexer(
 
        for( i=0; values[i].bv_val != NULL; i++ ) {
                struct berval value;
-               ber_dupbv( &value, &values[i] );
+
+               if( mr->smr_normalize ) {
+                       rc = (mr->smr_normalize)( use, syntax, mr, &values[i], &value );
+                       if( rc != LDAP_SUCCESS ) {
+                               break;
+                       }
+               } else if ( mr->smr_syntax->ssyn_normalize ) {
+                       rc = (mr->smr_syntax->ssyn_normalize)( syntax, &values[i], &value );
+                       if( rc != LDAP_SUCCESS ) {
+                               break;
+                       }
+               } else {
+                       ber_dupbv( &value, &values[i] );
+               }
+
                ldap_pvt_str2lower( value.bv_val );
 
                HASH_Init( &HASHcontext );
@@ -2841,8 +2856,12 @@ static int caseIgnoreIA5Indexer(
        }
 
        keys[i].bv_val = NULL;
+       if( rc != LDAP_SUCCESS ) {
+               ber_bvarray_free( keys );
+               keys = NULL;
+       }
        *keysp = keys;
-       return LDAP_SUCCESS;
+       return rc;
 }
 
 /* Index generation function */