]> git.sur5r.net Git - openldap/commitdiff
Add objectClass kind checking
authorKurt Zeilenga <kurt@openldap.org>
Mon, 22 Jan 2001 08:09:25 +0000 (08:09 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 22 Jan 2001 08:09:25 +0000 (08:09 +0000)
Kludge NADF schema to conform

servers/slapd/oc.c
servers/slapd/schema/nadf.schema
servers/slapd/schemaparse.c
servers/slapd/slap.h

index 158202541e68757c2d250283c8b5ac9a3e40c9d1..5ecb0e73e534c1828a15553124ed93dc37b4e67a 100644 (file)
@@ -221,23 +221,23 @@ oc_add_sups(
        int             code;
        ObjectClass     *soc1;
        int             nsups;
-       char            **sups1;
+       char    **sups1;
        int             add_sups = 0;
 
        if ( sups ) {
                if ( !soc->soc_sups ) {
                        /* We are at the first recursive level */
                        add_sups = 1;
-                       nsups = 0;
+                       nsups = 1;
                        sups1 = sups;
                        while ( *sups1 ) {
                                nsups++;
                                sups1++;
                        }
-                       nsups++;
                        soc->soc_sups = (ObjectClass **)ch_calloc(nsups,
                                          sizeof(ObjectClass *));
                }
+
                nsups = 0;
                sups1 = sups;
                while ( *sups1 ) {
@@ -247,6 +247,18 @@ oc_add_sups(
                                return SLAP_SCHERR_CLASS_NOT_FOUND;
                        }
 
+                       /* check object class usage
+                        * abstract classes can only sup abstract classes 
+                        * structural classes can not sup auxiliary classes
+                        * auxiliary classes can not sup structural classes
+                        */
+                       if( soc->soc_kind != soc1->soc_kind
+                               && soc1->soc_kind != LDAP_SCHEMA_ABSTRACT )
+                       {
+                               *err = *sups1;
+                               return SLAP_SCHERR_CLASS_BAD_USAGE;
+                       }
+
                        if ( add_sups )
                                soc->soc_sups[nsups] = soc1;
 
@@ -263,6 +275,7 @@ oc_add_sups(
                        sups1++;
                }
        }
+
        return 0;
 }
 
@@ -356,6 +369,7 @@ oc_add(
        } else {
                code = oc_add_sups( soc, soc->soc_sup_oids, err );
        }
+
        if ( code != 0 ) return code;
 
        code = oc_create_required( soc, soc->soc_at_oids_must, err );
index a5b8f20689463d1347e3c05087d8293f5c8b8acf..a93c29d5f25cdc0189559bc5a8fc70d165f4e4ca 100644 (file)
@@ -93,12 +93,12 @@ attributetype ( 2.6.6.5.2.4.16 NAME 'multiMediaInformation'
 # Object classes
 
 # According to the intended use described in section 3.3.1 in the spec,
-# this can only be AUXILIARY.
+# this can only be ABSTRACT.
 # We had lastModifiedTime as 'allows', but sd-04 has it as MUST.
 # We did not have multiMediaInformation neither on this class nor
 # on any of its derived classes.
 
-objectclass ( 2.6.6.5.2.6.7 NAME 'nadfObject' SUP top AUXILIARY
+objectclass ( 2.6.6.5.2.6.7 NAME 'nadfObject' SUP top ABSTRACT
        MUST lastModifiedTime
        MAY ( multiMediaInformation $ nadfSearchGuide $
        supplementaryInformation ) )
index 7009c265a91a443629ec3999170262ba9eff4940..37b4b488429fc5c260028520fd50b86b05924572 100644 (file)
@@ -25,7 +25,9 @@ static char *const err2text[] = {
        "Success",
        "Out of memory",
        "ObjectClass not found",
+       "ObjectClass inappropriate SUPerior",
        "AttributeType not found",
+       "AttributeType inappropriate USAGE",
        "Duplicate objectClass",
        "Duplicate attributeType",
        "Duplicate ldapSyntax",
index c5522666ed188bd52da05a157db0a8abaaa3d10a..8cbd32e3a1a6767e30d4d00d735aaab7b8977200 100644 (file)
@@ -202,16 +202,18 @@ typedef struct slap_ssf_set {
  */
 #define SLAP_SCHERR_OUTOFMEM           1
 #define SLAP_SCHERR_CLASS_NOT_FOUND    2
-#define SLAP_SCHERR_ATTR_NOT_FOUND     3
-#define SLAP_SCHERR_DUP_CLASS          4
-#define SLAP_SCHERR_DUP_ATTR           5
-#define SLAP_SCHERR_DUP_SYNTAX         6
-#define SLAP_SCHERR_DUP_RULE           7
-#define SLAP_SCHERR_NO_NAME            8
-#define SLAP_SCHERR_ATTR_INCOMPLETE    9
-#define SLAP_SCHERR_MR_NOT_FOUND       10
-#define SLAP_SCHERR_SYN_NOT_FOUND      11
-#define SLAP_SCHERR_MR_INCOMPLETE      12
+#define SLAP_SCHERR_CLASS_BAD_USAGE    3
+#define SLAP_SCHERR_ATTR_NOT_FOUND     4
+#define SLAP_SCHERR_ATTR_BAD_USAGE     5
+#define SLAP_SCHERR_DUP_CLASS          6
+#define SLAP_SCHERR_DUP_ATTR           7
+#define SLAP_SCHERR_DUP_SYNTAX         8
+#define SLAP_SCHERR_DUP_RULE           9
+#define SLAP_SCHERR_NO_NAME            10
+#define SLAP_SCHERR_ATTR_INCOMPLETE    11
+#define SLAP_SCHERR_MR_NOT_FOUND       12
+#define SLAP_SCHERR_SYN_NOT_FOUND      13
+#define SLAP_SCHERR_MR_INCOMPLETE      14
 
 typedef struct slap_oid_macro {
        struct berval som_oid;