X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fconstraint.c;h=4e8b13dd6cd93a6539defe8816eecf6e4a9a2914;hb=f12a84a70e5497367ef65ff48299dc77ea238b90;hp=f2c645c609c04f4fc6c6040ca47b65ae2517da4d;hpb=2e4580beaa358299ecb6bc8b920e40dfc373e969;p=openldap diff --git a/servers/slapd/overlays/constraint.c b/servers/slapd/overlays/constraint.c index f2c645c609..4e8b13dd6c 100644 --- a/servers/slapd/overlays/constraint.c +++ b/servers/slapd/overlays/constraint.c @@ -855,6 +855,7 @@ constraint_check_count_violation( Modifications *m, Entry *target_entry, constra ca = m->sml_numvals; switch ( m->sml_op ) { case LDAP_MOD_DELETE: + case SLAP_MOD_SOFTDEL: if ( !ca || ca > ce ) { ce = 0; } else { @@ -865,6 +866,7 @@ constraint_check_count_violation( Modifications *m, Entry *target_entry, constra break; case LDAP_MOD_ADD: + case SLAP_MOD_SOFTADD: ce += ca; break; @@ -872,6 +874,11 @@ constraint_check_count_violation( Modifications *m, Entry *target_entry, constra ce = ca; break; +#if 0 + /* TODO */ + case handle SLAP_MOD_ADD_IF_NOT_PRESENT: +#endif + default: /* impossible! assert? */ return 1; @@ -933,6 +940,10 @@ constraint_update( Operation *op, SlapReply *rs ) rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &target_entry ); op->o_bd = be; + /* let the backend send the error */ + if ( target_entry == NULL ) + return SLAP_CB_CONTINUE; + /* Do we need to count attributes? */ for(cp = c; cp; cp = cp->ap_next) { if (cp->count != 0) {