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 );
 }
 
 /*