mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
Add objectClass kind checking
Kludge NADF schema to conform
This commit is contained in:
parent
ec87e9e30f
commit
10730ca226
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user