]> git.sur5r.net Git - openldap/commitdiff
validate object class before checking required and allowed
authorGary Williams <gwilliams@openldap.org>
Mon, 30 Aug 1999 14:19:53 +0000 (14:19 +0000)
committerGary Williams <gwilliams@openldap.org>
Mon, 30 Aug 1999 14:19:53 +0000 (14:19 +0000)
servers/slapd/schema.c

index e347a5d6937497ac3c224bd2fbc3c64ab7b8178f..51002f91f4a61e57ab5fe94473a780e884a904d1 100644 (file)
@@ -28,9 +28,11 @@ int
 oc_schema_check( Entry *e )
 {
        Attribute       *a, *aoc;
+       ObjectClass *oc;
        int             i;
        int             ret = 0;
 
+
        /* find the object class attribute - could error out here */
        if ( (aoc = attr_find( e->e_attrs, "objectclass" )) == NULL ) {
                Debug( LDAP_DEBUG_ANY, "No object class for entry (%s)\n",
@@ -40,14 +42,23 @@ oc_schema_check( Entry *e )
 
        /* check that the entry has required attrs for each oc */
        for ( i = 0; aoc->a_vals[i] != NULL; i++ ) {
-               char *s = oc_check_required( e, aoc->a_vals[i]->bv_val );
-
-               if (s != NULL) {
+               if ( (oc = oc_find( aoc->a_vals[i]->bv_val )) == NULL ) {
                        Debug( LDAP_DEBUG_ANY,
-                           "Entry (%s), oc \"%s\" requires attr \"%s\"\n",
-                           e->e_dn, aoc->a_vals[i]->bv_val, s );
+                               "Objectclass \"%s\" not defined",
+                               aoc->a_vals[i]->bv_val, 0, 0 );
                        ret = 1;
                }
+               else
+               {
+                       char *s = oc_check_required( e, aoc->a_vals[i]->bv_val );
+
+                       if (s != NULL) {
+                               Debug( LDAP_DEBUG_ANY,
+                                       "Entry (%s), oc \"%s\" requires attr \"%s\"\n",
+                                       e->e_dn, aoc->a_vals[i]->bv_val, s );
+                               ret = 1;
+                       }
+               }
        }
 
        if ( ret != 0 ) {