version 1.103.2.1, 2007/02/13 20:22:21
|
version 1.103.2.2, 2007/08/31 23:14:00
|
Line 1
|
Line 1
|
/* schema_check.c - routines to enforce schema definitions */ |
/* schema_check.c - routines to enforce schema definitions */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/schema_check.c,v 1.107 2007/02/11 13:37:21 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/schema_check.c,v 1.109 2007/06/09 21:45:23 hallvard Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1998-2007 The OpenLDAP Foundation. |
* Copyright 1998-2007 The OpenLDAP Foundation. |
Line 172 entry_schema_check(
|
Line 172 entry_schema_check(
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
|
|
if( sc->soc_kind != LDAP_SCHEMA_STRUCTURAL ) { |
if( sc->soc_kind != LDAP_SCHEMA_STRUCTURAL ) { |
Line 185 entry_schema_check(
|
Line 185 entry_schema_check(
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OTHER; |
rc = LDAP_OTHER; |
goto leave; |
goto done; |
} |
} |
|
|
got_soc: |
got_soc: |
Line 199 got_soc:
|
Line 199 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
|
|
*text = textbuf; |
*text = textbuf; |
Line 209 got_soc:
|
Line 209 got_soc:
|
"unrecognized objectClass '%s'", |
"unrecognized objectClass '%s'", |
aoc->a_vals[0].bv_val ); |
aoc->a_vals[0].bv_val ); |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
|
|
} else if ( sc != slap_schema.si_oc_glue && sc != oc ) { |
} else if ( sc != slap_schema.si_oc_glue && sc != oc ) { |
snprintf( textbuf, textlen, |
snprintf( textbuf, textlen, |
Line 217 got_soc:
|
Line 217 got_soc:
|
"from '%s' to '%s' not allowed", |
"from '%s' to '%s' not allowed", |
asc->a_vals[0].bv_val, oc->soc_cname.bv_val ); |
asc->a_vals[0].bv_val, oc->soc_cname.bv_val ); |
rc = LDAP_NO_OBJECT_CLASS_MODS; |
rc = LDAP_NO_OBJECT_CLASS_MODS; |
goto leave; |
goto done; |
} else if ( sc == slap_schema.si_oc_glue ) { |
} else if ( sc == slap_schema.si_oc_glue ) { |
sc = oc; |
sc = oc; |
} |
} |
Line 226 got_soc:
|
Line 226 got_soc:
|
if ( !is_entry_glue ( e ) ) { |
if ( !is_entry_glue ( e ) ) { |
rc = entry_naming_check( e, manage, text, textbuf, textlen ); |
rc = entry_naming_check( e, manage, text, textbuf, textlen ); |
if( rc != LDAP_SUCCESS ) { |
if( rc != LDAP_SUCCESS ) { |
goto leave; |
goto done; |
} |
} |
} else { |
} else { |
/* Glue Entry */ |
/* Glue Entry */ |
Line 250 got_soc:
|
Line 250 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
|
|
if( cr->scr_required ) for( i=0; cr->scr_required[i]; i++ ) { |
if( cr->scr_required ) for( i=0; cr->scr_required[i]; i++ ) { |
Line 274 got_soc:
|
Line 274 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
} |
} |
|
|
Line 299 got_soc:
|
Line 299 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
} |
} |
} |
} |
Line 318 got_soc:
|
Line 318 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
|
|
if ( oc->soc_check ) { |
if ( oc->soc_check ) { |
rc = (oc->soc_check)( op->o_bd, e, oc, |
rc = (oc->soc_check)( op->o_bd, e, oc, |
text, textbuf, textlen ); |
text, textbuf, textlen ); |
if( rc != LDAP_SUCCESS ) { |
if( rc != LDAP_SUCCESS ) { |
goto leave; |
goto done; |
} |
} |
} |
} |
|
|
Line 365 got_soc:
|
Line 365 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
} |
} |
|
|
Line 408 got_soc:
|
Line 408 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
} |
} |
|
|
Line 423 got_soc:
|
Line 423 got_soc:
|
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
rc = LDAP_OBJECT_CLASS_VIOLATION; |
rc = LDAP_OBJECT_CLASS_VIOLATION; |
goto leave; |
goto done; |
} |
} |
|
|
if( oc == slap_schema.si_oc_extensibleObject ) { |
if( oc == slap_schema.si_oc_extensibleObject ) { |
Line 435 got_soc:
|
Line 435 got_soc:
|
if( extensible ) { |
if( extensible ) { |
*text = NULL; |
*text = NULL; |
rc = LDAP_SUCCESS; |
rc = LDAP_SUCCESS; |
goto leave; |
goto done; |
} |
} |
|
|
/* check that each attr in the entry is allowed by some oc */ |
/* check that each attr in the entry is allowed by some oc */ |
Line 476 got_soc:
|
Line 476 got_soc:
|
"Entry (%s), %s\n", |
"Entry (%s), %s\n", |
e->e_dn, textbuf, 0 ); |
e->e_dn, textbuf, 0 ); |
|
|
goto leave; |
goto done; |
} |
} |
} |
} |
|
|
*text = NULL; |
*text = NULL; |
leave: |
done: |
slap_sl_free( socs, op->o_tmpmemctx ); |
slap_sl_free( socs, op->o_tmpmemctx ); |
return rc; |
return rc; |
} |
} |
Line 572 int oc_check_allowed(
|
Line 572 int oc_check_allowed(
|
for ( i = 0; socs[i]; i++ ) { |
for ( i = 0; socs[i]; i++ ) { |
/* if we know about the oc */ |
/* if we know about the oc */ |
ObjectClass *oc = socs[i]; |
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 && |
if ( oc != NULL && oc->soc_kind != LDAP_SCHEMA_ABSTRACT && |
( sc == NULL || oc->soc_kind == LDAP_SCHEMA_AUXILIARY )) |
( sc == NULL || oc->soc_kind == LDAP_SCHEMA_AUXILIARY )) |
{ |
{ |