diff --git a/CHANGES b/CHANGES index 9eeab434958c977b617a7a8f53cdfee0bce3e384..11eeee96c045aa9b91a2c89a21e5b644ea138d2d 100644 --- a/CHANGES +++ b/CHANGES @@ -19,6 +19,7 @@ OpenLDAP 2.4.17 Engineering Fixed slapd password-hash incorrect limit on arg length (ITS#6139) Fixed slapd readonly restrictions (ITS#6109) Fixed slapd sending cancelled operations results (ITS#6103) + Fixed slapd slapi_entry_has_children (ITS#6132) Fixed slapd sockets usage on windows (ITS#6039) Fixed slapd tls context after changes (ITS#6135) Fixed slapd-hdb freeing of already freed entries (ITS#6074) diff --git a/servers/slapd/slapi/slapi_utils.c b/servers/slapd/slapi/slapi_utils.c index e6613e4d1259d76f2c51b1f8ee7df560a74dce8d..8989aaabaae3319aebf254619e64d09e9f7bf20e 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 ); } /*