Skip to content
Snippets Groups Projects
Commit 10730ca2 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Add objectClass kind checking

Kludge NADF schema to conform
parent ec87e9e3
Branches
Tags
No related merge requests found
......@@ -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 );
......
......@@ -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 ) )
......
......@@ -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",
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment