]> git.sur5r.net Git - openldap/commitdiff
ITS#6132: Fix slapi_entry_has_children()
authorHallvard Furuseth <hallvard@openldap.org>
Wed, 20 May 2009 21:23:48 +0000 (21:23 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Wed, 20 May 2009 21:23:48 +0000 (21:23 +0000)
servers/slapd/slapi/slapi_utils.c

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