X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fschema_check.c;h=0412bb4f2028bd2ebefec86835c42cca688d9a97;hb=b4e1ea15f3081a065318f5ee99336494c8765bca;hp=2be55f9fd5190afa073d69a7bbd475fda81073c9;hpb=ac1332cdb868b6a30f545796aca8e0bbf13fe939;p=openldap diff --git a/servers/slapd/schema_check.c b/servers/slapd/schema_check.c index 2be55f9fd5..0412bb4f20 100644 --- a/servers/slapd/schema_check.c +++ b/servers/slapd/schema_check.c @@ -48,7 +48,7 @@ entry_schema_check( int subentry = is_entry_subentry( e ); int collectiveSubentry = 0; - if( subentry) collectiveSubentry = is_entry_collectiveAttributes( e ); + if( subentry) collectiveSubentry = is_entry_collectiveAttributeSubentry( e ); *text = textbuf; @@ -70,7 +70,7 @@ entry_schema_check( if( !collectiveSubentry && is_at_collective( a->a_desc->ad_type ) ) { snprintf( textbuf, textlen, - "'%s' can only appear in collectiveAttributes subentry", + "'%s' can only appear in collectiveAttributeSubentry", type ); return LDAP_OBJECT_CLASS_VIOLATION; } @@ -84,9 +84,8 @@ entry_schema_check( type ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn=\"%s\" %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn=\"%s\" %s\n", e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "Entry (%s), %s\n", @@ -100,13 +99,13 @@ entry_schema_check( /* it's a REALLY bad idea to disable schema checks */ if( !global_schemacheck ) return LDAP_SUCCESS; - /* find the object class attribute - could error out here */ + /* find the structural object class attribute */ asc = attr_find( e->e_attrs, ad_structuralObjectClass ); if ( asc == NULL ) { #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, "entry_schema_check: " - "No structuralObjectClass for entry (%s)\n", - e->e_dn )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: No structuralObjectClass for entry (%s)\n", + e->e_dn, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "No structuralObjectClass for entry (%s)\n", @@ -114,7 +113,7 @@ entry_schema_check( #endif *text = "no structuralObjectClass operational attribute"; - return LDAP_OBJECT_CLASS_VIOLATION; + return LDAP_OTHER; } assert( asc->a_vals != NULL ); @@ -128,9 +127,8 @@ entry_schema_check( asc->a_vals[0].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn (%s), %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn (%s), %s\n", e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "entry_check_schema(%s): %s\n", @@ -146,25 +144,24 @@ entry_schema_check( asc->a_vals[0].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn (%s), %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn (%s), %s\n", e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "entry_check_schema(%s): %s\n", e->e_dn, textbuf, 0 ); #endif - return LDAP_OBJECT_CLASS_VIOLATION; + return LDAP_OTHER; } /* find the object class attribute */ aoc = attr_find( e->e_attrs, ad_objectClass ); if ( aoc == NULL ) { #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: No objectClass for entry (%s).\n" - e->e_dn )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: No objectClass for entry (%s).\n", + e->e_dn, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "No objectClass for entry (%s)\n", e->e_dn, 0, 0 ); @@ -180,8 +177,6 @@ entry_schema_check( rc = structural_class( aoc->a_vals, &nsc, &oc, text, textbuf, textlen ); if( rc != LDAP_SUCCESS ) { return rc; - } else if ( nsc.bv_len == 0 ) { - return LDAP_OBJECT_CLASS_VIOLATION; } *text = textbuf; @@ -194,7 +189,7 @@ entry_schema_check( } else if ( sc != oc ) { snprintf( textbuf, textlen, - "structuralObjectClass modification from '%s' to '%s' not allowed", + "structural object class modification from '%s' to '%s' not allowed", asc->a_vals[0].bv_val, nsc.bv_val ); return LDAP_NO_OBJECT_CLASS_MODS; } @@ -207,9 +202,8 @@ entry_schema_check( aoc->a_vals[i].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn (%s), %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn (%s), %s\n", e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "entry_check_schema(%s): %s\n", @@ -219,8 +213,8 @@ entry_schema_check( return LDAP_OBJECT_CLASS_VIOLATION; } - if ( oc->sco_check ) { - int rc = (oc->sco_check)( be, e, oc, + if ( oc->soc_check ) { + int rc = (oc->soc_check)( be, e, oc, text, textbuf, textlen ); if( rc != LDAP_SUCCESS ) { return rc; @@ -243,9 +237,9 @@ entry_schema_check( aoc->a_vals[i].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, + LDAP_LOG( OPERATION, INFO, "entry_schema_check: dn (%s), %s\n", - e->e_dn, textbuf )); + e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "entry_check_schema(%s): %s\n", @@ -264,10 +258,9 @@ entry_schema_check( if ( xc->soc_kind == LDAP_SCHEMA_AUXILIARY && is_object_subclass( oc, xc ) ) { - break;; + xc = NULL; + break; } - - xc = NULL; } } @@ -277,9 +270,9 @@ entry_schema_check( aoc->a_vals[i].bv_val ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn (%s), %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn (%s), %s\n", + e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "entry_check_schema(%s): %s\n", @@ -299,9 +292,8 @@ entry_schema_check( aoc->a_vals[i].bv_val, s ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn=\"%s\" %s", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn=\"%s\" %s", e->e_dn, textbuf, 0 ); #else Debug( LDAP_DEBUG_ANY, "Entry (%s): %s\n", @@ -332,9 +324,8 @@ entry_schema_check( type ); #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_INFO, - "entry_schema_check: dn=\"%s\" %s\n", - e->e_dn, textbuf )); + LDAP_LOG( OPERATION, INFO, + "entry_schema_check: dn=\"%s\" %s\n", e->e_dn, textbuf, 0); #else Debug( LDAP_DEBUG_ANY, "Entry (%s), %s\n", @@ -359,9 +350,9 @@ oc_check_required( Attribute *a; #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_ENTRY, - "oc_check_required: dn (%s), objectClass \"%s\"\n", - e->e_dn, ocname->bv_val )); + LDAP_LOG( OPERATION, ENTRY, + "oc_check_required: dn (%s), objectClass \"%s\"\n", + e->e_dn, ocname->bv_val, 0 ); #else Debug( LDAP_DEBUG_TRACE, "oc_check_required entry (%s), objectClass \"%s\"\n", @@ -400,8 +391,8 @@ int oc_check_allowed( int i, j; #ifdef NEW_LOGGING - LDAP_LOG(( "schema", LDAP_LEVEL_ENTRY, - "oc_check_allowed: type \"%s\"\n", at->sat_cname.bv_val )); + LDAP_LOG( OPERATION, ENTRY, + "oc_check_allowed: type \"%s\"\n", at->sat_cname.bv_val, 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, "oc_check_allowed type \"%s\"\n", @@ -494,7 +485,7 @@ int structural_class( if( oc == NULL ) { snprintf( textbuf, textlen, - "unrecongized objectClass '%s'", + "unrecognized objectClass '%s'", ocs[i].bv_val ); *text = textbuf; return LDAP_OBJECT_CLASS_VIOLATION; @@ -515,7 +506,7 @@ int structural_class( if( xc == NULL ) { snprintf( textbuf, textlen, - "unrecongized objectClass '%s'", + "unrecognized objectClass '%s'", ocs[i].bv_val ); *text = textbuf; return LDAP_OBJECT_CLASS_VIOLATION; @@ -548,15 +539,27 @@ int structural_class( } } - if( scp ) + if( scp ) { *scp = sc; + } if( sc == NULL ) { *text = "no structural object classes provided"; return LDAP_OBJECT_CLASS_VIOLATION; } + if( scn < 0 ) { + *text = "invalid structural object class"; + return LDAP_OBJECT_CLASS_VIOLATION; + } + *scbv = ocs[scn]; + + if( scbv->bv_len == 0 ) { + *text = "invalid structural object class"; + return LDAP_OBJECT_CLASS_VIOLATION; + } + return LDAP_SUCCESS; }