]> git.sur5r.net Git - openldap/commitdiff
The result set of an EQUALITY search on a SYNTAX_BIN attribute may have been
authorKurt Zeilenga <kurt@openldap.org>
Mon, 14 Dec 1998 04:25:55 +0000 (04:25 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 14 Dec 1998 04:25:55 +0000 (04:25 +0000)
incorrect because value_cmp() in value.c compares two attributes by
comparing the leading bytes of the two values (candidate and filter) up to
the smaller of the two lengths of the binary values. If the lengths of two
SYNTAX_BIN values differ, like SYNTAX_CES and SYNTAX_CIS, the EQUALITY
comparison should fail.

It also appears that value_ncmp() in value.c has no references anywhere in
the openLDAP source tree, save for a definition in proto-slap.h. The
following fix the bug and remove the dead code:

From: "MCGARRAHAN, KENNETH L" <km4155@momail.sbc.com>

servers/slapd/proto-slap.h
servers/slapd/value.c

index 412174f6bf5716d97f87da0ecff8e31b4821790d..87a570fb6dffe5aaa55b5bb9ff61dfe65a894641 100644 (file)
@@ -208,8 +208,6 @@ int value_add LDAP_P(( struct berval ***vals, struct berval **addvals ));
 void value_normalize LDAP_P(( char *s, int syntax ));
 int value_cmp LDAP_P(( struct berval *v1, struct berval *v2, int syntax,
        int normalize ));
-int value_ncmp LDAP_P(( struct berval *v1, struct berval *v2, int syntax, int len,
-       int normalize ));
 int value_find LDAP_P(( struct berval **vals, struct berval *v, int syntax,
        int normalize ));
 
index f5ee5f47772798de588772427fce2c35da80247a..bb6b7e620b62c13648992eaa592e1af27dd349cc 100644 (file)
@@ -103,8 +103,6 @@ value_normalize(
        *d = '\0';
 }
 
-#define LDAP_MIN( a, b )       ((a) < (b) ? (a) : (b) )
-
 int
 value_cmp(
     struct berval      *v1,
@@ -137,8 +135,8 @@ value_cmp(
                break;
 
        case SYNTAX_BIN:
-               rc = memcmp( v1->bv_val, v2->bv_val, LDAP_MIN( v1->bv_len,
-                   v2->bv_len ) );
+               rc = ( v1->bv_len == v2->bv_len ) ? memcmp( v1->bv_val, 
+                   v2->bv_val, v1->bv_len ) : v1->bv_len - v2->bv_len ;
                break;
        }
 
@@ -152,50 +150,6 @@ value_cmp(
        return( rc );
 }
 
-int
-value_ncmp(
-    struct berval      *v1,
-    struct berval      *v2,
-    int                        syntax,
-    int                        len,
-    int                        normalize
-)
-{
-       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):
-               rc = strncasecmp( v1->bv_val, v2->bv_val, len );
-               break;
-
-       case SYNTAX_CES:
-               rc = strncmp( v1->bv_val, v2->bv_val, len );
-               break;
-
-       case SYNTAX_BIN:
-               rc = memcmp( v1->bv_val, v2->bv_val, len );
-       }
-
-       if ( normalize & 1 ) {
-               ber_bvfree( v1 );
-       }
-       if ( normalize & 2 ) {
-               ber_bvfree( v2 );
-       }
-
-       return( rc );
-}
-
 int
 value_find(
     struct berval      **vals,