]> git.sur5r.net Git - openldap/commitdiff
Adapt to use matching rules.
authorJulio Sánchez Fernández <jsanchez@openldap.org>
Fri, 9 Jul 1999 13:29:26 +0000 (13:29 +0000)
committerJulio Sánchez Fernández <jsanchez@openldap.org>
Fri, 9 Jul 1999 13:29:26 +0000 (13:29 +0000)
servers/slapd/value.c

index ccabdf06a42ae84c2e6250a0591da93e163f6d84..6a60cf19d8e3ebae700d885b7bce14378f7d81eb 100644 (file)
@@ -78,73 +78,31 @@ value_add(
 
 void
 value_normalize(
-    char       *s,
-    int                syntax
+    struct berval      *val,
+    struct berval      **nval,
+    MatchingRule       *mr
 )
 {
-       char    *d, *save;
-
-       if ( ! (syntax & SYNTAX_CIS) ) {
-               return;
-       }
-
-       if ( syntax & SYNTAX_DN ) {
-               (void) dn_normalize_case( s );
-               return;
-       }
-
-       save = s;
-       for ( d = s; *s; s++ ) {
-               if ( (syntax & SYNTAX_TEL) && (*s == ' ' || *s == '-') ) {
-                       continue;
-               }
-               *d++ = TOUPPER( (unsigned char) *s );
+       if ( mr && mr->smr_normalize ) {
+               mr->smr_normalize( val, nval );
+       } else {
+               *nval = ber_bvdup( val );
        }
-       *d = '\0';
 }
 
 int
 value_cmp(
     struct berval      *v1,
     struct berval      *v2,
-    int                        syntax,
-    int                        normalize       /* 1 => arg 1; 2 => arg 2; 3 => both */
+    MatchingRule       *mr
 )
 {
        int             rc;
 
-       if ( normalize & 1 ) {
-               v1 = ber_bvdup( v1 );
-               value_normalize( v1->bv_val, syntax );
-       }
-       if ( normalize & 2 ) {
-               v2 = ber_bvdup( v2 );
-               value_normalize( v2->bv_val, syntax );
-       }
-
-       switch ( syntax ) {
-       case SYNTAX_CIS:
-       case (SYNTAX_CIS | SYNTAX_TEL):
-       case (SYNTAX_CIS | SYNTAX_DN):
-               rc = strcasecmp( v1->bv_val, v2->bv_val );
-               break;
-
-       case SYNTAX_CES:
-               rc = strcmp( v1->bv_val, v2->bv_val );
-               break;
-
-       case SYNTAX_BIN:
-               rc = (v1->bv_len == v2->bv_len
-                     ? memcmp( v1->bv_val, v2->bv_val, v1->bv_len )
-                     : v1->bv_len > v2->bv_len ? 1 : -1);
-               break;
-       }
-
-       if ( normalize & 1 ) {
-               ber_bvfree( v1 );
-       }
-       if ( normalize & 2 ) {
-               ber_bvfree( v2 );
+       if ( mr && mr->smr_compare ) {
+               rc = mr_smr_compare( v1, v2 );
+       } else {
+               rc = 0;
        }
 
        return( rc );
@@ -154,14 +112,13 @@ int
 value_find(
     struct berval      **vals,
     struct berval      *v,
-    int                        syntax,
-    int                        normalize
+    MatchingRule       *mr
 )
 {
        int     i;
 
        for ( i = 0; vals[i] != NULL; i++ ) {
-               if ( value_cmp( vals[i], v, syntax, normalize ) == 0 ) {
+               if ( value_cmp( vals[i], v, mr ) == 0 ) {
                        return( 0 );
                }
        }