From aa9399db03776decc2dcd92e2a3900a1cc44b586 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Wed, 20 May 2009 21:23:48 +0000 Subject: [PATCH] ITS#6132: Fix slapi_entry_has_children() --- servers/slapd/slapi/slapi_utils.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/servers/slapd/slapi/slapi_utils.c b/servers/slapd/slapi/slapi_utils.c index e6613e4d12..8989aaabaa 100644 --- a/servers/slapd/slapi/slapi_utils.c +++ b/servers/slapd/slapi/slapi_utils.c @@ -475,21 +475,30 @@ int slapi_entry_has_children( const Slapi_Entry *e ) { Slapi_PBlock *pb; - int hasSubordinates = 0; + Backend *be = select_backend( (struct berval *)&e->e_nname, 0 ); + int rc, hasSubordinates = 0; + + if ( be == NULL || be->be_has_subordinates == 0 ) { + return 0; + } pb = slapi_pblock_new(); + if ( pb == NULL ) { + return 0; + } slapi_int_connection_init_pb( pb, LDAP_REQ_SEARCH ); - slapi_pblock_set( pb, SLAPI_TARGET_DN, slapi_entry_get_dn( (Entry *)e ) ); - - pb->pb_op->o_bd = select_backend( (struct berval *)&e->e_nname, 0 ); - if ( pb->pb_op->o_bd != NULL ) { - pb->pb_op->o_bd->be_has_subordinates( pb->pb_op, (Entry *)e, &hasSubordinates ); + rc = slapi_pblock_set( pb, SLAPI_TARGET_DN, slapi_entry_get_dn( + (Entry *) e )); + if ( rc == LDAP_SUCCESS ) { + pb->pb_op->o_bd = be; + rc = be->be_has_subordinates( pb->pb_op, (Entry *) e, + &hasSubordinates ); } slapi_pblock_destroy( pb ); - return ( hasSubordinates == LDAP_COMPARE_TRUE ); + return ( rc == LDAP_SUCCESS && hasSubordinates == LDAP_COMPARE_TRUE ); } /* -- 2.39.5