mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 16:49:39 -05:00
Add normalize_validate_normalize() to be use instead of value_normalize()
where value has not yet been validated.
This commit is contained in:
parent
c0fdb1aaca
commit
a71cd15182
2 changed files with 91 additions and 0 deletions
|
|
@ -952,6 +952,12 @@ LDAP_SLAPD_F (int) value_normalize LDAP_P((
|
|||
struct berval *in,
|
||||
struct berval *out,
|
||||
const char ** text ));
|
||||
LDAP_SLAPD_F (int) value_validate_normalize LDAP_P((
|
||||
AttributeDescription *ad,
|
||||
unsigned usage,
|
||||
struct berval *in,
|
||||
struct berval *out,
|
||||
const char ** text ));
|
||||
LDAP_SLAPD_F (int) value_match LDAP_P((
|
||||
int *match,
|
||||
AttributeDescription *ad,
|
||||
|
|
|
|||
|
|
@ -154,6 +154,91 @@ value_normalize(
|
|||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
||||
int
|
||||
value_validate_normalize(
|
||||
AttributeDescription *ad,
|
||||
unsigned usage,
|
||||
struct berval *in,
|
||||
struct berval *out,
|
||||
const char **text )
|
||||
{
|
||||
int rc;
|
||||
MatchingRule *mr;
|
||||
|
||||
switch( usage & SLAP_MR_TYPE_MASK ) {
|
||||
case SLAP_MR_NONE:
|
||||
case SLAP_MR_EQUALITY:
|
||||
mr = ad->ad_type->sat_equality;
|
||||
break;
|
||||
case SLAP_MR_ORDERING:
|
||||
mr = ad->ad_type->sat_ordering;
|
||||
break;
|
||||
case SLAP_MR_SUBSTR:
|
||||
mr = ad->ad_type->sat_substr;
|
||||
break;
|
||||
case SLAP_MR_EXT:
|
||||
default:
|
||||
assert( 0 );
|
||||
*text = "internal error";
|
||||
return LDAP_OTHER;
|
||||
}
|
||||
|
||||
if( mr == NULL ) {
|
||||
*text = "inappropriate matching request";
|
||||
return LDAP_INAPPROPRIATE_MATCHING;
|
||||
}
|
||||
|
||||
if( mr->smr_syntax == NULL ) {
|
||||
*text = "no assertion syntax";
|
||||
return LDAP_INVALID_SYNTAX;
|
||||
}
|
||||
|
||||
if( ! mr->smr_syntax->ssyn_validate ) {
|
||||
*text = "no syntax validator";
|
||||
return LDAP_INVALID_SYNTAX;
|
||||
}
|
||||
|
||||
rc = (mr->smr_syntax->ssyn_validate)( mr->smr_syntax, in );
|
||||
|
||||
if( rc != LDAP_SUCCESS ) {
|
||||
*text = "value is invalid";
|
||||
return LDAP_INVALID_SYNTAX;
|
||||
}
|
||||
|
||||
/* we only support equality matching of binary attributes */
|
||||
/* This is suspect, flexible certificate matching will hit this */
|
||||
if( slap_ad_is_binary( ad ) && usage != SLAP_MR_EQUALITY ) {
|
||||
*text = "inappropriate binary matching";
|
||||
return LDAP_INAPPROPRIATE_MATCHING;
|
||||
}
|
||||
|
||||
if( mr->smr_normalize ) {
|
||||
rc = (mr->smr_normalize)( usage,
|
||||
ad->ad_type->sat_syntax,
|
||||
mr, in, out );
|
||||
|
||||
if( rc != LDAP_SUCCESS ) {
|
||||
*text = "unable to normalize value";
|
||||
return LDAP_INVALID_SYNTAX;
|
||||
}
|
||||
|
||||
} else if ( mr->smr_syntax->ssyn_normalize ) {
|
||||
rc = (mr->smr_syntax->ssyn_normalize)(
|
||||
ad->ad_type->sat_syntax,
|
||||
in, out );
|
||||
|
||||
if( rc != LDAP_SUCCESS ) {
|
||||
*text = "unable to normalize value";
|
||||
return LDAP_INVALID_SYNTAX;
|
||||
}
|
||||
|
||||
} else {
|
||||
ber_dupbv( out, in );
|
||||
}
|
||||
|
||||
return LDAP_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
value_match(
|
||||
|
|
|
|||
Loading…
Reference in a new issue