]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_check.c
More system schema checks
[openldap] / servers / slapd / schema_check.c
index da711a9ec8b684f7034102134ce6b86d1e9c260e..dc5842c187d05908bc58a6207effa31193479746 100644 (file)
@@ -30,7 +30,9 @@ static char * oc_check_required(
 
 int
 entry_schema_check( 
-       Entry *e, Attribute *oldattrs,
+       Backend *be,
+       Entry *e,
+       Attribute *oldattrs,
        const char** text,
        char *textbuf, size_t textlen )
 {
@@ -54,7 +56,7 @@ entry_schema_check(
 
                if( a->a_desc->ad_type->sat_check ) {
                        int rc = (a->a_desc->ad_type->sat_check)(
-                               e, a, text, textbuf, textlen );
+                               be, e, a, text, textbuf, textlen );
                        if( rc != LDAP_SUCCESS ) {
                                return rc;
                        }
@@ -204,8 +206,16 @@ entry_schema_check(
 #endif
 
                        return LDAP_OBJECT_CLASS_VIOLATION;
+               }
 
-               } else if ( oc->soc_kind == LDAP_SCHEMA_ABSTRACT ) {
+               if ( oc->sco_check ) {
+                       int rc = (oc->sco_check)( be, e, oc,
+                               text, textbuf, textlen );
+                       if( rc != LDAP_SUCCESS ) {
+                               return rc;
+                       }
+               }
+               if ( oc->soc_kind == LDAP_SCHEMA_ABSTRACT ) {
                        /* object class is abstract */
                        if ( oc != slap_schema.si_oc_top &&
                                !is_object_subclass( oc, sc ))