]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/mods.c
fix previous commit
[openldap] / servers / slapd / mods.c
index 956ccfb78f3ddb1a1333443c8d8b21f8fc78633c..3ba189856a14dfc7a104208bc335f08b3b6581b3 100644 (file)
@@ -143,7 +143,7 @@ modify_add_values(
        }
 
        /* no - add them */
-       if ( mod->sm_desc->ad_type->sat_flags & SLAP_AT_ORDERED ) {
+       if ( mod->sm_desc->ad_type->sat_flags & SLAP_AT_ORDERED_VAL ) {
                rc = ordered_value_add( e, mod->sm_desc, a,
                        pmod.sm_values, pmod.sm_nvalues );
        } else {
@@ -169,11 +169,23 @@ modify_add_values(
 
 int
 modify_delete_values(
+       Entry   *e,
+       Modification    *m,
+       int     perm,
+       const char      **text,
+       char *textbuf, size_t textlen )
+{
+       return modify_delete_vindex( e, m, perm, text, textbuf, textlen, NULL );
+}
+
+int
+modify_delete_vindex(
        Entry   *e,
        Modification    *mod,
        int     permissive,
        const char      **text,
-       char *textbuf, size_t textlen )
+       char *textbuf, size_t textlen,
+       int *idx )
 {
        int             i, j, k, rc = LDAP_SUCCESS;
        Attribute       *a;
@@ -262,6 +274,9 @@ modify_delete_values(
 
                        found = 1;
 
+                       if ( idx )
+                               idx[i] = j;
+
                        /* delete value and mark it as dummy */
                        free( a->a_vals[j].bv_val );
                        a->a_vals[j].bv_val = &dummy;
@@ -318,7 +333,7 @@ modify_delete_values(
                                mod->sm_desc->ad_cname.bv_val );
                        rc = LDAP_NO_SUCH_ATTRIBUTE;
                }
-       } else if ( a->a_desc->ad_type->sat_flags & SLAP_AT_ORDERED ) {
+       } else if ( a->a_desc->ad_type->sat_flags & SLAP_AT_ORDERED_VAL ) {
        /* For an ordered attribute, renumber the value indices */
                ordered_value_sort( a, 1 );
        }