]> git.sur5r.net Git - openldap/commitdiff
Provide more descriptive naming violation error messages
authorKurt Zeilenga <kurt@openldap.org>
Sat, 25 Oct 2003 01:40:55 +0000 (01:40 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Sat, 25 Oct 2003 01:40:55 +0000 (01:40 +0000)
servers/slapd/schema_check.c

index bc7c1e826f0f441f609922a83a81024f312dc3da..40ca1d54a156440d8afcd68bbd954d4ed45e9599 100644 (file)
@@ -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 );