]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_check.c
Fix lint in previous commit
[openldap] / servers / slapd / schema_check.c
index 0b6b1ad09ef7d3713cde108227a7143b2a24f7a2..81ef6562768f0157973fca2400ec4a7d1abd48b1 100644 (file)
@@ -46,12 +46,20 @@ entry_schema_check(
 
        *text = textbuf;
 
-       /* check single-valued attrs for multiple values */
+       /* misc attribute checks */
        for ( a = e->e_attrs; a != NULL; a = a->a_next ) {
                /* there should be at least one value */
                assert( a->a_vals );
                assert( a->a_vals[0].bv_val != NULL ); 
 
+               if( a->a_desc->ad_type->sat_check ) {
+                       int rc = (a->a_desc->ad_type->sat_check)(
+                               e, a, text, textbuf, textlen );
+                       if( rc != LDAP_SUCCESS ) {
+                               return rc;
+                       }
+               }
+
                /* if single value type, check for multiple values */
                if( is_at_single_value( a->a_desc->ad_type ) &&
                        a->a_vals[1].bv_val != NULL )
@@ -196,8 +204,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)( 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 ))