Add logic to properly (per X.500 recommendations) handle attribute

types without equality matching rules.
This commit is contained in:
Kurt Zeilenga 2000-06-15 22:06:45 +00:00
parent 178dc1b708
commit 90e4c08751

View File

@ -271,15 +271,16 @@ add_values(
/* char *desc = mod->sm_desc->ad_cname->bv_val; */
MatchingRule *mr = mod->sm_desc->ad_type->sat_equality;
if( mr == NULL ) {
return LDAP_INAPPROPRIATE_MATCHING;
}
a = attr_find( e->e_attrs, mod->sm_desc );
/* check if the values we're adding already exist */
if ( a != NULL ) {
/* do allow add of additional attribute if
no equality rule exists */
if( mr == NULL ) {
return LDAP_INAPPROPRIATE_MATCHING;
}
for ( i = 0; mod->sm_bvalues[i] != NULL; i++ ) {
int rc;
int j;
@ -330,10 +331,6 @@ delete_values(
char *desc = mod->sm_desc->ad_cname->bv_val;
MatchingRule *mr = mod->sm_desc->ad_type->sat_equality;
if( mr == NULL || !mr->smr_match ) {
return LDAP_INAPPROPRIATE_MATCHING;
}
/* delete the entire attribute */
if ( mod->sm_bvalues == NULL ) {
Debug( LDAP_DEBUG_ARGS, "removing entire attribute %s\n",
@ -342,6 +339,12 @@ delete_values(
LDAP_NO_SUCH_ATTRIBUTE : LDAP_SUCCESS );
}
/* disallow specific attributes from being deleted if
no equality rule */
if( mr == NULL || !mr->smr_match ) {
return LDAP_INAPPROPRIATE_MATCHING;
}
/* delete specific values - find the attribute first */
if ( (a = attr_find( e->e_attrs, mod->sm_desc )) == NULL ) {
Debug( LDAP_DEBUG_ARGS, "ldap_modify_delete: "