mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-04 06:01:23 -05:00
The result set of an EQUALITY search on a SYNTAX_BIN attribute may have been
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>
This commit is contained in:
parent
c65938abe0
commit
9df2f4f424
2 changed files with 2 additions and 50 deletions
|
|
@ -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 ));
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue