]> git.sur5r.net Git - openldap/commitdiff
ITS#6132
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 3 Jun 2009 01:07:29 +0000 (01:07 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 3 Jun 2009 01:07:29 +0000 (01:07 +0000)
CHANGES
servers/slapd/slapi/slapi_utils.c

diff --git a/CHANGES b/CHANGES
index 9eeab434958c977b617a7a8f53cdfee0bce3e384..11eeee96c045aa9b91a2c89a21e5b644ea138d2d 100644 (file)
--- 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)
index e6613e4d1259d76f2c51b1f8ee7df560a74dce8d..8989aaabaae3319aebf254619e64d09e9f7bf20e 100644 (file)
@@ -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 );
 }
 
 /*