]> git.sur5r.net Git - openldap/commitdiff
ITS#6712
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 3 Jan 2011 23:35:20 +0000 (23:35 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 3 Jan 2011 23:35:20 +0000 (23:35 +0000)
CHANGES
servers/slapd/back-bdb/operational.c
servers/slapd/back-monitor/operational.c
servers/slapd/back-ndb/search.cpp
servers/slapd/back-sql/operational.c

diff --git a/CHANGES b/CHANGES
index 55277649b87a3386e18961d49e1c6c3126553430..d5332c9f5c98d0bd7c82e3445278ad02e14efe54 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -26,6 +26,7 @@ OpenLDAP 2.4.24 Engineering
        Fixed slapd modify to return actual error (ITS#6581)
        Fixed slapd sortvals of attributes with 1 value (ITS#6715)
        Fixed slapd syncrepl reuse of presence list (ITS#6707)
+       Fixed slapd-bdb hasSubordinates generation (ITS#6712)
        Fixed slapd-bdb entry cache delete failure (ITS#6577)
        Fixed slapd-bdb error propogation to overlays (ITS#6633)
        Fixed slapd-ldap debug output of timeout (ITS#6721)
@@ -34,11 +35,14 @@ OpenLDAP 2.4.24 Engineering
        Fixed slapd-ldap chaining with ppolicy (ITS#6540)
        Fixed slapd-ldap with SASL/EXTERNAL (ITS#6642)
        Fixed slapd-ndb to honor rootpw setting (ITS#6661)
+       Fixed slapd-ndb hasSubordinates generation (ITS#6712)
        Fixed slapd-meta anon retry with failed auth method (ITS#6643)
        Fixed slapd-meta rebind proc (ITS#6665)
        Fixed slapd-meta to correctly rebind as user (ITS#6574)
        Fixed slapd-meta with SASL/EXTERNAL (ITS#6642)
+       Fixed slapd-monitor hasSubordinates generation (ITS#6712)
        Fixed slapd-sql with null objectClass (ITS#6616)
+       Fixed slapd-sql hasSubordinates generation (ITS#6712)
        Fixed slapo-pcache callback freeing (ITS#6640)
        Fixed slapo-pcache to ignore undefined attrs (ITS#6600)
        Fixed slapo-ppolicy don't update opattrs on consumers (ITS#6608)
index 36a0ed39734a876fb12fc833d8824c860373ee00..3b5dc3a4c2bac9e1f04b9db60d4a8c45fe222205 100644 (file)
@@ -124,11 +124,16 @@ bdb_operational(
 
        assert( rs->sr_entry != NULL );
 
-       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next )
-               /* just count */ ;
+       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) {
+               if ( (*ap)->a_desc == slap_schema.si_ad_hasSubordinates ) {
+                       break;
+               }
+       }
 
-       if ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
-                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) )
+       if ( *ap == NULL &&
+               attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL &&
+               ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
+                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) ) )
        {
                int     hasSubordinates, rc;
 
index a5e68beaf7fe01cb83a4fd3622575977ab9ceccb..b0d0f92f552f4bf031b6ffcc61cf3902f4bf29d1 100644 (file)
@@ -43,11 +43,16 @@ monitor_back_operational(
 
        assert( rs->sr_entry != NULL );
 
-       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next )
-               /* just count */ ;
+       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) {
+               if ( (*ap)->a_desc == slap_schema.si_ad_hasSubordinates ) {
+                       break;
+               }
+       }
 
-       if ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
-                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) )
+       if ( *ap == NULL &&
+               attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL &&
+               ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
+                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) ) )
        {
                int                     hs;
                monitor_entry_t *mp;
index bf2c100e1f249d90dd5fef877c347e8461059c48..90e49b9823e29b1f3b2995adc769654c6626990c 100644 (file)
@@ -826,11 +826,16 @@ ndb_operational(
 
        assert( rs->sr_entry != NULL );
 
-       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next )
-               /* just count */ ;
+       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) {
+               if ( (*ap)->a_desc == slap_schema.si_ad_hasSubordinates ) {
+                       break;
+               }
+       }
 
-       if ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
-                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) )
+       if ( *ap == NULL &&
+               attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL &&
+               ( SLAP_OPATTRS( rs->sr_attr_flags ) ||
+                       ad_inlist( slap_schema.si_ad_hasSubordinates, rs->sr_attrs ) ) )
        {
                int     hasSubordinates, rc;
 
index eee3aea706e9896ebfc8b099afb235847727a6c7..5057d5173e22933e743819beedfcec5294c183df 100644 (file)
@@ -123,7 +123,7 @@ backsql_operational(
        Debug( LDAP_DEBUG_TRACE, "==>backsql_operational(): entry \"%s\"\n",
                        rs->sr_entry->e_nname.bv_val, 0, 0 );
 
-       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) {
+       for ( ap = &rs->sr_entry->e_attrs; *ap; ap = &(*ap)->a_next ) {
                if ( (*ap)->a_desc == slap_schema.si_ad_hasSubordinates ) {
                        get_conn--;
                        got[ BACKSQL_OP_HASSUBORDINATES ] = 1;
@@ -138,6 +138,27 @@ backsql_operational(
                }
        }
 
+       for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next ) {
+               if ( !got[ BACKSQL_OP_HASSUBORDINATES ] &&
+                       (*ap)->a_desc == slap_schema.si_ad_hasSubordinates )
+               {
+                       get_conn--;
+                       got[ BACKSQL_OP_HASSUBORDINATES ] = 1;
+
+               } else if ( !got[ BACKSQL_OP_ENTRYUUID ] && 
+                       (*ap)->a_desc == slap_schema.si_ad_entryUUID )
+               {
+                       get_conn--;
+                       got[ BACKSQL_OP_ENTRYUUID ] = 1;
+
+               } else if ( !got[ BACKSQL_OP_ENTRYCSN ] &&
+                       (*ap)->a_desc == slap_schema.si_ad_entryCSN )
+               {
+                       get_conn--;
+                       got[ BACKSQL_OP_ENTRYCSN ] = 1;
+               }
+       }
+
        if ( !get_conn ) {
                return 0;
        }