version 1.103.2.4, 2008/02/11 23:26:44
|
version 1.103.2.5, 2008/04/14 20:23:04
|
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.103.2.3 2007/09/29 09:55:21 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/schema_check.c,v 1.103.2.4 2008/02/11 23:26:44 kurt 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-2008 The OpenLDAP Foundation. |
* Copyright 1998-2008 The OpenLDAP Foundation. |
Line 32 static char * oc_check_required(
|
Line 32 static char * oc_check_required(
|
static int entry_naming_check( |
static int entry_naming_check( |
Entry *e, |
Entry *e, |
int manage, |
int manage, |
|
int add_naming, |
const char** text, |
const char** text, |
char *textbuf, size_t textlen ); |
char *textbuf, size_t textlen ); |
/* |
/* |
Line 47 entry_schema_check(
|
Line 48 entry_schema_check(
|
Entry *e, |
Entry *e, |
Attribute *oldattrs, |
Attribute *oldattrs, |
int manage, |
int manage, |
int add_soc, |
int add, |
const char** text, |
const char** text, |
char *textbuf, size_t textlen ) |
char *textbuf, size_t textlen ) |
{ |
{ |
Line 135 entry_schema_check(
|
Line 136 entry_schema_check(
|
assert( aoc->a_vals[0].bv_val != NULL ); |
assert( aoc->a_vals[0].bv_val != NULL ); |
|
|
/* check the structural object class attribute */ |
/* check the structural object class attribute */ |
if ( asc == NULL && !add_soc ) { |
if ( asc == NULL && !add ) { |
Debug( LDAP_DEBUG_ANY, |
Debug( LDAP_DEBUG_ANY, |
"No structuralObjectClass for entry (%s)\n", |
"No structuralObjectClass for entry (%s)\n", |
e->e_dn, 0, 0 ); |
e->e_dn, 0, 0 ); |
Line 150 entry_schema_check(
|
Line 151 entry_schema_check(
|
return rc; |
return rc; |
} |
} |
|
|
if ( asc == NULL && add_soc ) { |
if ( asc == NULL && add ) { |
attr_merge_one( e, ad_structuralObjectClass, &oc->soc_cname, NULL ); |
attr_merge_one( e, ad_structuralObjectClass, &oc->soc_cname, NULL ); |
asc = attr_find( e->e_attrs, ad_structuralObjectClass ); |
asc = attr_find( e->e_attrs, ad_structuralObjectClass ); |
sc = oc; |
sc = oc; |
Line 224 got_soc:
|
Line 225 got_soc:
|
|
|
/* naming check */ |
/* naming check */ |
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, add, text, textbuf, textlen ); |
if( rc != LDAP_SUCCESS ) { |
if( rc != LDAP_SUCCESS ) { |
goto done; |
goto done; |
} |
} |
Line 762 static int
|
Line 763 static int
|
entry_naming_check( |
entry_naming_check( |
Entry *e, |
Entry *e, |
int manage, |
int manage, |
|
int add_naming, |
const char** text, |
const char** text, |
char *textbuf, size_t textlen ) |
char *textbuf, size_t textlen ) |
{ |
{ |
Line 792 entry_naming_check(
|
Line 794 entry_naming_check(
|
AttributeDescription *desc = NULL; |
AttributeDescription *desc = NULL; |
Attribute *attr; |
Attribute *attr; |
const char *errtext; |
const char *errtext; |
|
int add = 0; |
|
|
if( ava->la_flags & LDAP_AVA_BINARY ) { |
if( ava->la_flags & LDAP_AVA_BINARY ) { |
snprintf( textbuf, textlen, |
snprintf( textbuf, textlen, |
Line 852 entry_naming_check(
|
Line 855 entry_naming_check(
|
snprintf( textbuf, textlen, |
snprintf( textbuf, textlen, |
"naming attribute '%s' is not present in entry", |
"naming attribute '%s' is not present in entry", |
ava->la_attr.bv_val ); |
ava->la_attr.bv_val ); |
rc = LDAP_NAMING_VIOLATION; |
if ( add_naming ) { |
break; |
add = 1; |
} |
|
|
|
rc = attr_valfind( attr, SLAP_MR_VALUE_OF_ASSERTION_SYNTAX| |
} else { |
SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH, |
rc = LDAP_NAMING_VIOLATION; |
&ava->la_value, NULL, NULL ); |
|
|
|
if( rc != 0 ) { |
|
switch( rc ) { |
|
case LDAP_INAPPROPRIATE_MATCHING: |
|
snprintf( textbuf, textlen, |
|
"inappropriate matching for naming attribute '%s'", |
|
ava->la_attr.bv_val ); |
|
break; |
|
case LDAP_INVALID_SYNTAX: |
|
snprintf( textbuf, textlen, |
|
"value of naming attribute '%s' is invalid", |
|
ava->la_attr.bv_val ); |
|
break; |
|
case LDAP_NO_SUCH_ATTRIBUTE: |
|
snprintf( textbuf, textlen, |
|
"value of naming attribute '%s' is not present in entry", |
|
ava->la_attr.bv_val ); |
|
break; |
|
default: |
|
snprintf( textbuf, textlen, |
|
"naming attribute '%s' is inappropriate", |
|
ava->la_attr.bv_val ); |
|
} |
} |
rc = LDAP_NAMING_VIOLATION; |
|
|
} else { |
|
rc = attr_valfind( attr, SLAP_MR_VALUE_OF_ASSERTION_SYNTAX| |
|
SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH, |
|
&ava->la_value, NULL, NULL ); |
|
|
|
if( rc != 0 ) { |
|
switch( rc ) { |
|
case LDAP_INAPPROPRIATE_MATCHING: |
|
snprintf( textbuf, textlen, |
|
"inappropriate matching for naming attribute '%s'", |
|
ava->la_attr.bv_val ); |
|
break; |
|
case LDAP_INVALID_SYNTAX: |
|
snprintf( textbuf, textlen, |
|
"value of naming attribute '%s' is invalid", |
|
ava->la_attr.bv_val ); |
|
break; |
|
case LDAP_NO_SUCH_ATTRIBUTE: |
|
snprintf( textbuf, textlen, |
|
"value of naming attribute '%s' is not present in entry", |
|
ava->la_attr.bv_val ); |
|
if ( add_naming ) { |
|
add = 1; |
|
} |
|
break; |
|
default: |
|
snprintf( textbuf, textlen, |
|
"naming attribute '%s' is inappropriate", |
|
ava->la_attr.bv_val ); |
|
} |
|
rc = LDAP_NAMING_VIOLATION; |
|
} |
|
} |
|
|
|
if ( add ) { |
|
attr_merge_normalize_one( e, desc, &ava->la_value, NULL ); |
|
|
|
} else if ( rc != LDAP_SUCCESS ) { |
break; |
break; |
} |
} |
} |
} |