mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
fix and strengthen the structural objectClass test
This commit is contained in:
parent
740835dff9
commit
3ce45e11bb
@ -938,19 +938,28 @@ next:;
|
|||||||
|| an_find( bsi->bsi_attrs, &AllOper )
|
|| an_find( bsi->bsi_attrs, &AllOper )
|
||||||
|| an_find( bsi->bsi_attrs, &slap_schema.si_ad_structuralObjectClass->ad_cname ) )
|
|| an_find( bsi->bsi_attrs, &slap_schema.si_ad_structuralObjectClass->ad_cname ) )
|
||||||
{
|
{
|
||||||
struct berval bv[ 2 ];
|
|
||||||
|
|
||||||
bv[ 0 ] = bsi->bsi_oc->bom_oc->soc_cname;
|
|
||||||
BER_BVZERO( &bv[ 1 ] );
|
|
||||||
|
|
||||||
if ( BACKSQL_CHECK_SCHEMA( bi ) ) {
|
if ( BACKSQL_CHECK_SCHEMA( bi ) ) {
|
||||||
|
Attribute *a;
|
||||||
const char *text = NULL;
|
const char *text = NULL;
|
||||||
char textbuf[ 1024 ];
|
char textbuf[ 1024 ];
|
||||||
size_t textlen = sizeof( textbuf );
|
size_t textlen = sizeof( textbuf );
|
||||||
struct berval soc;
|
struct berval soc,
|
||||||
int rc;
|
bv[ 2 ],
|
||||||
|
*nvals;
|
||||||
|
int rc = LDAP_SUCCESS;
|
||||||
|
|
||||||
rc = structural_class( bv, &soc, NULL,
|
a = attr_find( bsi->bsi_e->e_attrs,
|
||||||
|
slap_schema.si_ad_objectClass );
|
||||||
|
if ( a != NULL ) {
|
||||||
|
nvals = a->a_nvals;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
bv[ 0 ] = bsi->bsi_oc->bom_oc->soc_cname;
|
||||||
|
BER_BVZERO( &bv[ 1 ] );
|
||||||
|
nvals = bv;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = structural_class( nvals, &soc, NULL,
|
||||||
&text, textbuf, textlen );
|
&text, textbuf, textlen );
|
||||||
if ( rc != LDAP_SUCCESS ) {
|
if ( rc != LDAP_SUCCESS ) {
|
||||||
Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(%s): "
|
Debug( LDAP_DEBUG_TRACE, "backsql_id2entry(%s): "
|
||||||
@ -960,11 +969,23 @@ next:;
|
|||||||
entry_clean( bsi->bsi_e );
|
entry_clean( bsi->bsi_e );
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !bvmatch( &soc, &bsi->bsi_oc->bom_oc->soc_cname ) ) {
|
||||||
|
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.bv_val,
|
||||||
|
bsi->bsi_oc->bom_oc->soc_cname.bv_val );
|
||||||
|
entry_clean( bsi->bsi_e );
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = attr_merge_normalize_one( bsi->bsi_e,
|
rc = attr_merge_normalize_one( bsi->bsi_e,
|
||||||
slap_schema.si_ad_structuralObjectClass,
|
slap_schema.si_ad_structuralObjectClass,
|
||||||
&bv[ 0 ], bsi->bsi_op->o_tmpmemctx );
|
&bsi->bsi_oc->bom_oc->soc_cname,
|
||||||
|
bsi->bsi_op->o_tmpmemctx );
|
||||||
if ( rc != LDAP_SUCCESS ) {
|
if ( rc != LDAP_SUCCESS ) {
|
||||||
entry_clean( bsi->bsi_e );
|
entry_clean( bsi->bsi_e );
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -98,7 +98,7 @@ backsql_db_init(
|
|||||||
backsql_info *bi;
|
backsql_info *bi;
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_TRACE, "==>backsql_db_init()\n", 0, 0, 0 );
|
Debug( LDAP_DEBUG_TRACE, "==>backsql_db_init()\n", 0, 0, 0 );
|
||||||
bi = (backsql_info *)ch_calloc( 1, sizeof( backsql_info ) );
|
bi = (backsql_info *)ch_malloc( sizeof( backsql_info ) );
|
||||||
memset( bi, '\0', sizeof( backsql_info ) );
|
memset( bi, '\0', sizeof( backsql_info ) );
|
||||||
ldap_pvt_thread_mutex_init( &bi->sql_dbconn_mutex );
|
ldap_pvt_thread_mutex_init( &bi->sql_dbconn_mutex );
|
||||||
ldap_pvt_thread_mutex_init( &bi->sql_schema_mutex );
|
ldap_pvt_thread_mutex_init( &bi->sql_schema_mutex );
|
||||||
|
Loading…
Reference in New Issue
Block a user