From: Pierangelo Masarati Date: Sat, 11 Aug 2007 09:39:30 +0000 (+0000) Subject: import fix to ITS#5088 X-Git-Tag: OPENLDAP_REL_ENG_2_3_38~8 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6e8ee2244dd894e18cdf6d70a46c1ca1c218de87;p=openldap import fix to ITS#5088 --- diff --git a/CHANGES b/CHANGES index 15f2aeebdd..d30f905b74 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ OpenLDAP 2.3.38 Engineering Fixed slapd-bdb spurious empty DN warnings during add (ITS#5079) Fixed slapd-hdb slapacl behavior (ITS#5087) Fixed slapd-relay configuration (ITS#4322,ITS#4340) + Fixed slapd-sql structuralObjectClass issue (ITS#5088) Fixed slapo-syncprov uninit'd vars (ITS#5048,#5049) Fixed libldap ldap_add_result_entry (ITS#5056) Removed lint diff --git a/servers/slapd/back-sql/entry-id.c b/servers/slapd/back-sql/entry-id.c index 72928e5204..b96a41cb14 100644 --- a/servers/slapd/back-sql/entry-id.c +++ b/servers/slapd/back-sql/entry-id.c @@ -1002,12 +1002,14 @@ 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 ); - struct berval soc, + struct berval soc_name, bv[ 2 ], *nvals; int rc = LDAP_SUCCESS; @@ -1023,7 +1025,7 @@ next:; nvals = bv; } - rc = structural_class( nvals, &soc, NULL, + rc = structural_class( nvals, &soc_name, &soc, &text, textbuf, textlen ); if ( rc != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(%s): " @@ -1034,21 +1036,33 @@ next:; return rc; } - if ( !bvmatch( &soc, &bsi->bsi_oc->bom_oc->soc_cname ) ) { + 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.bv_val, + 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 );