From 9e7749541bb2d2d1a74f421f9f7cc908d6da9f59 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sat, 25 Oct 2003 01:40:55 +0000 Subject: [PATCH] Provide more descriptive naming violation error messages --- servers/slapd/schema_check.c | 58 ++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/servers/slapd/schema_check.c b/servers/slapd/schema_check.c index bc7c1e826f..40ca1d54a1 100644 --- a/servers/slapd/schema_check.c +++ b/servers/slapd/schema_check.c @@ -841,40 +841,74 @@ entry_naming_check( Attribute *attr; const char *errtext; + if( ava->la_flags & LDAP_AVA_BINARY ) { + snprintf( textbuf, textlen, + "value of naming attribute '%s' in unsupported BER form", + ava->la_attr.bv_val ); + rc = LDAP_NAMING_VIOLATION; + } + rc = slap_bv2ad( &ava->la_attr, &desc, &errtext ); if ( rc != LDAP_SUCCESS ) { snprintf( textbuf, textlen, "%s (in RDN)", errtext ); break; } - /* find the naming attribute */ - attr = attr_find( e->e_attrs, desc ); - if ( attr == NULL ) { + if( desc->ad_type->sat_equality == NULL ) { snprintf( textbuf, textlen, - "naming attribute '%s' is not present in entry", + "naming attribute '%s' has no equality matching rule", ava->la_attr.bv_val ); rc = LDAP_NAMING_VIOLATION; break; } - if( ava->la_flags & LDAP_AVA_BINARY ) { + if( desc->ad_type->sat_equality->smr_match == NULL ) { snprintf( textbuf, textlen, - "value of naming attribute '%s' in unsupported BER form", + "naming attribute '%s' has unsupported equality matching rule", ava->la_attr.bv_val ); rc = LDAP_NAMING_VIOLATION; + break; } - if ( value_find_ex( desc, - SLAP_MR_VALUE_OF_ASSERTION_SYNTAX| - SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH, - attr->a_nvals, &ava->la_value, NULL ) != 0 ) - { + /* find the naming attribute */ + attr = attr_find( e->e_attrs, desc ); + if ( attr == NULL ) { snprintf( textbuf, textlen, - "value of naming attribute '%s' is not present in entry", + "naming attribute '%s' is not present in entry", ava->la_attr.bv_val ); rc = LDAP_NAMING_VIOLATION; break; } + + rc = value_find_ex( desc, SLAP_MR_VALUE_OF_ASSERTION_SYNTAX| + SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH, + attr->a_nvals, &ava->la_value, 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; + break; + } } ldap_rdnfree( rdn ); -- 2.39.5