]> git.sur5r.net Git - openldap/commitdiff
ITS#6837
authorQuanah Gibson-Mount <quanah@openldap.org>
Thu, 24 Mar 2011 01:37:45 +0000 (01:37 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 24 Mar 2011 01:37:45 +0000 (01:37 +0000)
CHANGES
servers/slapd/back-ldap/chain.c
servers/slapd/back-ldap/init.c
servers/slapd/bconfig.c

diff --git a/CHANGES b/CHANGES
index 2e3b1cd57ff0fb9ad58decc5c8e68e57050cdeca..8910b4d2f3eaa674ab516bd36f79a202119af0f9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.25 Engineering
+       Fixed slapd add objectclasses in order (ITS#6837)
+       Fixed slapd-ldap chain cn=config support (ITS#6837)
        Build Environment
                Fixed libldap/lberl/util if/else usage (ITS#6832)
                Fixed Windows odbc32 detection (ITS#6125)
index 759fb53157501ad7450cc4fb9f67eb70a133932f..f9e3ac157c8c8a003f82e08e068a522e7e7f5b3b 100644 (file)
@@ -1269,7 +1269,7 @@ static ConfigOCs chainocs[] = {
        { "( OLcfgOvOc:3.2 "
                "NAME 'olcChainDatabase' "
                "DESC 'Chain remote server configuration' "
-               "AUXILIARY )",
+               "SUP olcLDAPConfig )",
                Cft_Misc, olcDatabaseDummy, chain_ldadd },
        { NULL, 0, NULL }
 };
index bb05dd5d1c97f193903b16df3de82c03cc2ec013..60e60c5fe9f1375d3e7b1fd0ae45f8d0ee2a18df 100644 (file)
@@ -100,6 +100,11 @@ ldap_back_initialize( BackendInfo *bi )
 
        bi->bi_extra = (void *)&ldap_extra;
 
+       rc =  ldap_back_init_cf( bi );
+       if ( rc ) {
+               return rc;
+       }
+
        rc = chain_initialize();
        if ( rc ) {
                return rc;
@@ -116,8 +121,7 @@ ldap_back_initialize( BackendInfo *bi )
                return rc;
        }
 #endif
-
-       return ldap_back_init_cf( bi );
+       return rc;
 }
 
 int
index f7154b5124764e00ad2280ffdf4562afccc4fcf7..c657ed0fd914513304aa95eada97ce9816450f3e 100644 (file)
@@ -4568,6 +4568,12 @@ count_oc( ObjectClass *oc, ConfigOCs ***copp, int *nocs )
        ConfigOCs       co, *cop;
        ObjectClass     **sups;
 
+       for ( sups = oc->soc_sups; sups && *sups; sups++ ) {
+               if ( count_oc( *sups, copp, nocs ) ) {
+                       return -1;
+               }
+       }
+
        co.co_name = &oc->soc_cname;
        cop = avl_find( CfOcTree, &co, CfOc_cmp );
        if ( cop ) {
@@ -4591,27 +4597,18 @@ count_oc( ObjectClass *oc, ConfigOCs ***copp, int *nocs )
                }
        }
 
-       for ( sups = oc->soc_sups; sups && *sups; sups++ ) {
-               if ( count_oc( *sups, copp, nocs ) ) {
-                       return -1;
-               }
-       }
-
        return 0;
 }
 
 static ConfigOCs **
 count_ocs( Attribute *oc_at, int *nocs )
 {
-       int             i;
+       int             i, j;
        ConfigOCs       **colst = NULL;
 
        *nocs = 0;
 
-       for ( i = 0; !BER_BVISNULL( &oc_at->a_nvals[i] ); i++ )
-               /* count attrs */ ;
-
-       for ( ; i--; ) {
+       for ( i = oc_at->a_numvals; i--; ) {
                ObjectClass     *oc = oc_bvfind( &oc_at->a_nvals[i] );
 
                assert( oc != NULL );
@@ -4621,6 +4618,16 @@ count_ocs( Attribute *oc_at, int *nocs )
                }
        }
 
+       /* invert order */
+       i = 0;
+       j = *nocs - 1;
+       while ( i < j ) {
+               ConfigOCs *tmp = colst[i];
+               colst[i] = colst[j];
+               colst[j] = tmp;
+               i++; j--;
+       }
+
        return colst;
 }