]> git.sur5r.net Git - openldap/commitdiff
Add logic to properly (per X.500 recommendations) handle attribute
authorKurt Zeilenga <kurt@openldap.org>
Thu, 15 Jun 2000 22:06:45 +0000 (22:06 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 15 Jun 2000 22:06:45 +0000 (22:06 +0000)
types without equality matching rules.

servers/slapd/back-ldbm/modify.c

index 7791816a6daa5a4a2bb797e50605c30511327325..86a1bbd41d162dfab88d7353853389c311d40007 100644 (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: "