From: Pierangelo Masarati Date: Sat, 11 Aug 2007 09:37:55 +0000 (+0000) Subject: fix objectClass inheritance (ITS#5088) X-Git-Tag: OPENLDAP_REL_ENG_2_4_MP~236 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5eef8c7f40b63fa2f2eaae3ba81201d0bac85213;p=openldap fix objectClass inheritance (ITS#5088) --- diff --git a/servers/slapd/back-sql/entry-id.c b/servers/slapd/back-sql/entry-id.c index a942b739ae..22aca8c01d 100644 --- a/servers/slapd/back-sql/entry-id.c +++ b/servers/slapd/back-sql/entry-id.c @@ -1015,12 +1015,13 @@ next:; || an_find( bsi->bsi_attrs, &AllOper ) || an_find( bsi->bsi_attrs, &slap_schema.si_ad_structuralObjectClass->ad_cname ) ) { + ObjectClass *soc = NULL; + if ( BACKSQL_CHECK_SCHEMA( bi ) ) { Attribute *a; const char *text = NULL; char textbuf[ 1024 ]; size_t textlen = sizeof( textbuf ); - ObjectClass *soc = NULL; struct berval bv[ 2 ], *nvals; int rc = LDAP_SUCCESS; @@ -1048,20 +1049,32 @@ next:; } if ( !bvmatch( &soc->soc_cname, &bsi->bsi_oc->bom_oc->soc_cname ) ) { + if ( !is_object_subclass( bsi->bsi_oc->bom_oc, soc ) ) { + Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(%s): " + "computed structuralObjectClass %s " + "does not match objectClass %s associated " + "to entry\n", + bsi->bsi_e->e_name.bv_val, soc->soc_cname.bv_val, + bsi->bsi_oc->bom_oc->soc_cname.bv_val ); + backsql_entry_clean( op, bsi->bsi_e ); + return rc; + } + Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(%s): " "computed structuralObjectClass %s " - "does not match objectClass %s associated " + "is subclass of objectClass %s associated " "to entry\n", bsi->bsi_e->e_name.bv_val, soc->soc_cname.bv_val, bsi->bsi_oc->bom_oc->soc_cname.bv_val ); - backsql_entry_clean( op, bsi->bsi_e ); - return rc; } + + } else { + soc = bsi->bsi_oc->bom_oc; } rc = attr_merge_normalize_one( bsi->bsi_e, slap_schema.si_ad_structuralObjectClass, - &bsi->bsi_oc->bom_oc->soc_cname, + &soc->soc_cname, bsi->bsi_op->o_tmpmemctx ); if ( rc != LDAP_SUCCESS ) { backsql_entry_clean( op, bsi->bsi_e );