"entry_check_schema(%s): %s\n",
e->e_dn, textbuf, 0 );
- return LDAP_OBJECT_CLASS_VIOLATION;
+ rc = LDAP_OBJECT_CLASS_VIOLATION;
+ goto done;
}
if( sc->soc_kind != LDAP_SCHEMA_STRUCTURAL ) {
"entry_check_schema(%s): %s\n",
e->e_dn, textbuf, 0 );
- return LDAP_OTHER;
+ rc = LDAP_OTHER;
+ goto done;
}
got_soc:
"entry_check_schema(%s): %s\n",
e->e_dn, textbuf, 0 );
- return LDAP_OBJECT_CLASS_VIOLATION;
+ rc = LDAP_OBJECT_CLASS_VIOLATION;
+ goto done;
}
*text = textbuf;
"unrecognized objectClass '%s'",
aoc->a_vals[0].bv_val );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
} else if ( sc != slap_schema.si_oc_glue && sc != oc ) {
snprintf( textbuf, textlen,
"from '%s' to '%s' not allowed",
asc->a_vals[0].bv_val, oc->soc_cname.bv_val );
rc = LDAP_NO_OBJECT_CLASS_MODS;
- goto leave;
+ goto done;
} else if ( sc == slap_schema.si_oc_glue ) {
sc = oc;
}
if ( !is_entry_glue ( e ) ) {
rc = entry_naming_check( e, manage, text, textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
- goto leave;
+ goto done;
}
} else {
/* Glue Entry */
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
if( cr->scr_required ) for( i=0; cr->scr_required[i]; i++ ) {
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
}
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
}
}
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
if ( oc->soc_check ) {
rc = (oc->soc_check)( op->o_bd, e, oc,
text, textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
- goto leave;
+ goto done;
}
}
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
}
}
}
}
+ if ( k ) {
+ snprintf( textbuf, textlen,
+ "class '%s' not allowed by content rule '%s'",
+ oc->soc_cname.bv_val,
+ ldap_contentrule2name( &cr->scr_crule ) );
+ }
} else if ( global_disallows & SLAP_DISALLOW_AUX_WO_CR ) {
k = -1;
+ snprintf( textbuf, textlen,
+ "class '%s' not allowed by any content rule",
+ oc->soc_cname.bv_val );
} else {
k = 0;
}
if( k == -1 ) {
- snprintf( textbuf, textlen,
- "content rule '%s' does not allow class '%s'",
- ldap_contentrule2name( &cr->scr_crule ),
- oc->soc_cname.bv_val );
-
Debug( LDAP_DEBUG_ANY,
"Entry (%s): %s\n",
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
}
e->e_dn, textbuf, 0 );
rc = LDAP_OBJECT_CLASS_VIOLATION;
- goto leave;
+ goto done;
}
if( oc == slap_schema.si_oc_extensibleObject ) {
if( extensible ) {
*text = NULL;
rc = LDAP_SUCCESS;
- goto leave;
+ goto done;
}
/* check that each attr in the entry is allowed by some oc */
"Entry (%s), %s\n",
e->e_dn, textbuf, 0 );
- goto leave;
+ goto done;
}
}
*text = NULL;
-leave:
+done:
slap_sl_free( socs, op->o_tmpmemctx );
return rc;
}
for ( i = 0; socs[i]; i++ ) {
/* if we know about the oc */
ObjectClass *oc = socs[i];
+ /* extensibleObject allows all */
+ if ( oc == slap_schema.si_oc_extensibleObject ) {
+ return LDAP_SUCCESS;
+ }
if ( oc != NULL && oc->soc_kind != LDAP_SCHEMA_ABSTRACT &&
( sc == NULL || oc->soc_kind == LDAP_SCHEMA_AUXILIARY ))
{
break;
}
- rc = value_find_ex( desc, SLAP_MR_VALUE_OF_ASSERTION_SYNTAX|
+ rc = attr_valfind( attr, SLAP_MR_VALUE_OF_ASSERTION_SYNTAX|
SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH,
- attr->a_nvals, &ava->la_value, NULL );
+ &ava->la_value, NULL, NULL );
if( rc != 0 ) {
switch( rc ) {