]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/acl.c
add support for ADD_IF_NOT_PRESENT and SOFTDEL internal modification types (ITS#6561)
[openldap] / servers / slapd / acl.c
index a1d52492b667eb9d637da0b55152b1b81bf0d5f0..476b9e667b1cc7d99c24a030c7cad196a8415883 100644 (file)
@@ -1985,8 +1985,15 @@ acl_check_modlist(
                        /* fall thru to check value to add */
 
                case LDAP_MOD_ADD:
+               case SLAP_MOD_ADD_IF_NOT_PRESENT:
                        assert( mlist->sml_values != NULL );
 
+                       if ( mlist->sml_op == SLAP_MOD_ADD_IF_NOT_PRESENT
+                               && attr_find( e->e_attrs, mlist->sml_desc ) )
+                       {
+                               break;
+                       }
+
                        for ( bv = mlist->sml_nvalues
                                        ? mlist->sml_nvalues : mlist->sml_values;
                                bv->bv_val != NULL; bv++ )
@@ -2003,6 +2010,7 @@ acl_check_modlist(
                        break;
 
                case LDAP_MOD_DELETE:
+               case SLAP_MOD_SOFTDEL:
                        if ( mlist->sml_values == NULL ) {
                                if ( ! access_allowed( op, e,
                                        mlist->sml_desc, NULL,