From 10730ca226e8ddd0d69b2bc2da6818298cc8528e Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 22 Jan 2001 08:09:25 +0000 Subject: [PATCH] Add objectClass kind checking Kludge NADF schema to conform --- servers/slapd/oc.c | 20 +++++++++++++++++--- servers/slapd/schema/nadf.schema | 4 ++-- servers/slapd/schemaparse.c | 2 ++ servers/slapd/slap.h | 22 ++++++++++++---------- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/servers/slapd/oc.c b/servers/slapd/oc.c index 158202541e..5ecb0e73e5 100644 --- a/servers/slapd/oc.c +++ b/servers/slapd/oc.c @@ -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 ); diff --git a/servers/slapd/schema/nadf.schema b/servers/slapd/schema/nadf.schema index a5b8f20689..a93c29d5f2 100644 --- a/servers/slapd/schema/nadf.schema +++ b/servers/slapd/schema/nadf.schema @@ -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 ) ) diff --git a/servers/slapd/schemaparse.c b/servers/slapd/schemaparse.c index 7009c265a9..37b4b48842 100644 --- a/servers/slapd/schemaparse.c +++ b/servers/slapd/schemaparse.c @@ -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", diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index c5522666ed..8cbd32e3a1 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -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; -- 2.39.5